Name: [active1.fields["name"]]
ID: [active1.fields["id"]]
- Sex: [active1.fields["sex"]]
+ Gender: [active1.fields["gender"]]
Age: [active1.fields["age"]] "}
dat += "Species: [active1.fields["species"]] "
dat += {"Rank: [active1.fields["rank"]]
@@ -309,36 +288,39 @@ What a mess.*/
active1 = null
active2 = null
- if("Confirm Identity")
- eject_id(usr)
-
if("Log Out")
authenticated = null
screen = null
active1 = null
active2 = null
+ playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE)
if("Log In")
- if(issilicon(usr))
- var/mob/living/silicon/borg = usr
+ var/mob/M = usr
+ var/obj/item/card/id/I = M.get_idcard(TRUE)
+ if(issilicon(M))
+ var/mob/living/silicon/borg = M
active1 = null
active2 = null
authenticated = borg.name
rank = "AI"
screen = 1
- else if(IsAdminGhost(usr))
+ else if(IsAdminGhost(M))
active1 = null
active2 = null
- authenticated = usr.client.holder.admin_signature
+ authenticated = M.client.holder.admin_signature
rank = "Central Command"
screen = 1
- else if(istype(scan, /obj/item/card/id))
+ else if(I && check_access(I))
active1 = null
active2 = null
- if(check_access(scan))
- authenticated = scan.registered_name
- rank = scan.assignment
- screen = 1
+ authenticated = I.registered_name
+ rank = I.assignment
+ screen = 1
+ else
+ to_chat(usr, "Unauthorized Access. ")
+ playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE)
+
//RECORD FUNCTIONS
if("Record Maintenance")
screen = 2
@@ -346,16 +328,14 @@ What a mess.*/
active2 = null
if("Browse Record")
- var/datum/data/record/R = locate(href_list["d_rec"])
- var/S = locate(href_list["d_rec"])
- if(!( GLOB.data_core.general.Find(R) ))
+ var/datum/data/record/R = locate(href_list["d_rec"]) in GLOB.data_core.general
+ if(!R)
temp = "Record Not Found!"
else
+ active1 = active2 = R
for(var/datum/data/record/E in GLOB.data_core.security)
if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
- S = E
- active1 = R
- active2 = S
+ active2 = E
screen = 3
@@ -368,7 +348,7 @@ What a mess.*/
var/obj/item/paper/P = new /obj/item/paper( loc )
P.info = "Security Record - (SR-[GLOB.data_core.securityPrintCount]) "
if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)))
- P.info += text("Name: [] ID: [] \nSex: [] \nAge: [] ", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"])
+ P.info += text("Name: [] ID: [] \nGender: [] \nAge: [] ", active1.fields["name"], active1.fields["id"], active1.fields["gender"], active1.fields["age"])
P.info += "\nSpecies: [active1.fields["species"]] "
P.info += text("\nFingerprint: [] \nPhysical Status: [] \nMental Status: [] ", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
else
@@ -419,6 +399,7 @@ What a mess.*/
P.info += "Security Record Lost! "
P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, "Record Lost")
P.info += ""
+ P.update_icon()
printing = null
if("Print Poster")
if(!( printing ))
@@ -512,7 +493,7 @@ What a mess.*/
G.fields["name"] = "New Record"
G.fields["id"] = "[num2hex(rand(1, 1.6777215E7), 6)]"
G.fields["rank"] = "Unassigned"
- G.fields["sex"] = "Male"
+ G.fields["gender"] = "Male"
G.fields["age"] = "Unknown"
G.fields["species"] = "Human"
G.fields["photo_front"] = new /icon()
@@ -584,12 +565,14 @@ What a mess.*/
if(!canUseSecurityRecordsConsole(usr, t1, a1))
return
active1.fields["fingerprint"] = t1
- if("sex")
+ if("gender")
if(istype(active1, /datum/data/record))
- if(active1.fields["sex"] == "Male")
- active1.fields["sex"] = "Female"
+ if(active1.fields["gender"] == "Male")
+ active1.fields["gender"] = "Female"
+ else if(active1.fields["gender"] == "Female")
+ active1.fields["gender"] = "Other"
else
- active1.fields["sex"] = "Male"
+ active1.fields["gender"] = "Male"
if("age")
if(istype(active1, /datum/data/record))
var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
@@ -767,19 +750,14 @@ What a mess.*/
P = user.get_active_held_item()
return P
-/obj/machinery/computer/secure_data/proc/print_photo(icon/temp, name)
+/obj/machinery/computer/secure_data/proc/print_photo(icon/temp, person_name)
if (printing)
return
printing = TRUE
sleep(20)
var/obj/item/photo/P = new/obj/item/photo(drop_location())
- var/icon/small_img = icon(temp)
- var/icon/ic = icon('icons/obj/items_and_weapons.dmi',"photo")
- small_img.Scale(8, 8)
- ic.Blend(small_img,ICON_OVERLAY, 13, 13)
- P.icon = ic
- P.picture.picture_image = temp
- P.desc = "The photo on file for [name]."
+ var/datum/picture/toEmbed = new(name = person_name, desc = "The photo on file for [person_name].", image = temp)
+ P.set_picture(toEmbed, TRUE, TRUE)
P.pixel_x = rand(-10, 10)
P.pixel_y = rand(-10, 10)
printing = FALSE
@@ -799,7 +777,7 @@ What a mess.*/
else
R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]"
if(2)
- R.fields["sex"] = pick("Male", "Female")
+ R.fields["gender"] = pick("Male", "Female", "Other")
if(3)
R.fields["age"] = rand(5, 85)
if(4)
@@ -823,7 +801,7 @@ What a mess.*/
/obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2)
if(user)
if(authenticated)
- if(user.canUseTopic(src))
+ if(user.canUseTopic(src, BE_CLOSE))
if(!trim(message1))
return 0
if(!record1 || record1 == active1)
@@ -831,22 +809,3 @@ What a mess.*/
return 1
return 0
-/obj/machinery/computer/secure_data/AltClick(mob/user)
- if(user.canUseTopic(src))
- eject_id(user)
-
-/obj/machinery/computer/secure_data/proc/eject_id(mob/user)
- if(scan)
- scan.forceMove(drop_location())
- if(!issilicon(user) && Adjacent(user))
- user.put_in_hands(scan)
- scan = null
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- else //switching the ID with the one you're holding
- if(issilicon(user) || !Adjacent(user))
- return
- var/obj/item/card/id/held_id = user.is_holding_item_of_type(/obj/item/card/id)
- if(QDELETED(held_id) || !user.transferItemToLoc(held_id, src))
- return
- scan = held_id
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm
index 320430be39..f51c145635 100644
--- a/code/game/machinery/gulag_item_reclaimer.dm
+++ b/code/game/machinery/gulag_item_reclaimer.dm
@@ -9,7 +9,6 @@
idle_power_usage = 100
active_power_usage = 2500
var/list/stored_items = list()
- var/obj/item/card/id/prisoner/inserted_id = null
var/obj/machinery/gulag_teleporter/linked_teleporter = null
/obj/machinery/gulag_item_reclaimer/Destroy()
@@ -18,9 +17,6 @@
I.forceMove(get_turf(src))
if(linked_teleporter)
linked_teleporter.linked_reclaimer = null
- if(inserted_id)
- inserted_id.forceMove(get_turf(src))
- inserted_id = null
return ..()
/obj/machinery/gulag_item_reclaimer/emag_act(mob/user)
@@ -31,18 +27,6 @@
obj_flags |= EMAGGED
return TRUE
-/obj/machinery/gulag_item_reclaimer/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/card/id))
- if(!inserted_id)
- if(!user.transferItemToLoc(I, src))
- return
- inserted_id = I
- to_chat(user, "You insert [I]. ")
- return
- else
- to_chat(user, "There's an ID inserted already. ")
- return ..()
-
/obj/machinery/gulag_item_reclaimer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
@@ -57,15 +41,19 @@
if(allowed(user))
can_reclaim = TRUE
- if(inserted_id)
- data["id"] = inserted_id
- data["id_name"] = inserted_id.registered_name
- if(inserted_id.points >= inserted_id.goal)
+ var/obj/item/card/id/I = user.get_idcard(TRUE)
+ if(istype(I, /obj/item/card/id/prisoner))
+ var/obj/item/card/id/prisoner/P = I
+ if(P.points >= P.goal)
can_reclaim = TRUE
var/list/mobs = list()
for(var/i in stored_items)
var/mob/thismob = i
+ if(QDELETED(thismob))
+ say("Alert! Unable to locate vital signals of a previously processed prisoner. Ejecting equipment!")
+ drop_items(thismob)
+ continue
var/list/mob_info = list()
mob_info["name"] = thismob.real_name
mob_info["mob"] = "[REF(thismob)]"
@@ -80,16 +68,6 @@
/obj/machinery/gulag_item_reclaimer/ui_act(action, list/params)
switch(action)
- if("handle_id")
- if(inserted_id)
- usr.put_in_hands(inserted_id)
- inserted_id = null
- else
- var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id)
- if(I)
- if(!usr.transferItemToLoc(I, src))
- return
- inserted_id = I
if("release_items")
var/mob/M = locate(params["mobref"])
if(M == usr || allowed(usr))
@@ -100,8 +78,9 @@
/obj/machinery/gulag_item_reclaimer/proc/drop_items(mob/user)
if(!stored_items[user])
return
+ var/drop_location = drop_location()
for(var/i in stored_items[user])
var/obj/item/W = i
stored_items[user] -= W
- W.forceMove(get_turf(src))
+ W.forceMove(drop_location)
stored_items -= user
diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm
index 59806e97a4..88ab4ec6f8 100644
--- a/code/game/machinery/limbgrower.dm
+++ b/code/game/machinery/limbgrower.dm
@@ -27,8 +27,10 @@
"human",
"lizard",
"fly",
- "moth",
+ "insect",
"plasmaman",
+ "mammal",
+ "xeno",
"other"
)
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 90166dacf0..d27357d654 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -210,13 +210,13 @@
add_fingerprint(user)
/obj/machinery/suit_storage_unit/proc/cook()
+ var/mob/living/mob_occupant = occupant
if(uv_cycles)
uv_cycles--
uv = TRUE
locked = TRUE
update_icon()
if(occupant)
- var/mob/living/mob_occupant = occupant
if(uv_super)
mob_occupant.adjustFireLoss(rand(20, 36))
else
@@ -246,9 +246,25 @@
else
visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh. ")
playsound(src, 'sound/machines/airlockclose.ogg', 25, 1)
- for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected
- SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG)
- var/datum/component/radioactive/contamination = I.GetComponent(/datum/component/radioactive)
+ var/list/things_to_clear = list() //Done this way since using GetAllContents on the SSU itself would include circuitry and such.
+ if(suit)
+ things_to_clear += suit
+ things_to_clear += suit.GetAllContents()
+ if(helmet)
+ things_to_clear += helmet
+ things_to_clear += helmet.GetAllContents()
+ if(mask)
+ things_to_clear += mask
+ things_to_clear += mask.GetAllContents()
+ if(storage)
+ things_to_clear += storage
+ things_to_clear += storage.GetAllContents()
+ if(occupant)
+ things_to_clear += occupant
+ things_to_clear += occupant.GetAllContents()
+ for(var/atom/movable/AM in things_to_clear) //Scorches away blood and forensic evidence, although the SSU itself is unaffected
+ SEND_SIGNAL(AM, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG)
+ var/datum/component/radioactive/contamination = AM.GetComponent(/datum/component/radioactive)
if(contamination)
qdel(contamination)
open_machine(FALSE)
diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm
index ebb40148d8..64f4cc7835 100644
--- a/code/game/machinery/telecomms/computers/message.dm
+++ b/code/game/machinery/telecomms/computers/message.dm
@@ -421,6 +421,7 @@
"name" = "[customsender]",
"job" = "[customjob]",
"message" = custommessage,
+ "emoji_message" = emoji_parse(custommessage),
"targets" = list("[customrecepient.owner] ([customrecepient.ownjob])")
))
// this will log the signal and transmit it to the target
diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index cc390e1fc0..56870c5198 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -106,10 +106,11 @@
return "Everyone"
return data["targets"][1]
-/datum/signal/subspace/pda/proc/format_message()
+/datum/signal/subspace/pda/proc/format_message(emojify = FALSE)
+ var/message = emojify ? data["emoji_message"] : data["message"]
if (logged && data["photo"])
- return "\"[data["message"]]\" (Photo )"
- return "\"[data["message"]]\""
+ return "\"[message]\" (Photo )"
+ return "\"[message]\""
/datum/signal/subspace/pda/broadcast()
if (!logged) // Can only go through if a message server logs it
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index f9fa2544b8..564f308df3 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -6,6 +6,7 @@
dir_in = 1 //Facing North.
max_integrity = 250
deflect_chance = 5
+ force = 20
armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_temperature = 25000
infra_luminosity = 6
@@ -13,6 +14,7 @@
internal_damage_threshold = 35
max_equip = 3
step_energy_drain = 3
+ leg_overload_coeff = 300
/obj/mecha/combat/gygax/dark
desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications."
@@ -20,6 +22,7 @@
icon_state = "darkgygax"
max_integrity = 300
deflect_chance = 15
+ force = 25
armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
max_temperature = 35000
leg_overload_coeff = 100
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index cc69b88cc4..9f072c48b6 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -42,6 +42,9 @@
/obj/effect/decal/cleanable/glass/ex_act()
qdel(src)
+/obj/effect/decal/cleanable/glass/plasma
+ icon_state = "plasmatiny"
+
/obj/effect/decal/cleanable/dirt
name = "dirt"
desc = "Someone should clean that up."
diff --git a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm
index 1708753dc1..1e755bc7e9 100644
--- a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm
+++ b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm
@@ -36,4 +36,203 @@
/obj/effect/turf_decal/tile/neutral
name = "neutral corner"
color = "#D4D4D4"
- alpha = 50
\ No newline at end of file
+ alpha = 50
+
+/obj/effect/turf_decal/trimline
+ layer = TURF_PLATING_DECAL_LAYER
+ alpha = 110
+ icon_state = "trimline_box"
+
+/obj/effect/turf_decal/trimline/white
+ color = "#FFFFFF"
+
+/obj/effect/turf_decal/trimline/white/line
+ name = "trim decal"
+ icon_state = "trimline"
+
+/obj/effect/turf_decal/trimline/white/corner
+ icon_state = "trimline_corner"
+
+/obj/effect/turf_decal/trimline/white/end
+ icon_state = "trimline_end"
+
+/obj/effect/turf_decal/trimline/white/filled
+ icon_state = "trimline_box_fill"
+
+/obj/effect/turf_decal/trimline/white/filled/line
+ icon_state = "trimline_fill"
+
+/obj/effect/turf_decal/trimline/white/filled/corner
+ icon_state = "trimline_corner_fill"
+
+/obj/effect/turf_decal/trimline/white/filled/end
+ icon_state = "trimline_end_fill"
+
+/obj/effect/turf_decal/trimline/red
+ color = "#DE3A3A"
+
+/obj/effect/turf_decal/trimline/red/line
+ icon_state = "trimline"
+
+/obj/effect/turf_decal/trimline/red/corner
+ icon_state = "trimline_corner"
+
+/obj/effect/turf_decal/trimline/red/end
+ icon_state = "trimline_end"
+
+/obj/effect/turf_decal/trimline/red/filled
+ icon_state = "trimline_box_fill"
+
+/obj/effect/turf_decal/trimline/red/filled/line
+ icon_state = "trimline_fill"
+
+/obj/effect/turf_decal/trimline/red/filled/corner
+ icon_state = "trimline_corner_fill"
+
+/obj/effect/turf_decal/trimline/red/filled/end
+ icon_state = "trimline_end_fill"
+
+/obj/effect/turf_decal/trimline/green
+ color = "#9FED58"
+
+/obj/effect/turf_decal/trimline/green/line
+ icon_state = "trimline"
+
+/obj/effect/turf_decal/trimline/green/corner
+ icon_state = "trimline_corner"
+
+/obj/effect/turf_decal/trimline/green/end
+ icon_state = "trimline_end"
+
+/obj/effect/turf_decal/trimline/green/filled
+ icon_state = "trimline_box_fill"
+
+/obj/effect/turf_decal/trimline/green/filled/line
+ icon_state = "trimline_fill"
+
+/obj/effect/turf_decal/trimline/green/filled/corner
+ icon_state = "trimline_corner_fill"
+
+/obj/effect/turf_decal/trimline/green/filled/end
+ icon_state = "trimline_end_fill"
+
+/obj/effect/turf_decal/trimline/blue
+ color = "#52B4E9"
+
+/obj/effect/turf_decal/trimline/blue/line
+ icon_state = "trimline"
+
+/obj/effect/turf_decal/trimline/blue/corner
+ icon_state = "trimline_corner"
+
+/obj/effect/turf_decal/trimline/blue/end
+ icon_state = "trimline_end"
+
+/obj/effect/turf_decal/trimline/blue/filled
+ icon_state = "trimline_box_fill"
+
+/obj/effect/turf_decal/trimline/blue/filled/line
+ icon_state = "trimline_fill"
+
+/obj/effect/turf_decal/trimline/blue/filled/corner
+ icon_state = "trimline_corner_fill"
+
+/obj/effect/turf_decal/trimline/blue/filled/end
+ icon_state = "trimline_end_fill"
+
+/obj/effect/turf_decal/trimline/yellow
+ color = "#EFB341"
+
+/obj/effect/turf_decal/trimline/yellow/line
+ icon_state = "trimline"
+
+/obj/effect/turf_decal/trimline/yellow/corner
+ icon_state = "trimline_corner"
+
+/obj/effect/turf_decal/trimline/yellow/end
+ icon_state = "trimline_end"
+
+/obj/effect/turf_decal/trimline/yellow/filled
+ icon_state = "trimline_box_fill"
+
+/obj/effect/turf_decal/trimline/yellow/filled/line
+ icon_state = "trimline_fill"
+
+/obj/effect/turf_decal/trimline/yellow/filled/corner
+ icon_state = "trimline_corner_fill"
+
+/obj/effect/turf_decal/trimline/yellow/filled/end
+ icon_state = "trimline_end_fill"
+
+/obj/effect/turf_decal/trimline/purple
+ color = "#D381C9"
+
+/obj/effect/turf_decal/trimline/purple/line
+ icon_state = "trimline"
+
+/obj/effect/turf_decal/trimline/purple/corner
+ icon_state = "trimline_corner"
+
+/obj/effect/turf_decal/trimline/purple/end
+ icon_state = "trimline_end"
+
+/obj/effect/turf_decal/trimline/purple/filled
+ icon_state = "trimline_box_fill"
+
+/obj/effect/turf_decal/trimline/purple/filled/line
+ icon_state = "trimline_fill"
+
+/obj/effect/turf_decal/trimline/purple/filled/corner
+ icon_state = "trimline_corner_fill"
+
+/obj/effect/turf_decal/trimline/purple/filled/end
+ icon_state = "trimline_end_fill"
+
+/obj/effect/turf_decal/trimline/brown
+ color = "#A46106"
+
+/obj/effect/turf_decal/trimline/brown/line
+ icon_state = "trimline"
+
+/obj/effect/turf_decal/trimline/brown/corner
+ icon_state = "trimline_corner"
+
+/obj/effect/turf_decal/trimline/brown/end
+ icon_state = "trimline_end"
+
+/obj/effect/turf_decal/trimline/brown/filled
+ icon_state = "trimline_box_fill"
+
+/obj/effect/turf_decal/trimline/brown/filled/line
+ icon_state = "trimline_fill"
+
+/obj/effect/turf_decal/trimline/brown/filled/corner
+ icon_state = "trimline_corner_fill"
+
+/obj/effect/turf_decal/trimline/brown/filled/end
+ icon_state = "trimline_end_fill"
+
+/obj/effect/turf_decal/trimline/neutral
+ color = "#D4D4D4"
+ alpha = 50
+
+/obj/effect/turf_decal/trimline/neutral/line
+ icon_state = "trimline"
+
+/obj/effect/turf_decal/trimline/neutral/corner
+ icon_state = "trimline_corner"
+
+/obj/effect/turf_decal/trimline/neutral/end
+ icon_state = "trimline_end"
+
+/obj/effect/turf_decal/trimline/neutral/filled
+ icon_state = "trimline_box_fill"
+
+/obj/effect/turf_decal/trimline/neutral/filled/line
+ icon_state = "trimline_fill"
+
+/obj/effect/turf_decal/trimline/neutral/filled/corner
+ icon_state = "trimline_corner_fill"
+
+/obj/effect/turf_decal/trimline/brown/filled/end
+ icon_state = "trimline_end_fill"
\ No newline at end of file
diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm
index 2fe8d2a460..b9acba70d9 100644
--- a/code/game/objects/effects/spawners/bundle.dm
+++ b/code/game/objects/effects/spawners/bundle.dm
@@ -133,7 +133,7 @@
/obj/effect/spawner/bundle/costume/holiday_priest
name = "holiday priest costume spawner"
items = list(
- /obj/item/clothing/suit/holidaypriest)
+ /obj/item/clothing/suit/chaplain/holidaypriest)
/obj/effect/spawner/bundle/costume/marisawizard
name = "marisa wizard costume spawner"
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 566a64577d..c98cef2b87 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -68,6 +68,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
var/strip_delay = 40 //In deciseconds, how long an item takes to remove from another person
var/breakouttime = 0
var/list/materials
+ var/reskinned = FALSE
var/list/attack_verb //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]"
var/list/species_exception = null // list() of species types, if a species cannot put items in a certain slot, but species type is in list, it will be able to wear that item
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 1ff3c7df9f..cf706359f7 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -37,6 +37,7 @@ RLD
var/has_ammobar = FALSE //controls whether or not does update_icon apply ammo indicator overlays
var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states
var/custom_range = 7
+ var/upgrade = FALSE
/obj/item/construction/Initialize()
. = ..()
@@ -82,6 +83,11 @@ RLD
loaded = loadwithsheets(W, sheetmultiplier * 0.25, user) // 1 matter for 1 floortile, as 4 tiles are produced from 1 metal
if(loaded)
to_chat(user, "[src] now holds [matter]/[max_matter] matter-units. ")
+ else if(istype(W, /obj/item/rcd_upgrade))
+ to_chat(user, "You upgrade the RCD with the [W]! ")
+ upgrade = TRUE
+ playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
+ qdel(W)
else
return ..()
update_icon() //ensures that ammo counters (if present) get updated
@@ -148,6 +154,7 @@ RLD
has_ammobar = TRUE
var/mode = 1
var/ranged = FALSE
+ var/computer_dir = 1
var/airlock_type = /obj/machinery/door/airlock
var/airlock_glass = FALSE // So the floor's rcd_act knows how much ammo to use
var/window_type = /obj/structure/window/fulltile
@@ -270,6 +277,28 @@ RLD
return FALSE
return TRUE
+/obj/item/construction/rcd/proc/change_computer_dir(mob/user)
+ if(!user)
+ return
+ var/list/computer_dirs = list(
+ "NORTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "cnorth"),
+ "EAST" = image(icon = 'icons/mob/radial.dmi', icon_state = "ceast"),
+ "SOUTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "csouth"),
+ "WEST" = image(icon = 'icons/mob/radial.dmi', icon_state = "cwest")
+ )
+ var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
+ if(!check_menu(user))
+ return
+ switch(computerdirs)
+ if("NORTH")
+ computer_dir = 1
+ if("EAST")
+ computer_dir = 4
+ if("SOUTH")
+ computer_dir = 2
+ if("WEST")
+ computer_dir = 8
+
/obj/item/construction/rcd/proc/change_airlock_setting(mob/user)
if(!user)
return
@@ -434,10 +463,15 @@ RLD
..()
var/list/choices = list(
"Airlock" = image(icon = 'icons/mob/radial.dmi', icon_state = "airlock"),
- "Deconstruct" = image(icon= 'icons/mob/radial.dmi', icon_state = "delete"),
"Grilles & Windows" = image(icon = 'icons/mob/radial.dmi', icon_state = "grillewindow"),
"Floors & Walls" = image(icon = 'icons/mob/radial.dmi', icon_state = "wallfloor")
)
+ if(upgrade)
+ choices += list(
+ "Deconstruct" = image(icon= 'icons/mob/radial.dmi', icon_state = "delete"),
+ "Machine Frames" = image(icon = 'icons/mob/radial.dmi', icon_state = "machine"),
+ "Computer Frames" = image(icon = 'icons/mob/radial.dmi', icon_state = "computer_dir"),
+ )
if(mode == RCD_AIRLOCK)
choices += list(
"Change Access" = image(icon = 'icons/mob/radial.dmi', icon_state = "access"),
@@ -459,6 +493,12 @@ RLD
mode = RCD_DECONSTRUCT
if("Grilles & Windows")
mode = RCD_WINDOWGRILLE
+ if("Machine Frames")
+ mode = RCD_MACHINE
+ if("Computer Frames")
+ mode = RCD_COMPUTER
+ change_computer_dir(user)
+ return
if("Change Access")
change_airlock_access(user)
return
@@ -511,6 +551,7 @@ RLD
no_ammo_message = "Insufficient charge. "
desc = "A device used to rapidly build walls and floors."
canRturf = TRUE
+ upgrade = TRUE
/obj/item/construction/rcd/borg/useResource(amount, mob/user)
@@ -542,6 +583,9 @@ RLD
/obj/item/construction/rcd/loaded
matter = 160
+/obj/item/construction/rcd/loaded/upgraded
+ upgrade = TRUE
+
/obj/item/construction/rcd/combat
name = "Combat RCD"
desc = "A device used to rapidly build and deconstruct. Reload with metal, plasteel, glass or compressed matter cartridges. This RCD has been upgraded to be able to remove Rwalls!"
@@ -582,7 +626,7 @@ RLD
name = "admin RCD"
max_matter = INFINITY
matter = INFINITY
-
+ upgrade = TRUE
// Ranged RCD
@@ -776,6 +820,12 @@ RLD
return TRUE
return FALSE
+/obj/item/rcd_upgrade
+ name = "RCD advanced design disk"
+ desc = "It contains the design for machine frames, computer frames, and deconstruction."
+ icon = 'icons/obj/module.dmi'
+ icon_state = "datadisk3"
+
#undef GLOW_MODE
#undef LIGHT_MODE
#undef REMOVE_MODE
diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm
index 01205ee889..9c343c2e06 100644
--- a/code/game/objects/items/RSF.dm
+++ b/code/game/objects/items/RSF.dm
@@ -182,7 +182,7 @@ RSF
to_chat(user, "Fabricating Cookie..")
var/obj/item/reagent_containers/food/snacks/cookie/S = new /obj/item/reagent_containers/food/snacks/cookie(T)
if(toxin)
- S.reagents.add_reagent("chloralhydratedelayed", 10)
+ S.reagents.add_reagent("chloralhydrate", 10)
if (iscyborg(user))
var/mob/living/silicon/robot/R = user
R.cell.charge -= 100
diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm
index bb45f80f2d..c260a95afd 100644
--- a/code/game/objects/items/circuitboards/computer_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm
@@ -162,10 +162,11 @@
/obj/item/circuitboard/computer/prisoner
name = "Prisoner Management Console (Computer Board)"
- build_path = /obj/machinery/computer/prisoner
+ build_path = /obj/machinery/computer/prisoner/management
+
/obj/item/circuitboard/computer/gulag_teleporter_console
name = "Labor Camp teleporter console (Computer Board)"
- build_path = /obj/machinery/computer/gulag_teleporter_computer
+ build_path = /obj/machinery/computer/prisoner/gulag_teleporter_computer
/obj/item/circuitboard/computer/rdconsole/production
name = "R&D Console Production Only (Computer Board)"
@@ -373,4 +374,4 @@
/obj/item/circuitboard/computer/nanite_cloud_controller
name = "Nanite Cloud Control (Computer Board)"
- build_path = /obj/machinery/computer/nanite_cloud_controller
\ No newline at end of file
+ build_path = /obj/machinery/computer/nanite_cloud_controller
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 99d6c874e8..db26f643b5 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -1,6 +1,9 @@
#define RANDOM_GRAFFITI "Random Graffiti"
#define RANDOM_LETTER "Random Letter"
+#define RANDOM_PUNCTUATION "Random Punctuation"
#define RANDOM_NUMBER "Random Number"
+#define RANDOM_SYMBOL "Random Symbol"
+#define RANDOM_DRAWING "Random Drawing"
#define RANDOM_ORIENTED "Random Oriented"
#define RANDOM_RUNE "Random Rune"
#define RANDOM_ANY "Random Anything"
@@ -32,16 +35,16 @@
var/drawtype
var/text_buffer = ""
- var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","poseur tag","prolizard","antilizard", "tile") //cit edit
- var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
- var/list/numerals = list("0","1","2","3","4","5","6","7","8","9")
- var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer
- var/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
- var/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
- RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER)
- var/list/graffiti_large_h = list("yiffhell", "secborg", "paint")
+ var/static/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","star","poseur tag","prolizard","antilizard", "tile")
+ var/static/list/symbols = list("danger","firedanger","electricdanger","biohazard","radiation","safe","evac","space","med","trade","shop","food","peace","like","skull","nay","heart","credit")
+ var/static/list/drawings = list("smallbrush","brush","largebrush","splatter","snake","stickman","carp","ghost","clown","taser","disk","fireaxe","toolbox","corgi","cat","toilet","blueprint","beepsky","scroll","bottle","shotgun")
+ var/static/list/oriented = list("arrow","line","thinline","shortline","body","chevron","footprint","clawprint","pawprint") // These turn to face the same way as the drawer
+ var/static/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
+ var/static/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
+ RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER, RANDOM_SYMBOL, RANDOM_PUNCTUATION, RANDOM_DRAWING)
+ var/static/list/graffiti_large_h = list("yiffhell", "secborg", "paint")
- var/list/all_drawables
+ var/static/list/all_drawables = graffiti + symbols + drawings + oriented + runes + graffiti_large_h
var/paint_mode = PAINT_NORMAL
@@ -54,8 +57,6 @@
var/instant = FALSE
var/self_contained = TRUE // If it deletes itself when it is empty
- var/list/validSurfaces = list(/turf/open/floor)
-
var/edible = TRUE // That doesn't mean eating it is a good idea
var/list/reagent_contents = list("nutriment" = 1)
@@ -71,6 +72,9 @@
var/datum/team/gang/gang //For marking territory.
var/gang_tag_delay = 30 //this is the delay for gang mode tag applications on anything that gang = true on.
+/obj/item/toy/crayon/proc/isValidSurface(surface)
+ return istype(surface, /turf/open/floor)
+
/obj/item/toy/crayon/suicide_act(mob/user)
user.visible_message("[user] is jamming [src] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide! ")
return (BRUTELOSS|OXYLOSS)
@@ -81,7 +85,6 @@
if(name == "crayon")
name = "[item_color] crayon"
- all_drawables = graffiti + letters + numerals + oriented + runes + graffiti_large_h
drawtype = pick(all_drawables)
refill()
@@ -153,55 +156,62 @@
to_chat(user, "The cap on [src] is now [is_capped ? "on" : "off"]. ")
update_icon()
-/obj/item/toy/crayon/ui_data()
- var/list/data = list()
- data["drawables"] = list()
- var/list/D = data["drawables"]
+/obj/item/toy/crayon/proc/staticDrawables()
+
+ . = list()
var/list/g_items = list()
- D += list(list("name" = "Graffiti", "items" = g_items))
+ . += list(list("name" = "Graffiti", "items" = g_items))
for(var/g in graffiti)
g_items += list(list("item" = g))
var/list/glh_items = list()
- D += list(list("name" = "Graffiti Large Horizontal", "items" = glh_items))
+ . += list(list("name" = "Graffiti Large Horizontal", "items" = glh_items))
for(var/glh in graffiti_large_h)
glh_items += list(list("item" = glh))
- var/list/L_items = list()
- D += list(list("name" = "Letters", "items" = L_items))
- for(var/L in letters)
- L_items += list(list("item" = L))
+ var/list/S_items = list()
+ . += list(list("name" = "Symbols", "items" = S_items))
+ for(var/S in symbols)
+ S_items += list(list("item" = S))
- var/list/N_items = list()
- D += list(list(name = "Numerals", "items" = N_items))
- for(var/N in numerals)
- N_items += list(list("item" = N))
+ var/list/D_items = list()
+ . += list(list("name" = "Drawings", "items" = D_items))
+ for(var/D in drawings)
+ D_items += list(list("item" = D))
var/list/O_items = list()
- D += list(list(name = "Oriented", "items" = O_items))
+ . += list(list(name = "Oriented", "items" = O_items))
for(var/O in oriented)
O_items += list(list("item" = O))
var/list/R_items = list()
- D += list(list(name = "Runes", "items" = R_items))
+ . += list(list(name = "Runes", "items" = R_items))
for(var/R in runes)
R_items += list(list("item" = R))
var/list/rand_items = list()
- D += list(list(name = "Random", "items" = rand_items))
+ . += list(list(name = "Random", "items" = rand_items))
for(var/i in randoms)
rand_items += list(list("item" = i))
- data["selected_stencil"] = drawtype
- data["text_buffer"] = text_buffer
- data["has_cap"] = has_cap
- data["is_capped"] = is_capped
- data["can_change_colour"] = can_change_colour
- data["current_colour"] = paint_color
+/obj/item/toy/crayon/ui_data()
- return data
+ var/static/list/crayon_drawables
+
+ if (!crayon_drawables)
+ crayon_drawables = staticDrawables()
+
+ . = list()
+ .["drawables"] = crayon_drawables
+ .["selected_stencil"] = drawtype
+ .["text_buffer"] = text_buffer
+
+ .["has_cap"] = has_cap
+ .["is_capped"] = is_capped
+ .["can_change_colour"] = can_change_colour
+ .["current_colour"] = paint_color
/obj/item/toy/crayon/ui_act(action, list/params)
if(..())
@@ -216,6 +226,7 @@
if(stencil in all_drawables + randoms)
drawtype = stencil
. = TRUE
+ text_buffer = ""
if(stencil in graffiti_large_h)
paint_mode = PAINT_LARGE_HORIZONTAL
text_buffer = ""
@@ -235,18 +246,16 @@
update_icon()
/obj/item/toy/crayon/proc/crayon_text_strip(text)
- var/list/base = string2charlist(lowertext(text))
- var/list/out = list()
- for(var/a in base)
- if(a in (letters|numerals))
- out += a
- return jointext(out,"")
+ var/static/regex/crayon_r = new /regex(@"[^\w!?,.=%#&+\/\-]")
+ return replacetext(lowertext(text), crayon_r, "")
/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity, params)
. = ..()
if(!proximity || !check_allowed_items(target))
return
+ var/static/list/punctuation = list("!","?",".",",","/","+","-","=","%","#","&")
+
var/cost = 1
if(paint_mode == PAINT_LARGE_HORIZONTAL)
cost = 5
@@ -264,13 +273,19 @@
if(istype(target, /obj/effect/decal/cleanable))
target = target.loc
- if(!is_type_in_list(target,validSurfaces))
+ if(!isValidSurface(target))
return
var/drawing = drawtype
switch(drawtype)
if(RANDOM_LETTER)
- drawing = pick(letters)
+ drawing = ascii2text(rand(97, 122)) // a-z
+ if(RANDOM_PUNCTUATION)
+ drawing = pick(punctuation)
+ if(RANDOM_SYMBOL)
+ drawing = pick(symbols)
+ if(RANDOM_DRAWING)
+ drawing = pick(drawings)
if(RANDOM_GRAFFITI)
drawing = pick(graffiti)
if(RANDOM_RUNE)
@@ -278,17 +293,23 @@
if(RANDOM_ORIENTED)
drawing = pick(oriented)
if(RANDOM_NUMBER)
- drawing = pick(numerals)
+ drawing = ascii2text(rand(48, 57)) // 0-9
if(RANDOM_ANY)
drawing = pick(all_drawables)
var/temp = "rune"
- if(drawing in letters)
+ if(is_alpha(drawing))
temp = "letter"
- else if(drawing in graffiti)
- temp = "graffiti"
- else if(drawing in numerals)
+ else if(is_digit(drawing))
temp = "number"
+ else if(drawing in punctuation)
+ temp = "punctuation mark"
+ else if(drawing in symbols)
+ temp = "symbol"
+ else if(drawing in drawings)
+ temp = "drawing"
+ else if(drawing in graffiti|oriented)
+ temp = "graffiti"
// If a gang member is using a gang spraycan, it'll behave differently
var/gang_mode = FALSE
@@ -338,7 +359,7 @@
return
if(length(text_buffer))
- drawing = copytext(text_buffer,1,2)
+ drawing = text_buffer[1]
var/list/turf/affected_turfs = list()
@@ -362,7 +383,7 @@
if(PAINT_LARGE_HORIZONTAL)
var/turf/left = locate(target.x-1,target.y,target.z)
var/turf/right = locate(target.x+1,target.y,target.z)
- if(is_type_in_list(left, validSurfaces) && is_type_in_list(right, validSurfaces))
+ if(isValidSurface(left) && isValidSurface(right))
var/obj/effect/decal/cleanable/crayon/C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
C.add_hiddenprint(user)
affected_turfs += left
@@ -377,8 +398,9 @@
else
to_chat(user, "You spray a [temp] on \the [target.name] ")
- if(length(text_buffer))
+ if(length(text_buffer) > 1)
text_buffer = copytext(text_buffer,2)
+ SStgui.update_uis(src)
if(post_noise)
audible_message("You hear spraying. ")
@@ -516,7 +538,7 @@
charges = -1
-/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity)
+/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params)
paint_color = rgb(rand(0,255), rand(0,255), rand(0,255))
. = ..()
@@ -591,12 +613,14 @@
can_change_colour = TRUE
gang = TRUE //Gang check is true for all things upon the honored hierarchy of spraycans, except those that are FALSE.
- validSurfaces = list(/turf/open/floor, /turf/closed/wall)
reagent_contents = list("welding_fuel" = 1, "ethanol" = 1)
pre_noise = TRUE
post_noise = FALSE
+/obj/item/toy/crayon/spraycan/isValidSurface(surface)
+ return (istype(surface, /turf/open/floor) || istype(surface, /turf/closed/wall))
+
/obj/item/toy/crayon/spraycan/suicide_act(mob/user)
var/mob/living/carbon/human/H = user
if(is_capped || !actually_paints)
@@ -622,8 +646,8 @@
return (OXYLOSS)
-/obj/item/toy/crayon/spraycan/New()
- ..()
+/obj/item/toy/crayon/spraycan/Initialize()
+ . = ..()
// If default crayon red colour, pick a more fun spraycan colour
if(!paint_color)
paint_color = pick("#DA0000","#FF9300","#FFF200","#A8E61D","#00B7EF",
@@ -640,7 +664,7 @@
to_chat(user, "It is empty.")
to_chat(user, "Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"]. ")
-/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity)
+/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity, params)
if(!proximity)
return
@@ -656,8 +680,7 @@
playsound(user.loc, 'sound/effects/spray.ogg', 25, 1, 5)
var/mob/living/carbon/C = target
- user.visible_message("[user] sprays [src] into the face of [target]! ")
- to_chat(target, "[user] sprays [src] into your face! ")
+ C.visible_message("[user] sprays [src] into the face of [C]! ", "[user] sprays [src] into your face! ")
if(C.client)
C.blur_eyes(3)
@@ -678,13 +701,14 @@
return
- if(istype(target, /obj/structure/window))
+ if(isobj(target))
if(actually_paints)
target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
- if(color_hex2num(paint_color) < 255)
- target.set_opacity(255)
- else
- target.set_opacity(initial(target.opacity))
+ if(istype(target, /obj/structure/window))
+ if(color_hex2num(paint_color) < 255)
+ target.set_opacity(255)
+ else
+ target.set_opacity(initial(target.opacity))
. = use_charges(user, 2)
var/fraction = min(1, . / reagents.maximum_volume)
reagents.reaction(target, TOUCH, fraction * volume_multiplier)
@@ -692,6 +716,7 @@
if(pre_noise || post_noise)
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
+ user.visible_message("[user] coats [target] with spray paint!", "You coat [target] with spray paint. ")
return
. = ..()
@@ -709,7 +734,7 @@
desc = "A metallic container containing shiny synthesised paint."
charges = -1
-/obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity)
+/obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity, params)
var/diff = ..()
if(!iscyborg(user))
to_chat(user, "How did you get this? ")
@@ -754,7 +779,9 @@
reagent_contents = list("lube" = 1, "banana" = 1)
volume_multiplier = 5
- validSurfaces = list(/turf/open/floor)
+
+/obj/item/toy/crayon/spraycan/lubecan/isValidSurface(surface)
+ return istype(surface, /turf/open/floor)
/obj/item/toy/crayon/spraycan/mimecan
name = "silent spraycan"
@@ -794,6 +821,9 @@
#undef RANDOM_GRAFFITI
#undef RANDOM_LETTER
+#undef RANDOM_PUNCTUATION
+#undef RANDOM_SYMBOL
+#undef RANDOM_DRAWING
#undef RANDOM_NUMBER
#undef RANDOM_ORIENTED
#undef RANDOM_RUNE
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 45baa542d4..b0494539ce 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -714,6 +714,7 @@ GLOBAL_LIST_EMPTY(PDAs)
return
if((last_text && world.time < last_text + 10) || (everyone && last_everyone && world.time < last_everyone + PDA_SPAM_DELAY))
return
+ var/emoji_message = emoji_parse(message)
if(prob(1))
message += "\nSent from my PDA"
// Send the signal
@@ -734,7 +735,8 @@ GLOBAL_LIST_EMPTY(PDAs)
"name" = "[owner]",
"job" = "[ownjob]",
"message" = message,
- "targets" = string_targets
+ "targets" = string_targets,
+ "emoji_message" = emoji_message
))
if (picture)
signal.data["photo"] = picture
@@ -751,13 +753,13 @@ GLOBAL_LIST_EMPTY(PDAs)
// Log it in our logs
tnote += "→ To [target_text]: [signal.format_message()] "
// Show it to ghosts
- var/ghost_message = "[owner] PDA Message --> [target_text] : [signal.format_message()] "
+ var/ghost_message = "[owner] PDA Message --> [target_text] : [signal.format_message(TRUE)] "
for(var/mob/M in GLOB.player_list)
if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA))
to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]")
// Log in the talk log
user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]")
- to_chat(user, "Message sent to [target_text]: \"[message]\" ")
+ to_chat(user, "Message sent to [target_text]: \"[emoji_message]\" ")
if (!silent)
playsound(src, 'sound/machines/terminal_success.ogg', 15, 1)
// Reset the photo
@@ -787,7 +789,7 @@ GLOBAL_LIST_EMPTY(PDAs)
hrefstart = ""
hrefend = " "
- to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message()] (Reply )")
+ to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message(TRUE)] (Reply )")
update_icon(TRUE)
diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm
index 38133e37bc..90cdd0386c 100644
--- a/code/game/objects/items/devices/geiger_counter.dm
+++ b/code/game/objects/items/devices/geiger_counter.dm
@@ -158,7 +158,7 @@
if(!M.radiation)
to_chat(user, "[icon2html(src, user)] Radiation levels within normal boundaries. ")
else
- to_chat(user, "[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation]. ")
+ to_chat(user, "[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation] rad. ")
if(rad_strength)
to_chat(user, "[icon2html(src, user)] Target contains radioactive contamination. Radioactive strength: [rad_strength] ")
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index a3ab9153ce..207497922e 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -32,6 +32,24 @@
var/datum/integrated_io/selected_io = null //functional for integrated circuits.
var/mode = 0
+/obj/item/multitool/chaplain
+ name = "\improper hypertool"
+ desc = "Used for pulsing wires to test which to cut. Also emits microwaves to fry some brains!"
+ damtype = BRAIN
+ force = 18
+ armour_penetration = 35
+ hitsound = 'sound/effects/sparks4.ogg'
+ var/chaplain_spawnable = TRUE
+ total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
+ throw_speed = 3
+ throw_range = 4
+ throwforce = 10
+ obj_flags = UNIQUE_RENAME
+
+/obj/item/multitool/chaplain/Initialize()
+ . = ..()
+ AddComponent(/datum/component/anti_magic, TRUE, TRUE)
+
/obj/item/multitool/examine(mob/user)
..()
if(selected_io)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 0059938720..e0d3e7a8a0 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -215,8 +215,7 @@ SLIME SCANNER
msg += "\tBrain Activity Level: [(200 - M.getBrainLoss())/2]%. \n"
if(M.radiation)
msg += "\tSubject is irradiated. \n"
- if(advanced)
- msg += "\tRadiation Level: [M.radiation]%. \n"
+ msg += "\tRadiation Level: [M.radiation] rad \n"
if(advanced && M.hallucinating())
msg += "\tSubject is hallucinating. \n"
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index 71687f0d5a..e4e16fbfb4 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -440,7 +440,15 @@
oneuse = FALSE
remarks = list("So that is how icing is made!", "Placing fruit on top? How simple...", "Huh layering cake seems harder then this...", "This book smells like candy", "A clown must have made this page, or they forgot to spell check it before printing...", "Wait, a way to cook slime to be safe?")
-//Later content when I have free time - Trilby Date:02-Aug-2019
+/obj/item/book/granter/crafting_recipe/coldcooking //IceCream
+ name = "Cooking with Ice"
+ desc = "A cook book that teaches you many old icecream treats."
+ crafting_recipe_types = list(/datum/crafting_recipe/food/banana_split, /datum/crafting_recipe/food/root_float, /datum/crafting_recipe/food/bluecharrie_float, /datum/crafting_recipe/food/charrie_float)
+ icon_state = "cooking_learing_ice"
+ oneuse = FALSE
+ remarks = list("Looks like these would sell much better in a plasma fire...", "Using glass bowls rather then cones?", "Mixing soda and ice-cream?", "Tall glasses with of liquids and solids...", "Just add a bit of icecream and cherry on top?")
+
+//Later content when I have free time - Trilby Date:24-Aug-2019
/obj/item/book/granter/crafting_recipe/under_the_oven //Illegal cook book
name = "Under The Oven"
@@ -449,11 +457,3 @@
icon_state = "cooking_learing_illegal"
oneuse = FALSE
remarks = list()
-
-/obj/item/book/granter/crafting_recipe/coldcooking //IceCream
- name = "Cooking with Ice"
- desc = "A cook book that teaches you many old icecream treats."
- crafting_recipe_types = list()
- icon_state = "cooking_learing_ice"
- oneuse = FALSE
- remarks = list()
\ No newline at end of file
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index a306b48385..246dd77684 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -1,5 +1,6 @@
/obj/item/restraints
breakouttime = 600
+ var/demoralize_criminals = TRUE // checked on carbon/carbon.dm to decide wheter to apply the handcuffed negative moodlet or not.
/obj/item/restraints/suicide_act(mob/living/carbon/user)
user.visible_message("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide! ")
@@ -220,6 +221,7 @@
name = "fake handcuffs"
desc = "Fake handcuffs meant for gag purposes."
breakouttime = 10 //Deciseconds = 1s
+ demoralize_criminals = FALSE
/obj/item/restraints/handcuffs/fake/kinky
name = "kinky handcuffs"
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index 6e3deaa694..5e8250ea00 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -34,6 +34,7 @@
desc = "God wills it!"
icon_state = "knight_templar"
item_state = "knight_templar"
+ allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
// CITADEL CHANGES: More variants
/obj/item/clothing/suit/armor/riot/chaplain/teutonic
@@ -122,7 +123,6 @@
icon_state = "studentuni"
item_state = "studentuni"
body_parts_covered = ARMS|CHEST
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
/obj/item/clothing/head/helmet/chaplain/cage
name = "cage"
@@ -166,7 +166,6 @@
icon_state = "witchhunter"
item_state = "witchhunter"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
/obj/item/clothing/head/helmet/chaplain/witchunter_hat
name = "witchunter hat"
@@ -191,7 +190,7 @@
icon_state = "chaplain_hoodie"
item_state = "chaplain_hoodie"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
+ allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
hoodtype = /obj/item/clothing/head/hooded/chaplain_hood
/obj/item/clothing/head/hooded/chaplain_hood
@@ -229,8 +228,8 @@
throwforce = 10
w_class = WEIGHT_CLASS_TINY
obj_flags = UNIQUE_RENAME
- var/reskinned = FALSE
var/chaplain_spawnable = TRUE
+ total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
/obj/item/nullrod/Initialize()
. = ..()
@@ -247,10 +246,8 @@
/obj/item/nullrod/proc/reskin_holy_weapon(mob/M)
if(GLOB.holy_weapon_type)
return
- var/obj/item/nullrod/holy_weapon
- var/list/holy_weapons_list = typesof(/obj/item/nullrod) + list(
- /obj/item/melee/transforming/energy/sword/cx/chaplain
- )
+ var/obj/item/holy_weapon
+ var/list/holy_weapons_list = subtypesof(/obj/item/nullrod) + list(HOLY_WEAPONS)
var/list/display_names = list()
for(var/V in holy_weapons_list)
var/obj/item/nullrod/rodtype = V
@@ -273,6 +270,13 @@
qdel(src)
M.put_in_active_hand(holy_weapon)
+/obj/item/nullrod/proc/jedi_spin(mob/living/user)
+ for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH))
+ user.setDir(i)
+ if(i == WEST)
+ user.emote("flip")
+ sleep(1)
+
/obj/item/nullrod/godhand
icon_state = "disintegrate"
item_state = "disintegrate"
@@ -328,7 +332,6 @@
sharpness = IS_SHARP
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
- total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == PROJECTILE_ATTACK)
@@ -522,7 +525,6 @@
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_HUGE
attack_verb = list("smashed", "bashed", "hammered", "crunched")
- total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
/obj/item/nullrod/chainsaw
name = "chainsaw hand"
@@ -585,6 +587,7 @@
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
slot_flags = ITEM_SLOT_BELT
+ force = 12
reach = 2
attack_verb = list("whipped", "lashed")
hitsound = 'sound/weapons/chainhit.ogg'
@@ -661,6 +664,44 @@
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
+/obj/item/nullrod/claymore/bostaff/attack(mob/target, mob/living/user)
+ add_fingerprint(user)
+ if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
+ to_chat(user, "You club yourself over the head with [src]. ")
+ user.Knockdown(60)
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD)
+ else
+ user.take_bodypart_damage(2*force)
+ return
+ if(iscyborg(target))
+ return ..()
+ if(!isliving(target))
+ return ..()
+ var/mob/living/carbon/C = target
+ if(C.stat || C.health < 0 || C.staminaloss > 130 )
+ to_chat(user, "It would be dishonorable to attack a foe while they cannot retaliate. ")
+ return
+ if(user.a_intent == INTENT_DISARM)
+ if(!ishuman(target))
+ return ..()
+ var/mob/living/carbon/human/H = target
+ var/list/fluffmessages = list("[user] clubs [H] with [src]!", \
+ "[user] smacks [H] with the butt of [src]!", \
+ "[user] broadsides [H] with [src]!", \
+ "[user] smashes [H]'s head with [src]!", \
+ "[user] beats [H] with front of [src]!", \
+ "[user] twirls and slams [H] with [src]!")
+ H.visible_message("[pick(fluffmessages)] ", \
+ "[pick(fluffmessages)] ")
+ playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1)
+ H.adjustStaminaLoss(rand(12,18))
+ if(prob(25))
+ (INVOKE_ASYNC(src, .proc/jedi_spin, user))
+ else
+ return ..()
+
/obj/item/nullrod/tribal_knife
icon_state = "crysknife"
item_state = "crysknife"
@@ -674,7 +715,6 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
item_flags = SLOWS_WHILE_IN_HAND
- total_mass = TOTAL_MASS_NORMAL_ITEM
/obj/item/nullrod/tribal_knife/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index cdb9c146e2..10b84917bb 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -180,8 +180,13 @@
slot_flags = ITEM_SLOT_BELT
force = 12 //9 hit crit
w_class = WEIGHT_CLASS_NORMAL
- var/cooldown = 0
+ var/cooldown = 13
var/on = TRUE
+ var/last_hit = 0
+ var/stun_stam_cost_coeff = 1.25
+ var/hardstun_ds = 1
+ var/softstun_ds = 0
+ var/stam_dmg = 30
/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user)
if(!on)
@@ -207,12 +212,10 @@
if(!isliving(target))
return
if (user.a_intent == INTENT_HARM)
- if(!..())
- return
- if(!iscyborg(target))
+ if(!..() || !iscyborg(target))
return
else
- if(cooldown <= world.time)
+ if(last_hit < world.time)
if(ishuman(target))
var/mob/living/carbon/human/H = target
if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
@@ -220,7 +223,7 @@
if(check_martial_counter(H, user))
return
playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
- target.Knockdown(60)
+ target.Knockdown(softstun_ds, TRUE, FALSE, hardstun_ds, stam_dmg)
log_combat(user, target, "stunned", src)
src.add_fingerprint(user)
target.visible_message("[user] has knocked down [target] with [src]! ", \
@@ -229,7 +232,7 @@
target.LAssailant = null
else
target.LAssailant = user
- cooldown = world.time + 40
+ last_hit = world.time + cooldown
user.adjustStaminaLossBuffered(getweight())//CIT CHANGE - makes swinging batons cost stamina
/obj/item/melee/classic_baton/telescopic
@@ -245,7 +248,7 @@
item_flags = NONE
force = 0
on = FALSE
- total_mass = TOTAL_MASS_SMALL_ITEM
+ total_mass = TOTAL_MASS_NORMAL_ITEM
/obj/item/melee/classic_baton/telescopic/suicide_act(mob/user)
var/mob/living/carbon/human/H = user
diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm
index a6f5830dd4..cc2f5e9be7 100644
--- a/code/game/objects/items/paint.dm
+++ b/code/game/objects/items/paint.dm
@@ -90,14 +90,14 @@
add_fingerprint(user)
-/obj/item/paint/afterattack(turf/target, mob/user, proximity)
+/obj/item/paint/afterattack(atom/target, mob/user, proximity)
. = ..()
if(!proximity)
return
if(paintleft <= 0)
icon_state = "paint_empty"
return
- if(!istype(target) || isspaceturf(target))
+ if(!isturf(target) || isspaceturf(target))
return
var/newcolor = "#" + item_color
target.add_atom_colour(newcolor, WASHABLE_COLOUR_PRIORITY)
@@ -105,12 +105,14 @@
/obj/item/paint/paint_remover
gender = PLURAL
name = "paint remover"
- desc = "Used to remove color from floors and walls."
+ desc = "Used to remove color from anything."
icon_state = "paint_neutral"
-/obj/item/paint/paint_remover/afterattack(turf/target, mob/user, proximity)
+/obj/item/paint/paint_remover/afterattack(atom/target, mob/user, proximity)
. = ..()
if(!proximity)
return
- if(istype(target) && target.color != initial(target.color))
+ if(!isturf(target) || !isobj(target))
+ return
+ if(target.color != initial(target.color))
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index 40380dfe80..48588cf9f3 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -629,7 +629,7 @@
/obj/item/toy/plush/mothplushie
name = "insect plushie"
- desc = "An adorable stuffed toy that resembles some kind of insect"
+ desc = "An adorable stuffed toy that resembles some kind of insect."
icon_state = "bumble"
item_state = "bumble"
squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1)
@@ -773,8 +773,10 @@
item_state = "blep"
/obj/item/toy/plush/mammal/circe
+ desc = "A luxuriously soft toy that resembles a nine-tailed kitsune."
icon_state = "circe"
item_state = "circe"
+ attack_verb = list("medicated", "tailhugged", "kissed")
/obj/item/toy/plush/mammal/robin
icon_state = "robin"
@@ -839,8 +841,10 @@
item_state = "rae"
/obj/item/toy/plush/mammal/zed
+ desc = "A masked stuffed toy that resembles a fierce miner. He even comes with his own little crusher!"
icon_state = "zed"
item_state = "zed"
+ attack_verb = list("ENDED", "CRUSHED", "GNOMED")
/obj/item/toy/plush/mammal/justin
icon_state = "justin"
@@ -852,6 +856,12 @@
item_state = "reece"
attack_verb = list("healed", "cured", "demoted")
+/obj/item/toy/plush/mammal/redwood
+ desc = "An adorable stuffed toy resembling a Nanotrasen Captain. That just happens to be a bunny."
+ icon_state = "redwood"
+ item_state = "redwood"
+ attack_verb = list("ordered", "bapped", "reprimanded")
+
/obj/item/toy/plush/mammal/dog
desc = "An adorable stuffed toy that resembles a canine."
icon_state = "katlin"
@@ -898,6 +908,12 @@
obj_flags = UNIQUE_RENAME
unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad")
+/obj/item/toy/plush/mammal/dog/jesse
+ desc = "An adorable wolf toy that resembles a cream-colored wolf. He has a little pride flag!"
+ icon_state = "jesse"
+ item_state = "jesse"
+ attack_verb = list("greeted", "merc'd", "howdy'd")
+
/obj/item/toy/plush/catgirl
name = "feline plushie"
desc = "An adorable stuffed toy that resembles a feline."
@@ -935,3 +951,15 @@
item_state = "fermis"
attack_verb = list("cuddled", "petpatted", "wigglepurred")
squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1)
+
+/obj/item/toy/plush/catgirl/mariaf
+ desc = "An adorable stuffed toy that resembles a very tall cat girl."
+ icon_state = "mariaf"
+ item_state = "mariaf"
+ attack_verb = list("hugged", "stabbed", "licked")
+
+/obj/item/toy/plush/catgirl/maya
+ desc = "An adorable stuffed toy that resembles an angry cat girl. She has her own tiny nuke disk!"
+ icon_state = "maya"
+ item_state = "maya"
+ attack_verb = list("nuked", "arrested", "harmbatonned")
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index d5806494e6..9c929a6ebf 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -9,7 +9,7 @@
var/locked = FALSE
var/installed = 0
var/require_module = 0
- var/module_type = null
+ var/list/module_type
// if true, is not stored in the robot to be ejected
// if module is reset
var/one_use = FALSE
@@ -18,7 +18,7 @@
if(R.stat == DEAD)
to_chat(user, "[src] will not function on a deceased cyborg. ")
return FALSE
- if(module_type && !istype(R.module, module_type))
+ if(module_type && !is_type_in_list(R.module, module_type))
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(user, "There's no mounting point for the module!")
return FALSE
@@ -93,7 +93,6 @@
desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate."
icon_state = "cyborg_upgrade3"
require_module = 1
- //module_type = /obj/item/robot_module/security
/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -141,7 +140,7 @@
desc = "A diamond drill replacement for the mining module's standard drill."
icon_state = "cyborg_upgrade3"
require_module = 1
- module_type = /obj/item/robot_module/miner
+ module_type = list(/obj/item/robot_module/miner)
/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -173,7 +172,7 @@
desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
icon_state = "cyborg_upgrade3"
require_module = 1
- module_type = /obj/item/robot_module/miner
+ module_type = list(/obj/item/robot_module/miner)
/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R)
. = ..()
@@ -200,7 +199,7 @@
desc = "A trash bag of holding replacement for the janiborg's standard trash bag."
icon_state = "cyborg_upgrade3"
require_module = 1
- module_type = /obj/item/robot_module/janitor
+ module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R)
. = ..()
@@ -227,7 +226,7 @@
desc = "An advanced mop replacement for the janiborg's standard mop."
icon_state = "cyborg_upgrade3"
require_module = 1
- module_type = /obj/item/robot_module/janitor
+ module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R)
. = ..()
@@ -276,7 +275,7 @@
icon_state = "ash_plating"
resistance_flags = LAVA_PROOF | FIRE_PROOF
require_module = 1
- module_type = /obj/item/robot_module/miner
+ module_type = list(/obj/item/robot_module/miner)
/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -405,7 +404,9 @@
to produce more advanced and complex medical reagents."
icon_state = "cyborg_upgrade3"
require_module = 1
- module_type = /obj/item/robot_module/medical
+ module_type = list(/obj/item/robot_module/medical,
+ /obj/item/robot_module/syndicate_medical,
+ /obj/item/robot_module/medihound)
var/list/additional_reagents = list()
/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr)
@@ -467,7 +468,9 @@
defibrillator, for on the scene revival."
icon_state = "cyborg_upgrade3"
require_module = 1
- module_type = /obj/item/robot_module/medical
+ module_type = list(/obj/item/robot_module/medical,
+ /obj/item/robot_module/syndicate_medical,
+ /obj/item/robot_module/medihound)
/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -489,7 +492,9 @@
out procedures"
icon_state = "cyborg_upgrade3"
require_module = 1
- module_type = /obj/item/robot_module/medical
+ module_type = list(/obj/item/robot_module/medical,
+ /obj/item/robot_module/syndicate_medical,
+ /obj/item/robot_module/medihound)
/obj/item/borg/upgrade/processor/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -514,7 +519,7 @@
/obj/item/robot_module/medical,
/obj/item/robot_module/syndicate_medical,
/obj/item/robot_module/medihound,
- /obj/item/robot_module/borgi)
+ /obj/item/robot_module/borgi)
/obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -598,7 +603,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "borgrped"
require_module = TRUE
- module_type = /obj/item/robot_module/engineering
+ module_type = list(/obj/item/robot_module/engineering)
/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -626,7 +631,9 @@
icon = 'icons/obj/device.dmi'
icon_state = "pinpointer_crew"
require_module = TRUE
- module_type = /obj/item/robot_module/medical
+ module_type = list(/obj/item/robot_module/medical,
+ /obj/item/robot_module/syndicate_medical,
+ /obj/item/robot_module/medihound)
/obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -664,3 +671,33 @@
desc = "Allows you to to turn a cyborg into a clown, honk."
icon_state = "cyborg_upgrade3"
new_module = /obj/item/robot_module/clown
+
+// Citadel's Vtech Controller
+/obj/effect/proc_holder/silicon/cyborg/vtecControl
+ name = "vTec Control"
+ desc = "Allows finer-grained control of the vTec speed boost."
+ action_icon = 'icons/mob/actions.dmi'
+ action_icon_state = "Chevron_State_0"
+
+ var/currentState = 0
+ var/maxReduction = 2
+
+
+/obj/effect/proc_holder/silicon/cyborg/vtecControl/Click(mob/living/silicon/robot/user)
+ var/mob/living/silicon/robot/self = usr
+
+ currentState = (currentState + 1) % 3
+
+ if(usr)
+ switch(currentState)
+ if (0)
+ self.speed = maxReduction
+ if (1)
+ self.speed -= maxReduction*0.5
+ if (2)
+ self.speed -= maxReduction*1.25
+
+ action.button_icon_state = "Chevron_State_[currentState]"
+ action.UpdateButtonIcon()
+
+ return
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index cf967e25ba..47c881bbdf 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -23,7 +23,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/glass
- grind_results = list("silicon" = 20)
+ grind_results = list(/datum/reagent/silicon = 20)
point_value = 1
/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user)
@@ -87,7 +87,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plasmaglass
- grind_results = list("silicon" = 20, "plasma" = 10)
+ grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10)
/obj/item/stack/sheet/plasmaglass/fifty
amount = 50
@@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/rglass
- grind_results = list("silicon" = 20, "iron" = 10)
+ grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10)
point_value = 4
/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
@@ -177,11 +177,11 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
singular_name = "reinforced plasma glass sheet"
icon_state = "sheet-prglass"
item_state = "sheet-prglass"
- materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT, MAT_METAL = MINERAL_MATERIAL_AMOUNT * 0.5,)
+ materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT, MAT_METAL=MINERAL_MATERIAL_AMOUNT * 0.5,)
armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plasmarglass
- grind_results = list("silicon" = 20, "plasma" = 10, "iron" = 10)
+ grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10, /datum/reagent/iron = 10)
point_value = 23
/obj/item/stack/sheet/plasmarglass/Initialize(mapload, new_amount, merge = TRUE)
@@ -243,8 +243,9 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
resistance_flags = ACID_PROOF
armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
max_integrity = 40
- var/cooldown = 0
sharpness = IS_SHARP
+ var/icon_prefix
+
/obj/item/shard/suicide_act(mob/user)
user.visible_message("[user] is slitting [user.p_their()] [pick("wrists", "throat")] with the shard of glass! It looks like [user.p_theyre()] trying to commit suicide. ")
@@ -266,9 +267,19 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
if("large")
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
- var/matrix/M = matrix(transform)
- M.Turn(rand(-170, 170))
- transform = M
+ if (icon_prefix)
+ icon_state = "[icon_prefix][icon_state]"
+
+ var/turf/T = get_turf(src)
+ if(T && is_station_level(T.z))
+ SSblackbox.record_feedback("tally", "station_mess_created", 1, name)
+
+/obj/item/shard/Destroy()
+ . = ..()
+
+ var/turf/T = get_turf(src)
+ if(T && is_station_level(T.z))
+ SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name)
/obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity)
. = ..()
@@ -298,6 +309,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
return ..()
/obj/item/shard/welder_act(mob/living/user, obj/item/I)
+ ..()
if(I.use_tool(src, user, 0, volume=50))
var/obj/item/stack/sheet/glass/NG = new (user.loc)
for(var/obj/item/stack/sheet/glass/G in user.loc)
@@ -316,4 +328,13 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
playsound(loc, 'sound/effects/glass_step.ogg', 30, 1)
else
playsound(loc, 'sound/effects/glass_step.ogg', 50, 1)
- . = ..()
+ return ..()
+
+/obj/item/shard/plasma
+ name = "purple shard"
+ desc = "A nasty looking shard of plasma glass."
+ force = 6
+ throwforce = 11
+ icon_state = "plasmalarge"
+ materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
+ icon_prefix = "plasma"
\ No newline at end of file
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 887b6f5a2e..6532e9f7a5 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -46,6 +46,7 @@
item_flags = NO_MAT_REDEMPTION
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
component_type = /datum/component/storage/concrete/bluespace/bag_of_holding
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/holding/satchel
name = "satchel of holding"
@@ -53,6 +54,7 @@
icon_state = "holdingsat"
item_state = "holdingsat"
species_exception = list(/datum/species/angel)
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/holding/ComponentInitialize()
. = ..()
@@ -81,6 +83,7 @@
icon_state = "giftbag0"
item_state = "giftbag"
w_class = WEIGHT_CLASS_BULKY
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/santabag/ComponentInitialize()
. = ..()
@@ -133,6 +136,8 @@
desc = "It's a special backpack made exclusively for Nanotrasen officers."
icon_state = "captainpack"
item_state = "captainpack"
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/industrial
name = "industrial backpack"
@@ -140,6 +145,7 @@
icon_state = "engiepack"
item_state = "engiepack"
resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/botany
name = "botany backpack"
@@ -194,6 +200,8 @@
desc = "A tough satchel with extra pockets."
icon_state = "satchel-eng"
item_state = "engiepack"
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/satchel/med
name = "medical satchel"
@@ -261,6 +269,8 @@
desc = "An exclusive satchel for Nanotrasen officers."
icon_state = "satchel-cap"
item_state = "captainpack"
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/satchel/flat
name = "smuggler's satchel"
@@ -356,6 +366,7 @@
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/mask/surgical(src)
+ new /obj/item/reagent_containers/medspray/sterilizine(src)
new /obj/item/razor(src)
/obj/item/storage/backpack/duffelbag/sec
@@ -377,12 +388,15 @@
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/mask/surgical(src)
+ new /obj/item/reagent_containers/medspray/sterilizine(src)
/obj/item/storage/backpack/duffelbag/engineering
name = "industrial duffel bag"
desc = "A large duffel bag for holding extra tools and supplies."
icon_state = "duffel-eng"
item_state = "duffel-eng"
+ resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/duffelbag/durathread
name = "durathread duffel bag"
@@ -398,6 +412,7 @@
icon_state = "duffel-drone"
item_state = "duffel-drone"
resistance_flags = FIRE_PROOF
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/duffelbag/drone/PopulateContents()
new /obj/item/screwdriver(src)
@@ -425,6 +440,7 @@
icon_state = "duffel-syndie"
item_state = "duffel-syndieammo"
slowdown = 0
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/backpack/duffelbag/syndie/ComponentInitialize()
. = ..()
@@ -470,6 +486,7 @@
new /obj/item/mmi/syndie(src)
new /obj/item/implantcase(src)
new /obj/item/implanter(src)
+ new /obj/item/reagent_containers/medspray/sterilizine(src)
/obj/item/storage/backpack/duffelbag/syndie/surgery_adv
name = "advanced surgery duffel bag"
@@ -489,6 +506,7 @@
new /obj/item/mmi/syndie(src)
new /obj/item/implantcase(src)
new /obj/item/implanter(src)
+ new /obj/item/reagent_containers/medspray/sterilizine(src)
/obj/item/storage/backpack/duffelbag/syndie/ammo
name = "ammunition duffel bag"
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index e4debeff49..232d1bd5c9 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -81,6 +81,7 @@
desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
icon_state = "bluetrashbag"
item_flags = NO_MAT_REDEMPTION
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/bag/trash/bluespace/ComponentInitialize()
. = ..()
@@ -105,6 +106,7 @@
component_type = /datum/component/storage/concrete/stack
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
var/datum/component/mobhook
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/bag/ore/ComponentInitialize()
. = ..()
@@ -391,6 +393,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bspace_biobag"
desc = "A bag for the safe transportation and disposal of biowaste and other biological materials."
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/bag/bio/holding/ComponentInitialize()
. = ..()
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 4495e9da14..3fe4abeeec 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -40,6 +40,7 @@
icon_state = "utilitybelt"
item_state = "utility"
content_overlays = TRUE
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //because this is easier than trying to have showers wash all contents.
/obj/item/storage/belt/utility/ComponentInitialize()
. = ..()
@@ -344,6 +345,7 @@
desc = "A set of tactical webbing worn by Syndicate boarding parties."
icon_state = "militarywebbing"
item_state = "militarywebbing"
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/belt/military/ComponentInitialize()
. = ..()
@@ -530,6 +532,7 @@
desc = "A belt designed to hold various rods of power. A veritable fanny pack of exotic magic."
icon_state = "soulstonebelt"
item_state = "soulstonebelt"
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/storage/belt/wands/ComponentInitialize()
. = ..()
@@ -599,7 +602,7 @@
icon_state = "bandolier-durathread"
item_state = "bandolier-durathread"
resistance_flags = FIRE_PROOF
-
+
/obj/item/storage/belt/bandolier/durathread/ComponentInitialize()
. = ..()
GET_COMPONENT(STR, /datum/component/storage)
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 903c319644..dd6a6b8453 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -33,6 +33,7 @@
resistance_flags = FLAMMABLE
var/foldable = /obj/item/stack/sheet/cardboard
var/illustration = "writing"
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //exploits ahoy
/obj/item/storage/box/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 5b99bb85bf..d18212be42 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -19,6 +19,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
var/latches = "single_latch"
var/has_latches = TRUE
var/can_rubberify = TRUE
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //very protecc too
/obj/item/storage/toolbox/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 6e41527b24..cf5d685b4a 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -1,7 +1,7 @@
/obj/item/storage/box/syndicate
/obj/item/storage/box/syndicate/PopulateContents()
- switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
+ switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "baseball" = 1, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
if("bloodyspai") // 30 tc now this is more right
new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set
new /obj/item/clothing/mask/chameleon(src) // Goes with above
@@ -52,7 +52,7 @@
new /obj/item/clothing/under/suit_jacket/really_black(src)
new /obj/item/screwdriver/power(src) //2 tc item
- if("murder") // 35 tc now
+ if("murder") // 35 tc
new /obj/item/melee/transforming/energy/sword/saber(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/card/emag(src)
@@ -62,6 +62,17 @@
new /obj/item/clothing/glasses/phantomthief/syndicate(src)
new /obj/item/reagent_containers/syringe/stimulants(src)
+ if("baseball") // 42~ tc
+ new /obj/item/melee/baseball_bat/ablative/syndi(src) //Lets say 12 tc, lesser sleeping carp
+ new /obj/item/clothing/glasses/sunglasses/garb(src) //Lets say 2 tc
+ new /obj/item/card/emag(src) //6 tc
+ new /obj/item/clothing/shoes/sneakers/noslip(src) //2tc
+ new /obj/item/encryptionkey/syndicate(src) //1tc
+ new /obj/item/autosurgeon/anti_drop(src) //Lets just say 7~
+ new /obj/item/clothing/under/syndicate/baseball(src) //3tc
+ new /obj/item/clothing/head/soft/baseball(src) //Lets say 4 tc
+ new /obj/item/reagent_containers/hypospray/medipen/stimulants/baseball(src) //lets say 5tc
+
if("implant") // 67+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it?
new /obj/item/implanter/freedom(src)
new /obj/item/implanter/uplink/precharged(src)
diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm
index 70bfebb799..f891a48df6 100644
--- a/code/game/objects/items/tools/crowbar.dm
+++ b/code/game/objects/items/tools/crowbar.dm
@@ -31,7 +31,7 @@
name = "brass crowbar"
desc = "A brass crowbar. It feels faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "crowbar_brass"
+ icon_state = "crowbar_clock"
toolspeed = 0.5
/obj/item/crowbar/bronze
diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm
index 68946f73cd..6cbede78a8 100644
--- a/code/game/objects/items/tools/screwdriver.dm
+++ b/code/game/objects/items/tools/screwdriver.dm
@@ -81,7 +81,7 @@
name = "brass screwdriver"
desc = "A screwdriver made of brass. The handle feels freezing cold."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "screwdriver_brass"
+ icon_state = "screwdriver_clock"
item_state = "screwdriver_brass"
toolspeed = 0.5
random_color = FALSE
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index 9b622a14c4..fb38e4335e 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -360,7 +360,7 @@
name = "brass welding tool"
desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "brasswelder"
+ icon_state = "clockwelder"
item_state = "brasswelder"
/obj/item/weldingtool/bronze
diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm
index 527891afdb..e40ae8bdc1 100644
--- a/code/game/objects/items/tools/wirecutters.dm
+++ b/code/game/objects/items/tools/wirecutters.dm
@@ -63,9 +63,9 @@
/obj/item/wirecutters/brass
name = "brass wirecutters"
- desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch."
+ desc = "A pair of eloquent wirecutters made of brass. The handle feels freezing cold to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "cutters_brass"
+ icon_state = "cutters_clock"
random_color = FALSE
toolspeed = 0.5
diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm
index 8ff960825a..462eb22aaa 100644
--- a/code/game/objects/items/tools/wrench.dm
+++ b/code/game/objects/items/tools/wrench.dm
@@ -32,7 +32,7 @@
name = "brass wrench"
desc = "A brass wrench. It's faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "wrench_brass"
+ icon_state = "wrench_clock"
toolspeed = 0.5
/obj/item/wrench/bronze
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 539a60986a..37ab948332 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -44,6 +44,10 @@
icon_state = "plate"
resistance_flags = NONE
+/obj/item/trash/plate/alt
+ desc = "Still some dip left. Sadly still just trash..."
+ icon_state = "plate1"
+
/obj/item/trash/pistachios
name = "pistachios pack"
icon_state = "pistachios_pack"
diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm
index 781a82513e..82bf2c6b5f 100644
--- a/code/game/objects/items/twohanded.dm
+++ b/code/game/objects/items/twohanded.dm
@@ -487,6 +487,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
var/obj/item/grenade/explosive = null
var/war_cry = "AAAAARGH!!!"
+ var/icon_prefix = "spearglass"
/obj/item/twohanded/spear/Initialize()
. = ..()
@@ -529,7 +530,7 @@
if(explosive)
icon_state = "spearbomb[wielded]"
else
- icon_state = "spearglass[wielded]"
+ icon_state = "[icon_prefix][wielded]"
/obj/item/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
. = ..()
@@ -556,6 +557,13 @@
src.war_cry = input
/obj/item/twohanded/spear/CheckParts(list/parts_list)
+ var/obj/item/shard/tip = locate() in parts_list
+ if (istype(tip, /obj/item/shard/plasma))
+ force_wielded = 19
+ force_unwielded = 11
+ throwforce = 21
+ icon_prefix = "spearplasma"
+ qdel(tip)
var/obj/item/twohanded/spear/S = locate() in parts_list
if(S)
if(S.explosive)
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index f2d9f328a1..4cb6fc74c0 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -255,7 +255,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
var/obj/item/twohanded/spear/S = new /obj/item/twohanded/spear
remove_item_from_storage(user)
- qdel(I)
+ if (!user.transferItemToLoc(I, S))
+ return
+ S.CheckParts(list(I))
qdel(src)
user.put_in_hands(S)
@@ -513,6 +515,19 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
var/homerun_able = 0
total_mass = 2.7 //a regular wooden major league baseball bat weighs somewhere between 2 to 3.4 pounds, according to google
+/obj/item/melee/baseball_bat/chaplain
+ name = "blessed baseball bat"
+ desc = "There ain't a cult in the league that can withstand a swatter."
+ force = 14
+ throwforce = 14
+ obj_flags = UNIQUE_RENAME
+ var/chaplain_spawnable = TRUE
+ total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
+
+/obj/item/melee/baseball_bat/chaplain/Initialize()
+ . = ..()
+ AddComponent(/datum/component/anti_magic, TRUE, TRUE)
+
/obj/item/melee/baseball_bat/homerun
name = "home run bat"
desc = "This thing looks dangerous... Dangerously good at baseball, that is."
@@ -563,6 +578,12 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1)
return 1
+/obj/item/melee/baseball_bat/ablative/syndi
+ name = "syndicate major league bat"
+ desc = "A metal bat made by the syndicate for the major league team."
+ force = 18 //Spear damage...
+ throwforce = 30
+
/obj/item/melee/flyswatter
name = "flyswatter"
desc = "Useful for killing insects of all sizes."
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index 88d141a9ad..dde9bce1bc 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -489,3 +489,19 @@
. = ..()
if(has_gravity())
playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE)
+
+/obj/structure/chair/sofa
+ name = "old ratty sofa"
+ icon_state = "sofamiddle"
+ icon = 'icons/obj/sofa.dmi'
+ buildstackamount = 1
+ item_chair = null
+
+/obj/structure/chair/sofa/left
+ icon_state = "sofaend_left"
+
+/obj/structure/chair/sofa/right
+ icon_state = "sofaend_right"
+
+/obj/structure/chair/sofa/corner
+ icon_state = "sofacorner"
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index d2ab9ea6fb..b49d0a77d5 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -111,9 +111,9 @@
new /obj/item/clothing/accessory/pocketprotector/cosmetology(src)
new /obj/item/clothing/under/rank/chaplain(src)
new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/suit/nun(src)
+ new /obj/item/clothing/suit/chaplain/nun(src)
new /obj/item/clothing/head/nun_hood(src)
- new /obj/item/clothing/suit/holidaypriest(src)
+ new /obj/item/clothing/suit/chaplain/holidaypriest(src)
new /obj/item/storage/backpack/cultpack(src)
new /obj/item/storage/fancy/candle_box(src)
new /obj/item/storage/fancy/candle_box(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 167823b9be..a7adafdad4 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -33,6 +33,7 @@
new /obj/item/extinguisher/advanced(src)
new /obj/item/storage/photo_album/CE(src)
new /obj/item/storage/lockbox/medal/engineering(src)
+ new /obj/item/construction/rcd/loaded/upgraded(src)
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm
index cdca354563..05e62c196f 100644
--- a/code/game/objects/structures/dresser.dm
+++ b/code/game/objects/structures/dresser.dm
@@ -79,4 +79,4 @@
var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null
if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return default_color
- return sanitize_hexcolor(n_color)
+ return sanitize_hexcolor(n_color, 3, FALSE, default_color)
diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm
index e979d4f18e..226d279288 100644
--- a/code/game/objects/structures/table_frames.dm
+++ b/code/game/objects/structures/table_frames.dm
@@ -100,6 +100,14 @@
to_chat(user, "You start adding [B] to [src]... ")
if(do_after(user, 20, target = src) && B.use(1))
make_new_table(/obj/structure/table/bronze)
+ else if(istype(I, /obj/item/stack/sheet/plasmaglass))
+ var/obj/item/stack/sheet/plasmaglass/G = I
+ if(G.get_amount() < 1)
+ to_chat(user, "You need one plasmaglass sheet to do this! ")
+ return
+ to_chat(user, "You start adding [G] to [src]... ")
+ if(do_after(user, 20, target = src) && G.use(1))
+ make_new_table(/obj/structure/table/plasmaglass)
else
return ..()
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 8c29c1b2c5..cd9b595f0a 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -115,6 +115,9 @@
log_combat(user, pushed_mob, "placed")
/obj/structure/table/proc/tablepush(mob/living/user, mob/living/pushed_mob)
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, "Throwing [pushed_mob] onto the table might hurt them! ")
+ return
var/added_passtable = FALSE
if(!pushed_mob.pass_flags & PASSTABLE)
added_passtable = TRUE
@@ -125,9 +128,9 @@
if(pushed_mob.loc != loc) //Something prevented the tabling
return
pushed_mob.Knockdown(40)
- pushed_mob.visible_message("[user] pushes [pushed_mob] onto [src]. ", \
- "[user] pushes [pushed_mob] onto [src]. ")
- log_combat(user, pushed_mob, "pushed")
+ pushed_mob.visible_message("[user] slams [pushed_mob] onto [src]! ", \
+ "[user] slams you onto [src]! ")
+ log_combat(user, pushed_mob, "tabled", null, "onto [src]")
if(!ishuman(pushed_mob))
return
var/mob/living/carbon/human/H = pushed_mob
@@ -258,6 +261,53 @@
for(var/obj/item/shard/S in debris)
S.color = NARSIE_WINDOW_COLOUR
+/*
+ * Plasmaglass tables
+ */
+/obj/structure/table/plasmaglass
+ name = "plasmaglass table"
+ desc = "A glasstable, but it's pink and more sturdy. What will Nanotrasen design next with plasma?"
+ icon = 'icons/obj/smooth_structures/plasmaglass_table.dmi'
+ icon_state = "plasmaglass_table"
+ climbable = TRUE
+ buildstack = /obj/item/stack/sheet/plasmaglass
+ canSmoothWith = null
+ max_integrity = 270
+ resistance_flags = ACID_PROOF
+ armor = list("melee" = 10, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
+ var/list/debris = list()
+
+/obj/structure/table/plasmaglass/New()
+ . = ..()
+ debris += new frame
+ debris += new /obj/item/shard/plasma
+
+/obj/structure/table/plasmaglass/Destroy()
+ QDEL_LIST(debris)
+ . = ..()
+
+/obj/structure/table/plasmaglass/proc/check_break(mob/living/M)
+ return
+
+/obj/structure/table/plasmaglass/deconstruct(disassembled = TRUE, wrench_disassembly = 0)
+ if(!(flags_1 & NODECONSTRUCT_1))
+ if(disassembled)
+ ..()
+ return
+ else
+ var/turf/T = get_turf(src)
+ playsound(T, "shatter", 50, 1)
+ for(var/X in debris)
+ var/atom/movable/AM = X
+ AM.forceMove(T)
+ debris -= AM
+ qdel(src)
+
+/obj/structure/table/plasmaglass/narsie_act()
+ color = NARSIE_WINDOW_COLOUR
+ for(var/obj/item/shard/S in debris)
+ S.color = NARSIE_WINDOW_COLOUR
+
/*
* Wooden tables
*/
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index a26d57e3e1..9fc055c2ba 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -281,6 +281,8 @@
. += new /obj/effect/decal/cleanable/glass(location)
if (reinf)
. += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
+ if (fulltile)
+ . += new /obj/item/shard(location)
/obj/structure/window/proc/can_be_rotated(mob/user,rotation_type)
if(anchored)
@@ -409,6 +411,15 @@
glass_type = /obj/item/stack/sheet/plasmaglass
rad_insulation = RAD_NO_INSULATION
+/obj/structure/window/plasma/spawnDebris(location)
+ . = list()
+ . += new /obj/item/shard/plasma(location)
+ . += new /obj/effect/decal/cleanable/glass/plasma(location)
+ if (reinf)
+ . += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
+ if (fulltile)
+ . += new /obj/item/shard/plasma(location)
+
/obj/structure/window/plasma/spawner/east
dir = EAST
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index b00efc7ed6..194014b61a 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -236,6 +236,10 @@
return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 33)
if(RCD_WINDOWGRILLE)
return list("mode" = RCD_WINDOWGRILLE, "delay" = 10, "cost" = 4)
+ if(RCD_MACHINE)
+ return list("mode" = RCD_MACHINE, "delay" = 20, "cost" = 25)
+ if(RCD_COMPUTER)
+ return list("mode" = RCD_COMPUTER, "delay" = 20, "cost" = 25)
return FALSE
/turf/open/floor/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
@@ -274,4 +278,20 @@
var/obj/structure/grille/G = new(src)
G.anchored = TRUE
return TRUE
+ if(RCD_MACHINE)
+ if(locate(/obj/structure/frame/machine) in src)
+ return FALSE
+ var/obj/structure/frame/machine/M = new(src)
+ M.state = 2
+ M.icon_state = "box_1"
+ M.anchored = TRUE
+ return TRUE
+ if(RCD_COMPUTER)
+ if(locate(/obj/structure/frame/computer) in src)
+ return FALSE
+ var/obj/structure/frame/computer/C = new(src)
+ C.anchored = TRUE
+ C.setDir(the_rcd.computer_dir)
+ return TRUE
+
return FALSE
diff --git a/code/game/turfs/simulated/wall/misc_walls.dm b/code/game/turfs/simulated/wall/misc_walls.dm
index dfc6972578..8b63d60939 100644
--- a/code/game/turfs/simulated/wall/misc_walls.dm
+++ b/code/game/turfs/simulated/wall/misc_walls.dm
@@ -7,6 +7,7 @@
smooth = SMOOTH_MORE
sheet_type = /obj/item/stack/sheet/runed_metal
sheet_amount = 1
+ explosion_block = 10
girder_type = /obj/structure/girder/cult
/turf/closed/wall/mineral/cult/Initialize()
@@ -49,7 +50,7 @@
/turf/closed/wall/clockwork
name = "clockwork wall"
desc = "A huge chunk of warm metal. The clanging of machinery emanates from within."
- explosion_block = 2
+ explosion_block = 5
hardness = 10
slicing_duration = 80
sheet_type = /obj/item/stack/tile/brass
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index b400f44b98..555c35980d 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -423,6 +423,25 @@
if(GLOB.master_mode == "secret")
dat += "(Force Secret Mode) "
+ if(GLOB.master_mode == "dynamic")
+ if(SSticker.current_state <= GAME_STATE_PREGAME)
+ dat += "(Force Roundstart Rulesets) "
+ if (GLOB.dynamic_forced_roundstart_ruleset.len > 0)
+ for(var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset)
+ dat += {"-> [rule.name] <- "}
+ dat += "(Clear Rulesets) "
+ dat += "(Dynamic mode options) "
+ else if (SSticker.IsRoundInProgress())
+ dat += "(Force Next Latejoin Ruleset) "
+ if (SSticker && SSticker.mode && istype(SSticker.mode,/datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ if (mode.forced_latejoin_rule)
+ dat += {"-> [mode.forced_latejoin_rule.name] <- "}
+ dat += "(Execute Midround Ruleset!) "
+ dat += " "
+ if(SSticker.IsRoundInProgress())
+ dat += "(Game Mode Panel) "
+
dat += {"
Create Object
@@ -839,6 +858,44 @@
browser.set_content(dat.Join())
browser.open()
+/datum/admins/proc/dynamic_mode_options(mob/user)
+ var/dat = {"
+ Dynamic Mode Options
+
+ Common options
+ All these options can be changed midround.
+
+ Force extended: - Option is [GLOB.dynamic_forced_extended ? "ON" : "OFF"] .
+ This will force the round to be extended. No rulesets will be drafted.
+
+ No stacking: - Option is [GLOB.dynamic_no_stacking ? "ON" : "OFF"] .
+ Unless the threat goes above [GLOB.dynamic_stacking_limit], only one "round-ender" ruleset will be drafted.
+
+ Classic secret mode: - Option is [GLOB.dynamic_classic_secret ? "ON" : "OFF"] .
+ Only one roundstart ruleset will be drafted. Only traitors and minor roles will latespawn.
+
+
+ Forced threat level: Current value : [GLOB.dynamic_forced_threat_level] .
+ The value threat is set to if it is higher than -1.
+
+ High population limit: Current value : [GLOB.dynamic_high_pop_limit] .
+ The threshold at which "high population override" will be in effect.
+
+ Stacking threeshold: Current value : [GLOB.dynamic_stacking_limit] .
+ The threshold at which "round-ender" rulesets will stack. A value higher than 100 ensure this never happens.
+ Advanced parameters
+ Curve centre: -> [GLOB.dynamic_curve_centre] <-
+ Curve width: -> [GLOB.dynamic_curve_width] <-
+ Latejoin injection delay:
+ Minimum: -> [GLOB.dynamic_latejoin_delay_min / 60 / 10] <- Minutes
+ Maximum: -> [GLOB.dynamic_latejoin_delay_max / 60 / 10] <- Minutes
+ Midround injection delay:
+ Minimum: -> [GLOB.dynamic_midround_delay_min / 60 / 10] <- Minutes
+ Maximum: -> [GLOB.dynamic_midround_delay_max / 60 / 10] <- Minutes
+ "}
+
+ user << browse(dat, "window=dyn_mode_options;size=900x650")
+
/datum/admins/proc/create_or_modify_area()
set category = "Debug"
set name = "Create or modify area"
diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm
index 3bcc0e0c01..4a4e3a13fb 100644
--- a/code/modules/admin/create_mob.dm
+++ b/code/modules/admin/create_mob.dm
@@ -37,7 +37,8 @@
H.dna.features["frills"] = pick(GLOB.frills_list)
H.dna.features["spines"] = pick(GLOB.spines_list)
H.dna.features["body_markings"] = pick(GLOB.body_markings_list)
- H.dna.features["moth_wings"] = pick(GLOB.moth_wings_list)
+ H.dna.features["insect_wings"] = pick(GLOB.insect_wings_list)
+ H.dna.features["insect_fluff"] = pick(GLOB.insect_fluffs_list)
H.update_body()
H.update_hair()
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index d881044757..91df9ef85c 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -291,6 +291,11 @@
else if(href_list["editrights"])
edit_rights_topic(href_list)
+ else if(href_list["gamemode_panel"])
+ if(!check_rights(R_ADMIN))
+ return
+ SSticker.mode.admin_panel()
+
else if(href_list["call_shuttle"])
if(!check_rights(R_ADMIN))
return
@@ -1342,6 +1347,291 @@
else if(href_list["f_secret"])
return HandleFSecret()
+
+ else if(href_list["f_dynamic_roundstart"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode.", null, null, null, null)
+ var/roundstart_rules = list()
+ for (var/rule in subtypesof(/datum/dynamic_ruleset/roundstart))
+ var/datum/dynamic_ruleset/roundstart/newrule = new rule()
+ roundstart_rules[newrule.name] = newrule
+ var/added_rule = input(usr,"What ruleset do you want to force? This will bypass threat level and population restrictions.", "Rigging Roundstart", null) as null|anything in roundstart_rules
+ if (added_rule)
+ GLOB.dynamic_forced_roundstart_ruleset += roundstart_rules[added_rule]
+ log_admin("[key_name(usr)] set [added_rule] to be a forced roundstart ruleset.")
+ message_admins("[key_name(usr)] set [added_rule] to be a forced roundstart ruleset.", 1)
+ Game()
+
+ else if(href_list["f_dynamic_roundstart_clear"])
+ if(!check_rights(R_ADMIN))
+ return
+ GLOB.dynamic_forced_roundstart_ruleset = list()
+ Game()
+ log_admin("[key_name(usr)] cleared the rigged roundstart rulesets. The mode will pick them as normal.")
+ message_admins("[key_name(usr)] cleared the rigged roundstart rulesets. The mode will pick them as normal.", 1)
+
+ else if(href_list["f_dynamic_roundstart_remove"])
+ if(!check_rights(R_ADMIN))
+ return
+ var/datum/dynamic_ruleset/roundstart/rule = locate(href_list["f_dynamic_roundstart_remove"])
+ GLOB.dynamic_forced_roundstart_ruleset -= rule
+ Game()
+ log_admin("[key_name(usr)] removed [rule] from the forced roundstart rulesets.")
+ message_admins("[key_name(usr)] removed [rule] from the forced roundstart rulesets.", 1)
+
+ else if(href_list["f_dynamic_latejoin"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(!SSticker || !SSticker.mode)
+ return alert(usr, "The game must start first.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+ var/latejoin_rules = list()
+ for (var/rule in subtypesof(/datum/dynamic_ruleset/latejoin))
+ var/datum/dynamic_ruleset/latejoin/newrule = new rule()
+ latejoin_rules[newrule.name] = newrule
+ var/added_rule = input(usr,"What ruleset do you want to force upon the next latejoiner? This will bypass threat level and population restrictions.", "Rigging Latejoin", null) as null|anything in latejoin_rules
+ if (added_rule)
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ mode.forced_latejoin_rule = latejoin_rules[added_rule]
+ log_admin("[key_name(usr)] set [added_rule] to proc on the next latejoin.")
+ message_admins("[key_name(usr)] set [added_rule] to proc on the next latejoin.", 1)
+ Game()
+
+ else if(href_list["f_dynamic_latejoin_clear"])
+ if(!check_rights(R_ADMIN))
+ return
+ if (SSticker && SSticker.mode && istype(SSticker.mode,/datum/game_mode/dynamic))
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ mode.forced_latejoin_rule = null
+ Game()
+ log_admin("[key_name(usr)] cleared the forced latejoin ruleset.")
+ message_admins("[key_name(usr)] cleared the forced latejoin ruleset.", 1)
+
+ else if(href_list["f_dynamic_midround"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(!SSticker || !SSticker.mode)
+ return alert(usr, "The game must start first.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+ var/midround_rules = list()
+ for (var/rule in subtypesof(/datum/dynamic_ruleset/midround))
+ var/datum/dynamic_ruleset/midround/newrule = new rule()
+ midround_rules[newrule.name] = rule
+ var/added_rule = input(usr,"What ruleset do you want to force right now? This will bypass threat level and population restrictions.", "Execute Ruleset", null) as null|anything in midround_rules
+ if (added_rule)
+ var/datum/game_mode/dynamic/mode = SSticker.mode
+ log_admin("[key_name(usr)] executed the [added_rule] ruleset.")
+ message_admins("[key_name(usr)] executed the [added_rule] ruleset.", 1)
+ mode.picking_specific_rule(midround_rules[added_rule],1)
+
+ else if (href_list["f_dynamic_options"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_roundstart_centre"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+
+ var/new_centre = input(usr,"Change the centre of the dynamic mode threat curve. A negative value will give a more peaceful round ; a positive value, a round with higher threat. Any number between -5 and +5 is allowed.", "Change curve centre", null) as num
+ if (new_centre < -5 || new_centre > 5)
+ return alert(usr, "Only values between -5 and +5 are allowed.", null, null, null, null)
+
+ log_admin("[key_name(usr)] changed the distribution curve center to [new_centre].")
+ message_admins("[key_name(usr)] changed the distribution curve center to [new_centre]", 1)
+ GLOB.dynamic_curve_centre = new_centre
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_roundstart_width"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+
+ var/new_width = input(usr,"Change the width of the dynamic mode threat curve. A higher value will favour extreme rounds ; a lower value, a round closer to the average. Any Number between 0.5 and 4 are allowed.", "Change curve width", null) as num
+ if (new_width < 0.5 || new_width > 4)
+ return alert(usr, "Only values between 0.5 and +2.5 are allowed.", null, null, null, null)
+
+ log_admin("[key_name(usr)] changed the distribution curve width to [new_width].")
+ message_admins("[key_name(usr)] changed the distribution curve width to [new_width]", 1)
+ GLOB.dynamic_curve_width = new_width
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_roundstart_latejoin_min"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+ var/new_min = input(usr,"Change the minimum delay of latejoin injection in minutes.", "Change latejoin injection delay minimum", null) as num
+ if(new_min <= 0)
+ return alert(usr, "The minimum can't be zero or lower.", null, null, null, null)
+ if((new_min MINUTES) > GLOB.dynamic_latejoin_delay_max)
+ return alert(usr, "The minimum must be lower than the maximum.", null, null, null, null)
+
+ log_admin("[key_name(usr)] changed the latejoin injection minimum delay to [new_min] minutes.")
+ message_admins("[key_name(usr)] changed the latejoin injection minimum delay to [new_min] minutes", 1)
+ GLOB.dynamic_latejoin_delay_min = (new_min MINUTES)
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_roundstart_latejoin_max"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+ var/new_max = input(usr,"Change the maximum delay of latejoin injection in minutes.", "Change latejoin injection delay maximum", null) as num
+ if(new_max <= 0)
+ return alert(usr, "The maximum can't be zero or lower.", null, null, null, null)
+ if((new_max MINUTES) < GLOB.dynamic_latejoin_delay_min)
+ return alert(usr, "The maximum must be higher than the minimum.", null, null, null, null)
+
+ log_admin("[key_name(usr)] changed the latejoin injection maximum delay to [new_max] minutes.")
+ message_admins("[key_name(usr)] changed the latejoin injection maximum delay to [new_max] minutes", 1)
+ GLOB.dynamic_latejoin_delay_max = (new_max MINUTES)
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_roundstart_midround_min"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+ var/new_min = input(usr,"Change the minimum delay of midround injection in minutes.", "Change midround injection delay minimum", null) as num
+ if(new_min <= 0)
+ return alert(usr, "The minimum can't be zero or lower.", null, null, null, null)
+ if((new_min MINUTES) > GLOB.dynamic_midround_delay_max)
+ return alert(usr, "The minimum must be lower than the maximum.", null, null, null, null)
+
+ log_admin("[key_name(usr)] changed the midround injection minimum delay to [new_min] minutes.")
+ message_admins("[key_name(usr)] changed the midround injection minimum delay to [new_min] minutes", 1)
+ GLOB.dynamic_midround_delay_min = (new_min MINUTES)
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_roundstart_midround_max"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+ var/new_max = input(usr,"Change the maximum delay of midround injection in minutes.", "Change midround injection delay maximum", null) as num
+ if(new_max <= 0)
+ return alert(usr, "The maximum can't be zero or lower.", null, null, null, null)
+ if((new_max MINUTES) > GLOB.dynamic_midround_delay_max)
+ return alert(usr, "The maximum must be higher than the minimum.", null, null, null, null)
+
+ log_admin("[key_name(usr)] changed the midround injection maximum delay to [new_max] minutes.")
+ message_admins("[key_name(usr)] changed the midround injection maximum delay to [new_max] minutes", 1)
+ GLOB.dynamic_midround_delay_max = (new_max MINUTES)
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_force_extended"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+
+ GLOB.dynamic_forced_extended = !GLOB.dynamic_forced_extended
+ log_admin("[key_name(usr)] set 'forced_extended' to [GLOB.dynamic_forced_extended].")
+ message_admins("[key_name(usr)] set 'forced_extended' to [GLOB.dynamic_forced_extended].")
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_no_stacking"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+
+ GLOB.dynamic_no_stacking = !GLOB.dynamic_no_stacking
+ log_admin("[key_name(usr)] set 'no_stacking' to [GLOB.dynamic_no_stacking].")
+ message_admins("[key_name(usr)] set 'no_stacking' to [GLOB.dynamic_no_stacking].")
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_classic_secret"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+
+ GLOB.dynamic_classic_secret = !GLOB.dynamic_classic_secret
+ log_admin("[key_name(usr)] set 'classic_secret' to [GLOB.dynamic_classic_secret].")
+ message_admins("[key_name(usr)] set 'classic_secret' to [GLOB.dynamic_classic_secret].")
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_stacking_limit"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+
+ GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num
+ log_admin("[key_name(usr)] set 'stacking_limit' to [GLOB.dynamic_stacking_limit].")
+ message_admins("[key_name(usr)] set 'stacking_limit' to [GLOB.dynamic_stacking_limit].")
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_high_pop_limit"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+
+ var/new_value = input(usr, "Enter the high-pop override threshold for dynamic mode.", "High pop override") as num
+ if (new_value < 0)
+ return alert(usr, "Only positive values allowed!", null, null, null, null)
+ GLOB.dynamic_high_pop_limit = new_value
+
+ log_admin("[key_name(usr)] set 'high_pop_limit' to [GLOB.dynamic_high_pop_limit].")
+ message_admins("[key_name(usr)] set 'high_pop_limit' to [GLOB.dynamic_high_pop_limit].")
+ dynamic_mode_options(usr)
+
+ else if(href_list["f_dynamic_forced_threat"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
+
+ var/new_value = input(usr, "Enter the forced threat level for dynamic mode.", "Forced threat level") as num
+ if (new_value > 100)
+ return alert(usr, "The value must be be under 100.", null, null, null, null)
+ GLOB.dynamic_forced_threat_level = new_value
+
+ log_admin("[key_name(usr)] set 'forced_threat_level' to [GLOB.dynamic_forced_threat_level].")
+ message_admins("[key_name(usr)] set 'forced_threat_level' to [GLOB.dynamic_forced_threat_level].")
+ dynamic_mode_options(usr)
else if(href_list["c_mode2"])
if(!check_rights(R_ADMIN|R_SERVER))
diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm
index 8e29b38fe1..0fca957ffe 100644
--- a/code/modules/antagonists/abductor/abductor.dm
+++ b/code/modules/antagonists/abductor/abductor.dm
@@ -56,6 +56,7 @@
/datum/antagonist/abductor/greet()
to_chat(owner.current, "You are the [owner.special_role]! ")
to_chat(owner.current, "With the help of your teammate, kidnap and experiment on station crew members! ")
+ to_chat(owner.current, "Try not to disturb the habitat, it could lead to dead specimens. ")
to_chat(owner.current, "[greet_text] ")
owner.announce_objectives()
diff --git a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm
index 819dbafd6a..98164de099 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm
@@ -1,5 +1,5 @@
/datum/surgery/organ_extraction
- name = "experimental dissection"
+ name = "experimental organ replacement"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/extract_organ, /datum/surgery_step/gland_insert)
possible_locs = list(BODY_ZONE_CHEST)
ignore_clothes = 1
diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm
index 8a3ff2186a..72edb18020 100644
--- a/code/modules/antagonists/abductor/equipment/gland.dm
+++ b/code/modules/antagonists/abductor/equipment/gland.dm
@@ -167,7 +167,7 @@
/obj/item/organ/heart/gland/pop/activate()
to_chat(owner, "You feel unlike yourself. ")
randomize_human(owner)
- var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/moth, /datum/species/fly))
+ var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly))
owner.set_species(species)
/obj/item/organ/heart/gland/ventcrawling
diff --git a/code/modules/antagonists/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm
index bdbd38b92d..081b1181dc 100644
--- a/code/modules/antagonists/changeling/powers/strained_muscles.dm
+++ b/code/modules/antagonists/changeling/powers/strained_muscles.dm
@@ -34,6 +34,7 @@
return TRUE
/obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user)
+ var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
while(active)
ADD_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
if(user.stat != CONSCIOUS || user.staminaloss >= 90)
@@ -41,6 +42,7 @@
to_chat(user, "Our muscles relax without the energy to strengthen them. ")
user.Knockdown(40)
REMOVE_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
+ changeling.chem_recharge_slowdown -= 0.5
break
stacks++
diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
index 56b36d13e6..f735d6bb29 100644
--- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
@@ -132,9 +132,9 @@
continue
if(isliving(M.current) && M.current.stat != DEAD)
var/turf/t_turf = isAI(M.current) ? get_step(get_step(src, NORTH),NORTH) : get_turf(src) // AI too fat, must make sure it always ends up a 2 tiles north instead of on the ark.
- do_teleport(M, t_turf, channel = TELEPORT_CHANNEL_CULT, forced = TRUE)
- M.current.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
- M.current.clear_fullscreen("flash", 5)
+ do_teleport(M.current, t_turf, channel = TELEPORT_CHANNEL_CULT, forced = TRUE)
+ M.current.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
+ M.current.clear_fullscreen("flash", 5)
playsound(src, 'sound/magic/clockwork/invoke_general.ogg', 50, FALSE)
recalls_remaining--
recalling = FALSE
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 1dbae4ca98..fc4d945d51 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -4,6 +4,7 @@
desc = "Prepare blood magic by carving runes into your flesh. This rite is most effective with an empowering rune "
var/list/spells = list()
var/channeling = FALSE
+ var/holy_dispel = FALSE
/datum/action/innate/cult/blood_magic/Grant()
..()
@@ -33,6 +34,9 @@
B.button.moved = B.button.screen_loc
/datum/action/innate/cult/blood_magic/Activate()
+ if(holy_dispel)
+ to_chat(owner, "Holy water currently scours your body, nullifying the power of the rites! ")
+ return
var/rune = FALSE
var/limit = RUNELESS_MAX_BLOODCHARGE
for(var/obj/effect/rune/empower/R in range(1, owner))
@@ -64,7 +68,7 @@
qdel(nullify_spell)
return
BS = possible_spells[entered_spell_name]
- if(QDELETED(src) || owner.incapacitated() || !BS || (rune && !(locate(/obj/effect/rune/empower) in range(1, owner))) || (spells.len >= limit))
+ if(QDELETED(src) || owner.incapacitated() || !BS || holy_dispel || (rune && !(locate(/obj/effect/rune/empower) in range(1, owner))) || (spells.len >= limit))
return
to_chat(owner,"You begin to carve unnatural symbols into your flesh! ")
SEND_SOUND(owner, sound('sound/weapons/slice.ogg',0,1,10))
@@ -73,7 +77,7 @@
else
to_chat(owner, "You are already invoking blood magic!")
return
- if(do_after(owner, 100 - rune*60, target = owner))
+ if(do_after(owner, 100 - rune*60, target = owner) && !holy_dispel)
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
H.bleed(40 - rune*32)
@@ -644,6 +648,11 @@
desc = "A spell that will absorb blood from anything you touch. Touching cultists and constructs can heal them.Clicking the hand will potentially let you focus the spell into something stronger. "
color = "#7D1717"
+/obj/item/melee/blood_magic/manipulator/examine(mob/user)
+ . = ..()
+ if(iscultist(user))
+ to_chat(user, "The [name] currently has [uses] blood charges left. ")
+
/obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity)
if(proximity)
if(ishuman(target))
@@ -678,9 +687,9 @@
if(ratio>1)
ratio = 1
uses -= round(overall_damage)
- H.visible_message("[H] is fully healed by [H==user ? "[H.p_their()]":"[H]'s"]'s blood magic! ")
+ H.visible_message("[H] is fully healed by [H==user ? "[H.p_their()]":"[user]'s"] blood magic! ")
else
- H.visible_message("[H] is partially healed by [H==user ? "[H.p_their()]":"[H]'s"] blood magic. ")
+ H.visible_message("[H] is partially healed by [H==user ? "[H.p_their()]":"[user]'s"] blood magic. ")
uses = 0
ratio *= -1
H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0)
@@ -762,7 +771,7 @@
switch(choice)
if("Blood Spear (150)")
if(uses < 150)
- to_chat(user, "You need 200 charges to perform this rite. ")
+ to_chat(user, "You need 150 charges to perform this rite. ")
else
uses -= 150
var/turf/T = get_turf(user)
@@ -778,7 +787,7 @@
"A [rite.name] materializes at your feet. ")
if("Blood Bolt Barrage (300)")
if(uses < 300)
- to_chat(user, "You need 400 charges to perform this rite. ")
+ to_chat(user, "You need 300 charges to perform this rite. ")
else
var/obj/rite = new /obj/item/gun/ballistic/shotgun/boltaction/enchanted/arcane_barrage/blood()
uses -= 300
@@ -790,7 +799,7 @@
qdel(rite)
if("Blood Beam (500)")
if(uses < 500)
- to_chat(user, "You need 600 charges to perform this rite. ")
+ to_chat(user, "You need 500 charges to perform this rite. ")
else
var/obj/rite = new /obj/item/blood_beam()
uses -= 500
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index 25e3663c0b..10759afcd0 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -666,6 +666,7 @@
righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
slot_flags = 0
force = 17
+ force_unwielded = 17
force_wielded = 24
throwforce = 40
throw_speed = 2
diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm
index 499d7a861e..f56c6f7fb5 100644
--- a/code/modules/antagonists/cult/cult_structures.dm
+++ b/code/modules/antagonists/cult/cult_structures.dm
@@ -73,6 +73,10 @@
animate(src, color = previouscolor, time = 8)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
+/obj/structure/destructible/cult/proc/check_menu(mob/living/user)
+ if(!user || user.incapacitated() || !iscultist(user) || !anchored || cooldowntime > world.time)
+ return FALSE
+ return TRUE
/obj/structure/destructible/cult/talisman
name = "altar"
@@ -80,9 +84,18 @@
icon_state = "talismanaltar"
break_message = "The altar shatters, leaving only the wailing of the damned! "
-/obj/structure/destructible/cult/talisman/attack_hand(mob/living/user)
+ var/static/image/radial_whetstone = image(icon = 'icons/obj/kitchen.dmi', icon_state = "cult_sharpener")
+ var/static/image/radial_shell = image(icon = 'icons/obj/wizard.dmi', icon_state = "construct-cult")
+ var/static/image/radial_unholy_water = image(icon = 'icons/obj/chemical.dmi', icon_state = "holyflask")
+
+/obj/structure/destructible/cult/talisman/Initialize()
. = ..()
- if(.)
+ radial_unholy_water.color = "#333333"
+
+/obj/structure/destructible/cult/talisman/ui_interact(mob/user)
+ . = ..()
+
+ if(!user.canUseTopic(src, TRUE))
return
if(!iscultist(user))
to_chat(user, "You're pretty sure you know exactly what this is used for and you can't seem to touch it. ")
@@ -91,22 +104,27 @@
to_chat(user, "You need to anchor [src] to the floor with your dagger first. ")
return
if(cooldowntime > world.time)
- to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)]. ")
+ to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)]. ")
return
- var/choice = alert(user,"You study the schematics etched into the altar...",,"Eldritch Whetstone","Construct Shell","Flask of Unholy Water")
- var/list/pickedtype = list()
+
+ to_chat(user, "You study the schematics etched into the altar... ")
+
+ var/list/options = list("Eldritch Whetstone" = radial_whetstone, "Construct Shell" = radial_shell, "Flask of Unholy Water" = radial_unholy_water)
+ var/choice = show_radial_menu(user, src, options, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
+
+ var/reward
switch(choice)
if("Eldritch Whetstone")
- pickedtype += /obj/item/sharpener/cult
+ reward = /obj/item/sharpener/cult
if("Construct Shell")
- pickedtype += /obj/structure/constructshell
+ reward = /obj/structure/constructshell
if("Flask of Unholy Water")
- pickedtype += /obj/item/reagent_containers/glass/beaker/unholywater
- if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
+ reward = /obj/item/reagent_containers/glass/beaker/unholywater
+
+ if(!QDELETED(src) && reward && check_menu(user))
cooldowntime = world.time + 2400
- for(var/N in pickedtype)
- new N(get_turf(src))
- to_chat(user, "You kneel before the altar and your faith is rewarded with the [choice]! ")
+ new reward(get_turf(src))
+ to_chat(user, "You kneel before the altar and your faith is rewarded with the [choice]! ")
/obj/structure/destructible/cult/forge
name = "daemon forge"
@@ -116,9 +134,14 @@
light_color = LIGHT_COLOR_LAVA
break_message = "The force breaks apart into shards with a howling scream! "
-/obj/structure/destructible/cult/forge/attack_hand(mob/living/user)
+ var/static/image/radial_flagellant = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "cultrobes")
+ var/static/image/radial_shielded = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "cult_armor")
+ var/static/image/radial_mirror = image(icon = 'icons/obj/items_and_weapons.dmi', icon_state = "mirror_shield")
+
+/obj/structure/destructible/cult/forge/ui_interact(mob/user)
. = ..()
- if(.)
+
+ if(!user.canUseTopic(src, TRUE))
return
if(!iscultist(user))
to_chat(user, "The heat radiating from [src] pushes you back. ")
@@ -129,24 +152,26 @@
if(cooldowntime > world.time)
to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)]. ")
return
- var/choice
- if(user.mind.has_antag_datum(/datum/antagonist/cult/master))
- choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Mirror Shield")
- else
- choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Mirror Shield")
- var/list/pickedtype = list()
+
+ to_chat(user, "You study the schematics etched into the forge... ")
+
+
+ var/list/options = list("Shielded Robe" = radial_shielded, "Flagellant's Robe" = radial_flagellant, "Mirror Shield" = radial_mirror)
+ var/choice = show_radial_menu(user, src, options, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
+
+ var/reward
switch(choice)
if("Shielded Robe")
- pickedtype += /obj/item/clothing/suit/hooded/cultrobes/cult_shield
+ reward = /obj/item/clothing/suit/hooded/cultrobes/cult_shield
if("Flagellant's Robe")
- pickedtype += /obj/item/clothing/suit/hooded/cultrobes/berserker
+ reward = /obj/item/clothing/suit/hooded/cultrobes/berserker
if("Mirror Shield")
- pickedtype += /obj/item/shield/mirror
- if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
+ reward = /obj/item/shield/mirror
+
+ if(!QDELETED(src) && reward && check_menu(user))
cooldowntime = world.time + 2400
- for(var/N in pickedtype)
- new N(get_turf(src))
- to_chat(user, "You work the forge as dark knowledge guides your hands, creating the [choice]! ")
+ new reward(get_turf(src))
+ to_chat(user, "You work the forge as dark knowledge guides your hands, creating the [choice]! ")
@@ -234,9 +259,14 @@
light_color = LIGHT_COLOR_FIRE
break_message = "The books and tomes of the archives burn into ash as the desk shatters! "
-/obj/structure/destructible/cult/tome/attack_hand(mob/living/user)
+ var/static/image/radial_blindfold = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "blindfold")
+ var/static/image/radial_curse = image(icon = 'icons/obj/cult.dmi', icon_state ="shuttlecurse")
+ var/static/image/radial_veilwalker = image(icon = 'icons/obj/cult.dmi', icon_state ="shifter")
+
+/obj/structure/destructible/cult/tome/ui_interact(mob/user)
. = ..()
- if(.)
+
+ if(!user.canUseTopic(src, TRUE))
return
if(!iscultist(user))
to_chat(user, "These books won't open and it hurts to even try and read the covers. ")
@@ -247,21 +277,27 @@
if(cooldowntime > world.time)
to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)]. ")
return
- var/choice = alert(user,"You flip through the black pages of the archives...",,"Zealot's Blindfold","Shuttle Curse","Veil Walker Set")
- var/list/pickedtype = list()
+
+ to_chat(user, "You flip through the black pages of the archives... ")
+
+ var/list/options = list("Zealot's Blindfold" = radial_blindfold, "Shuttle Curse" = radial_curse, "Veil Walker Set" = radial_veilwalker)
+ var/choice = show_radial_menu(user, src, options, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
+
+ var/reward
switch(choice)
if("Zealot's Blindfold")
- pickedtype += /obj/item/clothing/glasses/hud/health/night/cultblind
+ reward = /obj/item/clothing/glasses/hud/health/night/cultblind
if("Shuttle Curse")
- pickedtype += /obj/item/shuttle_curse
+ reward = /obj/item/shuttle_curse
if("Veil Walker Set")
- pickedtype += /obj/item/cult_shift
- pickedtype += /obj/item/flashlight/flare/culttorch
- if(src && !QDELETED(src) && anchored && pickedtype.len && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
+ reward = /obj/effect/spawner/bundle/veil_walker
+ if(!QDELETED(src) && reward && check_menu(user))
cooldowntime = world.time + 2400
- for(var/N in pickedtype)
- new N(get_turf(src))
- to_chat(user, "You summon the [choice] from the archives! ")
+ new reward(get_turf(src))
+ to_chat(user, "You summon the [choice] from the archives! ")
+
+/obj/effect/spawner/bundle/veil_walker
+ items = list(/obj/item/cult_shift, /obj/item/flashlight/flare/culttorch)
/obj/effect/gateway
name = "gateway"
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 9330e9b153..bfc4955f68 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -61,8 +61,8 @@ Runes can either be invoked by one's self or with many different cultists. Each
if(do_after(user, 15, target = src))
to_chat(user, "You carefully erase the [lowertext(cultist_name)] rune. ")
qdel(src)
- else if(istype(I, /obj/item/nullrod))
- user.say("BEGONE FOUL MAGIKS!!", forced = "nullrod")
+ else if(istype(I, /obj/item/storage/book/bible) || istype(I, /obj/item/nullrod))
+ user.say("BEGONE FOUL MAGICKS!!", forced = "bible")
to_chat(user, "You disrupt the magic of [src] with [I]. ")
qdel(src)
@@ -185,9 +185,6 @@ structure_check() searches for nearby cultist structures required for the invoca
color = RUNE_COLOR_OFFER
req_cultists = 1
rune_in_use = FALSE
- var/mob/living/currentconversionman
- var/conversiontimeout
- var/conversionresult
/obj/effect/rune/convert/do_invoke_glow()
return
@@ -233,37 +230,18 @@ structure_check() searches for nearby cultist structures required for the invoca
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 5)
Cult_team.check_size() // Triggers the eye glow or aura effects if the cult has grown large enough relative to the crew
rune_in_use = FALSE
+
/obj/effect/rune/convert/proc/do_convert(mob/living/convertee, list/invokers)
if(invokers.len < 2)
for(var/M in invokers)
- to_chat(M, "You need at least two invokers to convert [convertee]! ")
+ to_chat(M, "You need at least two invokers to convert [convertee]! ")
log_game("Offer rune failed - tried conversion with one invoker")
return 0
- if(convertee.anti_magic_check(TRUE, TRUE))
+ if(convertee.anti_magic_check(TRUE, TRUE, FALSE, 0)) //Not chargecost because it can be spammed
for(var/M in invokers)
to_chat(M, "Something is shielding [convertee]'s mind! ")
log_game("Offer rune failed - convertee had anti-magic")
return 0
- to_chat(convertee, "The world goes red. All at once you are aware of an evil, eldritch truth taking roots into your mind.\n\
- Click here to become a follower of Nar'sie , or suffer a fate worse than death. ")
- INVOKE_ASYNC(src, .proc/optinalert, convertee)
- currentconversionman = convertee
- conversiontimeout = world.time + (14 SECONDS)
- convertee.Stun(140)
- ADD_TRAIT(convertee, TRAIT_MUTE, "conversionrune")
- flash_color(convertee, list("#960000", "#960000", "#960000", rgb(0,0,0)), 50)
- conversionresult = FALSE
- while(world.time < conversiontimeout && convertee && !conversionresult)
- stoplag(1)
- currentconversionman = null
- if(!convertee)
- return FALSE
- REMOVE_TRAIT(convertee, TRAIT_MUTE, "conversionrune")
- if(get_turf(convertee) != get_turf(src))
- return FALSE
- if(!conversionresult)
- do_sacrifice(convertee, invokers, TRUE)
- return FALSE
var/brutedamage = convertee.getBruteLoss()
var/burndamage = convertee.getFireLoss()
if(brutedamage || burndamage)
@@ -275,6 +253,8 @@ structure_check() searches for nearby cultist structures required for the invoca
SSticker.mode.add_cultist(convertee.mind, 1)
new /obj/item/melee/cultblade/dagger(get_turf(src))
convertee.mind.special_role = ROLE_CULTIST
+ to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \
+ and something evil takes root. ")
to_chat(convertee, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\
")
if(ishuman(convertee))
@@ -284,18 +264,7 @@ structure_check() searches for nearby cultist structures required for the invoca
H.cultslurring = 0
return 1
-/obj/effect/rune/convert/proc/optinalert(mob/living/convertee)
- var/alert = alert(convertee, "Will you embrace the Geometer of Blood or perish in futile resistance?", "Choose your own fate", "Join the Blood Cult", "Suffer a horrible demise")
- if(src && alert == "Join the Blood Cult")
- signmeup(convertee)
-
-/obj/effect/rune/convert/proc/signmeup(mob/living/convertee)
- if(currentconversionman == convertee)
- conversionresult = TRUE
- else
- to_chat(convertee, "Your fate has already been set in stone. ")
-
-/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers, force_a_sac)
+/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers)
var/mob/living/first_invoker = invokers[1]
if(!first_invoker)
return FALSE
@@ -305,7 +274,7 @@ structure_check() searches for nearby cultist structures required for the invoca
var/big_sac = FALSE
- if(!force_a_sac && (((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && invokers.len < 3)
+ if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && invokers.len < 3)
for(var/M in invokers)
to_chat(M, "[sacrificial] is too greatly linked to the world! You need three acolytes! ")
log_game("Offer rune failed - not enough acolytes and target is living or sac target")
@@ -345,10 +314,6 @@ structure_check() searches for nearby cultist structures required for the invoca
sacrificial.gib()
return TRUE
-/obj/effect/rune/convert/Topic(href, href_list)
- if(href_list["signmeup"])
- signmeup(usr)
-
/obj/effect/rune/empower
cultist_name = "Empower"
cultist_desc = "allows cultists to prepare greater amounts of blood magic at far less of a cost."
diff --git a/code/modules/cargo/bounties/reagent.dm b/code/modules/cargo/bounties/reagent.dm
index 3f458e2b12..9f1c76db3d 100644
--- a/code/modules/cargo/bounties/reagent.dm
+++ b/code/modules/cargo/bounties/reagent.dm
@@ -109,10 +109,9 @@ datum/bounty/reagent/complex_drink/New()
/datum/reagent/consumable/ethanol/patron,\
/datum/reagent/consumable/ethanol/quadruple_sec,\
/datum/reagent/consumable/ethanol/quintuple_sec,\
- /datum/reagent/consumable/bluecherryshake,\
/datum/reagent/consumable/doctor_delight,\
/datum/reagent/consumable/ethanol/silencer)
-
+
var/reagent_type = pick(possible_reagents)
wanted_reagent = new reagent_type
name = wanted_reagent.name
diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index 7216b73af6..a54584d6cc 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -75,3 +75,8 @@
var/datum/player_details/player_details //these persist between logins/logouts during the same round.
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen.
+
+ var/client_keysend_amount = 0
+ var/next_keysend_reset = 0
+ var/next_keysend_trip_reset = 0
+ var/keysend_tripped = FALSE
\ No newline at end of file
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 06f23574e1..5442fcb932 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -817,6 +817,10 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
var/file = GLOB.vox_sounds[name]
Export("##action=load_rsc", file)
stoplag()
+ for (var/name in GLOB.vox_sounds_male)
+ var/file = GLOB.vox_sounds_male[name]
+ Export("##action=load_rsc", file)
+ stoplag()
#endif
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 0cdb7fddbb..4b924a6c52 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -85,6 +85,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/facial_hair_color = "000" //Facial hair color
var/skin_tone = "caucasian1" //Skin color
var/eye_color = "000" //Eye color
+ var/horn_color = "85615a" //Horn color
var/datum/species/pref_species = new /datum/species/human() //Mutant race
var/list/features = list("mcolor" = "FFF",
"tail_lizard" = "Smooth",
@@ -96,8 +97,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"frills" = "None",
"spines" = "None",
"body_markings" = "None",
- "legs" = "Normal Legs",
- "moth_wings" = "Plain",
+ "legs" = "Plantigrade",
+ "insect_wings" = "Plain",
+ "insect_fluff" = "None",
"mcolor2" = "FFF",
"mcolor3" = "FFF",
"mam_body_markings" = "Plain",
@@ -156,7 +158,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"womb_fluid" = "femcum",
"ipc_screen" = "Sunburst",
"ipc_antenna" = "None",
- "flavor_text" = ""
+ "flavor_text" = "",
+ "meat_type" = "Mammalian"
)
var/list/custom_names = list()
@@ -171,18 +174,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/list/all_quirks = list()
var/list/character_quirks = list()
- //Jobs, uses bitflags
- var/job_civilian_high = 0
- var/job_civilian_med = 0
- var/job_civilian_low = 0
-
- var/job_medsci_high = 0
- var/job_medsci_med = 0
- var/job_medsci_low = 0
-
- var/job_engsec_high = 0
- var/job_engsec_med = 0
- var/job_engsec_low = 0
+ //Job preferences 2.0 - indexed by job title , no key or value implies never
+ var/list/job_preferences = list()
// Want randomjob if preferences already filled - Donkie
var/joblessrole = BERANDOMJOB //defaults to 1 for fewer assistants
@@ -240,7 +233,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
return
#define APPEARANCE_CATEGORY_COLUMN " "
-#define MAX_MUTANT_ROWS 4
+#define MAX_MUTANT_ROWS 5
/datum/preferences/proc/ShowChoices(mob/user)
if(!user || !user.client)
@@ -350,9 +343,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "[TextPreview(features["flavor_text"])]... "
dat += "Body "
dat += "Gender: [gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))] "
- dat += "Species: [pref_species.id] "
+ dat += "Species: [pref_species.name] "
dat += "Custom Species Name: [custom_species ? custom_species : "None"] "
- dat += "Random Body "
+ dat += "Random Body: Randomize! "
dat += "Always Random Body: [be_random_body ? "Yes" : "No"] "
dat += "Cycle background: [bgstate] "
@@ -447,6 +440,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "[features["tail_human"]] "
+ mutant_category++
+ if(mutant_category >= MAX_MUTANT_ROWS)
+ dat += " "
+ mutant_category = 0
+
+ if("meat_type" in pref_species.default_features)
+ if(!mutant_category)
+ dat += APPEARANCE_CATEGORY_COLUMN
+
+ dat += "Meat Type "
+
+ dat += "[features["meat_type"]] "
+
mutant_category++
if(mutant_category >= MAX_MUTANT_ROWS)
dat += ""
@@ -470,6 +476,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Horns "
dat += "[features["horns"]] "
+ dat += " Change "
+
mutant_category++
if(mutant_category >= MAX_MUTANT_ROWS)
@@ -536,6 +544,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(mutant_category >= MAX_MUTANT_ROWS)
dat += ""
mutant_category = 0
+
if("ears" in pref_species.default_features)
if(!mutant_category)
dat += APPEARANCE_CATEGORY_COLUMN
@@ -548,6 +557,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(mutant_category >= MAX_MUTANT_ROWS)
dat += ""
mutant_category = 0
+
if("mam_snouts" in pref_species.default_features)
if(!mutant_category)
dat += APPEARANCE_CATEGORY_COLUMN
@@ -572,14 +582,24 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(mutant_category >= MAX_MUTANT_ROWS)
dat += ""
mutant_category = 0
- if("moth_wings" in pref_species.default_features)
+ if("insect_wings" in pref_species.default_features)
if(!mutant_category)
dat += APPEARANCE_CATEGORY_COLUMN
- dat += "Moth wings "
+ dat += "Insect wings "
- dat += "[features["moth_wings"]] "
+ dat += "[features["insect_wings"]] "
+ mutant_category++
+ if(mutant_category >= MAX_MUTANT_ROWS)
+ dat += ""
+ mutant_category = 0
+ if("insect_fluff" in pref_species.default_features)
+ if(!mutant_category)
+ dat += APPEARANCE_CATEGORY_COLUMN
+ dat += "Insect Fluff "
+
+ dat += "[features["insect_fluff"]] "
mutant_category++
if(mutant_category >= MAX_MUTANT_ROWS)
dat += ""
@@ -680,13 +700,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Clothing & Equipment "
dat += "Underwear: [underwear] "
if(UNDIE_COLORABLE(GLOB.underwear_list[underwear]))
- dat += "Underwear Color: [undie_color] "
+ dat += "Underwear Color: Change "
dat += "Undershirt: [undershirt] "
if(UNDIE_COLORABLE(GLOB.undershirt_list[undershirt]))
- dat += "Undershirt Color: [shirt_color] "
+ dat += "Undershirt Color: Change "
dat += "Socks: [socks] "
if(UNDIE_COLORABLE(GLOB.socks_list[socks]))
- dat += "Socks Color: [socks_color] "
+ dat += "Socks Color: Change "
dat += "Backpack: [backbag] "
dat += "Jumpsuit: [jumpsuit_style] "
dat += "Uplink Location: [uplink_spawn_loc] "
@@ -990,9 +1010,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
//The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows.
var/datum/job/lastJob
- var/datum/job/overflow = SSjob.GetJob(SSjob.overflow_role)
-
- for(var/datum/job/job in SSjob.occupations)
+ for(var/datum/job/job in sortList(SSjob.occupations, /proc/cmp_job_display_asc))
index += 1
if((index >= limit) || (job.title in splitJobs))
@@ -1009,7 +1027,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/rank = job.title
lastJob = job
if(jobban_isbanned(user, rank))
- HTML += "[rank] BANNED "
+ HTML += "[rank] BANNED "
continue
var/required_playtime_remaining = job.required_playtime_remaining(user.client)
if(required_playtime_remaining)
@@ -1019,7 +1037,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/available_in_days = job.available_in_days(user.client)
HTML += "[rank] \[IN [(available_in_days)] DAYS\] "
continue
- if((job_civilian_low & overflow.flag) && (rank != SSjob.overflow_role) && !jobban_isbanned(user, SSjob.overflow_role))
+ if(!user.client.prefs.pref_species.qualifies_for_rank(rank, user.client.prefs.features))
+ if(user.client.prefs.pref_species.id == "human")
+ HTML += "[rank] \[MUTANT\] "
+ else
+ HTML += "[rank] \[NON-HUMAN\] "
+ continue
+ if((job_preferences["[SSjob.overflow_role]"] == JP_LOW) && (rank != SSjob.overflow_role) && !jobban_isbanned(user, SSjob.overflow_role))
HTML += "[rank] "
continue
if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs
@@ -1034,32 +1058,32 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/prefUpperLevel = -1 // level to assign on left click
var/prefLowerLevel = -1 // level to assign on right click
- if(GetJobDepartment(job, 1) & job.flag)
- prefLevelLabel = "High"
- prefLevelColor = "slateblue"
- prefUpperLevel = 4
- prefLowerLevel = 2
- else if(GetJobDepartment(job, 2) & job.flag)
- prefLevelLabel = "Medium"
- prefLevelColor = "green"
- prefUpperLevel = 1
- prefLowerLevel = 3
- else if(GetJobDepartment(job, 3) & job.flag)
- prefLevelLabel = "Low"
- prefLevelColor = "orange"
- prefUpperLevel = 2
- prefLowerLevel = 4
- else
- prefLevelLabel = "NEVER"
- prefLevelColor = "red"
- prefUpperLevel = 3
- prefLowerLevel = 1
-
+ switch(job_preferences["[job.title]"])
+ if(JP_HIGH)
+ prefLevelLabel = "High"
+ prefLevelColor = "slateblue"
+ prefUpperLevel = 4
+ prefLowerLevel = 2
+ if(JP_MEDIUM)
+ prefLevelLabel = "Medium"
+ prefLevelColor = "green"
+ prefUpperLevel = 1
+ prefLowerLevel = 3
+ if(JP_LOW)
+ prefLevelLabel = "Low"
+ prefLevelColor = "orange"
+ prefUpperLevel = 2
+ prefLowerLevel = 4
+ else
+ prefLevelLabel = "NEVER"
+ prefLevelColor = "red"
+ prefUpperLevel = 3
+ prefLowerLevel = 1
HTML += ""
if(rank == SSjob.overflow_role)//Overflow is special
- if(job_civilian_low & overflow.flag)
+ if(job_preferences["[SSjob.overflow_role]"] == JP_LOW)
HTML += "Yes "
else
HTML += "No "
@@ -1090,61 +1114,17 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/datum/preferences/proc/SetJobPreferenceLevel(datum/job/job, level)
if (!job)
- return 0
+ return FALSE
- if (level == 1) // to high
- // remove any other job(s) set to high
- job_civilian_med |= job_civilian_high
- job_engsec_med |= job_engsec_high
- job_medsci_med |= job_medsci_high
- job_civilian_high = 0
- job_engsec_high = 0
- job_medsci_high = 0
+ if (level == JP_HIGH) // to high
+ //Set all other high to medium
+ for(var/j in job_preferences)
+ if(job_preferences["[j]"] == JP_HIGH)
+ job_preferences["[j]"] = JP_MEDIUM
+ //technically break here
- if (job.department_flag == CIVILIAN)
- job_civilian_low &= ~job.flag
- job_civilian_med &= ~job.flag
- job_civilian_high &= ~job.flag
-
- switch(level)
- if (1)
- job_civilian_high |= job.flag
- if (2)
- job_civilian_med |= job.flag
- if (3)
- job_civilian_low |= job.flag
-
- return 1
- else if (job.department_flag == ENGSEC)
- job_engsec_low &= ~job.flag
- job_engsec_med &= ~job.flag
- job_engsec_high &= ~job.flag
-
- switch(level)
- if (1)
- job_engsec_high |= job.flag
- if (2)
- job_engsec_med |= job.flag
- if (3)
- job_engsec_low |= job.flag
-
- return 1
- else if (job.department_flag == MEDSCI)
- job_medsci_low &= ~job.flag
- job_medsci_med &= ~job.flag
- job_medsci_high &= ~job.flag
-
- switch(level)
- if (1)
- job_medsci_high |= job.flag
- if (2)
- job_medsci_med |= job.flag
- if (3)
- job_medsci_low |= job.flag
-
- return 1
-
- return 0
+ job_preferences["[job.title]"] = level
+ return TRUE
/datum/preferences/proc/UpdateJobPreference(mob/user, role, desiredLvl)
if(!SSjob || SSjob.occupations.len <= 0)
@@ -1161,64 +1141,29 @@ GLOBAL_LIST_EMPTY(preferences_datums)
ShowChoices(user)
return
- if(role == SSjob.overflow_role)
- if(job_civilian_low & job.flag)
- job_civilian_low &= ~job.flag
- else
- job_civilian_low |= job.flag
- SetChoices(user)
- return 1
+ var/jpval = null
+ switch(desiredLvl)
+ if(3)
+ jpval = JP_LOW
+ if(2)
+ jpval = JP_MEDIUM
+ if(1)
+ jpval = JP_HIGH
- SetJobPreferenceLevel(job, desiredLvl)
+ if(role == SSjob.overflow_role)
+ if(job_preferences["[job.title]"] == JP_LOW)
+ jpval = null
+ else
+ jpval = JP_LOW
+
+ SetJobPreferenceLevel(job, jpval)
SetChoices(user)
return 1
/datum/preferences/proc/ResetJobs()
-
- job_civilian_high = 0
- job_civilian_med = 0
- job_civilian_low = 0
-
- job_medsci_high = 0
- job_medsci_med = 0
- job_medsci_low = 0
-
- job_engsec_high = 0
- job_engsec_med = 0
- job_engsec_low = 0
-
-
-/datum/preferences/proc/GetJobDepartment(datum/job/job, level)
- if(!job || !level)
- return 0
- switch(job.department_flag)
- if(CIVILIAN)
- switch(level)
- if(1)
- return job_civilian_high
- if(2)
- return job_civilian_med
- if(3)
- return job_civilian_low
- if(MEDSCI)
- switch(level)
- if(1)
- return job_medsci_high
- if(2)
- return job_medsci_med
- if(3)
- return job_medsci_low
- if(ENGSEC)
- switch(level)
- if(1)
- return job_engsec_high
- if(2)
- return job_engsec_med
- if(3)
- return job_engsec_low
- return 0
+ job_preferences = list()
/datum/preferences/proc/SetQuirks(mob/user)
if(!SSquirks)
@@ -1560,9 +1505,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
eye_color = sanitize_hexcolor(new_eyes)
if("species")
- var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_races
+ var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_race_names
if(result)
- var/newtype = GLOB.species_list[result]
+ var/newtype = GLOB.species_list[GLOB.roundstart_race_names[result]]
pref_species = new newtype()
//let's ensure that no weird shit happens on species swapping.
custom_species = null
@@ -1690,6 +1635,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["tail_human"] = "None"
features["tail_lizard"] = "None"
+ if("meats")
+ var/new_meat
+ new_meat = input(user, "Choose your character's meat type:", "Character Preference") as null|anything in GLOB.meat_types
+ if(new_meat)
+ features["meat_type"] = new_meat
+
if("snout")
var/list/snowflake_snouts_list = list()
for(var/path in GLOB.snouts_list)
@@ -1725,6 +1676,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(new_horns)
features["horns"] = new_horns
+ if("horns_color")
+ var/new_horn_color = input(user, "Choose your character's horn colour:", "Character Preference","#"+horn_color) as color|null
+ if(new_horn_color)
+ horn_color = sanitize_hexcolor(new_horn_color)
+
if("wings")
var/new_wings
new_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.r_wings_list
@@ -1759,11 +1715,17 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["legs"] = new_legs
update_preview_icon()
- if("moth_wings")
- var/new_moth_wings
- new_moth_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.moth_wings_list
- if(new_moth_wings)
- features["moth_wings"] = new_moth_wings
+ if("insect_wings")
+ var/new_insect_wings
+ new_insect_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.insect_wings_list
+ if(new_insect_wings)
+ features["insect_wings"] = new_insect_wings
+
+ if("insect_fluffs")
+ var/new_insect_fluff
+ new_insect_fluff = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.insect_fluffs_list
+ if(new_insect_fluff)
+ features["insect_fluff"] = new_insect_fluff
if("s_tone")
var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in GLOB.skin_tones
@@ -2281,6 +2243,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
organ_eyes.old_eye_color = eye_color
character.hair_color = hair_color
character.facial_hair_color = facial_hair_color
+ character.horn_color = horn_color
character.skin_tone = skin_tone
character.hair_style = hair_style
@@ -2321,7 +2284,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("xenotail" in pref_species.default_features)
character.dna.species.mutant_bodyparts |= "xenotail"
- if(("legs" in character.dna.species.mutant_bodyparts) && character.dna.features["legs"] == "Digitigrade Legs")
+ if("meat_type" in pref_species.default_features)
+ character.type_of_meat = GLOB.meat_types[features["meat_type"]]
+
+ if(("legs" in character.dna.species.mutant_bodyparts) && (character.dna.features["legs"] == "Digitigrade" || character.dna.features["legs"] == "Avian"))
pref_species.species_traits |= DIGITIGRADE
else
pref_species.species_traits -= DIGITIGRADE
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 53509b6b64..d22dfc3f64 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -5,7 +5,7 @@
// You do not need to raise this if you are adding new values that have sane defaults.
// Only raise this value when changing the meaning/format/name/layout of an existing value
// where you would want the updater procs below to run
-#define SAVEFILE_VERSION_MAX 21
+#define SAVEFILE_VERSION_MAX 24
/*
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
@@ -49,7 +49,67 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
pda_style = "mono"
if(current_version < 20)
pda_color = "#808000"
- if(current_version < 21 && S["feature_exhibitionist"])
+ if((current_version < 21) && features["meat_type"] && (features["meat_type"] == null))
+ features["meat_type"] = "Mammalian"
+ if(current_version < 22)
+
+ job_preferences = list() //It loaded null from nonexistant savefile field.
+
+ var/job_civilian_high = 0
+ var/job_civilian_med = 0
+ var/job_civilian_low = 0
+
+ var/job_medsci_high = 0
+ var/job_medsci_med = 0
+ var/job_medsci_low = 0
+
+ var/job_engsec_high = 0
+ var/job_engsec_med = 0
+ var/job_engsec_low = 0
+
+ S["job_civilian_high"] >> job_civilian_high
+ S["job_civilian_med"] >> job_civilian_med
+ S["job_civilian_low"] >> job_civilian_low
+ S["job_medsci_high"] >> job_medsci_high
+ S["job_medsci_med"] >> job_medsci_med
+ S["job_medsci_low"] >> job_medsci_low
+ S["job_engsec_high"] >> job_engsec_high
+ S["job_engsec_med"] >> job_engsec_med
+ S["job_engsec_low"] >> job_engsec_low
+
+ //Can't use SSjob here since this happens right away on login
+ for(var/job in subtypesof(/datum/job))
+ var/datum/job/J = job
+ var/new_value
+ var/fval = initial(J.flag)
+ switch(initial(J.department_flag))
+ if(CIVILIAN)
+ if(job_civilian_high & fval)
+ new_value = JP_HIGH
+ else if(job_civilian_med & fval)
+ new_value = JP_MEDIUM
+ else if(job_civilian_low & fval)
+ new_value = JP_LOW
+ if(MEDSCI)
+ if(job_medsci_high & fval)
+ new_value = JP_HIGH
+ else if(job_medsci_med & fval)
+ new_value = JP_MEDIUM
+ else if(job_medsci_low & fval)
+ new_value = JP_LOW
+ if(ENGSEC)
+ if(job_engsec_high & fval)
+ new_value = JP_HIGH
+ else if(job_engsec_med & fval)
+ new_value = JP_MEDIUM
+ else if(job_engsec_low & fval)
+ new_value = JP_LOW
+ if(new_value)
+ job_preferences["[initial(J.title)]"] = new_value
+ else if(current_version < 23) // we are fixing a gamebreaking bug.
+ job_preferences = list() //It loaded null from nonexistant savefile field.
+
+ if(current_version < 24 && S["feature_exhibitionist"])
var/datum/quirk/exhibitionism/E
var/quirk_name = initial(E.name)
neutral_quirks += quirk_name
@@ -251,6 +311,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
var/species_id
S["species"] >> species_id
if(species_id)
+ if(species_id == "avian" || species_id == "aquatic")
+ species_id = "mammal"
+ else if(species_id == "moth")
+ species_id = "insect"
+
var/newtype = GLOB.species_list[species_id]
if(newtype)
pref_species = new newtype
@@ -259,28 +324,29 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["features["mcolor"]"] , "#FFF")
//Character
- S["real_name"] >> real_name
- S["nameless"] >> nameless
- S["custom_species"] >> custom_species
- S["name_is_always_random"] >> be_random_name
- S["body_is_always_random"] >> be_random_body
- S["gender"] >> gender
- S["age"] >> age
- S["hair_color"] >> hair_color
- S["facial_hair_color"] >> facial_hair_color
- S["eye_color"] >> eye_color
- S["skin_tone"] >> skin_tone
- S["hair_style_name"] >> hair_style
- S["facial_style_name"] >> facial_hair_style
- S["underwear"] >> underwear
- S["undie_color"] >> undie_color
- S["undershirt"] >> undershirt
- S["shirt_color"] >> shirt_color
- S["socks"] >> socks
- S["socks_color"] >> socks_color
- S["backbag"] >> backbag
- S["jumpsuit_style"] >> jumpsuit_style
- S["uplink_loc"] >> uplink_spawn_loc
+ S["real_name"] >> real_name
+ S["nameless"] >> nameless
+ S["custom_species"] >> custom_species
+ S["name_is_always_random"] >> be_random_name
+ S["body_is_always_random"] >> be_random_body
+ S["gender"] >> gender
+ S["age"] >> age
+ S["hair_color"] >> hair_color
+ S["facial_hair_color"] >> facial_hair_color
+ S["eye_color"] >> eye_color
+ S["skin_tone"] >> skin_tone
+ S["hair_style_name"] >> hair_style
+ S["facial_style_name"] >> facial_hair_style
+ S["underwear"] >> underwear
+ S["undie_color"] >> undie_color
+ S["undershirt"] >> undershirt
+ S["shirt_color"] >> shirt_color
+ S["socks"] >> socks
+ S["socks_color"] >> socks_color
+ S["horn_color"] >> horn_color
+ S["backbag"] >> backbag
+ S["jumpsuit_style"] >> jumpsuit_style
+ S["uplink_loc"] >> uplink_spawn_loc
S["feature_mcolor"] >> features["mcolor"]
S["feature_lizard_tail"] >> features["tail_lizard"]
S["feature_lizard_snout"] >> features["snout"]
@@ -289,29 +355,23 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_lizard_spines"] >> features["spines"]
S["feature_lizard_body_markings"] >> features["body_markings"]
S["feature_lizard_legs"] >> features["legs"]
- S["feature_moth_wings"] >> features["moth_wings"]
S["feature_human_tail"] >> features["tail_human"]
S["feature_human_ears"] >> features["ears"]
+ S["feature_insect_wings"] >> features["insect_wings"]
+ S["feature_insect_fluff"] >> features["insect_fluff"]
//Custom names
for(var/custom_name_id in GLOB.preferences_custom_names)
var/savefile_slot_name = custom_name_id + "_name" //TODO remove this
S[savefile_slot_name] >> custom_names[custom_name_id]
- S["preferred_ai_core_display"] >> preferred_ai_core_display
- S["prefered_security_department"] >> prefered_security_department
+ S["preferred_ai_core_display"] >> preferred_ai_core_display
+ S["prefered_security_department"] >> prefered_security_department
//Jobs
S["joblessrole"] >> joblessrole
- S["job_civilian_high"] >> job_civilian_high
- S["job_civilian_med"] >> job_civilian_med
- S["job_civilian_low"] >> job_civilian_low
- S["job_medsci_high"] >> job_medsci_high
- S["job_medsci_med"] >> job_medsci_med
- S["job_medsci_low"] >> job_medsci_low
- S["job_engsec_high"] >> job_engsec_high
- S["job_engsec_med"] >> job_engsec_med
- S["job_engsec_low"] >> job_engsec_low
+ //Load prefs
+ S["job_preferences"] >> job_preferences
//Quirks
S["all_quirks"] >> all_quirks
@@ -330,6 +390,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_mam_tail_animated"] >> features["mam_tail_animated"]
S["feature_taur"] >> features["taur"]
S["feature_mam_snouts"] >> features["mam_snouts"]
+ S["feature_meat"] >> features["meat_type"]
//Xeno features
S["feature_xeno_tail"] >> features["xenotail"]
S["feature_xeno_dors"] >> features["xenodorsal"]
@@ -379,11 +440,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Sanitize
- real_name = reject_bad_name(real_name)
- gender = sanitize_gender(gender, TRUE, TRUE)
+ real_name = reject_bad_name(real_name)
+ gender = sanitize_gender(gender, TRUE, TRUE)
if(!real_name)
- real_name = random_unique_name(gender)
- custom_species = reject_bad_name(custom_species)
+ real_name = random_unique_name(gender)
+ custom_species = reject_bad_name(custom_species)
for(var/custom_name_id in GLOB.preferences_custom_names)
var/namedata = GLOB.preferences_custom_names[custom_name_id]
custom_names[custom_name_id] = reject_bad_name(custom_names[custom_name_id],namedata["allow_numbers"])
@@ -393,57 +454,55 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(!features["mcolor"] || features["mcolor"] == "#000")
features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
- nameless = sanitize_integer(nameless, 0, 1, initial(nameless))
+ nameless = sanitize_integer(nameless, 0, 1, initial(nameless))
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
if(gender == MALE)
- hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list)
+ hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list)
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_male_list)
else
- hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list)
+ hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list)
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list)
- underwear = sanitize_inlist(underwear, GLOB.underwear_list)
- undie_color = sanitize_hexcolor(undie_color, 6, 1, initial(undie_color))
- undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
- shirt_color = sanitize_hexcolor(shirt_color, 6, 1, initial(shirt_color))
- socks = sanitize_inlist(socks, GLOB.socks_list)
- socks_color = sanitize_hexcolor(socks_color, 6, 1, initial(socks_color))
- age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
- hair_color = sanitize_hexcolor(hair_color, 3, 0)
- facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
- eye_color = sanitize_hexcolor(eye_color, 3, 0)
- skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones)
- backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag))
- jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style))
- uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc))
- features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0)
- features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard)
- features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human)
- features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list)
- features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list)
- features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list)
- features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list)
- features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list)
- features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list)
+ underwear = sanitize_inlist(underwear, GLOB.underwear_list)
+ undie_color = sanitize_hexcolor(undie_color, 3, FALSE, initial(undie_color))
+ undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
+ shirt_color = sanitize_hexcolor(shirt_color, 3, FALSE, initial(shirt_color))
+ socks = sanitize_inlist(socks, GLOB.socks_list)
+ socks_color = sanitize_hexcolor(socks_color, 3, FALSE, initial(socks_color))
+ age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
+ hair_color = sanitize_hexcolor(hair_color, 3, 0)
+ facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
+ eye_color = sanitize_hexcolor(eye_color, 3, 0)
+ skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones)
+ horn_color = sanitize_hexcolor(horn_color, 3, FALSE)
+ backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag))
+ jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style))
+ uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc))
+ features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0)
+ features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard)
+ features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human)
+ features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list)
+ features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list)
+ features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list)
+ features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list)
+ features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list)
+ features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list)
features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list)
- features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list)
+ features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list)
+ features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list)
joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole))
- job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
- job_civilian_med = sanitize_integer(job_civilian_med, 0, 65535, initial(job_civilian_med))
- job_civilian_low = sanitize_integer(job_civilian_low, 0, 65535, initial(job_civilian_low))
- job_medsci_high = sanitize_integer(job_medsci_high, 0, 65535, initial(job_medsci_high))
- job_medsci_med = sanitize_integer(job_medsci_med, 0, 65535, initial(job_medsci_med))
- job_medsci_low = sanitize_integer(job_medsci_low, 0, 65535, initial(job_medsci_low))
- job_engsec_high = sanitize_integer(job_engsec_high, 0, 65535, initial(job_engsec_high))
- job_engsec_med = sanitize_integer(job_engsec_med, 0, 65535, initial(job_engsec_med))
- job_engsec_low = sanitize_integer(job_engsec_low, 0, 65535, initial(job_engsec_low))
+ //Validate job prefs
+ for(var/j in job_preferences)
+ if(job_preferences["[j]"] != JP_LOW && job_preferences["[j]"] != JP_MEDIUM && job_preferences["[j]"] != JP_HIGH)
+ job_preferences -= j
all_quirks = SANITIZE_LIST(all_quirks)
+
positive_quirks = SANITIZE_LIST(positive_quirks)
negative_quirks = SANITIZE_LIST(negative_quirks)
- neutral_quirks = SANITIZE_LIST(neutral_quirks)
+ neutral_quirks = SANITIZE_LIST(neutral_quirks)
cit_character_pref_load(S)
@@ -465,31 +524,32 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.)
//Character
- WRITE_FILE(S["real_name"] , real_name)
- WRITE_FILE(S["nameless"] , nameless)
- WRITE_FILE(S["custom_species"] , custom_species)
- WRITE_FILE(S["name_is_always_random"] , be_random_name)
- WRITE_FILE(S["body_is_always_random"] , be_random_body)
- WRITE_FILE(S["gender"] , gender)
- WRITE_FILE(S["age"] , age)
- WRITE_FILE(S["hair_color"] , hair_color)
- WRITE_FILE(S["facial_hair_color"] , facial_hair_color)
- WRITE_FILE(S["eye_color"] , eye_color)
- WRITE_FILE(S["skin_tone"] , skin_tone)
- WRITE_FILE(S["hair_style_name"] , hair_style)
- WRITE_FILE(S["facial_style_name"] , facial_hair_style)
- WRITE_FILE(S["underwear"] , underwear)
- WRITE_FILE(S["undie_color"] , undie_color)
- WRITE_FILE(S["undershirt"] , undershirt)
- WRITE_FILE(S["shirt_color"] , shirt_color)
- WRITE_FILE(S["socks"] , socks)
- WRITE_FILE(S["socks_color"] , socks_color)
- WRITE_FILE(S["backbag"] , backbag)
- WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style)
- WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
- WRITE_FILE(S["species"] , pref_species.id)
+ WRITE_FILE(S["real_name"] , real_name)
+ WRITE_FILE(S["nameless"] , nameless)
+ WRITE_FILE(S["custom_species"] , custom_species)
+ WRITE_FILE(S["name_is_always_random"] , be_random_name)
+ WRITE_FILE(S["body_is_always_random"] , be_random_body)
+ WRITE_FILE(S["gender"] , gender)
+ WRITE_FILE(S["age"] , age)
+ WRITE_FILE(S["hair_color"] , hair_color)
+ WRITE_FILE(S["facial_hair_color"] , facial_hair_color)
+ WRITE_FILE(S["eye_color"] , eye_color)
+ WRITE_FILE(S["skin_tone"] , skin_tone)
+ WRITE_FILE(S["hair_style_name"] , hair_style)
+ WRITE_FILE(S["facial_style_name"] , facial_hair_style)
+ WRITE_FILE(S["underwear"] , underwear)
+ WRITE_FILE(S["undie_color"] , undie_color)
+ WRITE_FILE(S["undershirt"] , undershirt)
+ WRITE_FILE(S["shirt_color"] , shirt_color)
+ WRITE_FILE(S["socks"] , socks)
+ WRITE_FILE(S["socks_color"] , socks_color)
+ WRITE_FILE(S["horn_color"] , horn_color)
+ WRITE_FILE(S["backbag"] , backbag)
+ WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style)
+ WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
+ WRITE_FILE(S["species"] , pref_species.id)
WRITE_FILE(S["feature_mcolor"] , features["mcolor"])
- WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"])
+ WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"])
WRITE_FILE(S["feature_human_tail"] , features["tail_human"])
WRITE_FILE(S["feature_lizard_snout"] , features["snout"])
WRITE_FILE(S["feature_lizard_horns"] , features["horns"])
@@ -497,28 +557,23 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["feature_lizard_frills"] , features["frills"])
WRITE_FILE(S["feature_lizard_spines"] , features["spines"])
WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"])
- WRITE_FILE(S["feature_lizard_legs"] , features["legs"])
- WRITE_FILE(S["feature_moth_wings"] , features["moth_wings"])
+ WRITE_FILE(S["feature_lizard_legs"] , features["legs"])
+ WRITE_FILE(S["feature_insect_wings"] , features["insect_wings"])
+ WRITE_FILE(S["feature_insect_fluff"] , features["insect_fluff"])
+ WRITE_FILE(S["feature_meat"] , features["meat_type"])
//Custom names
for(var/custom_name_id in GLOB.preferences_custom_names)
var/savefile_slot_name = custom_name_id + "_name" //TODO remove this
WRITE_FILE(S[savefile_slot_name],custom_names[custom_name_id])
- WRITE_FILE(S["preferred_ai_core_display"] , preferred_ai_core_display)
- WRITE_FILE(S["prefered_security_department"] , prefered_security_department)
+ WRITE_FILE(S["preferred_ai_core_display"] , preferred_ai_core_display)
+ WRITE_FILE(S["prefered_security_department"] , prefered_security_department)
//Jobs
WRITE_FILE(S["joblessrole"] , joblessrole)
- WRITE_FILE(S["job_civilian_high"] , job_civilian_high)
- WRITE_FILE(S["job_civilian_med"] , job_civilian_med)
- WRITE_FILE(S["job_civilian_low"] , job_civilian_low)
- WRITE_FILE(S["job_medsci_high"] , job_medsci_high)
- WRITE_FILE(S["job_medsci_med"] , job_medsci_med)
- WRITE_FILE(S["job_medsci_low"] , job_medsci_low)
- WRITE_FILE(S["job_engsec_high"] , job_engsec_high)
- WRITE_FILE(S["job_engsec_med"] , job_engsec_med)
- WRITE_FILE(S["job_engsec_low"] , job_engsec_low)
+ //Write prefs
+ WRITE_FILE(S["job_preferences"] , job_preferences)
//Quirks
WRITE_FILE(S["all_quirks"] , all_quirks)
diff --git a/code/modules/clothing/glasses/vg_glasses.dm b/code/modules/clothing/glasses/vg_glasses.dm
index 449b34b22e..a51a03242c 100644
--- a/code/modules/clothing/glasses/vg_glasses.dm
+++ b/code/modules/clothing/glasses/vg_glasses.dm
@@ -6,21 +6,18 @@
name = "purple sunglasses"
icon_state = "sun_purple"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
/obj/item/clothing/glasses/sunglasses/star
name = "star-shaped sunglasses"
desc = "Novelty sunglasses, both lenses are in the shape of a star."
icon_state = "sun_star"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
/obj/item/clothing/glasses/sunglasses/rockstar
name = "red star-shaped sunglasses"
desc = "Novelty sunglasses with a fancy silver frame and two red-tinted star-shaped lenses. You should probably stomp on them and get a pair of normal ones."
icon_state = "sun_star_silver"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
/obj/item/clothing/glasses/gglasses
name = "Green Glasses"
@@ -28,7 +25,6 @@
icon_state = "gglasses"
item_state = "gglasses"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
/obj/item/clothing/glasses/welding/superior
name = "superior welding goggles"
@@ -36,7 +32,6 @@
icon_state = "rwelding-g"
item_state = "rwelding-g"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
actions_types = list(/datum/action/item_action/toggle)
flash_protect = 2
tint = 1
diff --git a/code/modules/clothing/head/cit_hats.dm b/code/modules/clothing/head/cit_hats.dm
index 7b0e68264f..df4a21d6c1 100644
--- a/code/modules/clothing/head/cit_hats.dm
+++ b/code/modules/clothing/head/cit_hats.dm
@@ -4,4 +4,3 @@
icon = 'modular_citadel/icons/obj/clothing/cit_hats.dmi'
icon_state = "hunter"
item_state = "hunter_worn"
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
index 5c7514541d..b14b0575f9 100644
--- a/code/modules/clothing/head/soft_caps.dm
+++ b/code/modules/clothing/head/soft_caps.dm
@@ -129,3 +129,14 @@
icon_state = "emtsoft"
item_color = "emt"
dog_fashion = null
+
+/obj/item/clothing/head/soft/baseball
+ name = "baseball cap"
+ desc = "It's a robust baseball hat, this one belongs to syndicate major league team."
+ icon_state = "baseballsoft"
+ item_color = "baseballsoft"
+ item_state = "baseballsoft"
+ flags_inv = HIDEEYES|HIDEFACE
+ armor = list("melee" = 35, "bullet" = 35, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 90)
+ strip_delay = 90 //You dont take a Major Leage cap
+ dog_fashion = null
\ No newline at end of file
diff --git a/code/modules/clothing/head/vg_hats.dm b/code/modules/clothing/head/vg_hats.dm
index efeb5291db..dc245cd39a 100644
--- a/code/modules/clothing/head/vg_hats.dm
+++ b/code/modules/clothing/head/vg_hats.dm
@@ -1,4 +1,3 @@
-
/obj/item/clothing/head/helmet/dredd
name = "Judge Helmet"
desc = "Judge, Jury, and Executioner."
@@ -12,7 +11,6 @@
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
strip_delay = 80
dog_fashion = null
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/helmet/aviatorhelmet
name = "Aviator Helmet"
@@ -21,15 +19,12 @@
item_state = "aviator_helmet"
icon_state = "aviator_helmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/helmet/biker
name = "Biker's Helmet"
desc = "This helmet should protect you from russians and masked vigilantes."
armor = list(melee = 25, bullet = 15, laser = 20, energy = 10, bomb = 10, bio = 0, rad = 0)
icon_state = "biker_helmet"
- icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
/obj/item/clothing/head/helmet/richard
@@ -38,7 +33,6 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
icon_state = "richard"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
/obj/item/clothing/head/helmet/megahelmet
@@ -47,7 +41,6 @@
icon_state = "megahelmet"
item_state = "megahelmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
siemens_coefficient = 1
/obj/item/clothing/head/helmet/protohelmet
@@ -56,7 +49,6 @@
icon_state = "protohelmet"
item_state = "protohelmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
siemens_coefficient = 1
/obj/item/clothing/head/helmet/megaxhelmet
@@ -65,7 +57,6 @@
icon_state = "megaxhelmet"
item_state = "megaxhelmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/helmet/joehelmet
name = "Sniper Helmet"
@@ -74,7 +65,6 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
item_state = "joehelmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/helmet/doomguy
name = "Doomguy's helmet"
@@ -83,7 +73,6 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
item_state = "doom"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
armor = list(melee = 50, bullet = 40, laser = 40,energy = 40, bomb = 5, bio = 0, rad = 0)
/obj/item/clothing/head/helmet/neorussian
@@ -92,8 +81,6 @@
icon_state = "nr_helmet"
item_state = "nr_helmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
-
/obj/item/clothing/head/stalhelm
name = "Stalhelm"
@@ -101,7 +88,6 @@
icon_state = "stalhelm"
item_state = "stalhelm"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/panzer
name = "Panzer Cap"
@@ -109,7 +95,6 @@
icon_state = "panzercap"
item_state = "panzercap"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/naziofficer
name = "Officer Cap"
@@ -117,8 +102,6 @@
icon_state = "officercap"
item_state = "officercap"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
-
/obj/item/clothing/head/russobluecamohat
name = "russian blue camo beret"
@@ -133,7 +116,6 @@
icon_state = "russofurhat"
item_state = "russofurhat"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/squatter_hat
name = "slav squatter hat"
@@ -141,7 +123,6 @@
item_state = "squatter_hat"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
desc = "Cyka blyat."
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/snake
name = "snake head"
@@ -149,8 +130,6 @@
icon_state = "snakehead"
item_state = "snakehead"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
-
/obj/item/clothing/head/mummy_rags
name = "mummy rags"
desc = "Ancient rags taken off from some mummy."
@@ -158,7 +137,6 @@
item_state = "mummy"
item_color = "mummy"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
/obj/item/clothing/head/clownpiece
@@ -167,7 +145,6 @@
icon_state = "clownpiece"
item_state = "clownpiece"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/mitre
name = "mitre"
@@ -175,7 +152,6 @@
icon_state = "mitre"
item_state = "mitre"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/tinfoil
name = "tinfoil hat"
@@ -183,7 +159,6 @@
icon_state = "foilhat"
item_state = "paper"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
siemens_coefficient = 2
/obj/item/clothing/head/celtic
@@ -192,4 +167,3 @@
icon_state = "celtic_crown"
item_state = "celtic_crown"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
diff --git a/code/modules/clothing/masks/vg_masks.dm b/code/modules/clothing/masks/vg_masks.dm
index 7de27fb780..29b65a6b8e 100644
--- a/code/modules/clothing/masks/vg_masks.dm
+++ b/code/modules/clothing/masks/vg_masks.dm
@@ -3,18 +3,15 @@
desc = "Some pranksters are truly magical."
icon_state = "wizzclown"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi'
/obj/item/clothing/mask/chapmask
name = "venetian mask"
desc = "A plain porcelain mask that covers the entire face. Standard attire for particularly unspeakable religions. The eyes are wide shut."
icon_state = "chapmask"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi'
/obj/item/clothing/mask/neorussian
name = "neo-Russian mask"
desc = "Somehow, it makes you act and look way more polite than usual."
icon_state = "nr_mask"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi'
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 4659de3e6a..7fe527fec3 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -62,6 +62,16 @@
desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them."
icon_state = "galoshes_dry"
+/obj/item/clothing/shoes/sneakers/noslip
+ desc = "A pair of black shoes, they have the soles of galoshes making them unable to be slipped on a wet surface."
+ name = "black shoes"
+ icon_state = "black"
+ permeability_coefficient = 0.30
+ clothing_flags = NOSLIP
+ strip_delay = 50
+ equip_delay_other = 50
+ resistance_flags = NONE
+
/obj/item/clothing/shoes/galoshes/dry/step_action()
var/turf/open/t_loc = get_turf(src)
SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY)
@@ -69,10 +79,8 @@
/obj/item/clothing/shoes/clown_shoes
desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!"
name = "clown shoes"
- icon_state = "clown"
- item_state = "clown_shoes"
+ icon_state = "clown_shoes"
slowdown = SHOES_SLOWDOWN+1
- item_color = "clown"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown
/obj/item/clothing/shoes/clown_shoes/Initialize()
@@ -98,7 +106,6 @@
name = "jackboots"
desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
icon_state = "jackboots"
- item_state = "jackboots"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
item_color = "hosred"
@@ -115,7 +122,6 @@
name = "winter boots"
desc = "Boots lined with 'synthetic' animal fur."
icon_state = "winterboots"
- item_state = "winterboots"
permeability_coefficient = 0.15
cold_protection = FEET|LEGS
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
@@ -127,7 +133,6 @@
name = "work boots"
desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar."
icon_state = "workboots"
- item_state = "jackboots"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
permeability_coefficient = 0.15
@@ -145,7 +150,6 @@
name = "\improper Nar'Sien invoker boots"
desc = "A pair of boots worn by the followers of Nar'Sie."
icon_state = "cult"
- item_state = "cult"
item_color = "cult"
cold_protection = FEET
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
@@ -178,7 +182,6 @@
name = "roman sandals"
desc = "Sandals with buckled leather straps on it."
icon_state = "roman"
- item_state = "roman"
strip_delay = 100
equip_delay_other = 100
permeability_coefficient = 0.9
@@ -187,14 +190,12 @@
name = "griffon boots"
desc = "A pair of costume boots fashioned after bird talons."
icon_state = "griffinboots"
- item_state = "griffinboots"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
/obj/item/clothing/shoes/bhop
name = "jump boots"
desc = "A specialized pair of combat boots with a built-in propulsion system for rapid foward movement."
icon_state = "jetboots"
- item_state = "jetboots"
item_color = "hosred"
resistance_flags = FIRE_PROOF
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
@@ -252,7 +253,6 @@
name = "Wheely-Heels"
desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel
icon_state = "wheelys"
- item_state = "wheelys"
actions_types = list(/datum/action/item_action/wheelys)
var/wheelToggle = FALSE //False means wheels are not popped out
var/obj/vehicle/ridden/scooter/wheelys/W
@@ -291,7 +291,6 @@
name = "Kindle Kicks"
desc = "They'll sure kindle something in you, and it's not childhood nostalgia..."
icon_state = "kindleKicks"
- item_state = "kindleKicks"
actions_types = list(/datum/action/item_action/kindleKicks)
var/lightCycle = 0
var/active = FALSE
diff --git a/code/modules/clothing/shoes/vg_shoes.dm b/code/modules/clothing/shoes/vg_shoes.dm
index 931c25b823..627a061181 100644
--- a/code/modules/clothing/shoes/vg_shoes.dm
+++ b/code/modules/clothing/shoes/vg_shoes.dm
@@ -5,7 +5,6 @@
icon_state = "leather"
item_color = "leather"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/magboots/deathsquad
@@ -14,7 +13,6 @@
icon_state = "DS-magboots0"
magboot_state = "DS-magboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
mutantrace_variation = NO_MUTANTRACE_VARIATION
@@ -23,7 +21,6 @@
name = "atmospherics magboots"
icon_state = "atmosmagboots0"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
magboot_state = "atmosmagboots"
resistance_flags = FIRE_PROOF
mutantrace_variation = NO_MUTANTRACE_VARIATION
@@ -33,7 +30,6 @@
desc = "Simon's Shoes."
icon_state = "simonshoes"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/kneesocks
@@ -41,7 +37,6 @@
desc = "A pair of girly knee-high socks."
icon_state = "kneesock"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/jestershoes
@@ -49,7 +44,6 @@
desc = "As worn by the clowns of old."
icon_state = "jestershoes"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/aviatorboots
@@ -57,7 +51,6 @@
desc = "Boots suitable for just about any occasion."
icon_state = "aviator_boots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/libertyshoes
@@ -65,7 +58,6 @@
desc = "Freedom isn't free, neither were these shoes."
icon_state = "libertyshoes"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/megaboots
@@ -73,7 +65,6 @@
desc = "Large armored boots, very weak to large spikes."
icon_state = "megaboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/protoboots
@@ -81,7 +72,6 @@
desc = "Functionally identical to the DRN-001 model's boots, but in red."
icon_state = "protoboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/megaxboots
@@ -89,7 +79,6 @@
desc = "Regardless of how much stronger these boots are than the DRN-001 model's, they're still extremely easy to pierce with a large spike."
icon_state = "megaxboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/joeboots
@@ -97,7 +86,6 @@
desc = "Nearly identical to the Prototype's boots, except in black."
icon_state = "joeboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/doomguy
@@ -105,7 +93,6 @@
desc = "If you look closely, you might see skull fragments still buried in these boots."
icon_state = "doom"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/rottenshoes
@@ -113,7 +100,6 @@
desc = "These shoes seem perfect for sneaking around."
icon_state = "rottenshoes"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/sandal/slippers
@@ -121,7 +107,6 @@
icon_state = "slippers"
desc = "For the wizard that puts comfort first. Who's going to laugh?"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/slippers_worn
@@ -129,7 +114,6 @@
desc = "Fluffy..."
icon_state = "slippers_worn"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/jackboots/neorussian
@@ -137,5 +121,4 @@
desc = "Tovarish, no one will realize you stepped on a pile of shit if your pair already looks like shit."
icon_state = "nr_boots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index 662a91c80c..57866b5131 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -22,6 +22,7 @@
resistance_flags = NONE
dog_fashion = null
mutantrace_variation = MUTANTRACE_VARIATION
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/clothing/suit/space
name = "space suit"
@@ -44,4 +45,5 @@
strip_delay = 80
equip_delay_other = 80
resistance_flags = NONE
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //rated for cosmic radation :honk:
tauric = TRUE //Citadel Add for tauric hardsuits
diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm
index cf411ef367..3008043156 100644
--- a/code/modules/clothing/suits/_suits.dm
+++ b/code/modules/clothing/suits/_suits.dm
@@ -5,6 +5,7 @@
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
slot_flags = ITEM_SLOT_OCLOTHING
+ body_parts_covered = CHEST
var/blood_overlay_type = "suit"
var/togglename = null
var/suittoggled = FALSE
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 0840288eee..19050dc36f 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -1,6 +1,5 @@
/obj/item/clothing/suit/armor
allowed = null
- body_parts_covered = CHEST
cold_protection = CHEST|GROIN
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN
diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm
index c3276213e1..b8287c7f4c 100644
--- a/code/modules/clothing/suits/cloaks.dm
+++ b/code/modules/clothing/suits/cloaks.dm
@@ -7,7 +7,7 @@
icon_state = "qmcloak"
item_state = "qmcloak"
w_class = WEIGHT_CLASS_SMALL
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ body_parts_covered = CHEST|LEGS|ARMS
/obj/item/clothing/head/cloakhood
name = "cloak hood"
@@ -62,7 +62,7 @@
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival)
armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot
hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath
- body_parts_covered = CHEST|GROIN|ARMS
+ body_parts_covered = CHEST|ARMS|LEGS
/obj/item/clothing/head/hooded/cloakhood/goliath
name = "goliath cloak hood"
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 3c3c8f0e9d..4318839845 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -23,30 +23,48 @@
allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
//Chaplain
-/obj/item/clothing/suit/nun
+/obj/item/clothing/suit/chaplain
+ name = "chaplain suit"
+ desc = "A piece of clothing adorned by the gods of Coding. Should never exist in this mortal realm."
+ allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
+
+/obj/item/clothing/suit/chaplain/nun
name = "nun robe"
desc = "Maximum piety in this star system."
icon_state = "nun"
item_state = "nun"
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
flags_inv = HIDESHOES|HIDEJUMPSUIT
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
-/obj/item/clothing/suit/studentuni
+/obj/item/clothing/suit/chaplain/studentuni
name = "student robe"
desc = "The uniform of a bygone institute of learning."
icon_state = "studentuni"
item_state = "studentuni"
body_parts_covered = ARMS|CHEST
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
-/obj/item/clothing/suit/witchhunter
+/obj/item/clothing/suit/chaplain/witchhunter
name = "witchunter garb"
desc = "This worn outfit saw much use back in the day."
icon_state = "witchhunter"
item_state = "witchhunter"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
+
+/obj/item/clothing/suit/chaplain/pharaoh
+ name = "pharaoh tunic"
+ desc = "Lavish space tomb not included."
+ icon_state = "pharaoh"
+ icon_state = "pharaoh"
+ body_parts_covered = CHEST|GROIN
+
+/obj/item/clothing/suit/chaplain/holidaypriest
+ name = "holiday priest"
+ desc = "This is a nice holiday, my son."
+ icon_state = "holidaypriest"
+ item_state = "w_suit"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ flags_inv = HIDEJUMPSUIT
+
//Chef
/obj/item/clothing/suit/toggle/chef
@@ -135,6 +153,7 @@
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "suspenders"
blood_overlay_type = "armor" //it's the less thing that I can put here
+ body_parts_covered = NONE
//Security
/obj/item/clothing/suit/security/officer
@@ -197,3 +216,4 @@
item_state = "techpriesthood"
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEEARS
+ mutantrace_variation = MUTANTRACE_VARIATION
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 8a3dbbf274..942fdaed73 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -67,6 +67,7 @@
item_state = "death"
flags_1 = CONDUCT_1
fire_resist = T0C+5200
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|FEET
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -75,6 +76,7 @@
desc = "this pretty much looks ridiculous" //Needs no fixing
icon_state = "justice"
item_state = "justice"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|FEET
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -100,14 +102,14 @@
desc = "A fancy purple apron for a stylish person."
icon_state = "purplebartenderapron"
item_state = "purplebartenderapron"
- body_parts_covered = CHEST|GROIN|LEGS
+ body_parts_covered = CHEST
/obj/item/clothing/suit/syndicatefake
name = "black and red space suit replica"
icon_state = "syndicate-black-red"
item_state = "syndicate-black-red"
desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
- w_class = WEIGHT_CLASS_NORMAL
+ body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET|HANDS
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
resistance_flags = NONE
@@ -154,7 +156,7 @@
icon_state = "owl_wings"
item_state = "owl_wings"
togglename = "wings"
- body_parts_covered = ARMS|CHEST
+ body_parts_covered = ARMS
actions_types = list(/datum/action/item_action/toggle_wings)
/obj/item/clothing/suit/toggle/owlwings/Initialize()
@@ -167,16 +169,6 @@
icon_state = "griffin_wings"
item_state = "griffin_wings"
-
-/obj/item/clothing/suit/holidaypriest
- name = "holiday priest"
- desc = "This is a nice holiday, my son."
- icon_state = "holidaypriest"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEJUMPSUIT
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
-
/obj/item/clothing/suit/cardborg
name = "cardborg suit"
desc = "An ordinary cardboard box with holes cut in the sides."
@@ -219,6 +211,7 @@
desc = "Your classic, non-racist poncho."
icon_state = "classicponcho"
item_state = "classicponcho"
+ body_parts_covered = CHEST|GROIN
/obj/item/clothing/suit/poncho/green
name = "green poncho"
@@ -255,7 +248,7 @@
desc = "A costume made from 'synthetic' carp scales, it smells."
icon_state = "carp_casual"
item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
+ body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun)
@@ -275,9 +268,7 @@
desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs."
icon_state = "ian"
item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- //cold_protection = CHEST|GROIN|ARMS
- //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET
allowed = list()
hoodtype = /obj/item/clothing/head/hooded/ian_hood
dog_fashion = /datum/dog_fashion/back
@@ -287,8 +278,6 @@
desc = "A hood that looks just like a corgi's head, it won't guarantee dog biscuits."
icon_state = "ian"
body_parts_covered = HEAD
- //cold_protection = HEAD
- //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
flags_inv = HIDEHAIR|HIDEEARS
/obj/item/clothing/suit/hooded/bee_costume // It's Hip!
@@ -314,7 +303,7 @@
desc = "A horribly bloated suit made from human skins."
icon_state = "lingspacesuit"
item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
+ body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET|HANDS
allowed = list()
actions_types = list(/datum/action/item_action/toggle_human_head)
hoodtype = /obj/item/clothing/head/hooded/human_head
@@ -355,18 +344,21 @@
desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in."
icon_state = "ianshirt"
item_state = "ianshirt"
+ body_parts_covered = CHEST|GROIN
/obj/item/clothing/suit/nerdshirt
name = "gamer shirt"
desc = "A baggy shirt with vintage game character Phanic the Weasel. Why would anyone wear this?"
icon_state = "nerdshirt"
item_state = "nerdshirt"
+ body_parts_covered = CHEST|GROIN
/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat.
name = "Vape Naysh shirt"
desc = "A cheap white T-shirt with a big tacky \"VN\" on the front, Why would you wear this unironically?"
icon_state = "vapeshirt"
item_state = "vapeshirt"
+ body_parts_covered = CHEST|GROIN
/obj/item/clothing/suit/jacket
name = "bomber jacket"
@@ -374,7 +366,7 @@
icon_state = "bomberjacket"
item_state = "brownjsuit"
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio)
- body_parts_covered = CHEST|GROIN|ARMS
+ body_parts_covered = CHEST|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
@@ -399,6 +391,7 @@
desc = "A thick jacket with a rubbery, water-resistant shell."
icon_state = "pufferjacket"
item_state = "hostrench"
+ body_parts_covered = CHEST|GROIN|ARMS
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/suit/jacket/puffer/vest
@@ -446,18 +439,21 @@
desc = "Looks like this belongs in a very old movie set."
icon_state = "draculacoat"
item_state = "draculacoat"
+ body_parts_covered = CHEST|ARMS
/obj/item/clothing/suit/drfreeze_coat
name = "doctor freeze's labcoat"
desc = "A labcoat imbued with the power of features and freezes."
icon_state = "drfreeze_coat"
item_state = "drfreeze_coat"
+ body_parts_covered = CHEST|GROIN|ARMS
/obj/item/clothing/suit/gothcoat
name = "gothic coat"
desc = "Perfect for those who want stalk in a corner of a bar."
icon_state = "gothcoat"
item_state = "gothcoat"
+ body_parts_covered = CHEST|ARMS|HAND_LEFT //peculiar
/obj/item/clothing/suit/xenos
name = "xenos suit"
@@ -468,13 +464,6 @@
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
allowed = list(/obj/item/clothing/mask/facehugger/toy)
-/obj/item/clothing/suit/pharaoh
- name = "pharaoh tunic"
- desc = "Lavish space tomb not included."
- icon_state = "pharaoh"
- icon_state = "pharaoh"
- body_parts_covered = CHEST|GROIN
-
// WINTER COATS
@@ -603,6 +592,7 @@
name = "spooky ghost"
desc = "This is obviously just a bedsheet, but maybe try it on?"
icon_state = "bedsheet"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|HEAD
user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150)
alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire
@@ -611,6 +601,7 @@
desc = "A big and clanky suit made of bronze that offers no protection and looks very unfashionable. Nice."
icon = 'icons/obj/clothing/clockwork_garb.dmi'
icon_state = "clockwork_cuirass_old"
+ body_parts_covered = CHEST|GROIN|LEGS
armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
/obj/item/clothing/suit/ghost_sheet
@@ -623,4 +614,5 @@
throw_range = 2
w_class = WEIGHT_CLASS_TINY
flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|HEAD
alternate_worn_layer = UNDER_HEAD_LAYER
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index d003a20167..fbdca6ddbc 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -130,7 +130,7 @@
equip_delay_other = 60
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
resistance_flags = NONE
- rad_flags = RAD_PROTECT_CONTENTS
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
mutantrace_variation = MUTANTRACE_VARIATION
/obj/item/clothing/suit/radiation
@@ -150,5 +150,5 @@
equip_delay_other = 60
flags_inv = HIDEJUMPSUIT|HIDETAUR
resistance_flags = NONE
- rad_flags = RAD_PROTECT_CONTENTS
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
tauric = TRUE //Citadel Add for tauric hardsuits
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index 6535e40d0d..878030bc5d 100644
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -1,4 +1,4 @@
-/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals and armbands, this accessory system is being kept as-is
+/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals, pokadots, and armbands, this accessory system is being kept as-is
name = "Accessory"
desc = "Something has gone wrong!"
icon = 'icons/obj/clothing/accessories.dmi'
@@ -368,7 +368,7 @@
/obj/item/clothing/accessory/kevlar
name = "kevlar sheets"
- desc = "Long thin sheets of kevlar to help resist bullets and some physical attacks.."
+ desc = "Long thin sheets of kevlar to help resist bullets and some physical attacks."
icon_state = "padding"
item_color = "nothing"
armor = list("melee" = 10, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 25)
@@ -379,3 +379,35 @@
icon_state = "plastics"
item_color = "nothing"
armor = list("melee" = 0, "bullet" = 0, "laser" = 20, "energy" = 10, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = -40)
+
+/////////////////////
+//Pokadots On Pants//
+/////////////////////
+
+/obj/item/clothing/accessory/attrocious_pokadots
+ name = "atrocious pokadots"
+ desc = "They look like something out of a thrift store. Attaches to clothing not to be worn by itself."
+ icon_state = "attrocious_pokadots"
+ item_color = "attrocious_pokadots"
+ attack_verb = list("horrifed", "eye bleeded")
+
+/obj/item/clothing/accessory/black_white_pokadots
+ name = "checkered pokadots"
+ desc = "You can play a game of chess on these! Attaches to clothing not to be worn by itself."
+ icon_state = "black_white_pokadots"
+ item_color = "black_white_pokadots"
+ attack_verb = list("check", "mate")
+
+/obj/item/clothing/accessory/nt_pokadots
+ name = "blue and white pokadots"
+ desc = "To show your pride in your workplace, in the most annoying possable way. Attaches to clothing not to be worn by itself."
+ icon_state = "nt_pokadots"
+ item_color = "nt_pokadots"
+ attack_verb = list("eye bleeded", "annoyed")
+
+/obj/item/clothing/accessory/syndi_pokadots
+ name = "black and red pokadots"
+ desc = "King me. Attaches to clothing not to be worn by itself." //checkers!
+ icon_state = "syndi_pokadots"
+ item_color = "syndi_pokadots"
+ attack_verb = list("jumped", "taken")
\ No newline at end of file
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 9893edf248..4e3e1aa0cc 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -67,3 +67,14 @@
icon_state = "syndicate_combat"
item_color = "syndicate_combat"
can_adjust = FALSE
+
+/obj/item/clothing/under/syndicate/baseball
+ name = "major league, number unknown"
+ desc = "A major league outfit with the number faded number on the back. Seems rather robust for just a game"
+ icon_state = "syndicatebaseball"
+ item_state = "syndicatebaseball"
+ item_color = "syndicatebaseball"
+ has_sensor = NO_SENSORS
+ armor = list("melee" = 15, "bullet" = 5, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
+ alt_covers_chest = TRUE
+
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 2790a8cec7..7ae1c956c9 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -133,6 +133,18 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
+/datum/crafting_recipe/minigun
+ name = "Laser Minigun"
+ result = /obj/item/minigunpack2
+ reqs = list(/obj/item/gun/energy/laser/carbine = 3,
+ /obj/item/stack/sheet/plasteel = 5,
+ /obj/item/stack/cable_coil = 30,
+ /obj/item/stock_parts/cell/bluespace = 2)
+ tools = list(TOOL_WIRECUTTER, TOOL_SCREWDRIVER, TOOL_WELDER)
+ time = 150
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
/datum/crafting_recipe/ed209
name = "ED209"
result = /mob/living/simple_animal/bot/ed209
@@ -359,6 +371,7 @@
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
/obj/item/shard = 1,
/obj/item/stack/rods = 1)
+ parts = list(/obj/item/shard = 1)
time = 40
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm
index 31e99535d1..1d0b626d98 100644
--- a/code/modules/food_and_drinks/food/condiment.dm
+++ b/code/modules/food_and_drinks/food/condiment.dm
@@ -16,6 +16,7 @@
//Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change(changetype) to change names, descs and sprites.
var/list/possible_states = list(
"ketchup" = list("ketchup", "ketchup bottle", "You feel more American already."),
+ "mustard" = list("mustard", "mustard bottle", "A spice mixed with enzymes and water."),
"capsaicin" = list("hotsauce", "hotsauce bottle", "You can almost TASTE the stomach ulcers now!"),
"enzyme" = list("enzyme", "universal enzyme bottle", "Used in cooking various dishes"),
"soysauce" = list("soysauce", "soy sauce bottle", "A salty soy-based flavoring"),
@@ -282,6 +283,12 @@
originalname = "ketchup"
list_reagents = list("ketchup" = 10)
+//Mustard
+/obj/item/reagent_containers/food/condiment/pack/mustard
+ name = "mustard pack"
+ originalname = "mustard"
+ list_reagents = list("mustard" = 10)
+
//Hot sauce
/obj/item/reagent_containers/food/condiment/pack/hotsauce
name = "hotsauce pack"
diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm
index 1a82d1b406..ee169e9861 100644
--- a/code/modules/food_and_drinks/food/snacks/meat.dm
+++ b/code/modules/food_and_drinks/food/snacks/meat.dm
@@ -108,7 +108,7 @@
tastes = list("maggots" = 1, "the inside of a reactor" = 1)
foodtype = MEAT | RAW | GROSS
-/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth
+/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
icon_state = "mothmeat"
desc = "Unpleasantly powdery and dry. Kind of pretty, though."
filling_color = "#BF896B"
diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm
index d66cfdd667..98f80331a7 100644
--- a/code/modules/food_and_drinks/food/snacks_cake.dm
+++ b/code/modules/food_and_drinks/food/snacks_cake.dm
@@ -335,7 +335,7 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
icon_state = "vanillacake"
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice
bonus_reagents = list("sugar" = 15, "vanilla" = 15)
- tastes = list("caje" = 1, "sugar" = 1, "vanilla" = 10)
+ tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10)
foodtype = GRAIN | SUGAR | DAIRY
/obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice
@@ -361,4 +361,21 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
icon_state = "clowncake_slice"
filling_color = "#00FFFF"
tastes = list("cake" = 1, "sugar" = 1, "joy" = 10)
- foodtype = GRAIN | SUGAR | DAIRY
\ No newline at end of file
+ foodtype = GRAIN | SUGAR | DAIRY
+
+/obj/item/reagent_containers/food/snacks/store/cake/peach_cake
+ name = "peach cake"
+ desc = "A peach filled cake."
+ icon_state = "peachcake"
+ slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/peach_slice
+ bonus_reagents = list("sugar" = 5, "peachjuice" = 15)
+ tastes = list("cake" = 1, "sugar" = 1, "peachjuice" = 10)
+ foodtype = GRAIN | SUGAR | DAIRY
+
+/obj/item/reagent_containers/food/snacks/cakeslice/peach_slice
+ name = "peach cake slice"
+ desc = "A slice of peach cake."
+ icon_state = "peach_slice"
+ filling_color = "#00FFFF"
+ tastes = list("cake" = 1, "sugar" = 1, "peachjuice" = 10)
+ foodtype = GRAIN | SUGAR | DAIRY
diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm
index c4f8ccf76b..3988909b30 100644
--- a/code/modules/food_and_drinks/food/snacks_frozen.dm
+++ b/code/modules/food_and_drinks/food/snacks_frozen.dm
@@ -28,6 +28,50 @@
tastes = list("ice cream" = 1, "banana" = 1, "a bad joke" = 1)
foodtype = FRUIT | DAIRY | SUGAR
+/obj/item/reagent_containers/food/snacks/banana_split
+ name = "banana split"
+ trash = /obj/item/reagent_containers/food/drinks/drinkingglass
+ desc = "A long glass dish filled with ice-cream, chocolate and a banana down the middle. A timeless classic by any standards."
+ icon_state = "banana_split"
+ bonus_reagents = list("nutriment" = 5, "vitamin" = 3)
+ list_reagents = list("nutriment" = 3, "banana" = 10, "vitamin" = 2)
+ filling_color = "#FFFACD"
+ tastes = list("ice cream" = 1, "banana" = 1, "charries" = 1)
+ foodtype = FRUIT | DAIRY | SUGAR
+
+/obj/item/reagent_containers/food/snacks/cola_float
+ name = "Root Beer Float"
+ trash = /obj/item/reagent_containers/food/drinks/drinkingglass
+ desc = "A glass filled with cream, soda and ice-cream with a cherry on top."
+ icon_state = "cola_float"
+ bonus_reagents = list("nutriment" = 3, "vitamin" = 1)
+ list_reagents = list("nutriment" = 3, "vitamin" = 2)
+ filling_color = "#FFFACD"
+ tastes = list("ice cream" = 1, "space coal" = 1, "cherries" = 1)
+ foodtype = FRUIT | DAIRY | SUGAR
+
+/obj/item/reagent_containers/food/snacks/charrie_float
+ name = "Cherry Shake"
+ trash = /obj/item/reagent_containers/food/drinks/drinkingglass
+ desc = "Cherries mixed with ice-cream, known for its filling tastes"
+ icon_state = "cherryshake"
+ bonus_reagents = list("nutriment" = 3, "vitamin" = 1)
+ list_reagents = list("nutriment" = 3, "vitamin" = 2, "cherryshake" = 15)
+ filling_color = "#FFFACD"
+ tastes = list("ice cream" = 1, "charries" = 1)
+ foodtype = FRUIT | DAIRY | SUGAR
+
+/obj/item/reagent_containers/food/snacks/bluecharrie_float
+ name = "Blue Cherry Shake"
+ trash = /obj/item/reagent_containers/food/drinks/drinkingglass
+ desc = "Cherries mixed with ice-cream, known for its filling tastes. This one is a exotic blue!"
+ icon_state = "bluecherryshake"
+ bonus_reagents = list("nutriment" = 3, "vitamin" = 1)
+ list_reagents = list("nutriment" = 3, "vitamin" = 2, "bluecherryshake" = 10)
+ filling_color = "#FFFACD"
+ tastes = list("ice cream" = 1, "blue cherries" = 1)
+ foodtype = FRUIT | DAIRY | SUGAR
+
/obj/item/reagent_containers/food/snacks/spacefreezy
name = "space freezy"
desc = "The best icecream in space."
@@ -126,6 +170,22 @@
tastes = list("ice" = 1, "water" = 1, "berries" = 5)
foodtype = FRUIT
+/obj/item/reagent_containers/food/snacks/snowcones/peach
+ name = "peach flavored snowcone"
+ desc = "A peach flavord snowball in a paper cup."
+ icon_state = "peach_sc"
+ list_reagents = list("nutriment" = 1, "peachjuice" = 10)
+ tastes = list("ice" = 1, "water" = 1, " peach" = 5)
+ foodtype = FRUIT
+
+/obj/item/reagent_containers/food/snacks/snowcones/strawberry
+ name = "strawberry flavored snowcone"
+ desc = "A strawberry flavord snowball in a paper cup."
+ icon_state = "blue_sc"
+ list_reagents = list("nutriment" = 1, "berryjuice" = 10)
+ tastes = list("ice" = 1, "water" = 1, " strawberry" = 5)
+ foodtype = FRUIT
+
/obj/item/reagent_containers/food/snacks/snowcones/fruitsalad
name = "mixed fruit flavored snowcone"
desc = "A mix of different flavors dizzled on a snowball in a paper cup."
diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm
index cf99bd78d9..0b53ec8822 100644
--- a/code/modules/food_and_drinks/food/snacks_meat.dm
+++ b/code/modules/food_and_drinks/food/snacks_meat.dm
@@ -322,6 +322,14 @@
filling_color = "#800000"
tastes = list("meat" = 1, "butter" = 1)
+/obj/item/reagent_containers/food/snacks/corndog
+ name = "corndog plate"
+ desc = "A plate with two small corn dogs, with two dimples of ketchup and mustard to dip them in."
+ icon_state = "dorndog"
+ trash = /obj/item/trash/plate/alt
+ tastes = list("hotdog" = 2, "mustard and ketchup" = 1, "fryed bread" = 1)
+ bonus_reagents = list("nutriment" = 6, "vitamin" = 2, "mustard" = 5, "ketchup" = 5)
+
/obj/item/reagent_containers/food/snacks/kebab/rat
name = "rat-kebab"
desc = "Not so delicious rat meat, on a stick."
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index c4b9451c7f..ad0824dd79 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -581,6 +581,14 @@
icon_state = "chocolatestrawberry"
list_reagents = list("sugar" = 5, "nutriment" = 2)
filling_color = "#ffdf26"
- w_class = WEIGHT_CLASS_NORMAL
tastes = list("strawberries" = 5, "chocolate" = 3)
+ foodtype = FRUIT | SUGAR
+
+/obj/item/reagent_containers/food/snacks/chocolatebanana
+ name = "Chocolate dipped banana"
+ desc = "A banana dipped in a bit of chocolate and held on a stick."
+ icon_state = "banana_coco"
+ list_reagents = list("sugar" = 5, "nutriment" = 3, "vitamin" = 1)
+ filling_color = "#ffdf26"
+ tastes = list("banana" = 5, "chocolate" = 3)
foodtype = FRUIT | SUGAR
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm
index be6c11fd68..bc66d353e1 100644
--- a/code/modules/food_and_drinks/food/snacks_pie.dm
+++ b/code/modules/food_and_drinks/food/snacks_pie.dm
@@ -319,8 +319,16 @@
/obj/item/reagent_containers/food/snacks/pie/strawberrypie
name = "strawberry pie"
- desc = "A strawberry.pie."
+ desc = "A strawberry pie."
icon_state = "strawberrypie"
bonus_reagents = list("nutriment" = 6, "vitamin" = 6)
tastes = list("strawberry" = 1, "pie" = 1)
foodtype = GRAIN | FRUIT | SUGAR
+
+/obj/item/reagent_containers/food/snacks/pie/peachpie
+ name = "peach pie"
+ desc = "A pie with peach filling."
+ icon_state = "strawberrypie"
+ bonus_reagents = list("nutriment" = 5, "vitamin" = 6, "peachjuice" = 15)
+ tastes = list("peach" = 1, "pie" = 1)
+ foodtype = GRAIN | FRUIT
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
index 58d3ef69bb..0f901f2412 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
@@ -1,9 +1,13 @@
#define ICECREAM_VANILLA 1
#define ICECREAM_CHOCOLATE 2
#define ICECREAM_STRAWBERRY 3
-#define ICECREAM_BLUE 4
-#define CONE_WAFFLE 5
-#define CONE_CHOC 6
+#define ICECREAM_PEACH 4
+#define ICECREAM_GRAPE 5
+#define ICECREAM_BLUE 6
+#define CONE_WAFFLE 7
+#define CONE_CHOC 8
+
+
/obj/machinery/icecream_vat
name = "ice cream vat"
@@ -26,7 +30,9 @@
"cocoa" = 5,
"vanilla" = 5,
"berryjuice" = 5,
- "singulo" = 5)
+ "singulo" = 5,
+ "peachjuice" = 5,
+ "grapejuice" = 5)
/obj/machinery/icecream_vat/proc/get_ingredient_list(type)
switch(type)
@@ -34,6 +40,10 @@
return list("milk", "ice", "cocoa")
if(ICECREAM_STRAWBERRY)
return list("milk", "ice", "berryjuice")
+ if(ICECREAM_PEACH)
+ return list("milk", "ice", "peachjuice")
+ if(ICECREAM_GRAPE)
+ return list("milk", "ice", "grapejuice")
if(ICECREAM_BLUE)
return list("milk", "ice", "singulo")
if(CONE_WAFFLE)
@@ -50,6 +60,10 @@
return "chocolate"
if(ICECREAM_STRAWBERRY)
return "strawberry"
+ if(ICECREAM_PEACH)
+ return "peach"
+ if(ICECREAM_GRAPE)
+ return "grape"
if(ICECREAM_BLUE)
return "blue"
if(CONE_WAFFLE)
@@ -62,7 +76,7 @@
/obj/machinery/icecream_vat/Initialize()
. = ..()
- while(product_types.len < 6)
+ while(product_types.len < 8)
product_types.Add(5)
create_reagents(100, OPENCONTAINER | NO_REACT)
for(var/reagent in icecream_vat_reagents)
@@ -76,6 +90,8 @@
dat += "Vanilla ice cream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice) "
dat += "Strawberry ice cream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice) "
dat += "Chocolate ice cream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder) "
+ dat += "Peach ice cream: Select Make x5 [product_types[ICECREAM_PEACH]] dollops left. (Ingredients: milk, ice, peach juice) "
+ dat += "Grape ice cream: Select Make x5 [product_types[ICECREAM_GRAPE]] dollops left. (Ingredients: milk, ice, grape juice) "
dat += "Blue ice cream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo) "
dat += "CONES "
dat += "
Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
"
@@ -207,6 +223,12 @@
if ("strawberry")
desc = "A delicious [cone_type] cone filled with strawberry ice cream. Definitely not made with real strawberries."
reagents.add_reagent("berryjuice", 2)
+ if ("peach")
+ desc = "A delicious [cone_type] cone filled with peach ice cream. Definitely made with real peaches!"
+ reagents.add_reagent("peachjuice", 2)
+ if ("grape")
+ desc = "A delicious [cone_type] cone filled with grape ice cream. Surprisingly, made with real pink grape, likely not real sugarcanes used."
+ reagents.add_reagent("grapejuice", 2)
if ("blue")
desc = "A delicious [cone_type] cone filled with blue ice cream. Made with real... blue?"
reagents.add_reagent("singulo", 2)
@@ -228,6 +250,8 @@
#undef ICECREAM_VANILLA
#undef ICECREAM_CHOCOLATE
#undef ICECREAM_STRAWBERRY
+#undef ICECREAM_PEACH
+#undef ICECREAM_GRAPE
#undef ICECREAM_BLUE
#undef CONE_WAFFLE
#undef CONE_CHOC
diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
index 7c44857b1d..6880260c4c 100644
--- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
@@ -381,6 +381,33 @@
id = "neurotoxin"
results = list("neurotoxin" = 2)
required_reagents = list("gargleblaster" = 1, "morphine" = 1)
+ //FermiChem vars: Easy to make, but hard to make potent
+ OptimalTempMin = 200 // Lower area of bell curve for determining heat based rate reactions
+ OptimalTempMax = 950 // Upper end for above
+ ExplodeTemp = 999 //Temperature at which reaction explodes
+ OptimalpHMin = 4.6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
+ OptimalpHMax = 5.2 // Higest value for above
+ ReactpHLim = 5 // How far out pH wil react, giving impurity place (Exponential phase)
+ CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
+ CurveSharpT = 2 // How sharp the temperature exponential curve is (to the power of value)
+ CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value)
+ ThermicConstant = 10 //Temperature change per 1u produced
+ HIonRelease = 0.02 //pH change per 1u reaction
+ RateUpLim = 5 //Optimal/max rate possible if all conditions are perfect
+ FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics
+ FermiExplode = FALSE //If the chemical explodes in a special way
+ PurityMin = 0 //The minimum purity something has to be above, otherwise it explodes.
+
+/datum/chemical_reaction/neurotoxin/FermiFinish(datum/reagents/holder, var/atom/my_atom)
+ var/datum/reagent/consumable/ethanol/neurotoxin/Nt = locate(/datum/reagent/consumable/ethanol/neurotoxin) in my_atom.reagents.reagent_list
+ var/cached_volume = Nt.volume
+ if(Nt.purity < 0.5)
+ holder.remove_reagent(src.id, cached_volume)
+ holder.add_reagent("neuroweak", cached_volume)
+
+/datum/chemical_reaction/neurotoxin/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//reduced size
+ volume = volume/10
+ ..()
/datum/chemical_reaction/snowwhite
name = "Snow White"
@@ -454,18 +481,6 @@
results = list("vanillapudding" = 20)
required_reagents = list("vanilla" = 5, "milk" = 5, "eggyolk" = 5)
-/datum/chemical_reaction/cherryshake
- name = "Cherry Shake"
- id = "cherryshake"
- results = list("cherryshake" = 3)
- required_reagents = list("cherryjelly" = 1, "ice" = 1, "cream" = 1)
-
-/datum/chemical_reaction/bluecherryshake
- name = "Blue Cherry Shake"
- id = "bluecherryshake"
- results = list("bluecherryshake" = 3)
- required_reagents = list("bluecherryjelly" = 1, "ice" = 1, "cream" = 1)
-
/datum/chemical_reaction/drunkenblumpkin
name = "Drunken Blumpkin"
id = "drunkenblumpkin"
@@ -794,4 +809,17 @@
name = "Red Queen"
id = "red_queen"
results = list("red_queen" = 10)
- required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1)
\ No newline at end of file
+ required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1)
+
+/datum/chemical_reaction/catnip_tea
+ name = "Catnip Tea"
+ id = "catnip_tea"
+ results = list("catnip_tea" = 3)
+ required_reagents = list("tea" = 5, "catnip" = 2)
+
+/datum/chemical_reaction/commander_and_chief
+ name = "Commander and Chief"
+ id = "commander_and_chief"
+ results = list("commander_and_chief" = 50)
+ required_reagents = list("alliescocktail" = 50, "champagne" = 20, "doctorsdelight" = 10, "quintuple_sec" = 10, "screwdrivercocktail" = 10)
+ mix_message = "When your powers combine, I am Captain Pl-..."
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
index e26d15dbd3..284affe2ec 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
@@ -169,6 +169,15 @@
result = /obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake
subcategory = CAT_CAKE
+/datum/crafting_recipe/food/peachcake
+ name = "Peach cake"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/reagent_containers/food/snacks/grown/peach = 5
+ )
+ result = /obj/item/reagent_containers/food/snacks/store/cake/peach_cake
+ subcategory = CAT_CAKE
+
/datum/crafting_recipe/food/cak
name = "Living cat/cake hybrid"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
index 73b09df68d..8f4c5d05f1 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
@@ -42,6 +42,52 @@
result = /obj/item/reagent_containers/food/snacks/honkdae
subcategory = CAT_ICE
+/datum/crafting_recipe/food/banana_split
+ name = "Banana Split"
+ always_availible = FALSE
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/icecream = 3,
+ /obj/item/reagent_containers/food/snacks/grown/banana = 1,
+ /obj/item/reagent_containers/food/snacks/grown/cherries = 1,
+ /obj/item/reagent_containers/food/snacks/chocolatebar = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/banana_split
+ subcategory = CAT_ICE
+
+/datum/crafting_recipe/food/root_float
+ name = "Cola Float"
+ always_availible = FALSE
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/icecream = 1,
+ /obj/item/reagent_containers/food/snacks/grown/cherries = 1,
+ /datum/reagent/consumable/space_cola = 10,
+ /obj/item/reagent_containers/food/drinks/drinkingglass = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/cola_float
+ subcategory = CAT_ICE
+
+/datum/crafting_recipe/food/charrie_float
+ name = "Cherry Shake"
+ always_availible = FALSE
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/icecream = 1,
+ /obj/item/reagent_containers/food/snacks/grown/cherries = 3,
+ /obj/item/reagent_containers/food/drinks/drinkingglass = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/charrie_float
+ subcategory = CAT_ICE
+
+/datum/crafting_recipe/food/bluecharrie_float
+ name = "Blue Cherry Shake"
+ always_availible = FALSE
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/icecream = 1,
+ /obj/item/reagent_containers/food/snacks/grown/bluecherries = 3,
+ /obj/item/reagent_containers/food/drinks/drinkingglass = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/bluecharrie_float
+ subcategory = CAT_ICE
+
//////////////////////////SNOW CONES///////////////////////
/datum/crafting_recipe/food/flaverless_sc
@@ -232,6 +278,28 @@
result = /obj/item/reagent_containers/food/snacks/snowcones/honey
subcategory = CAT_ICE
+/datum/crafting_recipe/food/peach_sc
+ name = "Peach snowcone"
+ reqs = list(
+ /obj/item/reagent_containers/food/drinks/sillycup = 1,
+ /datum/reagent/water = 5,
+ /datum/reagent/consumable/ice = 15,
+ /obj/item/reagent_containers/food/snacks/grown/peach = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/snowcones/peach
+ subcategory = CAT_ICE
+
+/datum/crafting_recipe/food/strawberry_sc
+ name = "Strawberry snowcone"
+ reqs = list(
+ /obj/item/reagent_containers/food/drinks/sillycup = 1,
+ /datum/reagent/water = 5,
+ /datum/reagent/consumable/ice = 15,
+ /obj/item/reagent_containers/food/snacks/grown/strawberry = 2
+ )
+ result = /obj/item/reagent_containers/food/snacks/snowcones/strawberry
+ subcategory = CAT_ICE
+
/datum/crafting_recipe/food/honey_sc
name = "Rainbow snowcone"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
index 7eff2820c5..d17ccf585e 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
@@ -128,6 +128,18 @@
result = /obj/item/reagent_containers/food/snacks/pigblanket
subcategory = CAT_MEAT
+/datum/crafting_recipe/food/corndog
+ name = "Corndog meal"
+ reqs = list(
+ /obj/item/stack/rods = 1,
+ /obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
+ /obj/item/reagent_containers/food/snacks/bun = 1,
+ /datum/reagent/consumable/mustard = 5,
+ /datum/reagent/consumable/ketchup = 5
+ )
+ result = /obj/item/reagent_containers/food/snacks/corndog
+ subcategory = CAT_MEAT
+
/datum/crafting_recipe/food/ratkebab
name = "Rat Kebab"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index 931a78212f..365cf499bb 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -23,7 +23,7 @@
result = /obj/item/reagent_containers/food/snacks/donut
subcategory = CAT_PASTRY
-/datum/crafting_recipe/food/donut
+/datum/crafting_recipe/food/donut/semen
time = 15
name = "Semen donut"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
index 81824dc4b8..30c265e237 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
@@ -214,4 +214,13 @@
/obj/item/slime_extract = 1
)
result = /obj/item/reagent_containers/food/snacks/pie/cocolavatart
+ subcategory = CAT_PIE
+
+/datum/crafting_recipe/food/peachpie
+ name = "Peach Pie"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/pie/plain = 1,
+ /obj/item/reagent_containers/food/snacks/grown/peach = 3
+ )
+ result = /obj/item/reagent_containers/food/snacks/pie/peachpie
subcategory = CAT_PIE
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm
index 107a6a94f9..0902052a11 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -1,7 +1,7 @@
// Starthistle
/obj/item/seeds/starthistle
name = "pack of starthistle seeds"
- desc = "A robust species of weed that often springs up in-between the cracks of spaceship parking lots."
+ desc = "A robust species of weed that often springs up in-between the cracks of spaceship parking lots. Grind down these seeds for a substitution for mustardgrind."
icon_state = "seed-starthistle"
species = "starthistle"
plantname = "Starthistle"
@@ -9,9 +9,10 @@
endurance = 50 // damm pesky weeds
maturation = 5
production = 1
- yield = 2
+ yield = 6
potency = 10
growthstages = 3
+ grind_results = list("mustardgrind" = 1)
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy)
mutatelist = list(/obj/item/seeds/harebell)
diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm
index d9e775acc0..06cbb1df0c 100644
--- a/code/modules/hydroponics/grown/tea_coffee.dm
+++ b/code/modules/hydroponics/grown/tea_coffee.dm
@@ -33,7 +33,7 @@
species = "teaastra"
plantname = "Tea Astra Plant"
product = /obj/item/reagent_containers/food/snacks/grown/tea/astra
- mutatelist = list()
+ mutatelist = list(/obj/item/seeds/tea/catnip)
reagents_add = list("synaptizine" = 0.1, "vitamin" = 0.04, "teapowder" = 0.1)
rarity = 20
@@ -44,6 +44,24 @@
filling_color = "#4582B4"
grind_results = list("teapowder" = 0, "salglu_solution" = 0)
+// Kitty drugs
+/obj/item/seeds/tea/catnip
+ name = "pack of catnip seeds"
+ icon_state = "seed-catnip"
+ desc = "Long stocks with flowering tips that has a chemical to make feline attracted to it."
+ species = "catnip"
+ plantname = "Catnip Plant"
+ growthstages = 3
+ product = /obj/item/reagent_containers/food/snacks/grown/tea/catnip
+ reagents_add = list("catnip" = 0.1, "vitamin" = 0.06, "teapowder" = 0.3)
+ rarity = 50
+
+/obj/item/reagent_containers/food/snacks/grown/tea/catnip
+ seed = /obj/item/seeds/tea/catnip
+ name = "Catnip buds"
+ icon_state = "catnip_leaves"
+ filling_color = "#4582B4"
+ grind_results = list("catnp" = 2, "water" = 1)
// Coffee
/obj/item/seeds/coffee
diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm
index 4b7b175240..f99bf65071 100644
--- a/code/modules/jobs/job_exp.dm
+++ b/code/modules/jobs/job_exp.dm
@@ -8,6 +8,8 @@ GLOBAL_PROTECT(exp_to_update)
return 0
if(!CONFIG_GET(flag/use_exp_tracking))
return 0
+ if(!SSdbcore.Connect())
+ return 0
if(!exp_requirements || !exp_type)
return 0
if(!job_is_xp_locked(src.title))
diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/_job.dm
similarity index 88%
rename from code/modules/jobs/job_types/job.dm
rename to code/modules/jobs/job_types/_job.dm
index 9549b6100c..2eeffa8b7a 100644
--- a/code/modules/jobs/job_types/job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -1,240 +1,245 @@
-/datum/job
- //The name of the job
- var/title = "NOPE"
-
- //Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access
- var/list/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population)
- var/list/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!)
-
- //Determines who can demote this position
- var/department_head = list()
-
- //Tells the given channels that the given mob is the new department head. See communications.dm for valid channels.
- var/list/head_announce = null
-
- //Bitflags for the job
- var/flag = 0
- var/department_flag = 0
-
- //Players will be allowed to spawn in as jobs that are set to "Station"
- var/faction = "None"
-
- //How many players can be this job
- var/total_positions = 0
-
- //How many players can spawn in as this job
- var/spawn_positions = 0
-
- //How many players have this job
- var/current_positions = 0
-
- //Supervisors, who this person answers to directly
- var/supervisors = ""
-
- //Sellection screen color
- var/selection_color = "#ffffff"
-
-
- //If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect.
- var/req_admin_notify
-
- var/custom_spawn_text
-
- //If you have the use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.)
- var/minimal_player_age = 0
-
- var/outfit = null
-
- var/exp_requirements = 0
-
- var/exp_type = ""
- var/exp_type_department = ""
-
- //The amount of good boy points playing this role will earn you towards a higher chance to roll antagonist next round
- //can be overridden by antag_rep.txt config
- var/antag_rep = 10
-
- var/list/mind_traits // Traits added to the mind of the mob assigned this job
-
- var/list/blacklisted_quirks //list of quirk typepaths blacklisted.
-
-//Only override this proc
-//H is usually a human unless an /equip override transformed it
-/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
- //do actions on H but send messages to M as the key may not have been transferred_yet
- if(mind_traits)
- for(var/t in mind_traits)
- ADD_TRAIT(H.mind, t, JOB_TRAIT)
-
-/datum/job/proc/announce(mob/living/carbon/human/H)
- if(head_announce)
- announce_head(H, head_announce)
-
-/datum/job/proc/override_latejoin_spawn(mob/living/carbon/human/H) //Return TRUE to force latejoining to not automatically place the person in latejoin shuttle/whatever.
- return FALSE
-
-//Used for a special check of whether to allow a client to latejoin as this job.
-/datum/job/proc/special_check_latejoin(client/C)
- return TRUE
-
-/datum/job/proc/GetAntagRep()
- . = CONFIG_GET(keyed_list/antag_rep)[lowertext(title)]
- if(. == null)
- return antag_rep
-
-//Don't override this unless the job transforms into a non-human (Silicons do this for example)
-/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, datum/outfit/outfit_override = null)
- if(!H)
- return FALSE
-
- if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions))
- if(H.dna.species.id != "human")
- H.set_species(/datum/species/human)
- H.apply_pref_name("human", H.client)
-
- //Equip the rest of the gear
- H.dna.species.before_equip_job(src, H, visualsOnly)
-
- if(outfit_override || outfit)
- H.equipOutfit(outfit_override ? outfit_override : outfit, visualsOnly)
-
- H.dna.species.after_equip_job(src, H, visualsOnly)
-
- if(!visualsOnly && announce)
- announce(H)
-
-/datum/job/proc/get_access()
- if(!config) //Needed for robots.
- return src.minimal_access.Copy()
-
- . = list()
-
- if(CONFIG_GET(flag/jobs_have_minimal_access))
- . = src.minimal_access.Copy()
- else
- . = src.access.Copy()
-
- if(CONFIG_GET(flag/everyone_has_maint_access)) //Config has global maint access set
- . |= list(ACCESS_MAINT_TUNNELS)
-
-/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
- if(H && GLOB.announcement_systems.len)
- //timer because these should come after the captain announcement
- SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/addtimer, CALLBACK(pick(GLOB.announcement_systems), /obj/machinery/announcement_system/proc/announce, "NEWHEAD", H.real_name, H.job, channels), 1))
-
-//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
-/datum/job/proc/player_old_enough(client/C)
- if(available_in_days(C) == 0)
- return TRUE //Available in 0 days = available right now = player is old enough to play.
- return FALSE
-
-
-/datum/job/proc/available_in_days(client/C)
- if(!C)
- return 0
- if(!CONFIG_GET(flag/use_age_restriction_for_jobs))
- return 0
- if(C.prefs.db_flags & DB_FLAG_EXEMPT)
- return 0
- if(!isnum(C.player_age))
- return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced
- if(!isnum(minimal_player_age))
- return 0
-
- return max(0, minimal_player_age - C.player_age)
-
-/datum/job/proc/config_check()
- return TRUE
-
-/datum/job/proc/map_check()
- return TRUE
-
-
-/datum/outfit/job
- name = "Standard Gear"
-
- var/jobtype = null
-
- uniform = /obj/item/clothing/under/color/grey
- id = /obj/item/card/id
- ears = /obj/item/radio/headset
- belt = /obj/item/pda
- back = /obj/item/storage/backpack
- shoes = /obj/item/clothing/shoes/sneakers/black
-
- var/backpack = /obj/item/storage/backpack
- var/satchel = /obj/item/storage/backpack/satchel
- var/duffelbag = /obj/item/storage/backpack/duffelbag
- var/box = /obj/item/storage/box/survival
-
- var/pda_slot = SLOT_BELT
-
-/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- switch(H.backbag)
- if(GBACKPACK)
- back = /obj/item/storage/backpack //Grey backpack
- if(GSATCHEL)
- back = /obj/item/storage/backpack/satchel //Grey satchel
- if(GDUFFELBAG)
- back = /obj/item/storage/backpack/duffelbag //Grey Duffel bag
- if(LSATCHEL)
- back = /obj/item/storage/backpack/satchel/leather //Leather Satchel
- if(DSATCHEL)
- back = satchel //Department satchel
- if(DDUFFELBAG)
- back = duffelbag //Department duffel bag
- else
- back = backpack //Department backpack
-
- if(box)
- if(!backpack_contents)
- backpack_contents = list()
- backpack_contents.Insert(1, box) // Box always takes a first slot in backpack
- backpack_contents[box] = 1
-
- //converts the uniform string into the path we'll wear, whether it's the skirt or regular variant
- var/holder
- if(H.jumpsuit_style == PREF_SKIRT)
- holder = "[uniform]/skirt"
- if(!text2path(holder))
- holder = "[uniform]"
- else
- holder = "[uniform]"
- uniform = text2path(holder)
-
-/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
- return
-
- var/datum/job/J = SSjob.GetJobType(jobtype)
- if(!J)
- J = SSjob.GetJob(H.job)
-
- if(H.nameless && J.dresscodecompliant)
- if(J.title in GLOB.command_positions)
- H.real_name = J.title
- else
- H.real_name = "[J.title] #[rand(10000, 99999)]"
-
- var/obj/item/card/id/C = H.wear_id
- if(istype(C))
- C.access = J.get_access()
- shuffle_inplace(C.access) // Shuffle access list to make NTNet passkeys less predictable
- C.registered_name = H.real_name
- C.assignment = J.title
- C.update_label()
- H.sec_hud_set_ID()
-
- var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot)
- if(istype(PDA))
- PDA.owner = H.real_name
- PDA.ownjob = J.title
- PDA.update_label()
-
-/datum/outfit/job/get_chameleon_disguise_info()
- var/list/types = ..()
- types -= /obj/item/storage/backpack //otherwise this will override the actual backpacks
- types += backpack
- types += satchel
- types += duffelbag
- return types
+/datum/job
+ //The name of the job , used for preferences, bans and more. Make sure you know what you're doing before changing this.
+ var/title = "NOPE"
+
+ //Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access
+ var/list/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population)
+ var/list/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!)
+
+ //Determines who can demote this position
+ var/department_head = list()
+
+ //Tells the given channels that the given mob is the new department head. See communications.dm for valid channels.
+ var/list/head_announce = null
+
+ //Bitflags for the job
+ var/flag = NONE //Deprecated
+ var/department_flag = NONE //Deprecated
+// var/auto_deadmin_role_flags = NONE
+
+ //Players will be allowed to spawn in as jobs that are set to "Station"
+ var/faction = "None"
+
+ //How many players can be this job
+ var/total_positions = 0
+
+ //How many players can spawn in as this job
+ var/spawn_positions = 0
+
+ //How many players have this job
+ var/current_positions = 0
+
+ //Supervisors, who this person answers to directly
+ var/supervisors = ""
+
+ //Sellection screen color
+ var/selection_color = "#ffffff"
+
+
+ //If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect.
+ var/req_admin_notify
+
+ // This is for Citadel specific tweaks to job notices.
+ var/custom_spawn_text
+
+ //If you have the use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.)
+ var/minimal_player_age = 0
+
+ var/outfit = null
+
+ var/exp_requirements = 0
+
+ var/exp_type = ""
+ var/exp_type_department = ""
+
+ //The amount of good boy points playing this role will earn you towards a higher chance to roll antagonist next round
+ //can be overridden by antag_rep.txt config
+ var/antag_rep = 10
+
+ var/list/mind_traits // Traits added to the mind of the mob assigned this job
+ var/list/blacklisted_quirks //list of quirk typepaths blacklisted.
+
+ var/display_order = JOB_DISPLAY_ORDER_DEFAULT
+
+//Only override this proc
+//H is usually a human unless an /equip override transformed it
+/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
+ //do actions on H but send messages to M as the key may not have been transferred_yet
+ if(mind_traits)
+ for(var/t in mind_traits)
+ ADD_TRAIT(H.mind, t, JOB_TRAIT)
+
+/datum/job/proc/announce(mob/living/carbon/human/H)
+ if(head_announce)
+ announce_head(H, head_announce)
+
+/datum/job/proc/override_latejoin_spawn(mob/living/carbon/human/H) //Return TRUE to force latejoining to not automatically place the person in latejoin shuttle/whatever.
+ return FALSE
+
+//Used for a special check of whether to allow a client to latejoin as this job.
+/datum/job/proc/special_check_latejoin(client/C)
+ return TRUE
+
+/datum/job/proc/GetAntagRep()
+ . = CONFIG_GET(keyed_list/antag_rep)[lowertext(title)]
+ if(. == null)
+ return antag_rep
+
+//Don't override this unless the job transforms into a non-human (Silicons do this for example)
+/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, datum/outfit/outfit_override = null, client/preference_source)
+ if(!H)
+ return FALSE
+
+ if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions))
+ if(H.dna.species.id != "human")
+ H.set_species(/datum/species/human)
+ H.apply_pref_name("human", preference_source)
+
+ //Equip the rest of the gear
+ H.dna.species.before_equip_job(src, H, visualsOnly)
+
+ if(outfit_override || outfit)
+ H.equipOutfit(outfit_override ? outfit_override : outfit, visualsOnly)
+
+ H.dna.species.after_equip_job(src, H, visualsOnly)
+
+ if(!visualsOnly && announce)
+ announce(H)
+
+/datum/job/proc/get_access()
+ if(!config) //Needed for robots.
+ return src.minimal_access.Copy()
+
+ . = list()
+
+ if(CONFIG_GET(flag/jobs_have_minimal_access))
+ . = src.minimal_access.Copy()
+ else
+ . = src.access.Copy()
+
+ if(CONFIG_GET(flag/everyone_has_maint_access)) //Config has global maint access set
+ . |= list(ACCESS_MAINT_TUNNELS)
+
+/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
+ if(H && GLOB.announcement_systems.len)
+ //timer because these should come after the captain announcement
+ SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/addtimer, CALLBACK(pick(GLOB.announcement_systems), /obj/machinery/announcement_system/proc/announce, "NEWHEAD", H.real_name, H.job, channels), 1))
+
+//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
+/datum/job/proc/player_old_enough(client/C)
+ if(available_in_days(C) == 0)
+ return TRUE //Available in 0 days = available right now = player is old enough to play.
+ return FALSE
+
+
+/datum/job/proc/available_in_days(client/C)
+ if(!C)
+ return 0
+ if(!CONFIG_GET(flag/use_age_restriction_for_jobs))
+ return 0
+ if(!SSdbcore.Connect())
+ return 0 //Without a database connection we can't get a player's age so we'll assume they're old enough for all jobs
+ if(C.prefs.db_flags & DB_FLAG_EXEMPT)
+ return 0
+ if(!isnum(minimal_player_age))
+ return 0
+
+ return max(0, minimal_player_age - C.player_age)
+
+/datum/job/proc/config_check()
+ return TRUE
+
+/datum/job/proc/map_check()
+ return TRUE
+
+/datum/job/proc/radio_help_message(mob/M)
+ to_chat(M, "
Prefix your message with :h to speak on your department's radio. To see other prefixes, look closely at your headset. ")
+
+/datum/outfit/job
+ name = "Standard Gear"
+
+ var/jobtype = null
+
+ uniform = /obj/item/clothing/under/color/grey
+ id = /obj/item/card/id
+ ears = /obj/item/radio/headset
+ belt = /obj/item/pda
+ back = /obj/item/storage/backpack
+ shoes = /obj/item/clothing/shoes/sneakers/black
+ box = /obj/item/storage/box/survival
+
+ var/backpack = /obj/item/storage/backpack
+ var/satchel = /obj/item/storage/backpack/satchel
+ var/duffelbag = /obj/item/storage/backpack/duffelbag
+
+ var/pda_slot = SLOT_BELT
+
+/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ switch(H.backbag)
+ if(GBACKPACK)
+ back = /obj/item/storage/backpack //Grey backpack
+ if(GSATCHEL)
+ back = /obj/item/storage/backpack/satchel //Grey satchel
+ if(GDUFFELBAG)
+ back = /obj/item/storage/backpack/duffelbag //Grey Duffel bag
+ if(LSATCHEL)
+ back = /obj/item/storage/backpack/satchel/leather //Leather Satchel
+ if(DSATCHEL)
+ back = satchel //Department satchel
+ if(DDUFFELBAG)
+ back = duffelbag //Department duffel bag
+ else
+ back = backpack //Department backpack
+
+ //converts the uniform string into the path we'll wear, whether it's the skirt or regular variant
+ var/holder
+ if(H.jumpsuit_style == PREF_SKIRT)
+ holder = "[uniform]/skirt"
+ if(!text2path(holder))
+ holder = "[uniform]"
+ else
+ holder = "[uniform]"
+ uniform = text2path(holder)
+
+/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ if(visualsOnly)
+ return
+
+ var/datum/job/J = SSjob.GetJobType(jobtype)
+ if(!J)
+ J = SSjob.GetJob(H.job)
+
+ if(H.nameless && J.dresscodecompliant)
+ if(J.title in GLOB.command_positions)
+ H.real_name = J.title
+ else
+ H.real_name = "[J.title] #[rand(10000, 99999)]"
+
+ var/obj/item/card/id/C = H.wear_id
+ if(istype(C))
+ C.access = J.get_access()
+ shuffle_inplace(C.access) // Shuffle access list to make NTNet passkeys less predictable
+ C.registered_name = H.real_name
+ C.assignment = J.title
+ C.update_label()
+ H.sec_hud_set_ID()
+
+ var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot)
+ if(istype(PDA))
+ PDA.owner = H.real_name
+ PDA.ownjob = J.title
+ PDA.update_label()
+
+/datum/outfit/job/get_chameleon_disguise_info()
+ var/list/types = ..()
+ types -= /obj/item/storage/backpack //otherwise this will override the actual backpacks
+ types += backpack
+ types += satchel
+ types += duffelbag
+ return types
+
+//Warden and regular officers add this result to their get_access()
+/datum/job/proc/check_config_for_sec_maint()
+ if(CONFIG_GET(flag/security_has_maint_access))
+ return list(ACCESS_MAINT_TUNNELS)
+ return list()
diff --git a/code/modules/jobs/job_types/silicon.dm b/code/modules/jobs/job_types/ai.dm
similarity index 71%
rename from code/modules/jobs/job_types/silicon.dm
rename to code/modules/jobs/job_types/ai.dm
index ab963eb8f3..4bcfab5836 100644
--- a/code/modules/jobs/job_types/silicon.dm
+++ b/code/modules/jobs/job_types/ai.dm
@@ -1,90 +1,69 @@
-/*
-AI
-*/
-/datum/job/ai
- title = "AI"
- flag = AI_JF
- department_flag = ENGSEC
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- selection_color = "#ccffcc"
- supervisors = "your laws"
- req_admin_notify = TRUE
- minimal_player_age = 30
- exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_SILICON
- var/do_special_check = TRUE
-
-/datum/job/ai/equip(mob/living/carbon/human/H, visualsOnly, announce, latejoin, outfit_override)
- . = H.AIize(latejoin)
-
-/datum/job/ai/after_spawn(mob/H, mob/M, latejoin)
- . = ..()
- if(latejoin)
- var/obj/structure/AIcore/latejoin_inactive/lateJoinCore
- for(var/obj/structure/AIcore/latejoin_inactive/P in GLOB.latejoin_ai_cores)
- if(P.is_available())
- lateJoinCore = P
- GLOB.latejoin_ai_cores -= P
- break
- if(lateJoinCore)
- lateJoinCore.available = FALSE
- H.forceMove(lateJoinCore.loc)
- qdel(lateJoinCore)
- var/mob/living/silicon/ai/AI = H
- AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked.
- AI.set_core_display_icon(null, M.client)
-
- //we may have been created after our borg
- if(SSticker.current_state == GAME_STATE_SETTING_UP)
- for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs)
- if(!R.connected_ai)
- R.TryConnectToAI()
-
- if(latejoin)
- announce(AI)
-
-/datum/job/ai/override_latejoin_spawn()
- return TRUE
-
-/datum/job/ai/special_check_latejoin(client/C)
- if(!do_special_check)
- return TRUE
- for(var/i in GLOB.latejoin_ai_cores)
- var/obj/structure/AIcore/latejoin_inactive/LAI = i
- if(istype(LAI))
- if(LAI.is_available())
- return TRUE
- return FALSE
-
-/datum/job/ai/announce(mob/living/silicon/ai/AI)
- . = ..()
- SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "[AI] has been downloaded to an empty bluespace-networked AI core at [AREACOORD(AI)]."))
-
-/datum/job/ai/config_check()
- return CONFIG_GET(flag/allow_ai)
-
-/*
-Cyborg
-*/
-/datum/job/cyborg
- title = "Cyborg"
- flag = CYBORG
- department_flag = ENGSEC
- faction = "Station"
- total_positions = 0
- spawn_positions = 1
- supervisors = "your laws and the AI" //Nodrak
- selection_color = "#ddffdd"
- minimal_player_age = 21
- exp_requirements = 120
- exp_type = EXP_TYPE_CREW
-
-/datum/job/cyborg/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, outfit_override = null)
- return H.Robotize(FALSE, latejoin)
-
-/datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M)
- R.updatename(M.client)
- R.gender = NEUTER
+/datum/job/ai
+ title = "AI"
+ flag = AI_JF
+// auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ selection_color = "#ccffcc"
+ supervisors = "your laws"
+ req_admin_notify = TRUE
+ minimal_player_age = 30
+ exp_requirements = 180
+ exp_type = EXP_TYPE_CREW
+ exp_type_department = EXP_TYPE_SILICON
+ display_order = JOB_DISPLAY_ORDER_AI
+ var/do_special_check = TRUE
+
+/datum/job/ai/equip(mob/living/carbon/human/H, visualsOnly, announce, latejoin, datum/outfit/outfit_override, client/preference_source = null)
+ if(visualsOnly)
+ CRASH("dynamic preview is unsupported")
+ . = H.AIize(latejoin,preference_source)
+
+/datum/job/ai/after_spawn(mob/H, mob/M, latejoin)
+ . = ..()
+ if(latejoin)
+ var/obj/structure/AIcore/latejoin_inactive/lateJoinCore
+ for(var/obj/structure/AIcore/latejoin_inactive/P in GLOB.latejoin_ai_cores)
+ if(P.is_available())
+ lateJoinCore = P
+ GLOB.latejoin_ai_cores -= P
+ break
+ if(lateJoinCore)
+ lateJoinCore.available = FALSE
+ H.forceMove(lateJoinCore.loc)
+ qdel(lateJoinCore)
+ var/mob/living/silicon/ai/AI = H
+ AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked.
+ AI.set_core_display_icon(null, M.client)
+
+ //we may have been created after our borg
+ if(SSticker.current_state == GAME_STATE_SETTING_UP)
+ for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs)
+ if(!R.connected_ai)
+ R.TryConnectToAI()
+
+ if(latejoin)
+ announce(AI)
+
+/datum/job/ai/override_latejoin_spawn()
+ return TRUE
+
+/datum/job/ai/special_check_latejoin(client/C)
+ if(!do_special_check)
+ return TRUE
+ for(var/i in GLOB.latejoin_ai_cores)
+ var/obj/structure/AIcore/latejoin_inactive/LAI = i
+ if(istype(LAI))
+ if(LAI.is_available())
+ return TRUE
+ return FALSE
+
+/datum/job/ai/announce(mob/living/silicon/ai/AI)
+ . = ..()
+ SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "[AI] has been downloaded to an empty bluespace-networked AI core at [AREACOORD(AI)]."))
+
+/datum/job/ai/config_check()
+ return CONFIG_GET(flag/allow_ai)
+
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index ce6eea97b0..c04560f849 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -14,7 +14,7 @@ Assistant
minimal_access = list() //See /datum/job/assistant/get_access()
outfit = /datum/outfit/job/assistant
antag_rep = 7
-
+ display_order = JOB_DISPLAY_ORDER_ASSISTANT
/datum/job/assistant/get_access()
if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set
diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm
new file mode 100644
index 0000000000..93775beca9
--- /dev/null
+++ b/code/modules/jobs/job_types/atmospheric_technician.dm
@@ -0,0 +1,44 @@
+/datum/job/atmos
+ title = "Atmospheric Technician"
+ flag = ATMOSTECH
+ department_head = list("Chief Engineer")
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 3
+ spawn_positions = 2
+ supervisors = "the chief engineer"
+ selection_color = "#ff9b3d"
+ exp_requirements = 60
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/atmos
+
+ access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM)
+ display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN
+
+/datum/outfit/job/atmos
+ name = "Atmospheric Technician"
+ jobtype = /datum/job/atmos
+
+ belt = /obj/item/storage/belt/utility/atmostech
+ l_pocket = /obj/item/pda/atmos
+ ears = /obj/item/radio/headset/headset_eng
+ uniform = /obj/item/clothing/under/rank/atmospheric_technician
+ r_pocket = /obj/item/analyzer
+
+ backpack = /obj/item/storage/backpack/industrial
+ satchel = /obj/item/storage/backpack/satchel/eng
+ duffelbag = /obj/item/storage/backpack/duffelbag/engineering
+ box = /obj/item/storage/box/engineer
+ pda_slot = SLOT_L_STORE
+ backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
+
+/datum/outfit/job/atmos/rig
+ name = "Atmospheric Technician (Hardsuit)"
+
+ mask = /obj/item/clothing/mask/gas
+ suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos
+ suit_store = /obj/item/tank/internals/oxygen
+ internals_slot = SLOT_S_STORE
diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm
new file mode 100644
index 0000000000..0ace449757
--- /dev/null
+++ b/code/modules/jobs/job_types/bartender.dm
@@ -0,0 +1,30 @@
+/datum/job/bartender
+ title = "Bartender"
+ flag = BARTENDER
+ department_head = list("Head of Personnel")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the head of personnel"
+ selection_color = "#bbe291"
+ exp_type_department = EXP_TYPE_SERVICE // This is so the jobs menu can work properly
+
+ outfit = /datum/outfit/job/bartender
+
+ access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
+ display_order = JOB_DISPLAY_ORDER_BARTENDER
+
+/datum/outfit/job/bartender
+ name = "Bartender"
+ jobtype = /datum/job/bartender
+
+ glasses = /obj/item/clothing/glasses/sunglasses/reagent
+ belt = /obj/item/pda/bar
+ ears = /obj/item/radio/headset/headset_srv
+ uniform = /obj/item/clothing/under/rank/bartender
+ suit = /obj/item/clothing/suit/armor/vest
+ backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
+ shoes = /obj/item/clothing/shoes/laceup
+
diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm
new file mode 100644
index 0000000000..e6338d9b0a
--- /dev/null
+++ b/code/modules/jobs/job_types/botanist.dm
@@ -0,0 +1,32 @@
+/datum/job/hydro
+ title = "Botanist"
+ flag = BOTANIST
+ department_head = list("Head of Personnel")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 3
+ spawn_positions = 2
+ supervisors = "the head of personnel"
+ selection_color = "#bbe291"
+
+ outfit = /datum/outfit/job/botanist
+
+ access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
+ display_order = JOB_DISPLAY_ORDER_BOTANIST
+
+/datum/outfit/job/botanist
+ name = "Botanist"
+ jobtype = /datum/job/hydro
+
+ belt = /obj/item/pda/botanist
+ ears = /obj/item/radio/headset/headset_srv
+ uniform = /obj/item/clothing/under/rank/hydroponics
+ suit = /obj/item/clothing/suit/apron
+ gloves =/obj/item/clothing/gloves/botanic_leather
+ suit_store = /obj/item/plant_analyzer
+
+ backpack = /obj/item/storage/backpack/botany
+ satchel = /obj/item/storage/backpack/satchel/hyd
+
+
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
old mode 100755
new mode 100644
index b3c952f536..7e832d6975
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -1,114 +1,66 @@
-/*
-Captain
-*/
-/datum/job/captain
- title = "Captain"
- flag = CAPTAIN
- department_head = list("CentCom")
- department_flag = ENGSEC
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "Nanotrasen officials and Space law"
- selection_color = "#ccccff"
- req_admin_notify = 1
- minimal_player_age = 14
- exp_requirements = 180
- exp_type = EXP_TYPE_CREW
-
- outfit = /datum/outfit/job/captain
-
- access = list() //See get_access()
- minimal_access = list() //See get_access()
-
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
-
-/datum/job/captain/get_access()
- return get_all_accesses()
-
-/datum/job/captain/announce(mob/living/carbon/human/H)
- ..()
- SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.nameless ? "" : "[H.real_name] "]on deck!"))
-
-/datum/outfit/job/captain
- name = "Captain"
- jobtype = /datum/job/captain
-
- id = /obj/item/card/id/gold
- belt = /obj/item/pda/captain
- glasses = /obj/item/clothing/glasses/sunglasses
- ears = /obj/item/radio/headset/heads/captain/alt
- gloves = /obj/item/clothing/gloves/color/captain
- uniform = /obj/item/clothing/under/rank/captain
- suit = /obj/item/clothing/suit/armor/vest/capcarapace
- shoes = /obj/item/clothing/shoes/sneakers/brown
- head = /obj/item/clothing/head/caphat
- backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1)
-
- backpack = /obj/item/storage/backpack/captain
- satchel = /obj/item/storage/backpack/satchel/cap
- duffelbag = /obj/item/storage/backpack/duffelbag/captain
-
- implants = list(/obj/item/implant/mindshield)
- accessory = /obj/item/clothing/accessory/medal/gold/captain
-
- chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
-
-/datum/outfit/job/captain/hardsuit
- name = "Captain (Hardsuit)"
-
- mask = /obj/item/clothing/mask/gas/sechailer
- suit = /obj/item/clothing/suit/space/hardsuit/captain
- suit_store = /obj/item/tank/internals/oxygen
-
-/*
-Head of Personnel
-*/
-/datum/job/hop
- title = "Head of Personnel"
- flag = HOP
- department_head = list("Captain")
- department_flag = CIVILIAN
- head_announce = list(RADIO_CHANNEL_SERVICE)
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the captain"
- selection_color = "#ddddff"
- req_admin_notify = 1
- minimal_player_age = 10
- exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_SUPPLY
-
- outfit = /datum/outfit/job/hop
-
- access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
- ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
- ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
- ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
- ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
- ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
- ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
- ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
- ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
- ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
- ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
-
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity)
-
-/datum/outfit/job/hop
- name = "Head of Personnel"
- jobtype = /datum/job/hop
-
- id = /obj/item/card/id/silver
- belt = /obj/item/pda/heads/hop
- ears = /obj/item/radio/headset/heads/hop
- uniform = /obj/item/clothing/under/rank/head_of_personnel
- shoes = /obj/item/clothing/shoes/sneakers/brown
- head = /obj/item/clothing/head/hopcap
- backpack_contents = list(/obj/item/storage/box/ids=1,\
- /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
-
- chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop)
+/datum/job/captain
+ title = "Captain"
+ flag = CAPTAIN
+// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY //:eyes:
+ department_head = list("CentCom")
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "Nanotrasen officials and Space law"
+ selection_color = "#aac1ee"
+ req_admin_notify = 1
+ minimal_player_age = 14
+ exp_requirements = 180
+ exp_type = EXP_TYPE_CREW
+ exp_type_department = EXP_TYPE_COMMAND
+
+ outfit = /datum/outfit/job/captain
+
+ access = list() //See get_access()
+ minimal_access = list() //See get_access()
+
+ mind_traits = list(TRAIT_CAPTAIN_METABOLISM)
+// mind_traits = list(TRAIT_DISK_VERIFIER)
+
+ display_order = JOB_DISPLAY_ORDER_CAPTAIN
+
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
+
+/datum/job/captain/get_access()
+ return get_all_accesses()
+
+/datum/job/captain/announce(mob/living/carbon/human/H)
+ ..()
+ SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.nameless ? "" : "[H.real_name] "]on deck!"))
+
+/datum/outfit/job/captain
+ name = "Captain"
+ jobtype = /datum/job/captain
+
+ id = /obj/item/card/id/gold
+ belt = /obj/item/pda/captain
+ glasses = /obj/item/clothing/glasses/sunglasses
+ ears = /obj/item/radio/headset/heads/captain/alt
+ gloves = /obj/item/clothing/gloves/color/captain
+ uniform = /obj/item/clothing/under/rank/captain
+ suit = /obj/item/clothing/suit/armor/vest/capcarapace
+ shoes = /obj/item/clothing/shoes/sneakers/brown
+ head = /obj/item/clothing/head/caphat
+ backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1)
+
+ backpack = /obj/item/storage/backpack/captain
+ satchel = /obj/item/storage/backpack/satchel/cap
+ duffelbag = /obj/item/storage/backpack/duffelbag/captain
+
+ implants = list(/obj/item/implant/mindshield)
+ accessory = /obj/item/clothing/accessory/medal/gold/captain
+
+ chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
+
+/datum/outfit/job/captain/hardsuit
+ name = "Captain (Hardsuit)"
+
+ mask = /obj/item/clothing/mask/gas/sechailer
+ suit = /obj/item/clothing/suit/space/hardsuit/captain
+ suit_store = /obj/item/tank/internals/oxygen
diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm
deleted file mode 100644
index 8e24ece655..0000000000
--- a/code/modules/jobs/job_types/cargo_service.dm
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
-Quartermaster
-*/
-/datum/job/qm
- title = "Quartermaster"
- flag = QUARTERMASTER
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- head_announce = list(RADIO_CHANNEL_SUPPLY)
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the head of personnel"
- selection_color = "#d7b088"
-
- outfit = /datum/outfit/job/quartermaster
-
- access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
- minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
-
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
-
-/datum/outfit/job/quartermaster
- name = "Quartermaster"
- jobtype = /datum/job/qm
-
- belt = /obj/item/pda/quartermaster
- ears = /obj/item/radio/headset/headset_cargo
- uniform = /obj/item/clothing/under/rank/cargo
- shoes = /obj/item/clothing/shoes/sneakers/brown
- glasses = /obj/item/clothing/glasses/sunglasses
- l_hand = /obj/item/clipboard
-
- chameleon_extras = /obj/item/stamp/qm
-
-/*
-Cargo Technician
-*/
-/datum/job/cargo_tech
- title = "Cargo Technician"
- flag = CARGOTECH
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 3
- spawn_positions = 2
- supervisors = "the quartermaster and the head of personnel"
- selection_color = "#dcba97"
-
- outfit = /datum/outfit/job/cargo_tech
-
- access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/cargo_tech
- name = "Cargo Technician"
- jobtype = /datum/job/cargo_tech
-
- belt = /obj/item/pda/cargo
- ears = /obj/item/radio/headset/headset_cargo
- uniform = /obj/item/clothing/under/rank/cargotech
- l_hand = /obj/item/export_scanner
-
-/*
-Shaft Miner
-*/
-/datum/job/mining
- title = "Shaft Miner"
- flag = MINER
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 3
- spawn_positions = 3
- supervisors = "the quartermaster and the head of personnel"
- selection_color = "#dcba97"
- custom_spawn_text = "Remember, you are a miner, not a hunter. Hunting monsters is not a requirement of your job, the only requirement of your job is to provide materials for the station. Don't be afraid to run away if you're inexperienced with fighting the mining area's locals."
-
- outfit = /datum/outfit/job/miner
-
- access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/miner
- name = "Shaft Miner (Lavaland)"
- jobtype = /datum/job/mining
-
- belt = /obj/item/pda/shaftminer
- ears = /obj/item/radio/headset/headset_cargo/mining
- shoes = /obj/item/clothing/shoes/workboots/mining
- gloves = /obj/item/clothing/gloves/color/black
- uniform = /obj/item/clothing/under/rank/miner/lavaland
- l_pocket = /obj/item/reagent_containers/hypospray/medipen/survival
- r_pocket = /obj/item/storage/bag/ore //causes issues if spawned in backpack
- backpack_contents = list(
- /obj/item/flashlight/seclite=1,\
- /obj/item/kitchen/knife/combat/survival=1,\
- /obj/item/mining_voucher=1,\
- /obj/item/suit_voucher=1,\
- /obj/item/stack/marker_beacon/ten=1)
-
- backpack = /obj/item/storage/backpack/explorer
- satchel = /obj/item/storage/backpack/satchel/explorer
- duffelbag = /obj/item/storage/backpack/duffelbag
- box = /obj/item/storage/box/survival_mining
-
- chameleon_extras = /obj/item/gun/energy/kinetic_accelerator
-
-/datum/outfit/job/miner/asteroid
- name = "Shaft Miner (Asteroid)"
- uniform = /obj/item/clothing/under/rank/miner
- shoes = /obj/item/clothing/shoes/workboots
-
-/datum/outfit/job/miner/equipped
- name = "Shaft Miner (Lavaland + Equipment)"
- suit = /obj/item/clothing/suit/hooded/explorer/standard
- mask = /obj/item/clothing/mask/gas/explorer
- glasses = /obj/item/clothing/glasses/meson
- suit_store = /obj/item/tank/internals/oxygen
- internals_slot = SLOT_S_STORE
- backpack_contents = list(
- /obj/item/flashlight/seclite=1,\
- /obj/item/kitchen/knife/combat/survival=1,
- /obj/item/mining_voucher=1,
- /obj/item/t_scanner/adv_mining_scanner/lesser=1,
- /obj/item/gun/energy/kinetic_accelerator=1,\
- /obj/item/stack/marker_beacon/ten=1)
-
-/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
- if(visualsOnly)
- return
- if(istype(H.wear_suit, /obj/item/clothing/suit/hooded))
- var/obj/item/clothing/suit/hooded/S = H.wear_suit
- S.ToggleHood()
-
-/datum/outfit/job/miner/equipped/hardsuit
- name = "Shaft Miner (Equipment + Hardsuit)"
- suit = /obj/item/clothing/suit/space/hardsuit/mining
- mask = /obj/item/clothing/mask/breath
-
-
-/*
-Bartender
-*/
-/datum/job/bartender
- title = "Bartender"
- flag = BARTENDER
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the head of personnel"
- selection_color = "#bbe291"
-
- outfit = /datum/outfit/job/bartender
-
- access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
-
-
-/datum/outfit/job/bartender
- name = "Bartender"
- jobtype = /datum/job/bartender
-
- glasses = /obj/item/clothing/glasses/sunglasses/reagent
- belt = /obj/item/pda/bar
- ears = /obj/item/radio/headset/headset_srv
- uniform = /obj/item/clothing/under/rank/bartender
- suit = /obj/item/clothing/suit/armor/vest
- backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
- shoes = /obj/item/clothing/shoes/laceup
-
-/*
-Cook
-*/
-/datum/job/cook
- title = "Cook"
- flag = COOK
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 2
- spawn_positions = 1
- supervisors = "the head of personnel"
- selection_color = "#bbe291"
- var/cooks = 0 //Counts cooks amount
-
- outfit = /datum/outfit/job/cook
-
- access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/cook
- name = "Cook"
- jobtype = /datum/job/cook
-
- belt = /obj/item/pda/cook
- ears = /obj/item/radio/headset/headset_srv
- uniform = /obj/item/clothing/under/rank/chef
- suit = /obj/item/clothing/suit/toggle/chef
- head = /obj/item/clothing/head/chefhat
- mask = /obj/item/clothing/mask/fakemoustache/italian
- backpack_contents = list(/obj/item/sharpener = 1)
-
-/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
- var/datum/job/cook/J = SSjob.GetJobType(jobtype)
- if(J) // Fix for runtime caused by invalid job being passed
- if(J.cooks>0)//Cooks
- suit = /obj/item/clothing/suit/apron/chef
- head = /obj/item/clothing/head/soft/mime
- if(!visualsOnly)
- J.cooks++
-
-/datum/outfit/job/cook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
- if(visualsOnly)
- return
- var/list/possible_boxes = subtypesof(/obj/item/storage/box/ingredients)
- var/chosen_box = pick(possible_boxes)
- var/obj/item/storage/box/I = new chosen_box(src)
- H.equip_to_slot_or_del(I,SLOT_IN_BACKPACK)
- var/datum/martial_art/cqc/under_siege/justacook = new
- justacook.teach(H)
-
-/*
-Botanist
-*/
-/datum/job/hydro
- title = "Botanist"
- flag = BOTANIST
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 3
- spawn_positions = 2
- supervisors = "the head of personnel"
- selection_color = "#bbe291"
-
- outfit = /datum/outfit/job/botanist
-
- access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
- // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS
- // Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT
- // Given Morgue access because they have a viable means of cloning.
-
-
-/datum/outfit/job/botanist
- name = "Botanist"
- jobtype = /datum/job/hydro
-
- belt = /obj/item/pda/botanist
- ears = /obj/item/radio/headset/headset_srv
- uniform = /obj/item/clothing/under/rank/hydroponics
- suit = /obj/item/clothing/suit/apron
- gloves =/obj/item/clothing/gloves/botanic_leather
- suit_store = /obj/item/plant_analyzer
-
- backpack = /obj/item/storage/backpack/botany
- satchel = /obj/item/storage/backpack/satchel/hyd
-
-
-/*
-Janitor
-*/
-/datum/job/janitor
- title = "Janitor"
- flag = JANITOR
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 2
- spawn_positions = 1
- supervisors = "the head of personnel"
- selection_color = "#bbe291"
- var/global/janitors = 0
-
- outfit = /datum/outfit/job/janitor
-
- access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/janitor
- name = "Janitor"
- jobtype = /datum/job/janitor
-
- belt = /obj/item/pda/janitor
- ears = /obj/item/radio/headset/headset_srv
- uniform = /obj/item/clothing/under/rank/janitor
- backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm
new file mode 100644
index 0000000000..3ceb29bae2
--- /dev/null
+++ b/code/modules/jobs/job_types/cargo_technician.dm
@@ -0,0 +1,27 @@
+/datum/job/cargo_tech
+ title = "Cargo Technician"
+ flag = CARGOTECH
+ department_head = list("Quartermaster")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 3
+ spawn_positions = 2
+ supervisors = "the quartermaster"
+ selection_color = "#ca8f55"
+
+ outfit = /datum/outfit/job/cargo_tech
+
+ access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN
+
+/datum/outfit/job/cargo_tech
+ name = "Cargo Technician"
+ jobtype = /datum/job/cargo_tech
+
+ belt = /obj/item/pda/cargo
+ ears = /obj/item/radio/headset/headset_cargo
+ uniform = /obj/item/clothing/under/rank/cargotech
+ l_hand = /obj/item/export_scanner
+
diff --git a/code/modules/jobs/job_types/civilian_chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
similarity index 66%
rename from code/modules/jobs/job_types/civilian_chaplain.dm
rename to code/modules/jobs/job_types/chaplain.dm
index 2d190cfe60..f6648fdf86 100644
--- a/code/modules/jobs/job_types/civilian_chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -1,95 +1,121 @@
-//Due to how large this one is it gets its own file
-/*
-Chaplain
-*/
-/datum/job/chaplain
- title = "Chaplain"
- flag = CHAPLAIN
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the head of personnel"
- selection_color = "#dddddd"
-
- outfit = /datum/outfit/job/chaplain
-
- access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE)
- minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE)
-
-/datum/job/chaplain/after_spawn(mob/living/H, mob/M)
- . = ..()
- if(H.mind)
- H.mind.isholy = TRUE
-
- var/obj/item/storage/book/bible/booze/B = new
-
- if(GLOB.religion)
- B.deity_name = GLOB.deity
- B.name = GLOB.bible_name
- B.icon_state = GLOB.bible_icon_state
- B.item_state = GLOB.bible_item_state
- to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.")
- H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
- var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod
- var/obj/item/nullrod/N = new nrt(H)
- H.put_in_hands(N)
- return
-
- var/new_religion = "Christianity"
- if(M.client && M.client.prefs.custom_names["religion"])
- new_religion = M.client.prefs.custom_names["religion"]
-
- var/new_deity = "Space Jesus"
- if(M.client && M.client.prefs.custom_names["deity"])
- new_deity = M.client.prefs.custom_names["deity"]
-
- B.deity_name = new_deity
-
-
- switch(lowertext(new_religion))
- if("christianity")
- B.name = pick("The Holy Bible","The Dead Sea Scrolls")
- if("satanism")
- B.name = "The Unholy Bible"
- if("cthulhu")
- B.name = "The Necronomicon"
- if("islam")
- B.name = "Quran"
- if("scientology")
- B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
- if("chaos")
- B.name = "The Book of Lorgar"
- if("imperium")
- B.name = "Uplifting Primer"
- if("toolboxia")
- B.name = "Toolbox Manifesto"
- if("homosexuality")
- B.name = "Guys Gone Wild"
- if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks", "meme", "memes")
- B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
- H.adjustBrainLoss(100) // starts off retarded as fuck
- if("science")
- B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
- else
- B.name = "The Holy Book of [new_religion]"
-
- GLOB.religion = new_religion
- GLOB.bible_name = B.name
- GLOB.deity = B.deity_name
-
- H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
-
- SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1)
- SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1)
-
-/datum/outfit/job/chaplain
- name = "Chaplain"
- jobtype = /datum/job/chaplain
-
- belt = /obj/item/pda/chaplain
- uniform = /obj/item/clothing/under/rank/chaplain
- backpack_contents = list(/obj/item/camera/spooky = 1)
- backpack = /obj/item/storage/backpack/cultpack
- satchel = /obj/item/storage/backpack/cultpack
+/datum/job/chaplain
+ title = "Chaplain"
+ flag = CHAPLAIN
+ department_head = list("Head of Personnel")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the head of personnel"
+ selection_color = "#dddddd"
+
+ outfit = /datum/outfit/job/chaplain
+
+ access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE)
+ minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE)
+
+ display_order = JOB_DISPLAY_ORDER_CHAPLAIN
+
+
+/datum/job/chaplain/after_spawn(mob/living/H, mob/M)
+ . = ..()
+ if(H.mind)
+ H.mind.isholy = TRUE
+
+ var/obj/item/storage/book/bible/booze/B = new
+
+ if(GLOB.religion)
+ B.deity_name = GLOB.deity
+ B.name = GLOB.bible_name
+ B.icon_state = GLOB.bible_icon_state
+ B.item_state = GLOB.bible_item_state
+ to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.")
+ H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
+ var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod
+ var/obj/item/nullrod/N = new nrt(H)
+ H.put_in_hands(N)
+ return
+
+ var/new_religion = DEFAULT_RELIGION
+ if(M.client && M.client.prefs.custom_names["religion"])
+ new_religion = M.client.prefs.custom_names["religion"]
+
+ var/new_deity = DEFAULT_DEITY
+ if(M.client && M.client.prefs.custom_names["deity"])
+ new_deity = M.client.prefs.custom_names["deity"]
+
+ B.deity_name = new_deity
+
+
+ switch(lowertext(new_religion))
+ if("christianity") // DEFAULT_RELIGION
+ B.name = pick("The Holy Bible","The Dead Sea Scrolls")
+ if("buddhism")
+ B.name = "The Sutras"
+ if("clownism","honkmother","honk","honkism","comedy")
+ B.name = pick("The Holy Joke Book", "Just a Prank", "Hymns to the Honkmother")
+ if("chaos")
+ B.name = "The Book of Lorgar"
+ if("cthulhu")
+ B.name = "The Necronomicon"
+ if("hinduism")
+ B.name = "The Vedas"
+ if("homosexuality")
+ B.name = pick("Guys Gone Wild","Coming Out of The Closet")
+ if("imperium")
+ B.name = "Uplifting Primer"
+ if("islam")
+ B.name = "Quran"
+ if("judaism")
+ B.name = "The Torah"
+ if("lampism")
+ B.name = "Fluorescent Incandescence"
+ if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks", "meme", "memes")
+ B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition","F.A.T.A.L. Rulebook")
+ H.adjustBrainLoss(100) // starts off retarded as fuck
+ if("monkeyism","apism","gorillism","primatism")
+ B.name = pick("Going Bananas", "Bananas Out For Harambe")
+ if("mormonism")
+ B.name = "The Book of Mormon"
+ if("pastafarianism")
+ B.name = "The Gospel of the Flying Spaghetti Monster"
+ if("rastafarianism","rasta")
+ B.name = "The Holy Piby"
+ if("satanism")
+ B.name = "The Unholy Bible"
+ if("science")
+ B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
+ if("scientology")
+ B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
+ if("servicianism", "partying")
+ B.name = "The Tenets of Servicia"
+ B.deity_name = pick("Servicia", "Space Bacchus", "Space Dionysus")
+ B.desc = "Happy, Full, Clean. Live it and give it."
+ if("subgenius")
+ B.name = "Book of the SubGenius"
+ if("toolboxia","greytide")
+ B.name = pick("Toolbox Manifesto","iGlove Assistants")
+ if("weeaboo","kawaii")
+ B.name = pick("Fanfiction Compendium","Japanese for Dummies","The Manganomicon","Establishing Your O.T.P")
+ else
+ B.name = "The Holy Book of [new_religion]"
+
+ GLOB.religion = new_religion
+ GLOB.bible_name = B.name
+ GLOB.deity = B.deity_name
+
+ H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
+
+ SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1)
+ SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1)
+
+/datum/outfit/job/chaplain
+ name = "Chaplain"
+ jobtype = /datum/job/chaplain
+
+ belt = /obj/item/pda/chaplain
+ ears = /obj/item/radio/headset/headset_srv
+ uniform = /obj/item/clothing/under/rank/chaplain
+ backpack_contents = list(/obj/item/camera/spooky = 1)
+ backpack = /obj/item/storage/backpack/cultpack
+ satchel = /obj/item/storage/backpack/cultpack
\ No newline at end of file
diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm
new file mode 100644
index 0000000000..a915d261ed
--- /dev/null
+++ b/code/modules/jobs/job_types/chemist.dm
@@ -0,0 +1,36 @@
+/datum/job/chemist
+ title = "Chemist"
+ flag = CHEMIST
+ department_head = list("Chief Medical Officer")
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 2
+ supervisors = "the chief medical officer"
+ selection_color = "#74b5e0"
+ exp_type = EXP_TYPE_CREW
+ exp_requirements = 60
+
+ outfit = /datum/outfit/job/chemist
+
+ access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_CHEMIST
+
+/datum/outfit/job/chemist
+ name = "Chemist"
+ jobtype = /datum/job/chemist
+
+ glasses = /obj/item/clothing/glasses/science
+ belt = /obj/item/pda/chemist
+ ears = /obj/item/radio/headset/headset_med
+ uniform = /obj/item/clothing/under/rank/chemist
+ shoes = /obj/item/clothing/shoes/sneakers/white
+ suit = /obj/item/clothing/suit/toggle/labcoat/chemist
+ backpack = /obj/item/storage/backpack/chemistry
+ satchel = /obj/item/storage/backpack/satchel/chem
+ duffelbag = /obj/item/storage/backpack/duffelbag/med
+
+ chameleon_extras = /obj/item/gun/syringe
+
diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm
new file mode 100644
index 0000000000..da3f281267
--- /dev/null
+++ b/code/modules/jobs/job_types/chief_engineer.dm
@@ -0,0 +1,64 @@
+/datum/job/chief_engineer
+ title = "Chief Engineer"
+ flag = CHIEF
+// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ department_head = list("Captain")
+ department_flag = ENGSEC
+ head_announce = list(RADIO_CHANNEL_ENGINEERING)
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the captain"
+ selection_color = "#ee7400"
+ req_admin_notify = 1
+ minimal_player_age = 7
+ exp_requirements = 180
+ exp_type = EXP_TYPE_CREW
+ exp_type_department = EXP_TYPE_ENGINEERING
+
+ outfit = /datum/outfit/job/ce
+
+ access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA,
+ ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
+ ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA,
+ ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
+ ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity)
+
+/datum/outfit/job/ce
+ name = "Chief Engineer"
+ jobtype = /datum/job/chief_engineer
+
+ id = /obj/item/card/id/silver
+ belt = /obj/item/storage/belt/utility/chief/full
+ l_pocket = /obj/item/pda/heads/ce
+ ears = /obj/item/radio/headset/heads/ce
+ uniform = /obj/item/clothing/under/rank/chief_engineer
+ shoes = /obj/item/clothing/shoes/sneakers/brown
+ head = /obj/item/clothing/head/hardhat/white
+ gloves = /obj/item/clothing/gloves/color/black/ce
+ backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1)
+
+ backpack = /obj/item/storage/backpack/industrial
+ satchel = /obj/item/storage/backpack/satchel/eng
+ duffelbag = /obj/item/storage/backpack/duffelbag/engineering
+ box = /obj/item/storage/box/engineer
+ pda_slot = SLOT_L_STORE
+ chameleon_extras = /obj/item/stamp/ce
+
+/datum/outfit/job/ce/rig
+ name = "Chief Engineer (Hardsuit)"
+
+ mask = /obj/item/clothing/mask/breath
+ suit = /obj/item/clothing/suit/space/hardsuit/engine/elite
+ shoes = /obj/item/clothing/shoes/magboots/advance
+ suit_store = /obj/item/tank/internals/oxygen
+ glasses = /obj/item/clothing/glasses/meson/engine
+ gloves = /obj/item/clothing/gloves/color/yellow
+ head = null
+ internals_slot = SLOT_S_STORE
diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm
new file mode 100644
index 0000000000..4c7249f048
--- /dev/null
+++ b/code/modules/jobs/job_types/chief_medical_officer.dm
@@ -0,0 +1,59 @@
+/datum/job/cmo
+ title = "Chief Medical Officer"
+ flag = CMO_JF
+ department_head = list("Captain")
+ department_flag = MEDSCI
+// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ head_announce = list(RADIO_CHANNEL_MEDICAL)
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the captain"
+ selection_color = "#509ed1"
+ req_admin_notify = 1
+ minimal_player_age = 7
+ exp_requirements = 180
+ exp_type = EXP_TYPE_CREW
+ exp_type_department = EXP_TYPE_MEDICAL
+
+ outfit = /datum/outfit/job/cmo
+
+ access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM,
+ ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE,
+ ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS)
+ minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM,
+ ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE,
+ ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS)
+
+ display_order = JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
+
+/datum/outfit/job/cmo
+ name = "Chief Medical Officer"
+ jobtype = /datum/job/cmo
+
+ id = /obj/item/card/id/silver
+ belt = /obj/item/pda/heads/cmo
+ l_pocket = /obj/item/pinpointer/crew
+ ears = /obj/item/radio/headset/heads/cmo
+ uniform = /obj/item/clothing/under/rank/chief_medical_officer
+ shoes = /obj/item/clothing/shoes/sneakers/brown
+ suit = /obj/item/clothing/suit/toggle/labcoat/cmo
+ l_hand = /obj/item/storage/firstaid/regular
+ suit_store = /obj/item/flashlight/pen
+ backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1)
+
+ backpack = /obj/item/storage/backpack/medic
+ satchel = /obj/item/storage/backpack/satchel/med
+ duffelbag = /obj/item/storage/backpack/duffelbag/med
+
+ chameleon_extras = list(/obj/item/gun/syringe, /obj/item/stamp/cmo)
+
+/datum/outfit/job/cmo/hardsuit
+ name = "Chief Medical Officer (Hardsuit)"
+
+ mask = /obj/item/clothing/mask/breath
+ suit = /obj/item/clothing/suit/space/hardsuit/medical
+ suit_store = /obj/item/tank/internals/oxygen
+ r_pocket = /obj/item/flashlight/pen
+
diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm
deleted file mode 100644
index f21ff69e8e..0000000000
--- a/code/modules/jobs/job_types/civilian.dm
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
-Clown
-*/
-/datum/job/clown
- title = "Clown"
- flag = CLOWN
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the head of personnel"
- selection_color = "#dddddd"
-
- outfit = /datum/outfit/job/clown
-
- access = list(ACCESS_THEATRE)
- minimal_access = list(ACCESS_THEATRE)
-
-/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M)
- . = ..()
- H.apply_pref_name("clown", M.client)
-
-/datum/outfit/job/clown
- name = "Clown"
- jobtype = /datum/job/clown
-
- belt = /obj/item/pda/clown
- uniform = /obj/item/clothing/under/rank/clown
- shoes = /obj/item/clothing/shoes/clown_shoes
- mask = /obj/item/clothing/mask/gas/clown_hat
- l_pocket = /obj/item/bikehorn
- backpack_contents = list(
- /obj/item/stamp/clown = 1,
- /obj/item/reagent_containers/spray/waterflower = 1,
- /obj/item/reagent_containers/food/snacks/grown/banana = 1,
- /obj/item/instrument/bikehorn = 1,
- )
-
- implants = list(/obj/item/implant/sad_trombone)
-
- backpack = /obj/item/storage/backpack/clown
- satchel = /obj/item/storage/backpack/clown
- duffelbag = /obj/item/storage/backpack/duffelbag/clown //strangely has a duffel
-
- box = /obj/item/storage/box/hug/survival
-
- chameleon_extras = /obj/item/stamp/clown
-
-
-/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
- if(visualsOnly)
- return
-
- H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names))
-
-/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
- if(visualsOnly)
- return
-
- H.dna.add_mutation(CLOWNMUT)
- H.dna.add_mutation(SMILE)
-
-/*
-Mime
-*/
-/datum/job/mime
- title = "Mime"
- flag = MIME
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the head of personnel"
- selection_color = "#dddddd"
-
- outfit = /datum/outfit/job/mime
-
- access = list(ACCESS_THEATRE)
- minimal_access = list(ACCESS_THEATRE)
-
-/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M)
- H.apply_pref_name("mime", M.client)
-
-/datum/outfit/job/mime
- name = "Mime"
- jobtype = /datum/job/mime
-
- belt = /obj/item/pda/mime
- uniform = /obj/item/clothing/under/rank/mime
- mask = /obj/item/clothing/mask/gas/mime
- gloves = /obj/item/clothing/gloves/color/white
- head = /obj/item/clothing/head/frenchberet
- suit = /obj/item/clothing/suit/suspenders
- backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing=1)
-
- accessory = /obj/item/clothing/accessory/pocketprotector/cosmetology
- backpack = /obj/item/storage/backpack/mime
- satchel = /obj/item/storage/backpack/mime
-
-
-/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
-
- if(visualsOnly)
- return
-
- if(H.mind)
- H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null))
- H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
- H.mind.miming = 1
-
-/*
-Curator
-*/
-/datum/job/curator
- title = "Curator"
- flag = CURATOR
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the head of personnel"
- selection_color = "#dddddd"
-
- outfit = /datum/outfit/job/curator
-
- access = list(ACCESS_LIBRARY)
- minimal_access = list(ACCESS_LIBRARY, ACCESS_CONSTRUCTION,ACCESS_MINING_STATION)
-
-/datum/outfit/job/curator
- name = "Curator"
- jobtype = /datum/job/curator
-
- belt = /obj/item/pda/curator
- uniform = /obj/item/clothing/under/rank/curator
- l_hand = /obj/item/storage/bag/books
- r_pocket = /obj/item/key/displaycase
- l_pocket = /obj/item/laser_pointer
- accessory = /obj/item/clothing/accessory/pocketprotector/full
- backpack_contents = list(
- /obj/item/melee/curator_whip = 1,
- /obj/item/soapstone = 1,
- /obj/item/barcodescanner = 1
- )
-
-
-/datum/outfit/job/curator/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
-
- if(visualsOnly)
- return
-
- H.grant_all_languages(omnitongue=TRUE)
-/*
-Lawyer
-*/
-/datum/job/lawyer
- title = "Lawyer"
- flag = LAWYER
- department_head = list("Head of Personnel")
- department_flag = CIVILIAN
- faction = "Station"
- total_positions = 2
- spawn_positions = 2
- supervisors = "the head of personnel"
- selection_color = "#dddddd"
- var/lawyers = 0 //Counts lawyer amount
-
- outfit = /datum/outfit/job/lawyer
-
- access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS)
- minimal_access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS)
-
- mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
-
-/datum/outfit/job/lawyer
- name = "Lawyer"
- jobtype = /datum/job/lawyer
-
- belt = /obj/item/pda/lawyer
- ears = /obj/item/radio/headset/headset_sec
- uniform = /obj/item/clothing/under/lawyer/bluesuit
- suit = /obj/item/clothing/suit/toggle/lawyer
- shoes = /obj/item/clothing/shoes/laceup
- l_hand = /obj/item/storage/briefcase/lawyer
- l_pocket = /obj/item/laser_pointer
- r_pocket = /obj/item/clothing/accessory/lawyers_badge
-
- chameleon_extras = /obj/item/stamp/law
-
-
-/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
- if(visualsOnly)
- return
-
- var/datum/job/lawyer/J = SSjob.GetJobType(jobtype)
- J.lawyers++
- if(J.lawyers>1)
- uniform = /obj/item/clothing/under/lawyer/purpsuit
- suit = /obj/item/clothing/suit/toggle/lawyer/purple
diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm
new file mode 100644
index 0000000000..d8b88ae871
--- /dev/null
+++ b/code/modules/jobs/job_types/clown.dm
@@ -0,0 +1,58 @@
+/datum/job/clown
+ title = "Clown"
+ flag = CLOWN
+ department_head = list("Head of Personnel")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the head of personnel"
+ selection_color = "#dddddd"
+
+ outfit = /datum/outfit/job/clown
+
+ access = list(ACCESS_THEATRE)
+ minimal_access = list(ACCESS_THEATRE)
+
+ display_order = JOB_DISPLAY_ORDER_CLOWN
+
+
+/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M)
+ . = ..()
+ H.apply_pref_name("clown", M.client)
+
+/datum/outfit/job/clown
+ name = "Clown"
+ jobtype = /datum/job/clown
+
+ belt = /obj/item/pda/clown
+ ears = /obj/item/radio/headset/headset_srv
+ uniform = /obj/item/clothing/under/rank/clown
+ shoes = /obj/item/clothing/shoes/clown_shoes
+ mask = /obj/item/clothing/mask/gas/clown_hat
+ l_pocket = /obj/item/bikehorn
+ backpack_contents = list(
+ /obj/item/stamp/clown = 1,
+ /obj/item/reagent_containers/spray/waterflower = 1,
+ /obj/item/reagent_containers/food/snacks/grown/banana = 1,
+ /obj/item/instrument/bikehorn = 1,
+ )
+
+ implants = list(/obj/item/implant/sad_trombone)
+
+ backpack = /obj/item/storage/backpack/clown
+ satchel = /obj/item/storage/backpack/clown
+ duffelbag = /obj/item/storage/backpack/duffelbag/clown //strangely has a duffel
+
+ box = /obj/item/storage/box/hug/survival
+
+ chameleon_extras = /obj/item/stamp/clown
+
+/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ if(visualsOnly)
+ return
+
+ H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names)) //rename the mob AFTER they're equipped so their ID gets updated properly.
+ H.dna.add_mutation(CLOWNMUT)
+ H.dna.add_mutation(SMILE)
diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm
new file mode 100644
index 0000000000..c213d4dffc
--- /dev/null
+++ b/code/modules/jobs/job_types/cook.dm
@@ -0,0 +1,52 @@
+/datum/job/cook
+ title = "Cook"
+ flag = COOK
+ department_head = list("Head of Personnel")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 1
+ supervisors = "the head of personnel"
+ selection_color = "#bbe291"
+ var/cooks = 0 //Counts cooks amount
+
+ outfit = /datum/outfit/job/cook
+
+ access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_COOK
+
+/datum/outfit/job/cook
+ name = "Cook"
+ jobtype = /datum/job/cook
+
+ belt = /obj/item/pda/cook
+ ears = /obj/item/radio/headset/headset_srv
+ uniform = /obj/item/clothing/under/rank/chef
+ suit = /obj/item/clothing/suit/toggle/chef
+ head = /obj/item/clothing/head/chefhat
+ mask = /obj/item/clothing/mask/fakemoustache/italian
+ backpack_contents = list(/obj/item/sharpener = 1)
+
+/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/datum/job/cook/J = SSjob.GetJobType(jobtype)
+ if(J) // Fix for runtime caused by invalid job being passed
+ if(J.cooks>0)//Cooks
+ suit = /obj/item/clothing/suit/apron/chef
+ head = /obj/item/clothing/head/soft/mime
+ if(!visualsOnly)
+ J.cooks++
+
+/datum/outfit/job/cook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ if(visualsOnly)
+ return
+ var/list/possible_boxes = subtypesof(/obj/item/storage/box/ingredients)
+ var/chosen_box = pick(possible_boxes)
+ var/obj/item/storage/box/I = new chosen_box(src)
+ H.equip_to_slot_or_del(I,SLOT_IN_BACKPACK)
+ var/datum/martial_art/cqc/under_siege/justacook = new
+ justacook.teach(H)
+
diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm
new file mode 100644
index 0000000000..35fa8483d5
--- /dev/null
+++ b/code/modules/jobs/job_types/curator.dm
@@ -0,0 +1,43 @@
+/datum/job/curator
+ title = "Curator"
+ flag = CURATOR
+ department_head = list("Head of Personnel")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the head of personnel"
+ selection_color = "#dddddd"
+
+ outfit = /datum/outfit/job/curator
+
+ access = list(ACCESS_LIBRARY)
+ minimal_access = list(ACCESS_LIBRARY, ACCESS_CONSTRUCTION, ACCESS_MINING_STATION)
+
+ display_order = JOB_DISPLAY_ORDER_CURATOR
+
+/datum/outfit/job/curator
+ name = "Curator"
+ jobtype = /datum/job/curator
+
+ shoes = /obj/item/clothing/shoes/laceup
+ belt = /obj/item/pda/curator
+ ears = /obj/item/radio/headset/headset_srv
+ uniform = /obj/item/clothing/under/rank/curator
+ l_hand = /obj/item/storage/bag/books
+ r_pocket = /obj/item/key/displaycase
+ l_pocket = /obj/item/laser_pointer
+ accessory = /obj/item/clothing/accessory/pocketprotector/full
+ backpack_contents = list(
+ /obj/item/melee/curator_whip = 1,
+ /obj/item/soapstone = 1,
+ /obj/item/barcodescanner = 1
+ )
+
+/datum/outfit/job/curator/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+
+ if(visualsOnly)
+ return
+
+ H.grant_all_languages(omnitongue=TRUE)
diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm
new file mode 100644
index 0000000000..29c4c3d833
--- /dev/null
+++ b/code/modules/jobs/job_types/cyborg.dm
@@ -0,0 +1,27 @@
+/datum/job/cyborg
+ title = "Cyborg"
+ flag = CYBORG
+// auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 0
+ spawn_positions = 1
+ supervisors = "your laws and the AI" //Nodrak
+ selection_color = "#ddffdd"
+ minimal_player_age = 21
+ exp_requirements = 120
+ exp_type = EXP_TYPE_CREW
+
+ display_order = JOB_DISPLAY_ORDER_CYBORG
+
+/datum/job/cyborg/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, datum/outfit/outfit_override = null, client/preference_source = null)
+ if(visualsOnly)
+ CRASH("dynamic preview is unsupported")
+ return H.Robotize(FALSE, latejoin)
+
+/datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M)
+ R.updatename(M.client)
+ R.gender = NEUTER
+
+/datum/job/cyborg/radio_help_message(mob/M)
+ to_chat(M, "
Prefix your message with :b to speak with other cyborgs and AI. ")
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
new file mode 100644
index 0000000000..27a54fbd1f
--- /dev/null
+++ b/code/modules/jobs/job_types/detective.dm
@@ -0,0 +1,57 @@
+/datum/job/detective
+ title = "Detective"
+ flag = DETECTIVE
+// auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
+ department_head = list("Head of Security")
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the head of security"
+ selection_color = "#c02f2f"
+ minimal_player_age = 7
+ exp_requirements = 300
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/detective
+
+ access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
+
+ mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+
+ display_order = JOB_DISPLAY_ORDER_DETECTIVE
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
+
+/datum/outfit/job/detective
+ name = "Detective"
+ jobtype = /datum/job/detective
+
+ belt = /obj/item/pda/detective
+ ears = /obj/item/radio/headset/headset_sec/alt
+ uniform = /obj/item/clothing/under/rank/det
+ neck = /obj/item/clothing/neck/tie/black
+ shoes = /obj/item/clothing/shoes/sneakers/brown
+ suit = /obj/item/clothing/suit/det_suit
+ gloves = /obj/item/clothing/gloves/color/black
+ head = /obj/item/clothing/head/fedora/det_hat
+ l_pocket = /obj/item/toy/crayon/white
+ r_pocket = /obj/item/lighter
+ backpack_contents = list(/obj/item/storage/box/evidence=1,\
+ /obj/item/detective_scanner=1,\
+ /obj/item/melee/classic_baton=1)
+ mask = /obj/item/clothing/mask/cigarette
+
+ implants = list(/obj/item/implant/mindshield)
+
+ chameleon_extras = list(/obj/item/gun/ballistic/revolver/detective, /obj/item/clothing/glasses/sunglasses)
+
+/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/clothing/mask/cigarette/cig = H.wear_mask
+ if(istype(cig)) //Some species specfic changes can mess this up (plasmamen)
+ cig.light("")
+
+ if(visualsOnly)
+ return
+
diff --git a/code/modules/jobs/job_types/engineering.dm b/code/modules/jobs/job_types/engineering.dm
deleted file mode 100644
index e65cbab1bd..0000000000
--- a/code/modules/jobs/job_types/engineering.dm
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-Chief Engineer
-*/
-/datum/job/chief_engineer
- title = "Chief Engineer"
- flag = CHIEF
- department_head = list("Captain")
- department_flag = ENGSEC
- head_announce = list(RADIO_CHANNEL_ENGINEERING)
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the captain"
- selection_color = "#ffeeaa"
- req_admin_notify = 1
- minimal_player_age = 7
- exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_ENGINEERING
-
- outfit = /datum/outfit/job/ce
-
- access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
- ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA,
- ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
- ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
- ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA,
- ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
- ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
-
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity)
-
-/datum/outfit/job/ce
- name = "Chief Engineer"
- jobtype = /datum/job/chief_engineer
-
- id = /obj/item/card/id/silver
- belt = /obj/item/storage/belt/utility/chief/full
- l_pocket = /obj/item/pda/heads/ce
- ears = /obj/item/radio/headset/heads/ce
- uniform = /obj/item/clothing/under/rank/chief_engineer
- shoes = /obj/item/clothing/shoes/sneakers/brown
- head = /obj/item/clothing/head/hardhat/white
- gloves = /obj/item/clothing/gloves/color/black/ce
- backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1)
-
- backpack = /obj/item/storage/backpack/industrial
- satchel = /obj/item/storage/backpack/satchel/eng
- duffelbag = /obj/item/storage/backpack/duffelbag/engineering
- box = /obj/item/storage/box/engineer
- pda_slot = SLOT_L_STORE
- chameleon_extras = /obj/item/stamp/ce
-
-/datum/outfit/job/ce/rig
- name = "Chief Engineer (Hardsuit)"
-
- mask = /obj/item/clothing/mask/breath
- suit = /obj/item/clothing/suit/space/hardsuit/engine/elite
- shoes = /obj/item/clothing/shoes/magboots/advance
- suit_store = /obj/item/tank/internals/oxygen
- glasses = /obj/item/clothing/glasses/meson/engine
- gloves = /obj/item/clothing/gloves/color/yellow
- head = null
- internals_slot = SLOT_S_STORE
-
-
-/*
-Station Engineer
-*/
-/datum/job/engineer
- title = "Station Engineer"
- flag = ENGINEER
- department_head = list("Chief Engineer")
- department_flag = ENGSEC
- faction = "Station"
- total_positions = 5
- spawn_positions = 5
- supervisors = "the chief engineer"
- selection_color = "#fff5cc"
- exp_requirements = 60
- exp_type = EXP_TYPE_CREW
-
- outfit = /datum/outfit/job/engineer
-
- access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
- ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
- ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/engineer
- name = "Station Engineer"
- jobtype = /datum/job/engineer
-
- belt = /obj/item/storage/belt/utility/full/engi
- l_pocket = /obj/item/pda/engineering
- ears = /obj/item/radio/headset/headset_eng
- uniform = /obj/item/clothing/under/rank/engineer
- shoes = /obj/item/clothing/shoes/workboots
- head = /obj/item/clothing/head/hardhat
- r_pocket = /obj/item/t_scanner
-
- backpack = /obj/item/storage/backpack/industrial
- satchel = /obj/item/storage/backpack/satchel/eng
- duffelbag = /obj/item/storage/backpack/duffelbag/engineering
- box = /obj/item/storage/box/engineer
- pda_slot = SLOT_L_STORE
- backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
-
-/datum/outfit/job/engineer/gloved
- name = "Station Engineer (Gloves)"
- gloves = /obj/item/clothing/gloves/color/yellow
-
-/datum/outfit/job/engineer/gloved/rig
- name = "Station Engineer (Hardsuit)"
-
- mask = /obj/item/clothing/mask/breath
- suit = /obj/item/clothing/suit/space/hardsuit/engine
- suit_store = /obj/item/tank/internals/oxygen
- head = null
- internals_slot = SLOT_S_STORE
-
-
-/*
-Atmospheric Technician
-*/
-/datum/job/atmos
- title = "Atmospheric Technician"
- flag = ATMOSTECH
- department_head = list("Chief Engineer")
- department_flag = ENGSEC
- faction = "Station"
- total_positions = 3
- spawn_positions = 2
- supervisors = "the chief engineer"
- selection_color = "#fff5cc"
- exp_requirements = 60
- exp_type = EXP_TYPE_CREW
-
- outfit = /datum/outfit/job/atmos
-
- access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
- ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_EMERGENCY_STORAGE, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/atmos
- name = "Atmospheric Technician"
- jobtype = /datum/job/atmos
-
- belt = /obj/item/storage/belt/utility/atmostech
- l_pocket = /obj/item/pda/atmos
- ears = /obj/item/radio/headset/headset_eng
- uniform = /obj/item/clothing/under/rank/atmospheric_technician
- r_pocket = /obj/item/analyzer
-
- backpack = /obj/item/storage/backpack/industrial
- satchel = /obj/item/storage/backpack/satchel/eng
- duffelbag = /obj/item/storage/backpack/duffelbag/engineering
- box = /obj/item/storage/box/engineer
- pda_slot = SLOT_L_STORE
- backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
-
-/datum/outfit/job/atmos/rig
- name = "Atmospheric Technician (Hardsuit)"
-
- mask = /obj/item/clothing/mask/gas
- suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos
- suit_store = /obj/item/tank/internals/oxygen
- internals_slot = SLOT_S_STORE
diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm
new file mode 100644
index 0000000000..d7f59ff883
--- /dev/null
+++ b/code/modules/jobs/job_types/geneticist.dm
@@ -0,0 +1,35 @@
+/datum/job/geneticist
+ title = "Geneticist"
+ flag = GENETICIST
+ department_head = list("Chief Medical Officer", "Research Director")
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 2
+ supervisors = "the chief medical officer and research director"
+ selection_color = "#74b5e0"
+ exp_type = EXP_TYPE_CREW
+ exp_requirements = 60
+
+ outfit = /datum/outfit/job/geneticist
+
+ access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_ROBOTICS, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE)
+ minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_GENETICIST
+
+/datum/outfit/job/geneticist
+ name = "Geneticist"
+ jobtype = /datum/job/geneticist
+
+ belt = /obj/item/pda/geneticist
+ ears = /obj/item/radio/headset/headset_medsci
+ uniform = /obj/item/clothing/under/rank/geneticist
+ shoes = /obj/item/clothing/shoes/sneakers/white
+ suit = /obj/item/clothing/suit/toggle/labcoat/genetics
+ suit_store = /obj/item/flashlight/pen
+
+ backpack = /obj/item/storage/backpack/genetics
+ satchel = /obj/item/storage/backpack/satchel/gen
+ duffelbag = /obj/item/storage/backpack/duffelbag/med
+
diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm
new file mode 100644
index 0000000000..e320ce20b4
--- /dev/null
+++ b/code/modules/jobs/job_types/head_of_personnel.dm
@@ -0,0 +1,51 @@
+/datum/job/hop
+ title = "Head of Personnel"
+ flag = HOP
+// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ department_head = list("Captain")
+ department_flag = CIVILIAN
+ head_announce = list(RADIO_CHANNEL_SERVICE)
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the captain"
+ selection_color = "#3a8529"
+ req_admin_notify = 1
+ minimal_player_age = 10
+ exp_requirements = 180
+ exp_type = EXP_TYPE_CREW
+ exp_type_department = EXP_TYPE_SERVICE
+
+ outfit = /datum/outfit/job/hop
+
+ access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
+ ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
+ ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
+ ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
+ ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
+ ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
+ ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
+ ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
+ ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
+ ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
+ ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL
+
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity)
+
+/datum/outfit/job/hop
+ name = "Head of Personnel"
+ jobtype = /datum/job/hop
+
+ id = /obj/item/card/id/silver
+ belt = /obj/item/pda/heads/hop
+ ears = /obj/item/radio/headset/heads/hop
+ uniform = /obj/item/clothing/under/rank/head_of_personnel
+ shoes = /obj/item/clothing/shoes/sneakers/brown
+ head = /obj/item/clothing/head/hopcap
+ backpack_contents = list(/obj/item/storage/box/ids=1,\
+ /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
+
+ chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop)
diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm
new file mode 100644
index 0000000000..f6b5dbd3ef
--- /dev/null
+++ b/code/modules/jobs/job_types/head_of_security.dm
@@ -0,0 +1,68 @@
+/datum/job/hos
+ title = "Head of Security"
+ flag = HOS
+// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY
+ department_head = list("Captain")
+ department_flag = ENGSEC
+ head_announce = list(RADIO_CHANNEL_SECURITY)
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the captain"
+ selection_color = "#b90000"
+ req_admin_notify = 1
+ minimal_player_age = 14
+ exp_requirements = 300
+ exp_type = EXP_TYPE_CREW
+ exp_type_department = EXP_TYPE_SECURITY
+
+ outfit = /datum/outfit/job/hos
+ mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+
+ access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS,
+ ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
+ ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
+ ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS,
+ ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
+ ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
+ ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_HEAD_OF_SECURITY
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/insanity)
+
+/datum/outfit/job/hos
+ name = "Head of Security"
+ jobtype = /datum/job/hos
+
+ id = /obj/item/card/id/silver
+ belt = /obj/item/pda/heads/hos
+ ears = /obj/item/radio/headset/heads/hos/alt
+ uniform = /obj/item/clothing/under/rank/head_of_security
+ shoes = /obj/item/clothing/shoes/jackboots
+ suit = /obj/item/clothing/suit/armor/hos/trenchcoat
+ gloves = /obj/item/clothing/gloves/color/black/hos
+ head = /obj/item/clothing/head/HoS/beret
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ suit_store = /obj/item/gun/energy/e_gun
+ r_pocket = /obj/item/assembly/flash/handheld
+ l_pocket = /obj/item/restraints/handcuffs
+ backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1)
+
+ backpack = /obj/item/storage/backpack/security
+ satchel = /obj/item/storage/backpack/satchel/sec
+ duffelbag = /obj/item/storage/backpack/duffelbag/sec
+ box = /obj/item/storage/box/security
+
+ implants = list(/obj/item/implant/mindshield)
+
+ chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos)
+
+/datum/outfit/job/hos/hardsuit
+ name = "Head of Security (Hardsuit)"
+
+ mask = /obj/item/clothing/mask/gas/sechailer
+ suit = /obj/item/clothing/suit/space/hardsuit/security/hos
+ suit_store = /obj/item/tank/internals/oxygen
+ backpack_contents = list(/obj/item/melee/baton/loaded=1, /obj/item/gun/energy/e_gun=1)
+
diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm
new file mode 100644
index 0000000000..d0a06ca0e0
--- /dev/null
+++ b/code/modules/jobs/job_types/janitor.dm
@@ -0,0 +1,27 @@
+/datum/job/janitor
+ title = "Janitor"
+ flag = JANITOR
+ department_head = list("Head of Personnel")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 1
+ supervisors = "the head of personnel"
+ selection_color = "#bbe291"
+ var/global/janitors = 0
+
+ outfit = /datum/outfit/job/janitor
+
+ access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_JANITOR
+
+/datum/outfit/job/janitor
+ name = "Janitor"
+ jobtype = /datum/job/janitor
+
+ belt = /obj/item/pda/janitor
+ ears = /obj/item/radio/headset/headset_srv
+ uniform = /obj/item/clothing/under/rank/janitor
+ backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm
new file mode 100644
index 0000000000..0b8be52116
--- /dev/null
+++ b/code/modules/jobs/job_types/lawyer.dm
@@ -0,0 +1,47 @@
+/datum/job/lawyer
+ title = "Lawyer"
+ flag = LAWYER
+ department_head = list("Head of Personnel")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 2
+ supervisors = "the head of personnel"
+ selection_color = "#dddddd"
+ var/lawyers = 0 //Counts lawyer amount
+
+ outfit = /datum/outfit/job/lawyer
+
+ access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS)
+ minimal_access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS)
+
+ mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+
+ display_order = JOB_DISPLAY_ORDER_LAWYER
+
+/datum/outfit/job/lawyer
+ name = "Lawyer"
+ jobtype = /datum/job/lawyer
+
+ belt = /obj/item/pda/lawyer
+ ears = /obj/item/radio/headset/headset_sec
+ uniform = /obj/item/clothing/under/lawyer/bluesuit
+ suit = /obj/item/clothing/suit/toggle/lawyer
+ shoes = /obj/item/clothing/shoes/laceup
+ l_hand = /obj/item/storage/briefcase/lawyer
+ l_pocket = /obj/item/laser_pointer
+ r_pocket = /obj/item/clothing/accessory/lawyers_badge
+
+ chameleon_extras = /obj/item/stamp/law
+
+
+/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ if(visualsOnly)
+ return
+
+ var/datum/job/lawyer/J = SSjob.GetJobType(jobtype)
+ J.lawyers++
+ if(J.lawyers>1)
+ uniform = /obj/item/clothing/under/lawyer/purpsuit
+ suit = /obj/item/clothing/suit/toggle/lawyer/purple
diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm
deleted file mode 100644
index 9eeb4ab06e..0000000000
--- a/code/modules/jobs/job_types/medical.dm
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
-Chief Medical Officer
-*/
-/datum/job/cmo
- title = "Chief Medical Officer"
- flag = CMO_JF
- department_head = list("Captain")
- department_flag = MEDSCI
- head_announce = list(RADIO_CHANNEL_MEDICAL)
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the captain"
- selection_color = "#ffddf0"
- req_admin_notify = 1
- minimal_player_age = 7
- exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_MEDICAL
-
- outfit = /datum/outfit/job/cmo
-
- access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM,
- ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE,
- ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS)
- minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM,
- ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE,
- ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS)
-
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
-
-/datum/outfit/job/cmo
- name = "Chief Medical Officer"
- jobtype = /datum/job/cmo
-
- id = /obj/item/card/id/silver
- belt = /obj/item/pda/heads/cmo
- l_pocket = /obj/item/pinpointer/crew
- ears = /obj/item/radio/headset/heads/cmo
- uniform = /obj/item/clothing/under/rank/chief_medical_officer
- shoes = /obj/item/clothing/shoes/sneakers/brown
- suit = /obj/item/clothing/suit/toggle/labcoat/cmo
- l_hand = /obj/item/storage/firstaid/regular
- suit_store = /obj/item/flashlight/pen
- backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1)
-
- backpack = /obj/item/storage/backpack/medic
- satchel = /obj/item/storage/backpack/satchel/med
- duffelbag = /obj/item/storage/backpack/duffelbag/med
-
- chameleon_extras = list(/obj/item/gun/syringe, /obj/item/stamp/cmo)
-
-/datum/outfit/job/cmo/hardsuit
- name = "Chief Medical Officer (Hardsuit)"
-
- mask = /obj/item/clothing/mask/breath
- suit = /obj/item/clothing/suit/space/hardsuit/medical
- suit_store = /obj/item/tank/internals/oxygen
- r_pocket = /obj/item/flashlight/pen
-
-/*
-Medical Doctor
-*/
-/datum/job/doctor
- title = "Medical Doctor"
- flag = DOCTOR
- department_head = list("Chief Medical Officer")
- department_flag = MEDSCI
- faction = "Station"
- total_positions = 5
- spawn_positions = 3
- supervisors = "the chief medical officer"
- selection_color = "#ffeef0"
-
- outfit = /datum/outfit/job/doctor
-
- access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/doctor
- name = "Medical Doctor"
- jobtype = /datum/job/doctor
-
- belt = /obj/item/pda/medical
- ears = /obj/item/radio/headset/headset_med
- uniform = /obj/item/clothing/under/rank/medical
- shoes = /obj/item/clothing/shoes/sneakers/white
- suit = /obj/item/clothing/suit/toggle/labcoat
- l_hand = /obj/item/storage/firstaid/regular
- suit_store = /obj/item/flashlight/pen
-
- backpack = /obj/item/storage/backpack/medic
- satchel = /obj/item/storage/backpack/satchel/med
- duffelbag = /obj/item/storage/backpack/duffelbag/med
-
- chameleon_extras = /obj/item/gun/syringe
-
-/*
-Chemist
-*/
-/datum/job/chemist
- title = "Chemist"
- flag = CHEMIST
- department_head = list("Chief Medical Officer")
- department_flag = MEDSCI
- faction = "Station"
- total_positions = 2
- spawn_positions = 2
- supervisors = "the chief medical officer"
- selection_color = "#ffeef0"
- exp_type = EXP_TYPE_CREW
- exp_requirements = 60
-
- outfit = /datum/outfit/job/chemist
-
- access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_MEDICAL, ACCESS_CHEMISTRY, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/chemist
- name = "Chemist"
- jobtype = /datum/job/chemist
-
- glasses = /obj/item/clothing/glasses/science
- belt = /obj/item/pda/chemist
- ears = /obj/item/radio/headset/headset_med
- uniform = /obj/item/clothing/under/rank/chemist
- shoes = /obj/item/clothing/shoes/sneakers/white
- suit = /obj/item/clothing/suit/toggle/labcoat/chemist
- backpack = /obj/item/storage/backpack/chemistry
- satchel = /obj/item/storage/backpack/satchel/chem
- duffelbag = /obj/item/storage/backpack/duffelbag/med
- l_hand = /obj/item/fermichem/pHbooklet
-
- chameleon_extras = /obj/item/gun/syringe
-
-/*
-Geneticist
-*/
-/datum/job/geneticist
- title = "Geneticist"
- flag = GENETICIST
- department_head = list("Chief Medical Officer", "Research Director")
- department_flag = MEDSCI
- faction = "Station"
- total_positions = 2
- spawn_positions = 2
- supervisors = "the chief medical officer and research director"
- selection_color = "#ffeef0"
- exp_type = EXP_TYPE_CREW
- exp_requirements = 60
-
- outfit = /datum/outfit/job/geneticist
-
- access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_ROBOTICS, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE)
- minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/geneticist
- name = "Geneticist"
- jobtype = /datum/job/geneticist
-
- belt = /obj/item/pda/geneticist
- ears = /obj/item/radio/headset/headset_medsci
- uniform = /obj/item/clothing/under/rank/geneticist
- shoes = /obj/item/clothing/shoes/sneakers/white
- suit = /obj/item/clothing/suit/toggle/labcoat/genetics
- suit_store = /obj/item/flashlight/pen
-
- backpack = /obj/item/storage/backpack/genetics
- satchel = /obj/item/storage/backpack/satchel/gen
- duffelbag = /obj/item/storage/backpack/duffelbag/med
-
-/*
-Virologist
-*/
-/datum/job/virologist
- title = "Virologist"
- flag = VIROLOGIST
- department_head = list("Chief Medical Officer")
- department_flag = MEDSCI
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the chief medical officer"
- selection_color = "#ffeef0"
- exp_type = EXP_TYPE_CREW
- exp_requirements = 60
-
- outfit = /datum/outfit/job/virologist
-
- access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_MEDICAL, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/virologist
- name = "Virologist"
- jobtype = /datum/job/virologist
-
- belt = /obj/item/pda/viro
- ears = /obj/item/radio/headset/headset_med
- uniform = /obj/item/clothing/under/rank/virologist
- mask = /obj/item/clothing/mask/surgical
- shoes = /obj/item/clothing/shoes/sneakers/white
- suit = /obj/item/clothing/suit/toggle/labcoat/virologist
- suit_store = /obj/item/flashlight/pen
-
- backpack = /obj/item/storage/backpack/virology
- satchel = /obj/item/storage/backpack/satchel/vir
- duffelbag = /obj/item/storage/backpack/duffelbag/med
diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm
new file mode 100644
index 0000000000..19fa1c7158
--- /dev/null
+++ b/code/modules/jobs/job_types/medical_doctor.dm
@@ -0,0 +1,35 @@
+/datum/job/doctor
+ title = "Medical Doctor"
+ flag = DOCTOR
+ department_head = list("Chief Medical Officer")
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 5
+ spawn_positions = 3
+ supervisors = "the chief medical officer"
+ selection_color = "#74b5e0"
+
+ outfit = /datum/outfit/job/doctor
+
+ access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR
+
+/datum/outfit/job/doctor
+ name = "Medical Doctor"
+ jobtype = /datum/job/doctor
+
+ belt = /obj/item/pda/medical
+ ears = /obj/item/radio/headset/headset_med
+ uniform = /obj/item/clothing/under/rank/medical
+ shoes = /obj/item/clothing/shoes/sneakers/white
+ suit = /obj/item/clothing/suit/toggle/labcoat
+ l_hand = /obj/item/storage/firstaid/regular
+ suit_store = /obj/item/flashlight/pen
+
+ backpack = /obj/item/storage/backpack/medic
+ satchel = /obj/item/storage/backpack/satchel/med
+ duffelbag = /obj/item/storage/backpack/duffelbag/med
+
+ chameleon_extras = /obj/item/gun/syringe
diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm
new file mode 100644
index 0000000000..1347da7125
--- /dev/null
+++ b/code/modules/jobs/job_types/mime.dm
@@ -0,0 +1,49 @@
+/datum/job/mime
+ title = "Mime"
+ flag = MIME
+ department_head = list("Head of Personnel")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the head of personnel"
+ selection_color = "#dddddd"
+
+ outfit = /datum/outfit/job/mime
+
+ access = list(ACCESS_THEATRE)
+ minimal_access = list(ACCESS_THEATRE)
+
+ display_order = JOB_DISPLAY_ORDER_MIME
+
+/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M)
+ H.apply_pref_name("mime", M.client)
+
+/datum/outfit/job/mime
+ name = "Mime"
+ jobtype = /datum/job/mime
+
+ belt = /obj/item/pda/mime
+ ears = /obj/item/radio/headset/headset_srv
+ uniform = /obj/item/clothing/under/rank/mime
+ mask = /obj/item/clothing/mask/gas/mime
+ gloves = /obj/item/clothing/gloves/color/white
+ head = /obj/item/clothing/head/frenchberet
+ suit = /obj/item/clothing/suit/suspenders
+ backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing=1)
+
+ backpack = /obj/item/storage/backpack/mime
+ satchel = /obj/item/storage/backpack/mime
+
+
+/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+
+ if(visualsOnly)
+ return
+
+ if(H.mind)
+ H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null))
+ H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
+ H.mind.miming = 1
+
diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm
new file mode 100644
index 0000000000..49a93026ba
--- /dev/null
+++ b/code/modules/jobs/job_types/quartermaster.dm
@@ -0,0 +1,41 @@
+/datum/job/qm
+ title = "Quartermaster"
+ flag = QUARTERMASTER
+ department_head = list("Captain")
+ department_flag = CIVILIAN
+ head_announce = list(RADIO_CHANNEL_SUPPLY)
+// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the captain"
+ selection_color = "#a06121"
+ req_admin_notify = 1
+ minimal_player_age = 7
+ exp_requirements = 180
+ exp_type = EXP_TYPE_CREW
+ exp_type_department = EXP_TYPE_SUPPLY
+
+ outfit = /datum/outfit/job/quartermaster
+
+ access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION,
+ ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
+ minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING,
+ ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
+
+ display_order = JOB_DISPLAY_ORDER_QUARTERMASTER
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
+
+/datum/outfit/job/quartermaster
+ name = "Quartermaster"
+ jobtype = /datum/job/qm
+
+ belt = /obj/item/pda/quartermaster
+ ears = /obj/item/radio/headset/headset_cargo
+ uniform = /obj/item/clothing/under/rank/cargo
+ shoes = /obj/item/clothing/shoes/sneakers/brown
+ glasses = /obj/item/clothing/glasses/sunglasses
+ l_hand = /obj/item/clipboard
+
+ chameleon_extras = /obj/item/stamp/qm
+
diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm
new file mode 100644
index 0000000000..5368ceee64
--- /dev/null
+++ b/code/modules/jobs/job_types/research_director.dm
@@ -0,0 +1,61 @@
+/datum/job/rd
+ title = "Research Director"
+ flag = RD_JF
+// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
+ department_head = list("Captain")
+ department_flag = MEDSCI
+ head_announce = list(RADIO_CHANNEL_SCIENCE)
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the captain"
+ selection_color = "#7544cc"
+ req_admin_notify = 1
+ minimal_player_age = 7
+ exp_type_department = EXP_TYPE_SCIENCE
+ exp_requirements = 180
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/rd
+
+ access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE,
+ ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS,
+ ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD,
+ ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM,
+ ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK)
+ minimal_access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE,
+ ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS,
+ ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD,
+ ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM,
+ ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK)
+
+ display_order = JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
+
+/datum/outfit/job/rd
+ name = "Research Director"
+ jobtype = /datum/job/rd
+
+ id = /obj/item/card/id/silver
+ belt = /obj/item/pda/heads/rd
+ ears = /obj/item/radio/headset/heads/rd
+ uniform = /obj/item/clothing/under/rank/research_director
+ shoes = /obj/item/clothing/shoes/sneakers/brown
+ suit = /obj/item/clothing/suit/toggle/labcoat
+ l_hand = /obj/item/clipboard
+ l_pocket = /obj/item/laser_pointer
+ backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1)
+
+ backpack = /obj/item/storage/backpack/science
+ satchel = /obj/item/storage/backpack/satchel/tox
+
+ chameleon_extras = /obj/item/stamp/rd
+
+/datum/outfit/job/rd/rig
+ name = "Research Director (Hardsuit)"
+
+ l_hand = null
+ mask = /obj/item/clothing/mask/breath
+ suit = /obj/item/clothing/suit/space/hardsuit/rd
+ suit_store = /obj/item/tank/internals/oxygen
+ internals_slot = SLOT_S_STORE
diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm
new file mode 100644
index 0000000000..782b175ad4
--- /dev/null
+++ b/code/modules/jobs/job_types/roboticist.dm
@@ -0,0 +1,34 @@
+/datum/job/roboticist
+ title = "Roboticist"
+ flag = ROBOTICIST
+ department_head = list("Research Director")
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 2
+ supervisors = "the research director"
+ selection_color = "#9574cd"
+ exp_requirements = 60
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/roboticist
+
+ access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM, ACCESS_XENOBIOLOGY, ACCESS_GENETICS)
+ minimal_access = list(ACCESS_ROBOTICS, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_ROBOTICIST
+
+/datum/outfit/job/roboticist
+ name = "Roboticist"
+ jobtype = /datum/job/roboticist
+
+ belt = /obj/item/storage/belt/utility/full
+ l_pocket = /obj/item/pda/roboticist
+ ears = /obj/item/radio/headset/headset_sci
+ uniform = /obj/item/clothing/under/rank/roboticist
+ suit = /obj/item/clothing/suit/toggle/labcoat
+
+ backpack = /obj/item/storage/backpack/science
+ satchel = /obj/item/storage/backpack/satchel/tox
+
+ pda_slot = SLOT_L_STORE
diff --git a/code/modules/jobs/job_types/science.dm b/code/modules/jobs/job_types/science.dm
deleted file mode 100644
index b58f3faa27..0000000000
--- a/code/modules/jobs/job_types/science.dm
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-Research Director
-*/
-/datum/job/rd
- title = "Research Director"
- flag = RD_JF
- department_head = list("Captain")
- department_flag = MEDSCI
- head_announce = list(RADIO_CHANNEL_SCIENCE)
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the captain"
- selection_color = "#ffddff"
- req_admin_notify = 1
- minimal_player_age = 7
- exp_type_department = EXP_TYPE_SCIENCE
- exp_requirements = 180
- exp_type = EXP_TYPE_CREW
-
- outfit = /datum/outfit/job/rd
-
- access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE,
- ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS,
- ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD,
- ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM,
- ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK)
- minimal_access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE,
- ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS,
- ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD,
- ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM,
- ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK)
-
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
-
-/datum/outfit/job/rd
- name = "Research Director"
- jobtype = /datum/job/rd
-
- id = /obj/item/card/id/silver
- belt = /obj/item/pda/heads/rd
- ears = /obj/item/radio/headset/heads/rd
- uniform = /obj/item/clothing/under/rank/research_director
- shoes = /obj/item/clothing/shoes/sneakers/brown
- suit = /obj/item/clothing/suit/toggle/labcoat
- l_hand = /obj/item/clipboard
- l_pocket = /obj/item/laser_pointer
- backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1)
-
- backpack = /obj/item/storage/backpack/science
- satchel = /obj/item/storage/backpack/satchel/tox
-
- chameleon_extras = /obj/item/stamp/rd
-
-/datum/outfit/job/rd/rig
- name = "Research Director (Hardsuit)"
-
- l_hand = null
- mask = /obj/item/clothing/mask/breath
- suit = /obj/item/clothing/suit/space/hardsuit/rd
- suit_store = /obj/item/tank/internals/oxygen
- internals_slot = SLOT_S_STORE
-
-/*
-Scientist
-*/
-/datum/job/scientist
- title = "Scientist"
- flag = SCIENTIST
- department_head = list("Research Director")
- department_flag = MEDSCI
- faction = "Station"
- total_positions = 5
- spawn_positions = 3
- supervisors = "the research director"
- selection_color = "#ffeeff"
- exp_requirements = 60
- exp_type = EXP_TYPE_CREW
-
-
- outfit = /datum/outfit/job/scientist
-
- access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS)
- minimal_access = list(ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/scientist
- name = "Scientist"
- jobtype = /datum/job/scientist
-
- belt = /obj/item/pda/toxins
- ears = /obj/item/radio/headset/headset_sci
- uniform = /obj/item/clothing/under/rank/scientist
- shoes = /obj/item/clothing/shoes/sneakers/white
- suit = /obj/item/clothing/suit/toggle/labcoat/science
-
- backpack = /obj/item/storage/backpack/science
- satchel = /obj/item/storage/backpack/satchel/tox
-
-/*
-Roboticist
-*/
-/datum/job/roboticist
- title = "Roboticist"
- flag = ROBOTICIST
- department_head = list("Research Director")
- department_flag = MEDSCI
- faction = "Station"
- total_positions = 2
- spawn_positions = 2
- supervisors = "the research director"
- selection_color = "#ffeeff"
- exp_requirements = 60
- exp_type = EXP_TYPE_CREW
-
- outfit = /datum/outfit/job/roboticist
-
- access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM, ACCESS_XENOBIOLOGY, ACCESS_GENETICS)
- minimal_access = list(ACCESS_ROBOTICS, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM)
-
-/datum/outfit/job/roboticist
- name = "Roboticist"
- jobtype = /datum/job/roboticist
-
- belt = /obj/item/storage/belt/utility/full
- l_pocket = /obj/item/pda/roboticist
- ears = /obj/item/radio/headset/headset_sci
- uniform = /obj/item/clothing/under/rank/roboticist
- suit = /obj/item/clothing/suit/toggle/labcoat
-
- backpack = /obj/item/storage/backpack/science
- satchel = /obj/item/storage/backpack/satchel/tox
-
- pda_slot = SLOT_L_STORE
diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm
new file mode 100644
index 0000000000..f40a25d6ba
--- /dev/null
+++ b/code/modules/jobs/job_types/scientist.dm
@@ -0,0 +1,33 @@
+/datum/job/scientist
+ title = "Scientist"
+ flag = SCIENTIST
+ department_head = list("Research Director")
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 5
+ spawn_positions = 3
+ supervisors = "the research director"
+ selection_color = "#9574cd"
+ exp_requirements = 60
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/scientist
+
+ access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS)
+ minimal_access = list(ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_SCIENTIST
+
+/datum/outfit/job/scientist
+ name = "Scientist"
+ jobtype = /datum/job/scientist
+
+ belt = /obj/item/pda/toxins
+ ears = /obj/item/radio/headset/headset_sci
+ uniform = /obj/item/clothing/under/rank/scientist
+ shoes = /obj/item/clothing/shoes/sneakers/white
+ suit = /obj/item/clothing/suit/toggle/labcoat/science
+
+ backpack = /obj/item/storage/backpack/science
+ satchel = /obj/item/storage/backpack/satchel/tox
+
diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm
deleted file mode 100644
index 96cedd89ef..0000000000
--- a/code/modules/jobs/job_types/security.dm
+++ /dev/null
@@ -1,346 +0,0 @@
-//Warden and regular officers add this result to their get_access()
-/datum/job/proc/check_config_for_sec_maint()
- if(CONFIG_GET(flag/security_has_maint_access))
- return list(ACCESS_MAINT_TUNNELS)
- return list()
-
-/*
-Head of Security
-*/
-/datum/job/hos
- title = "Head of Security"
- flag = HOS
- department_head = list("Captain")
- department_flag = ENGSEC
- head_announce = list(RADIO_CHANNEL_SECURITY)
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the captain"
- selection_color = "#ffdddd"
- req_admin_notify = 1
- minimal_player_age = 14
- exp_requirements = 300
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_SECURITY
-
- outfit = /datum/outfit/job/hos
-
- access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS,
- ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
- ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
- ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS,
- ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
- ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
- ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
-
- mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
-
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/insanity)
-
-/datum/outfit/job/hos
- name = "Head of Security"
- jobtype = /datum/job/hos
-
- id = /obj/item/card/id/silver
- belt = /obj/item/pda/heads/hos
- ears = /obj/item/radio/headset/heads/hos/alt
- uniform = /obj/item/clothing/under/rank/head_of_security
- shoes = /obj/item/clothing/shoes/jackboots
- suit = /obj/item/clothing/suit/armor/hos/trenchcoat
- gloves = /obj/item/clothing/gloves/color/black/hos
- head = /obj/item/clothing/head/HoS/beret
- glasses = /obj/item/clothing/glasses/hud/security/sunglasses
- suit_store = /obj/item/gun/energy/e_gun
- r_pocket = /obj/item/assembly/flash/handheld
- l_pocket = /obj/item/restraints/handcuffs
- backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1)
-
- backpack = /obj/item/storage/backpack/security
- satchel = /obj/item/storage/backpack/satchel/sec
- duffelbag = /obj/item/storage/backpack/duffelbag/sec
- box = /obj/item/storage/box/security
-
- implants = list(/obj/item/implant/mindshield)
-
- chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos)
-
-/datum/outfit/job/hos/hardsuit
- name = "Head of Security (Hardsuit)"
-
- mask = /obj/item/clothing/mask/gas/sechailer
- suit = /obj/item/clothing/suit/space/hardsuit/security/hos
- suit_store = /obj/item/tank/internals/oxygen
- backpack_contents = list(/obj/item/melee/baton/loaded=1, /obj/item/gun/energy/e_gun=1)
-
-/*
-Warden
-*/
-/datum/job/warden
- title = "Warden"
- flag = WARDEN
- department_head = list("Head of Security")
- department_flag = ENGSEC
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the head of security"
- selection_color = "#ffeeee"
- minimal_player_age = 7
- exp_requirements = 300
- exp_type = EXP_TYPE_CREW
-
- outfit = /datum/outfit/job/warden
-
- access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //SEE /DATUM/JOB/WARDEN/GET_ACCESS()
-
- mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
-
-/datum/job/warden/get_access()
- var/list/L = list()
- L = ..() | check_config_for_sec_maint()
- return L
-
-/datum/outfit/job/warden
- name = "Warden"
- jobtype = /datum/job/warden
-
- belt = /obj/item/pda/warden
- ears = /obj/item/radio/headset/headset_sec/alt
- uniform = /obj/item/clothing/under/rank/warden
- shoes = /obj/item/clothing/shoes/jackboots
- suit = /obj/item/clothing/suit/armor/vest/warden/alt
- gloves = /obj/item/clothing/gloves/color/black
- head = /obj/item/clothing/head/warden
- glasses = /obj/item/clothing/glasses/hud/security/sunglasses
- r_pocket = /obj/item/assembly/flash/handheld
- l_pocket = /obj/item/restraints/handcuffs
- suit_store = /obj/item/gun/energy/e_gun/advtaser
- backpack_contents = list(/obj/item/melee/baton/loaded=1)
-
- backpack = /obj/item/storage/backpack/security
- satchel = /obj/item/storage/backpack/satchel/sec
- duffelbag = /obj/item/storage/backpack/duffelbag/sec
- box = /obj/item/storage/box/security
-
- implants = list(/obj/item/implant/mindshield)
-
- chameleon_extras = /obj/item/gun/ballistic/shotgun/automatic/combat/compact
-
-/*
-Detective
-*/
-/datum/job/detective
- title = "Detective"
- flag = DETECTIVE
- department_head = list("Head of Security")
- department_flag = ENGSEC
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "the head of security"
- selection_color = "#ffeeee"
- minimal_player_age = 7
- exp_requirements = 300
- exp_type = EXP_TYPE_CREW
-
- outfit = /datum/outfit/job/detective
-
- access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
-
- mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
-
-/datum/outfit/job/detective
- name = "Detective"
- jobtype = /datum/job/detective
-
- belt = /obj/item/pda/detective
- ears = /obj/item/radio/headset/headset_sec/alt
- uniform = /obj/item/clothing/under/rank/det
- shoes = /obj/item/clothing/shoes/sneakers/brown
- suit = /obj/item/clothing/suit/det_suit
- gloves = /obj/item/clothing/gloves/color/black
- head = /obj/item/clothing/head/fedora/det_hat
- l_pocket = /obj/item/toy/crayon/white
- r_pocket = /obj/item/lighter
- backpack_contents = list(/obj/item/storage/box/evidence=1,\
- /obj/item/detective_scanner=1,\
- /obj/item/melee/classic_baton=1)
- mask = /obj/item/clothing/mask/cigarette
-
- implants = list(/obj/item/implant/mindshield)
-
- chameleon_extras = list(/obj/item/gun/ballistic/revolver/detective, /obj/item/clothing/glasses/sunglasses)
-
-/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
- var/obj/item/clothing/mask/cigarette/cig = H.wear_mask
- if(istype(cig)) //Some species specfic changes can mess this up (plasmamen)
- cig.light("")
-
- if(visualsOnly)
- return
-
-/*
-Security Officer
-*/
-/datum/job/officer
- title = "Security Officer"
- flag = OFFICER
- department_head = list("Head of Security")
- department_flag = ENGSEC
- faction = "Station"
- total_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions()
- spawn_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions()
- supervisors = "the head of security, and the head of your assigned department (if applicable)"
- selection_color = "#ffeeee"
- minimal_player_age = 7
- exp_requirements = 300
- exp_type = EXP_TYPE_CREW
-
- outfit = /datum/outfit/job/security
-
- access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //BUT SEE /DATUM/JOB/WARDEN/GET_ACCESS()
-
- mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
- blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
-
-/datum/job/officer/get_access()
- var/list/L = list()
- L |= ..() | check_config_for_sec_maint()
- return L
-
-GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY))
-
-/datum/job/officer/after_spawn(mob/living/carbon/human/H, mob/M)
- // Assign department security
- var/department
- if(M && M.client && M.client.prefs)
- department = M.client.prefs.prefered_security_department
- if(!LAZYLEN(GLOB.available_depts) || department == "None")
- return
- else if(department in GLOB.available_depts)
- LAZYREMOVE(GLOB.available_depts, department)
- else
- department = pick_n_take(GLOB.available_depts)
- var/ears = null
- var/accessory = null
- var/list/dep_access = null
- var/destination = null
- var/spawn_point = null
- switch(department)
- if(SEC_DEPT_SUPPLY)
- ears = /obj/item/radio/headset/headset_sec/alt/department/supply
- dep_access = list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION)
- destination = /area/security/checkpoint/supply
- spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in GLOB.department_security_spawns
- accessory = /obj/item/clothing/accessory/armband/cargo
- if(SEC_DEPT_ENGINEERING)
- ears = /obj/item/radio/headset/headset_sec/alt/department/engi
- dep_access = list(ACCESS_CONSTRUCTION, ACCESS_ENGINE)
- destination = /area/security/checkpoint/engineering
- spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in GLOB.department_security_spawns
- accessory = /obj/item/clothing/accessory/armband/engine
- if(SEC_DEPT_MEDICAL)
- ears = /obj/item/radio/headset/headset_sec/alt/department/med
- dep_access = list(ACCESS_MEDICAL)
- destination = /area/security/checkpoint/medical
- spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in GLOB.department_security_spawns
- accessory = /obj/item/clothing/accessory/armband/medblue
- if(SEC_DEPT_SCIENCE)
- ears = /obj/item/radio/headset/headset_sec/alt/department/sci
- dep_access = list(ACCESS_RESEARCH)
- destination = /area/security/checkpoint/science
- spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns
- accessory = /obj/item/clothing/accessory/armband/science
-
- if(accessory)
- var/obj/item/clothing/under/U = H.w_uniform
- U.attach_accessory(new accessory)
- if(ears)
- if(H.ears)
- qdel(H.ears)
- H.equip_to_slot_or_del(new ears(H),SLOT_EARS)
-
- var/obj/item/card/id/W = H.wear_id
- W.access |= dep_access
-
- var/teleport = 0
- if(!CONFIG_GET(flag/sec_start_brig))
- if(destination || spawn_point)
- teleport = 1
- if(teleport)
- var/turf/T
- if(spawn_point)
- T = get_turf(spawn_point)
- H.Move(T)
- else
- var/safety = 0
- while(safety < 25)
- T = safepick(get_area_turfs(destination))
- if(T && !H.Move(T))
- safety += 1
- continue
- else
- break
- if(department)
- to_chat(M, "
You have been assigned to [department]! ")
- else
- to_chat(M, "
You have not been assigned to any department. Patrol the halls and help where needed. ")
-
-
-
-/datum/outfit/job/security
- name = "Security Officer"
- jobtype = /datum/job/officer
-
- belt = /obj/item/pda/security
- ears = /obj/item/radio/headset/headset_sec/alt
- uniform = /obj/item/clothing/under/rank/security
- gloves = /obj/item/clothing/gloves/color/black
- head = /obj/item/clothing/head/helmet/sec
- suit = /obj/item/clothing/suit/armor/vest/alt
- shoes = /obj/item/clothing/shoes/jackboots
- l_pocket = /obj/item/restraints/handcuffs
- r_pocket = /obj/item/assembly/flash/handheld
- suit_store = /obj/item/gun/energy/e_gun/advtaser
- backpack_contents = list(/obj/item/melee/baton/loaded=1)
-
- backpack = /obj/item/storage/backpack/security
- satchel = /obj/item/storage/backpack/satchel/sec
- duffelbag = /obj/item/storage/backpack/duffelbag/sec
- box = /obj/item/storage/box/security
-
- implants = list(/obj/item/implant/mindshield)
-
- chameleon_extras = list(/obj/item/gun/energy/e_gun/advtaser, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet)
- //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state
-
-
-/obj/item/radio/headset/headset_sec/alt/department/Initialize()
- . = ..()
- wires = new/datum/wires/radio(src)
- secure_radio_connections = new
- recalculateChannels()
-
-/obj/item/radio/headset/headset_sec/alt/department/engi
- keyslot = new /obj/item/encryptionkey/headset_sec
- keyslot2 = new /obj/item/encryptionkey/headset_eng
-
-/obj/item/radio/headset/headset_sec/alt/department/supply
- keyslot = new /obj/item/encryptionkey/headset_sec
- keyslot2 = new /obj/item/encryptionkey/headset_cargo
-
-/obj/item/radio/headset/headset_sec/alt/department/med
- keyslot = new /obj/item/encryptionkey/headset_sec
- keyslot2 = new /obj/item/encryptionkey/headset_med
-
-/obj/item/radio/headset/headset_sec/alt/department/sci
- keyslot = new /obj/item/encryptionkey/headset_sec
- keyslot2 = new /obj/item/encryptionkey/headset_sci
diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm
new file mode 100644
index 0000000000..4f12d6a19c
--- /dev/null
+++ b/code/modules/jobs/job_types/security_officer.dm
@@ -0,0 +1,159 @@
+/datum/job/officer
+ title = "Security Officer"
+ flag = OFFICER
+// auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
+ department_head = list("Head of Security")
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions()
+ spawn_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions()
+ supervisors = "the head of security, and the head of your assigned department (if applicable)"
+ selection_color = "#c02f2f"
+ minimal_player_age = 7
+ exp_requirements = 300
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/security
+
+ access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) // See /datum/job/officer/get_access()
+
+ mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+
+ display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
+
+/datum/job/officer/get_access()
+ var/list/L = list()
+ L |= ..() | check_config_for_sec_maint()
+ return L
+
+GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY))
+
+/datum/job/officer/after_spawn(mob/living/carbon/human/H, mob/M)
+ . = ..()
+ // Assign department security
+ var/department
+ if(M && M.client && M.client.prefs)
+ department = M.client.prefs.prefered_security_department
+ if(!LAZYLEN(GLOB.available_depts) || department == "None")
+ return
+ else if(department in GLOB.available_depts)
+ LAZYREMOVE(GLOB.available_depts, department)
+ else
+ department = pick_n_take(GLOB.available_depts)
+ var/ears = null
+ var/accessory = null
+ var/list/dep_access = null
+ var/destination = null
+ var/spawn_point = null
+ switch(department)
+ if(SEC_DEPT_SUPPLY)
+ ears = /obj/item/radio/headset/headset_sec/alt/department/supply
+ dep_access = list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_CARGO)
+ destination = /area/security/checkpoint/supply
+ spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in GLOB.department_security_spawns
+ accessory = /obj/item/clothing/accessory/armband/cargo
+ if(SEC_DEPT_ENGINEERING)
+ ears = /obj/item/radio/headset/headset_sec/alt/department/engi
+ dep_access = list(ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_ATMOSPHERICS)
+ destination = /area/security/checkpoint/engineering
+ spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in GLOB.department_security_spawns
+ accessory = /obj/item/clothing/accessory/armband/engine
+ if(SEC_DEPT_MEDICAL)
+ ears = /obj/item/radio/headset/headset_sec/alt/department/med
+ dep_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING)
+ destination = /area/security/checkpoint/medical
+ spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in GLOB.department_security_spawns
+ accessory = /obj/item/clothing/accessory/armband/medblue
+ if(SEC_DEPT_SCIENCE)
+ ears = /obj/item/radio/headset/headset_sec/alt/department/sci
+ dep_access = list(ACCESS_RESEARCH, ACCESS_TOX)
+ destination = /area/security/checkpoint/science
+ spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns
+ accessory = /obj/item/clothing/accessory/armband/science
+
+ if(accessory)
+ var/obj/item/clothing/under/U = H.w_uniform
+ U.attach_accessory(new accessory)
+ if(ears)
+ if(H.ears)
+ qdel(H.ears)
+ H.equip_to_slot_or_del(new ears(H),SLOT_EARS)
+
+ var/obj/item/card/id/W = H.wear_id
+ W.access |= dep_access
+
+ var/teleport = 0
+ if(!CONFIG_GET(flag/sec_start_brig))
+ if(destination || spawn_point)
+ teleport = 1
+ if(teleport)
+ var/turf/T
+ if(spawn_point)
+ T = get_turf(spawn_point)
+ H.Move(T)
+ else
+ var/safety = 0
+ while(safety < 25)
+ T = safepick(get_area_turfs(destination))
+ if(T && !H.Move(T))
+ safety += 1
+ continue
+ else
+ break
+ if(department)
+ to_chat(M, "
You have been assigned to [department]! ")
+ else
+ to_chat(M, "
You have not been assigned to any department. Patrol the halls and help where needed. ")
+
+
+
+/datum/outfit/job/security
+ name = "Security Officer"
+ jobtype = /datum/job/officer
+
+ belt = /obj/item/pda/security
+ ears = /obj/item/radio/headset/headset_sec/alt
+ uniform = /obj/item/clothing/under/rank/security
+ gloves = /obj/item/clothing/gloves/color/black
+ head = /obj/item/clothing/head/helmet/sec
+ suit = /obj/item/clothing/suit/armor/vest/alt
+ shoes = /obj/item/clothing/shoes/jackboots
+ l_pocket = /obj/item/restraints/handcuffs
+ r_pocket = /obj/item/assembly/flash/handheld
+ suit_store = /obj/item/gun/energy/e_gun/advtaser
+ backpack_contents = list(/obj/item/melee/baton/loaded=1)
+
+ backpack = /obj/item/storage/backpack/security
+ satchel = /obj/item/storage/backpack/satchel/sec
+ duffelbag = /obj/item/storage/backpack/duffelbag/sec
+ box = /obj/item/storage/box/security
+
+ implants = list(/obj/item/implant/mindshield)
+
+ chameleon_extras = list(/obj/item/gun/energy/disabler, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet)
+ //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state
+
+
+/obj/item/radio/headset/headset_sec/alt/department/Initialize()
+ . = ..()
+ wires = new/datum/wires/radio(src)
+ secure_radio_connections = new
+ recalculateChannels()
+
+/obj/item/radio/headset/headset_sec/alt/department/engi
+ keyslot = new /obj/item/encryptionkey/headset_sec
+ keyslot2 = new /obj/item/encryptionkey/headset_eng
+
+/obj/item/radio/headset/headset_sec/alt/department/supply
+ keyslot = new /obj/item/encryptionkey/headset_sec
+ keyslot2 = new /obj/item/encryptionkey/headset_cargo
+
+/obj/item/radio/headset/headset_sec/alt/department/med
+ keyslot = new /obj/item/encryptionkey/headset_sec
+ keyslot2 = new /obj/item/encryptionkey/headset_med
+
+/obj/item/radio/headset/headset_sec/alt/department/sci
+ keyslot = new /obj/item/encryptionkey/headset_sec
+ keyslot2 = new /obj/item/encryptionkey/headset_sci
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
new file mode 100644
index 0000000000..ef16d8e53f
--- /dev/null
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -0,0 +1,77 @@
+/datum/job/mining
+ title = "Shaft Miner"
+ flag = MINER
+ department_head = list("Quartermaster")
+ department_flag = CIVILIAN
+ faction = "Station"
+ total_positions = 3
+ spawn_positions = 3
+ supervisors = "the quartermaster"
+ selection_color = "#ca8f55"
+ custom_spawn_text = "Remember, you are a miner, not a hunter. Hunting monsters is not a requirement of your job, the only requirement of your job is to provide materials for the station. Don't be afraid to run away if you're inexperienced with fighting the mining area's locals."
+
+
+ outfit = /datum/outfit/job/miner
+
+ access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_SHAFT_MINER
+
+/datum/outfit/job/miner
+ name = "Shaft Miner (Lavaland)"
+ jobtype = /datum/job/mining
+
+ belt = /obj/item/pda/shaftminer
+ ears = /obj/item/radio/headset/headset_cargo/mining
+ shoes = /obj/item/clothing/shoes/workboots/mining
+ gloves = /obj/item/clothing/gloves/color/black
+ uniform = /obj/item/clothing/under/rank/miner/lavaland
+ l_pocket = /obj/item/reagent_containers/hypospray/medipen/survival
+ r_pocket = /obj/item/storage/bag/ore //causes issues if spawned in backpack
+ backpack_contents = list(
+ /obj/item/flashlight/seclite=1,\
+ /obj/item/kitchen/knife/combat/survival=1,\
+ /obj/item/mining_voucher=1,\
+ /obj/item/suit_voucher=1,\
+ /obj/item/stack/marker_beacon/ten=1)
+
+ backpack = /obj/item/storage/backpack/explorer
+ satchel = /obj/item/storage/backpack/satchel/explorer
+ duffelbag = /obj/item/storage/backpack/duffelbag
+ box = /obj/item/storage/box/survival_mining
+
+ chameleon_extras = /obj/item/gun/energy/kinetic_accelerator
+
+/datum/outfit/job/miner/asteroid
+ name = "Shaft Miner (Asteroid)"
+ uniform = /obj/item/clothing/under/rank/miner
+ shoes = /obj/item/clothing/shoes/workboots
+
+/datum/outfit/job/miner/equipped
+ name = "Shaft Miner (Lavaland + Equipment)"
+ suit = /obj/item/clothing/suit/hooded/explorer/standard
+ mask = /obj/item/clothing/mask/gas/explorer
+ glasses = /obj/item/clothing/glasses/meson
+ suit_store = /obj/item/tank/internals/oxygen
+ internals_slot = SLOT_S_STORE
+ backpack_contents = list(
+ /obj/item/flashlight/seclite=1,\
+ /obj/item/kitchen/knife/combat/survival=1,
+ /obj/item/mining_voucher=1,
+ /obj/item/t_scanner/adv_mining_scanner/lesser=1,
+ /obj/item/gun/energy/kinetic_accelerator=1,\
+ /obj/item/stack/marker_beacon/ten=1)
+
+/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ if(visualsOnly)
+ return
+ if(istype(H.wear_suit, /obj/item/clothing/suit/hooded))
+ var/obj/item/clothing/suit/hooded/S = H.wear_suit
+ S.ToggleHood()
+
+/datum/outfit/job/miner/equipped/hardsuit
+ name = "Shaft Miner (Equipment + Hardsuit)"
+ suit = /obj/item/clothing/suit/space/hardsuit/mining
+ mask = /obj/item/clothing/mask/breath
diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm
new file mode 100644
index 0000000000..55381549ba
--- /dev/null
+++ b/code/modules/jobs/job_types/station_engineer.dm
@@ -0,0 +1,54 @@
+/datum/job/engineer
+ title = "Station Engineer"
+ flag = ENGINEER
+ department_head = list("Chief Engineer")
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 5
+ spawn_positions = 5
+ supervisors = "the chief engineer"
+ selection_color = "#ff9b3d"
+ exp_requirements = 60
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/engineer
+
+ access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER
+
+/datum/outfit/job/engineer
+ name = "Station Engineer"
+ jobtype = /datum/job/engineer
+
+ belt = /obj/item/storage/belt/utility/full/engi
+ l_pocket = /obj/item/pda/engineering
+ ears = /obj/item/radio/headset/headset_eng
+ uniform = /obj/item/clothing/under/rank/engineer
+ shoes = /obj/item/clothing/shoes/workboots
+ head = /obj/item/clothing/head/hardhat
+ r_pocket = /obj/item/t_scanner
+
+ backpack = /obj/item/storage/backpack/industrial
+ satchel = /obj/item/storage/backpack/satchel/eng
+ duffelbag = /obj/item/storage/backpack/duffelbag/engineering
+ box = /obj/item/storage/box/engineer
+ pda_slot = SLOT_L_STORE
+ backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
+
+/datum/outfit/job/engineer/gloved
+ name = "Station Engineer (Gloves)"
+ gloves = /obj/item/clothing/gloves/color/yellow
+
+/datum/outfit/job/engineer/gloved/rig
+ name = "Station Engineer (Hardsuit)"
+ mask = /obj/item/clothing/mask/breath
+ suit = /obj/item/clothing/suit/space/hardsuit/engine
+ suit_store = /obj/item/tank/internals/oxygen
+ head = null
+ internals_slot = SLOT_S_STORE
+
+
diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm
new file mode 100644
index 0000000000..dcc13af627
--- /dev/null
+++ b/code/modules/jobs/job_types/virologist.dm
@@ -0,0 +1,35 @@
+/datum/job/virologist
+ title = "Virologist"
+ flag = VIROLOGIST
+ department_head = list("Chief Medical Officer")
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the chief medical officer"
+ selection_color = "#74b5e0"
+ exp_type = EXP_TYPE_CREW
+ exp_requirements = 60
+
+ outfit = /datum/outfit/job/virologist
+
+ access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_MEDICAL, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM)
+
+ display_order = JOB_DISPLAY_ORDER_VIROLOGIST
+
+/datum/outfit/job/virologist
+ name = "Virologist"
+ jobtype = /datum/job/virologist
+
+ belt = /obj/item/pda/viro
+ ears = /obj/item/radio/headset/headset_med
+ uniform = /obj/item/clothing/under/rank/virologist
+ mask = /obj/item/clothing/mask/surgical
+ shoes = /obj/item/clothing/shoes/sneakers/white
+ suit = /obj/item/clothing/suit/toggle/labcoat/virologist
+ suit_store = /obj/item/flashlight/pen
+
+ backpack = /obj/item/storage/backpack/virology
+ satchel = /obj/item/storage/backpack/satchel/vir
+ duffelbag = /obj/item/storage/backpack/duffelbag/med
diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm
new file mode 100644
index 0000000000..a5c16ab5cf
--- /dev/null
+++ b/code/modules/jobs/job_types/warden.dm
@@ -0,0 +1,56 @@
+/datum/job/warden
+ title = "Warden"
+ flag = WARDEN
+// auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
+ department_head = list("Head of Security")
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the head of security"
+ selection_color = "#c02f2f"
+ minimal_player_age = 7
+ exp_requirements = 300
+ exp_type = EXP_TYPE_CREW
+
+ outfit = /datum/outfit/job/warden
+
+ access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM)
+ minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) // See /datum/job/warden/get_access()
+
+ mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+
+ display_order = JOB_DISPLAY_ORDER_WARDEN
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
+
+/datum/job/warden/get_access()
+ var/list/L = list()
+ L = ..() | check_config_for_sec_maint()
+ return L
+
+/datum/outfit/job/warden
+ name = "Warden"
+ jobtype = /datum/job/warden
+
+ belt = /obj/item/pda/warden
+ ears = /obj/item/radio/headset/headset_sec/alt
+ uniform = /obj/item/clothing/under/rank/warden
+ shoes = /obj/item/clothing/shoes/jackboots
+ suit = /obj/item/clothing/suit/armor/vest/warden/alt
+ gloves = /obj/item/clothing/gloves/color/black
+ head = /obj/item/clothing/head/warden
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ r_pocket = /obj/item/assembly/flash/handheld
+ l_pocket = /obj/item/restraints/handcuffs
+ suit_store = /obj/item/gun/energy/e_gun/advtaser
+ backpack_contents = list(/obj/item/melee/baton/loaded=1)
+
+ backpack = /obj/item/storage/backpack/security
+ satchel = /obj/item/storage/backpack/satchel/sec
+ duffelbag = /obj/item/storage/backpack/duffelbag/sec
+ box = /obj/item/storage/box/security
+
+ implants = list(/obj/item/implant/mindshield)
+
+ chameleon_extras = /obj/item/gun/ballistic/shotgun/automatic/combat/compact
+
diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm
index 548a734f74..2b8bfa6860 100644
--- a/code/modules/keybindings/bindings_client.dm
+++ b/code/modules/keybindings/bindings_client.dm
@@ -4,7 +4,42 @@
set instant = TRUE
set hidden = TRUE
+ client_keysend_amount += 1
+
+ var/cache = client_keysend_amount
+
+ if(keysend_tripped && next_keysend_trip_reset <= world.time)
+ keysend_tripped = FALSE
+
+ if(next_keysend_reset <= world.time)
+ client_keysend_amount = 0
+ next_keysend_reset = world.time + (1 SECONDS)
+
+ //The "tripped" system is to confirm that flooding is still happening after one spike
+ //not entirely sure how byond commands interact in relation to lag
+ //don't want to kick people if a lag spike results in a huge flood of commands being sent
+ if(cache >= MAX_KEYPRESS_AUTOKICK)
+ if(!keysend_tripped)
+ keysend_tripped = TRUE
+ next_keysend_trip_reset = world.time + (2 SECONDS)
+ else
+ log_admin("Client [ckey] was just autokicked for flooding keysends; likely abuse but potentially lagspike.")
+ message_admins("Client [ckey] was just autokicked for flooding keysends; likely abuse but potentially lagspike.")
+ QDEL_IN(src, 1)
+ return
+
+ ///Check if the key is short enough to even be a real key
+ if(LAZYLEN(_key) > MAX_KEYPRESS_COMMANDLENGTH)
+ to_chat(src, "
Invalid KeyDown detected! You have been disconnected from the server automatically. ")
+ log_admin("Client [ckey] just attempted to send an invalid keypress. Keymessage was over [MAX_KEYPRESS_COMMANDLENGTH] characters, autokicking due to likely abuse.")
+ message_admins("Client [ckey] just attempted to send an invalid keypress. Keymessage was over [MAX_KEYPRESS_COMMANDLENGTH] characters, autokicking due to likely abuse.")
+ QDEL_IN(src, 1)
+ return
+ //offset by 1 because the buffer address is 0 indexed because the math was simpler
+ keys_held[current_key_address + 1] = _key
+ //the time a key was pressed isn't actually used anywhere (as of 2019-9-10) but this allows easier access usage/checking
keys_held[_key] = world.time
+ current_key_address = ((current_key_address + 1) % HELD_KEY_BUFFER_LENGTH)
var/movement = SSinput.movement_keys[_key]
if(!(next_move_dir_sub & movement) && !keys_held["Ctrl"])
next_move_dir_add |= movement
@@ -35,7 +70,11 @@
set instant = TRUE
set hidden = TRUE
- keys_held -= _key
+ //Can't just do a remove because it would alter the length of the rolling buffer, instead search for the key then null it out if it exists
+ for(var/i in 1 to HELD_KEY_BUFFER_LENGTH)
+ if(keys_held[i] == _key)
+ keys_held[i] = null
+ break
var/movement = SSinput.movement_keys[_key]
if(!(next_move_dir_add & movement))
next_move_dir_sub |= movement
diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm
index 54df252f5d..8433c9bf5a 100644
--- a/code/modules/keybindings/setup.dm
+++ b/code/modules/keybindings/setup.dm
@@ -1,9 +1,14 @@
/client
- var/list/keys_held = list() // A list of any keys held currently
- // These next two vars are to apply movement for keypresses and releases made while move delayed.
- // Because discarding that input makes the game less responsive.
- var/next_move_dir_add // On next move, add this dir to the move that would otherwise be done
- var/next_move_dir_sub // On next move, subtract this dir from the move that would otherwise be done
+ /// A rolling buffer of any keys held currently
+ var/list/keys_held = list()
+ ///used to keep track of the current rolling buffer position
+ var/current_key_address = 0
+ /// These next two vars are to apply movement for keypresses and releases made while move delayed.
+ /// Because discarding that input makes the game less responsive.
+ /// On next move, add this dir to the move that would otherwise be done
+ var/next_move_dir_add
+ /// On next move, subtract this dir from the move that would otherwise be done
+ var/next_move_dir_sub
// Set a client's focus to an object and override these procs on that object to let it handle keypresses
@@ -31,6 +36,11 @@
/client/proc/set_macros()
set waitfor = FALSE
+ //Reset and populate the rolling buffer
+ keys_held.Cut()
+ for(var/i in 1 to HELD_KEY_BUFFER_LENGTH)
+ keys_held += null
+
erase_all_macros()
var/list/macro_sets = SSinput.macro_sets
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index 4a0faf69f5..f98f0755c8 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -169,6 +169,7 @@
locked = FALSE
cut_overlays()
add_overlay("securecrateg")
+ tamperproof = 0 // set explosion chance to zero, so we dont accidently hit it with a multitool and instantly die
else if (input == null || sanitycheck == null || length(input) != codelen)
to_chat(user, "
You leave the crate alone. ")
else
@@ -213,6 +214,12 @@
return
return ..()
+/obj/structure/closet/secure/loot/dive_into(mob/living/user)
+ if(!locked)
+ return ..()
+ to_chat(user, "
That seems like a stupid idea. ")
+ return FALSE
+
/obj/structure/closet/crate/secure/loot/emag_act(mob/user)
. = SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
if(!locked)
@@ -227,4 +234,6 @@
..()
/obj/structure/closet/crate/secure/loot/deconstruct(disassembled = TRUE)
+ if(!locked && disassembled)
+ return ..()
boom()
diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm
index 953da6cbb0..4e54c3e222 100644
--- a/code/modules/mining/laborcamp/laborstacker.dm
+++ b/code/modules/mining/laborcamp/laborstacker.dm
@@ -10,12 +10,10 @@ GLOBAL_LIST(labor_sheet_values)
density = FALSE
var/obj/machinery/mineral/stacking_machine/laborstacker/stacking_machine = null
var/machinedir = SOUTH
- var/obj/item/card/id/prisoner/inserted_id
var/obj/machinery/door/airlock/release_door
var/door_tag = "prisonshuttle"
var/obj/item/radio/Radio //needed to send messages to sec radio
-
/obj/machinery/mineral/labor_claim_console/Initialize()
. = ..()
Radio = new/obj/item/radio(src)
@@ -34,18 +32,6 @@ GLOBAL_LIST(labor_sheet_values)
/proc/cmp_sheet_list(list/a, list/b)
return a["value"] - b["value"]
-/obj/machinery/mineral/labor_claim_console/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/card/id/prisoner))
- if(!inserted_id)
- if(!user.transferItemToLoc(I, src))
- return
- inserted_id = I
- to_chat(user, "
You insert [I]. ")
- return
- else
- to_chat(user, "
There's an ID inserted already. ")
- return ..()
-
/obj/machinery/mineral/labor_claim_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
@@ -58,14 +44,20 @@ GLOBAL_LIST(labor_sheet_values)
var/can_go_home = FALSE
data["emagged"] = (obj_flags & EMAGGED) ? 1 : 0
- if(inserted_id)
- data["id"] = inserted_id
- data["id_name"] = inserted_id.registered_name
- data["points"] = inserted_id.points
- data["goal"] = inserted_id.goal
- if(check_auth())
+ if(obj_flags & EMAGGED)
can_go_home = TRUE
+ data["status_info"] = "No Prisoner ID detected."
+ var/obj/item/card/id/I = user.get_idcard(TRUE)
+ if(istype(I, /obj/item/card/id/prisoner))
+ var/obj/item/card/id/prisoner/P = I
+ data["id_points"] = P.points
+ if(P.points >= P.goal)
+ can_go_home = TRUE
+ data["status_info"] = "Goal met!"
+ else
+ data["status_info"] = "You are [(P.goal - P.points)] points away."
+
if(stacking_machine)
data["unclaimed_points"] = stacking_machine.points
@@ -78,29 +70,19 @@ GLOBAL_LIST(labor_sheet_values)
if(..())
return
switch(action)
- if("handle_id")
- if(inserted_id)
- if(!usr.get_active_held_item())
- usr.put_in_hands(inserted_id)
- inserted_id = null
- else
- inserted_id.forceMove(get_turf(src))
- inserted_id = null
- else
- var/obj/item/I = usr.get_active_held_item()
- if(istype(I, /obj/item/card/id/prisoner))
- if(!usr.transferItemToLoc(I, src))
- return
- inserted_id = I
if("claim_points")
- inserted_id.points += stacking_machine.points
- stacking_machine.points = 0
- to_chat(usr, "Points transferred.")
+ var/mob/M = usr
+ var/obj/item/card/id/I = M.get_idcard(TRUE)
+ if(istype(I, /obj/item/card/id/prisoner))
+ var/obj/item/card/id/prisoner/P = I
+ P.points += stacking_machine.points
+ stacking_machine.points = 0
+ to_chat(usr, "
Points transferred. ")
+ else
+ to_chat(usr, "
No valid id for point transfer detected. ")
if("move_shuttle")
if(!alone_in_area(get_area(src), usr))
to_chat(usr, "
Prisoners are only allowed to be released while alone. ")
- else if(!check_auth())
- to_chat(usr, "
Prisoners are only allowed to be released when they reach their point goal. ")
else
switch(SSshuttle.moveShuttle("laborcamp", "laborcamp_home", TRUE))
if(1)
@@ -112,14 +94,9 @@ GLOBAL_LIST(labor_sheet_values)
else
if(!(obj_flags & EMAGGED))
Radio.set_frequency(FREQ_SECURITY)
- Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY)
+ Radio.talk_into(src, "A prisoner has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY)
to_chat(usr, "
Shuttle received message and will be sent shortly. ")
-/obj/machinery/mineral/labor_claim_console/proc/check_auth()
- if(obj_flags & EMAGGED)
- return 1 //Shuttle is emagged, let any ol' person through
- return (istype(inserted_id) && inserted_id.points >= inserted_id.goal) //Otherwise, only let them out if the prisoner's reached his quota.
-
/obj/machinery/mineral/labor_claim_console/proc/locate_stacking_machine()
stacking_machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
if(stacking_machine)
@@ -135,10 +112,8 @@ GLOBAL_LIST(labor_sheet_values)
to_chat(user, "
PZZTTPFFFT ")
return TRUE
-
/**********************Prisoner Collection Unit**************************/
-
/obj/machinery/mineral/stacking_machine/laborstacker
force_connect = TRUE
var/points = 0 //The unclaimed value of ore stacked.
@@ -154,6 +129,7 @@ GLOBAL_LIST(labor_sheet_values)
return ..()
/**********************Point Lookup Console**************************/
+
/obj/machinery/mineral/labor_points_checker
name = "points checking console"
desc = "A console used by prisoners to check the progress on their quotas. Simply swipe a prisoner ID."
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index 4605f7d693..6c1a00b020 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -13,7 +13,6 @@
speed_process = TRUE
circuit = /obj/item/circuitboard/machine/ore_redemption
layer = BELOW_OBJ_LAYER
- var/obj/item/card/id/inserted_id
var/points = 0
var/ore_pickup_rate = 15
var/sheet_per_ore = 1
@@ -48,18 +47,23 @@
point_upgrade = point_upgrade_temp
sheet_per_ore = sheet_per_ore_temp
+/obj/machinery/mineral/ore_redemption/examine(mob/user)
+ . = ..()
+ if(in_range(user, src) || isobserver(user))
+ . += "
The status display reads: Smelting [sheet_per_ore] sheet(s) per piece of ore. Ore pickup speed at [ore_pickup_rate] . "
+
/obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/stack/ore/O)
var/datum/component/material_container/mat_container = materials.mat_container
if (!mat_container)
return
- if(istype(O, /obj/item/stack/ore/bluespace_crystal/refined))
+ if(O.refined_type == null)
return
ore_buffer -= O
if(O && O.refined_type)
- points += O.points * point_upgrade * O.amount
+ points += O.points * O.amount
var/material_amount = mat_container.get_item_material_amount(O)
@@ -72,11 +76,8 @@
else
var/mats = O.materials & mat_container.materials
var/amount = O.amount
- var/id = inserted_id && inserted_id.registered_name
- if (id)
- id = " (ID: [id])"
mat_container.insert_item(O, sheet_per_ore) //insert it
- materials.silo_log(src, "smelted", amount, "ores[id]", mats)
+ materials.silo_log(src, "smelted", amount, "ores", mats)
qdel(O)
/obj/machinery/mineral/ore_redemption/proc/can_smelt_alloy(datum/design/D)
@@ -168,15 +169,7 @@
return
if(!powered())
- return
- if(istype(W, /obj/item/card/id))
- var/obj/item/card/id/I = user.get_active_held_item()
- if(istype(I) && !istype(inserted_id))
- if(!user.transferItemToLoc(I, src))
- return
- inserted_id = I
- interact(user)
- return
+ return ..()
if(istype(W, /obj/item/disk/design_disk))
if(user.transferItemToLoc(W, src))
@@ -205,9 +198,6 @@
/obj/machinery/mineral/ore_redemption/ui_data(mob/user)
var/list/data = list()
data["unclaimedPoints"] = points
- if(inserted_id)
- data["hasID"] = TRUE
- data["claimedPoints"] = inserted_id.mining_points
data["materials"] = list()
var/datum/component/material_container/mat_container = materials.mat_container
@@ -245,32 +235,24 @@
return
var/datum/component/material_container/mat_container = materials.mat_container
switch(action)
- if("Eject")
- if(!inserted_id)
- return
- usr.put_in_hands(inserted_id)
- inserted_id = null
- return TRUE
- if("Insert")
- var/obj/item/card/id/I = usr.get_active_held_item()
- if(istype(I))
- if(!usr.transferItemToLoc(I,src))
- return
- inserted_id = I
- else
- to_chat(usr, "
Not a valid ID! ")
- return TRUE
if("Claim")
- if(inserted_id)
- inserted_id.mining_points += points
- points = 0
+ var/mob/M = usr
+ var/obj/item/card/id/I = M.get_idcard(TRUE)
+ if(points)
+ if(I)
+ I.mining_points += points
+ points = 0
+ else
+ to_chat(usr, "
No ID detected. ")
+ else
+ to_chat(usr, "
No points to claim. ")
return TRUE
if("Release")
if(!mat_container)
return
if(materials.on_hold())
to_chat(usr, "
Mineral access is on hold, please contact the quartermaster. ")
- else if(!check_access(inserted_id) && !allowed(usr)) //Check the ID inside, otherwise check the user
+ else if(!allowed(usr)) //Check the ID inside, otherwise check the user
to_chat(usr, "
Required access not found. ")
else
var/mat_id = params["id"]
@@ -293,6 +275,7 @@
var/list/mats = list()
mats[mat_id] = MINERAL_MATERIAL_AMOUNT
materials.silo_log(src, "released", -count, "sheets", mats)
+ //Logging deleted for quick coding
return TRUE
if("diskInsert")
var/obj/item/disk/design_disk/disk = usr.get_active_held_item()
@@ -321,7 +304,7 @@
return
var/alloy_id = params["id"]
var/datum/design/alloy = stored_research.isDesignResearchedID(alloy_id)
- if((check_access(inserted_id) || allowed(usr)) && alloy)
+ if((check_access(inserted_scan_id) || allowed(usr)) && alloy)
var/smelt_amount = can_smelt_alloy(alloy)
var/desired = 0
if (params["sheets"])
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index aed90cebdf..38d2e3e100 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -20,6 +20,7 @@
new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200),
new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300),
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
+ new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 400),
new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400),
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
new /datum/data/mining_equipment("Survival Knife", /obj/item/kitchen/knife/combat/survival, 450),
@@ -28,11 +29,10 @@
new /datum/data/mining_equipment("Larger Ore Bag", /obj/item/storage/bag/ore/large, 500),
new /datum/data/mining_equipment("500 Point Transfer Card", /obj/item/card/mining_point_card/mp500, 500),
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
- new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750),
- new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 750),
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750),
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
+ new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750),
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 800),
new /datum/data/mining_equipment("Burn First-Aid Kit", /obj/item/storage/firstaid/fire, 800),
new /datum/data/mining_equipment("First-Aid Kit", /obj/item/storage/firstaid/regular, 800),
@@ -54,7 +54,6 @@
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
- new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 3000),
new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),
@@ -69,8 +68,8 @@
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
+ new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 3000),
new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000)
-
)
/datum/data/mining_equipment
@@ -95,60 +94,42 @@
/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user)
. = ..()
- var/dat
- dat +="
"
- if(istype(inserted_id))
- dat += "You have [inserted_id.mining_points] mining points collected.
Eject ID. "
- else
- dat += "No ID inserted.
Insert ID. "
- dat += "
"
+ var/list/dat = list()
dat += "
Equipment point cost list: "
for(var/datum/data/mining_equipment/prize in prize_list)
dat += "[prize.equipment_name] [prize.cost] Purchase "
dat += "
"
var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350)
- popup.set_content(dat)
+ popup.set_content(dat.Join())
popup.open()
return
/obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
if(..())
return
- if(href_list["choice"])
- if(istype(inserted_id))
- if(href_list["choice"] == "eject")
- to_chat(usr, "
You eject the ID from [src]'s card slot. ")
- inserted_id.forceMove(loc)
- inserted_id.verb_pickup()
- inserted_id = null
- else if(href_list["choice"] == "insert")
- var/obj/item/card/id/I = usr.get_active_held_item()
- if(istype(I))
- if(!usr.transferItemToLoc(I, src))
- return
- inserted_id = I
- to_chat(usr, "
You insert the ID into [src]'s card slot. ")
- else
- to_chat(usr, "
Error: No valid ID! ")
- flick(icon_deny, src)
if(href_list["purchase"])
- if(istype(inserted_id))
- var/datum/data/mining_equipment/prize = locate(href_list["purchase"])
+ var/mob/M = usr
+ var/obj/item/card/id/I = M.get_idcard(TRUE)
+ if(istype(I))
+ var/datum/data/mining_equipment/prize = locate(href_list["purchase"]) in prize_list
if (!prize || !(prize in prize_list))
to_chat(usr, "
Error: Invalid choice! ")
flick(icon_deny, src)
return
- if(prize.cost > inserted_id.mining_points)
- to_chat(usr, "
Error: Insufficient points for [prize.equipment_name]! ")
+ if(prize.cost > I.mining_points)
+ to_chat(usr, "
Error: Insufficient credits for [prize.equipment_name] on [I]! ")
flick(icon_deny, src)
else
- inserted_id.mining_points -= prize.cost
- to_chat(usr, "
[src] clanks to life briefly before vending [prize.equipment_name]! ")
- new prize.equipment_path(src.loc)
- SSblackbox.record_feedback("nested tally", "mining_equipment_bought", 1, list("[type]", "[prize.equipment_path]"))
+ if (I.mining_points -= prize.cost)
+ to_chat(usr, "
[src] clanks to life briefly before vending [prize.equipment_name]! ")
+ new prize.equipment_path(src.loc)
+ SSblackbox.record_feedback("nested tally", "mining_equipment_bought", 1, list("[type]", "[prize.equipment_path]"))
+ else
+ to_chat(usr, "
Error: Transaction failure, please try again later! ")
+ flick(icon_deny, src)
else
- to_chat(usr, "
Error: Please insert a valid ID! ")
+ to_chat(usr, "
Error: An ID with a registered account is required! ")
flick(icon_deny, src)
updateUsrDialog()
return
@@ -160,15 +141,6 @@
if(istype(I, /obj/item/suit_voucher))
RedeemSVoucher(I, user)
return
- if(istype(I, /obj/item/card/id))
- var/obj/item/card/id/C = usr.get_active_held_item()
- if(istype(C) && !istype(inserted_id))
- if(!usr.transferItemToLoc(C, src))
- return
- inserted_id = C
- to_chat(usr, "
You insert the ID into [src]'s card slot. ")
- interact(user)
- return
if(default_deconstruction_screwdriver(user, "mining-open", "mining", I))
updateUsrDialog()
return
@@ -212,7 +184,6 @@
if(prob(50 / severity) && severity < 3)
qdel(src)
-
/****************Golem Point Vendor**************************/
/obj/machinery/mineral/equipment_vendor/golem
@@ -228,7 +199,6 @@
new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300),
new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350),
new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500),
- new /datum/data/mining_equipment("Sulphuric Acid", /obj/item/reagent_containers/glass/beaker/sulphuric, 500),
new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000),
new /datum/data/mining_equipment("Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1700),
new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000)
@@ -323,8 +293,11 @@
new /obj/item/encryptionkey/headset_cargo(src)
new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/card/mining_access_card(src)
+ new /obj/item/gun/energy/kinetic_accelerator(src)
+ new /obj/item/kitchen/knife/combat/survival(src)
+ new /obj/item/flashlight/seclite(src)
-//CITADEL ADDITIONS BELOW
+ //CITADEL ADDITIONS BELOW
/obj/item/storage/backpack/duffelbag/mining_cloned
name = "mining replacement kit"
@@ -336,6 +309,7 @@
new /obj/item/clothing/shoes/workboots/mining(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/implanter/tracking/gps(src)
+ new /obj/item/gun/energy/kinetic_accelerator(src)
new /obj/item/kitchen/knife/combat/survival(src)
new /obj/item/storage/firstaid/regular(src)
new /obj/item/reagent_containers/hypospray/medipen/survival(src)
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 750805ae93..1cd32d43ac 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -1,604 +1,623 @@
-#define LINKIFY_READY(string, value) "
[string] "
-
-/mob/dead/new_player
- var/ready = 0
- var/spawning = 0//Referenced when you want to delete the new_player later on in the code.
-
- flags_1 = NONE
-
- invisibility = INVISIBILITY_ABSTRACT
-
- density = FALSE
- stat = DEAD
- canmove = FALSE
-
- anchored = TRUE // don't get pushed around
- var/mob/living/new_character //for instant transfer once the round is set up
-
-/mob/dead/new_player/Initialize()
- if(client && SSticker.state == GAME_STATE_STARTUP)
- var/obj/screen/splash/S = new(client, TRUE, TRUE)
- S.Fade(TRUE)
-
- if(length(GLOB.newplayer_start))
- forceMove(pick(GLOB.newplayer_start))
- else
- forceMove(locate(1,1,1))
-
- ComponentInitialize()
-
- . = ..()
-
-/mob/dead/new_player/prepare_huds()
- return
-
-/mob/dead/new_player/proc/new_player_panel()
- var/output = "
Welcome, [client ? client.prefs.real_name : "Unknown User"]
"
- output += "Setup Character
"
-
- if(SSticker.current_state <= GAME_STATE_PREGAME)
- switch(ready)
- if(PLAYER_NOT_READY)
- output += "\[ [LINKIFY_READY("Ready", PLAYER_READY_TO_PLAY)] | Not Ready | [LINKIFY_READY("Observe", PLAYER_READY_TO_OBSERVE)] \]
"
- if(PLAYER_READY_TO_PLAY)
- output += "\[ Ready | [LINKIFY_READY("Not Ready", PLAYER_NOT_READY)] | [LINKIFY_READY("Observe", PLAYER_READY_TO_OBSERVE)] \]
"
- if(PLAYER_READY_TO_OBSERVE)
- output += "\[ [LINKIFY_READY("Ready", PLAYER_READY_TO_PLAY)] | [LINKIFY_READY("Not Ready", PLAYER_NOT_READY)] | Observe \]
"
- else
- output += "View the Crew Manifest
"
- output += "Join Game!
"
- output += "[LINKIFY_READY("Observe", PLAYER_READY_TO_OBSERVE)]
"
-
- if(!IsGuestKey(src.key))
- if (SSdbcore.Connect())
- var/isadmin = 0
- if(src.client && src.client.holder)
- isadmin = 1
- var/datum/DBQuery/query_get_new_polls = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[sanitizeSQL(ckey)]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[sanitizeSQL(ckey)]\")")
- var/rs = REF(src)
- if(query_get_new_polls.Execute())
- var/newpoll = 0
- if(query_get_new_polls.NextRow())
- newpoll = 1
-
- if(newpoll)
- output += "Show Player Polls (NEW!)
"
- else
- output += "Show Player Polls
"
- qdel(query_get_new_polls)
- if(QDELETED(src))
- return
-
- output += ""
-
- //src << browse(output,"window=playersetup;size=210x240;can_close=0")
- var/datum/browser/popup = new(src, "playersetup", "
New Player Options
", 250, 265)
- popup.set_window_options("can_close=0")
- popup.set_content(output)
- popup.open(0)
-
-/mob/dead/new_player/Topic(href, href_list[])
- if(src != usr)
- return 0
-
- if(!client)
- return 0
-
- //Determines Relevent Population Cap
- var/relevant_cap
- var/hpc = CONFIG_GET(number/hard_popcap)
- var/epc = CONFIG_GET(number/extreme_popcap)
- if(hpc && epc)
- relevant_cap = min(hpc, epc)
- else
- relevant_cap = max(hpc, epc)
-
- if(href_list["show_preferences"])
- client.prefs.ShowChoices(src)
- return 1
-
- if(href_list["ready"])
- var/tready = text2num(href_list["ready"])
- //Avoid updating ready if we're after PREGAME (they should use latejoin instead)
- //This is likely not an actual issue but I don't have time to prove that this
- //no longer is required
- if(SSticker.current_state <= GAME_STATE_PREGAME)
- ready = tready
- //if it's post initialisation and they're trying to observe we do the needful
- if(!SSticker.current_state < GAME_STATE_PREGAME && tready == PLAYER_READY_TO_OBSERVE)
- ready = tready
- make_me_an_observer()
- return
-
- if(href_list["refresh"])
- src << browse(null, "window=playersetup") //closes the player setup window
- new_player_panel()
-
- if(href_list["late_join"])
- if(!SSticker || !SSticker.IsRoundInProgress())
- to_chat(usr, "
The round is either not ready, or has already finished... ")
- return
-
- if(href_list["late_join"] == "override")
- LateChoices()
- return
-
- if(SSticker.queued_players.len || (relevant_cap && living_player_count() >= relevant_cap && !(ckey(key) in GLOB.admin_datums)))
- to_chat(usr, "
[CONFIG_GET(string/hard_popcap_message)] ")
-
- var/queue_position = SSticker.queued_players.Find(usr)
- if(queue_position == 1)
- to_chat(usr, "
You are next in line to join the game. You will be notified when a slot opens up. ")
- else if(queue_position)
- to_chat(usr, "
There are [queue_position-1] players in front of you in the queue to join the game. ")
- else
- SSticker.queued_players += usr
- to_chat(usr, "
You have been added to the queue to join the game. Your position in queue is [SSticker.queued_players.len]. ")
- return
- LateChoices()
-
- if(href_list["manifest"])
- ViewManifest()
-
- if(href_list["SelectedJob"])
-
- if(!GLOB.enter_allowed)
- to_chat(usr, "
There is an administrative lock on entering the game! ")
- return
-
- if(SSticker.queued_players.len && !(ckey(key) in GLOB.admin_datums))
- if((living_player_count() >= relevant_cap) || (src != SSticker.queued_players[1]))
- to_chat(usr, "
Server is full. ")
- return
-
- AttemptLateSpawn(href_list["SelectedJob"])
- return
-
- if(href_list["JoinAsGhostRole"])
- if(!GLOB.enter_allowed)
- to_chat(usr, "
There is an administrative lock on entering the game! ")
-
- if(SSticker.queued_players.len && !(ckey(key) in GLOB.admin_datums))
- if((living_player_count() >= relevant_cap) || (src != SSticker.queued_players[1]))
- to_chat(usr, "
Server is full. ")
- return
-
- var/obj/effect/mob_spawn/MS = pick(GLOB.mob_spawners[href_list["JoinAsGhostRole"]])
- if(MS.attack_ghost(src, latejoinercalling = TRUE))
- SSticker.queued_players -= src
- SSticker.queue_delay = 4
- qdel(src)
-
- if(!ready && href_list["preference"])
- if(client)
- client.prefs.process_link(src, href_list)
- else if(!href_list["late_join"])
- new_player_panel()
-
- if(href_list["showpoll"])
- handle_player_polling()
- return
-
- if(href_list["pollid"])
- var/pollid = href_list["pollid"]
- if(istext(pollid))
- pollid = text2num(pollid)
- if(isnum(pollid) && ISINTEGER(pollid))
- src.poll_player(pollid)
- return
-
- if(href_list["votepollid"] && href_list["votetype"])
- var/pollid = text2num(href_list["votepollid"])
- var/votetype = href_list["votetype"]
- //lets take data from the user to decide what kind of poll this is, without validating it
- //what could go wrong
- switch(votetype)
- if(POLLTYPE_OPTION)
- var/optionid = text2num(href_list["voteoptionid"])
- if(vote_on_poll(pollid, optionid))
- to_chat(usr, "
Vote successful. ")
- else
- to_chat(usr, "
Vote failed, please try again or contact an administrator. ")
- if(POLLTYPE_TEXT)
- var/replytext = href_list["replytext"]
- if(log_text_poll_reply(pollid, replytext))
- to_chat(usr, "
Feedback logging successful. ")
- else
- to_chat(usr, "
Feedback logging failed, please try again or contact an administrator. ")
- if(POLLTYPE_RATING)
- var/id_min = text2num(href_list["minid"])
- var/id_max = text2num(href_list["maxid"])
-
- if( (id_max - id_min) > 100 ) //Basic exploit prevention
- //(protip, this stops no exploits)
- to_chat(usr, "The option ID difference is too big. Please contact administration or the database admin.")
- return
-
- for(var/optionid = id_min; optionid <= id_max; optionid++)
- if(!isnull(href_list["o[optionid]"])) //Test if this optionid was replied to
- var/rating
- if(href_list["o[optionid]"] == "abstain")
- rating = null
- else
- rating = text2num(href_list["o[optionid]"])
- if(!isnum(rating) || !ISINTEGER(rating))
- return
-
- if(!vote_on_numval_poll(pollid, optionid, rating))
- to_chat(usr, "
Vote failed, please try again or contact an administrator. ")
- return
- to_chat(usr, "
Vote successful. ")
- if(POLLTYPE_MULTI)
- var/id_min = text2num(href_list["minoptionid"])
- var/id_max = text2num(href_list["maxoptionid"])
-
- if( (id_max - id_min) > 100 ) //Basic exploit prevention
- to_chat(usr, "The option ID difference is too big. Please contact administration or the database admin.")
- return
-
- for(var/optionid = id_min; optionid <= id_max; optionid++)
- if(!isnull(href_list["option_[optionid]"])) //Test if this optionid was selected
- var/i = vote_on_multi_poll(pollid, optionid)
- switch(i)
- if(0)
- continue
- if(1)
- to_chat(usr, "
Vote failed, please try again or contact an administrator. ")
- return
- if(2)
- to_chat(usr, "
Maximum replies reached. ")
- break
- to_chat(usr, "
Vote successful. ")
- if(POLLTYPE_IRV)
- if (!href_list["IRVdata"])
- to_chat(src, "
No ordering data found. Please try again or contact an administrator. ")
- return
- var/list/votelist = splittext(href_list["IRVdata"], ",")
- if (!vote_on_irv_poll(pollid, votelist))
- to_chat(src, "
Vote failed, please try again or contact an administrator. ")
- return
- to_chat(src, "
Vote successful. ")
-
-//When you cop out of the round (NB: this HAS A SLEEP FOR PLAYER INPUT IN IT)
-/mob/dead/new_player/proc/make_me_an_observer()
- if(QDELETED(src) || !src.client)
- ready = PLAYER_NOT_READY
- return FALSE
-
- var/this_is_like_playing_right = alert(src,"Are you sure you wish to observe? You will not be able to play this round!","Player Setup","Yes","No")
-
- if(QDELETED(src) || !src.client || this_is_like_playing_right != "Yes")
- ready = PLAYER_NOT_READY
- src << browse(null, "window=playersetup") //closes the player setup window
- new_player_panel()
- return FALSE
-
- var/mob/dead/observer/observer = new()
- spawning = TRUE
-
- observer.started_as_observer = TRUE
- close_spawn_windows()
- var/obj/effect/landmark/observer_start/O = locate(/obj/effect/landmark/observer_start) in GLOB.landmarks_list
- to_chat(src, "
Now teleporting. ")
- if (O)
- observer.forceMove(O.loc)
- else
- to_chat(src, "
Teleporting failed. Ahelp an admin please ")
- stack_trace("There's no freaking observer landmark available on this map or you're making observers before the map is initialised")
- observer.key = key
- observer.client = client
- observer.set_ghost_appearance()
- if(observer.client && observer.client.prefs)
- observer.real_name = observer.client.prefs.real_name
- observer.name = observer.real_name
- observer.update_icon()
- observer.stop_sound_channel(CHANNEL_LOBBYMUSIC)
- QDEL_NULL(mind)
- qdel(src)
- return TRUE
-
-/proc/get_job_unavailable_error_message(retval, jobtitle)
- switch(retval)
- if(JOB_AVAILABLE)
- return "[jobtitle] is available."
- if(JOB_UNAVAILABLE_GENERIC)
- return "[jobtitle] is unavailable."
- if(JOB_UNAVAILABLE_BANNED)
- return "You are currently banned from [jobtitle]."
- if(JOB_UNAVAILABLE_PLAYTIME)
- return "You do not have enough relevant playtime for [jobtitle]."
- if(JOB_UNAVAILABLE_ACCOUNTAGE)
- return "Your account is not old enough for [jobtitle]."
- if(JOB_UNAVAILABLE_SLOTFULL)
- return "[jobtitle] is already filled to capacity."
- return "Error: Unknown job availability."
-
-/mob/dead/new_player/proc/IsJobUnavailable(rank, latejoin = FALSE)
- var/datum/job/job = SSjob.GetJob(rank)
- if(!job)
- return JOB_UNAVAILABLE_GENERIC
- if((job.current_positions >= job.total_positions) && job.total_positions != -1)
- if(job.title == "Assistant")
- if(isnum(client.player_age) && client.player_age <= 14) //Newbies can always be assistants
- return JOB_AVAILABLE
- for(var/datum/job/J in SSjob.occupations)
- if(J && J.current_positions < J.total_positions && J.title != job.title)
- return JOB_UNAVAILABLE_SLOTFULL
- else
- return JOB_UNAVAILABLE_SLOTFULL
- if(jobban_isbanned(src,rank))
- return JOB_UNAVAILABLE_BANNED
- if(QDELETED(src))
- return JOB_UNAVAILABLE_GENERIC
- if(!job.player_old_enough(client))
- return JOB_UNAVAILABLE_ACCOUNTAGE
- if(job.required_playtime_remaining(client))
- return JOB_UNAVAILABLE_PLAYTIME
- if(latejoin && !job.special_check_latejoin(client))
- return JOB_UNAVAILABLE_GENERIC
- return JOB_AVAILABLE
-
-/mob/dead/new_player/proc/AttemptLateSpawn(rank)
- var/error = IsJobUnavailable(rank)
- if(error != JOB_AVAILABLE)
- alert(src, get_job_unavailable_error_message(error, rank))
- return FALSE
-
- if(SSticker.late_join_disabled)
- alert(src, "An administrator has disabled late join spawning.")
- return FALSE
-
- var/arrivals_docked = TRUE
- if(SSshuttle.arrivals)
- close_spawn_windows() //In case we get held up
- if(SSshuttle.arrivals.damaged && CONFIG_GET(flag/arrivals_shuttle_require_safe_latejoin))
- src << alert("The arrivals shuttle is currently malfunctioning! You cannot join.")
- return FALSE
-
- if(CONFIG_GET(flag/arrivals_shuttle_require_undocked))
- SSshuttle.arrivals.RequireUndocked(src)
- arrivals_docked = SSshuttle.arrivals.mode != SHUTTLE_CALL
-
- //Remove the player from the join queue if he was in one and reset the timer
- SSticker.queued_players -= src
- SSticker.queue_delay = 4
-
- SSjob.AssignRole(src, rank, 1)
-
- var/mob/living/character = create_character(TRUE) //creates the human and transfers vars and mind
- var/equip = SSjob.EquipRank(character, rank, TRUE)
- if(isliving(equip)) //Borgs get borged in the equip, so we need to make sure we handle the new mob.
- character = equip
-
- var/datum/job/job = SSjob.GetJob(rank)
-
- if(job && !job.override_latejoin_spawn(character))
- SSjob.SendToLateJoin(character)
- if(!arrivals_docked)
- var/obj/screen/splash/Spl = new(character.client, TRUE)
- Spl.Fade(TRUE)
- character.playsound_local(get_turf(character), 'sound/voice/ApproachingTG.ogg', 25)
-
- character.update_parallax_teleport()
-
- SSticker.minds += character.mind
-
- var/mob/living/carbon/human/humanc
- if(ishuman(character))
- humanc = character //Let's retypecast the var to be human,
-
- if(humanc) //These procs all expect humans
- GLOB.data_core.manifest_inject(humanc)
- if(SSshuttle.arrivals)
- SSshuttle.arrivals.QueueAnnounce(humanc, rank)
- else
- AnnounceArrival(humanc, rank)
- AddEmploymentContract(humanc)
- if(GLOB.highlander)
- to_chat(humanc, "
THERE CAN BE ONLY ONE!!! ")
- humanc.make_scottish()
-
- if(GLOB.summon_guns_triggered)
- give_guns(humanc)
- if(GLOB.summon_magic_triggered)
- give_magic(humanc)
-
- GLOB.joined_player_list += character.ckey
- GLOB.latejoiners += character
-
- if(CONFIG_GET(flag/allow_latejoin_antagonists) && humanc) //Borgs aren't allowed to be antags. Will need to be tweaked if we get true latejoin ais.
- if(SSshuttle.emergency)
- switch(SSshuttle.emergency.mode)
- if(SHUTTLE_RECALL, SHUTTLE_IDLE)
- SSticker.mode.make_antag_chance(humanc)
- if(SHUTTLE_CALL)
- if(SSshuttle.emergency.timeLeft(1) > initial(SSshuttle.emergencyCallTime)*0.5)
- SSticker.mode.make_antag_chance(humanc)
-
- if(humanc && CONFIG_GET(flag/roundstart_traits))
- SSquirks.AssignQuirks(humanc, humanc.client, TRUE, FALSE, job, FALSE)
-
- log_manifest(character.mind.key,character.mind,character,latejoin = TRUE)
-
-/mob/dead/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee)
- //TODO: figure out a way to exclude wizards/nukeops/demons from this.
- for(var/C in GLOB.employmentCabinets)
- var/obj/structure/filingcabinet/employment/employmentCabinet = C
- if(!employmentCabinet.virgin)
- employmentCabinet.addFile(employee)
-
-
-/mob/dead/new_player/proc/LateChoices()
-
- var/level = "green"
- switch(GLOB.security_level)
- if(SEC_LEVEL_BLUE)
- level = "blue"
- if(SEC_LEVEL_AMBER)
- level = "amber"
- if(SEC_LEVEL_RED)
- level = "red"
- if(SEC_LEVEL_DELTA)
- level = "delta"
-
- var/dat = "
Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time)] Alert Level: [capitalize(level)]
"
-
- if(SSshuttle.emergency)
- switch(SSshuttle.emergency.mode)
- if(SHUTTLE_ESCAPE)
- dat += "
The station has been evacuated.
"
- if(SHUTTLE_CALL)
- if(!SSshuttle.canRecall())
- dat += "
The station is currently undergoing evacuation procedures.
"
-
- var/available_job_count = 0
- for(var/datum/job/job in SSjob.occupations)
- if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
- available_job_count++
- for(var/spawner in GLOB.mob_spawners)
- if(!LAZYLEN(spawner))
- continue
- var/obj/effect/mob_spawn/S = pick(GLOB.mob_spawners[spawner])
- if(!istype(S) || !S.can_latejoin())
- continue
- available_job_count++
- break
-
- if(!available_job_count)
- dat += "
There are currently no open positions!
"
-
- else
- dat += "
Choose from the following open positions:
"
- var/list/categorizedJobs = list(
- "Command" = list(jobs = list(), titles = GLOB.command_positions, color = "#aac1ee"),
- "Engineering" = list(jobs = list(), titles = GLOB.engineering_positions, color = "#ffd699"),
- "Supply" = list(jobs = list(), titles = GLOB.supply_positions, color = "#ead4ae"),
- "Miscellaneous" = list(jobs = list(), titles = list(), color = "#ffffff", colBreak = TRUE),
- "Ghost Role" = list(jobs = list(), titles = GLOB.mob_spawners, color = "#ffffff"),
- "Synthetic" = list(jobs = list(), titles = GLOB.nonhuman_positions, color = "#ccffcc"),
- "Service" = list(jobs = list(), titles = GLOB.civilian_positions, color = "#cccccc"),
- "Medical" = list(jobs = list(), titles = GLOB.medical_positions, color = "#99ffe6", colBreak = TRUE),
- "Science" = list(jobs = list(), titles = GLOB.science_positions, color = "#e6b3e6"),
- "Security" = list(jobs = list(), titles = GLOB.security_positions, color = "#ff9999"),
- )
- for(var/spawner in GLOB.mob_spawners)
- if(!LAZYLEN(spawner))
- continue
- var/obj/effect/mob_spawn/S = pick(GLOB.mob_spawners[spawner])
- if(!istype(S) || !S.can_latejoin())
- continue
- categorizedJobs["Ghost Role"]["jobs"] += spawner
-
- for(var/datum/job/job in SSjob.occupations)
- if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
- var/categorized = FALSE
- for(var/jobcat in categorizedJobs)
- var/list/jobs = categorizedJobs[jobcat]["jobs"]
- if(job.title in categorizedJobs[jobcat]["titles"])
- categorized = TRUE
- if(jobcat == "Command")
-
- if(job.title == "Captain") // Put captain at top of command jobs
- jobs.Insert(1, job)
- else
- jobs += job
- else // Put heads at top of non-command jobs
- if(job.title in GLOB.command_positions)
- jobs.Insert(1, job)
- else
- jobs += job
- if(!categorized)
- categorizedJobs["Miscellaneous"]["jobs"] += job
-
-
- dat += "
"
- for(var/jobcat in categorizedJobs)
- if(categorizedJobs[jobcat]["colBreak"])
- dat += " "
- if(!length(categorizedJobs[jobcat]["jobs"]))
- continue
- var/color = categorizedJobs[jobcat]["color"]
- dat += ""
- dat += "[jobcat] "
- for(var/datum/job/job in categorizedJobs[jobcat]["jobs"])
- var/position_class = "otherPosition"
- if(job.title in GLOB.command_positions)
- position_class = "commandPosition"
- if(job in SSjob.prioritized_jobs)
- dat += "[job.title] ([job.current_positions]) "
- else
- dat += "[job.title] ([job.current_positions]) "
- categorizedJobs[jobcat]["jobs"] -= job
-
- for(var/spawner in categorizedJobs[jobcat]["jobs"])
- dat += "[spawner] "
-
- dat += " "
- dat += "
"
- dat += "
"
-
- // Removing the old window method but leaving it here for reference
- //src << browse(dat, "window=latechoices;size=300x640;can_close=1")
-
- // Added the new browser window method
- var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 680, 580)
- popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css')
- popup.set_content(dat)
- popup.open(FALSE) // FALSE is passed to open so that it doesn't use the onclose() proc
-
-
-/mob/dead/new_player/proc/create_character(transfer_after)
- spawning = 1
- close_spawn_windows()
-
- var/mob/living/carbon/human/H = new(loc)
-
- var/frn = CONFIG_GET(flag/force_random_names)
- if(!frn)
- frn = jobban_isbanned(src, "appearance")
- if(QDELETED(src))
- return
- if(frn)
- client.prefs.random_character()
- client.prefs.real_name = client.prefs.pref_species.random_name(gender,1)
- client.prefs.copy_to(H)
- H.dna.update_dna_identity()
- if(mind)
- if(transfer_after)
- mind.late_joiner = TRUE
- mind.active = 0 //we wish to transfer the key manually
- mind.transfer_to(H) //won't transfer key since the mind is not active
-
- H.name = real_name
-
- . = H
- new_character = .
- if(transfer_after)
- transfer_character()
-
-/mob/dead/new_player/proc/transfer_character()
- . = new_character
- if(.)
- new_character.key = key //Manually transfer the key to log them in
- new_character.stop_sound_channel(CHANNEL_LOBBYMUSIC)
- new_character = null
- qdel(src)
-
-/mob/dead/new_player/proc/ViewManifest()
- var/dat = ""
- dat += "Crew Manifest "
- dat += GLOB.data_core.get_manifest(OOC = 1)
-
- src << browse(dat, "window=manifest;size=387x420;can_close=1")
-
-/mob/dead/new_player/Move()
- return 0
-
-
-/mob/dead/new_player/proc/close_spawn_windows()
-
- src << browse(null, "window=latechoices") //closes late choices window
- src << browse(null, "window=playersetup") //closes the player setup window
- src << browse(null, "window=preferences") //closes job selection
- src << browse(null, "window=mob_occupation")
- src << browse(null, "window=latechoices") //closes late job selection
+#define LINKIFY_READY(string, value) "[string] "
+
+/mob/dead/new_player
+ var/ready = 0
+ var/spawning = 0//Referenced when you want to delete the new_player later on in the code.
+
+ flags_1 = NONE
+
+ invisibility = INVISIBILITY_ABSTRACT
+
+ density = FALSE
+ stat = DEAD
+ canmove = FALSE
+
+ anchored = TRUE // don't get pushed around
+
+ var/mob/living/new_character //for instant transfer once the round is set up
+
+ //Used to make sure someone doesn't get spammed with messages if they're ineligible for roles
+ var/ineligible_for_roles = FALSE
+
+/mob/dead/new_player/Initialize()
+ if(client && SSticker.state == GAME_STATE_STARTUP)
+ var/obj/screen/splash/S = new(client, TRUE, TRUE)
+ S.Fade(TRUE)
+
+ if(length(GLOB.newplayer_start))
+ forceMove(pick(GLOB.newplayer_start))
+ else
+ forceMove(locate(1,1,1))
+
+ ComponentInitialize()
+
+ . = ..()
+
+/mob/dead/new_player/prepare_huds()
+ return
+
+/mob/dead/new_player/proc/new_player_panel()
+ var/output = "Welcome, [client ? client.prefs.real_name : "Unknown User"]
"
+ output += "Setup Character
"
+
+ if(SSticker.current_state <= GAME_STATE_PREGAME)
+ switch(ready)
+ if(PLAYER_NOT_READY)
+ output += "\[ [LINKIFY_READY("Ready", PLAYER_READY_TO_PLAY)] | Not Ready | [LINKIFY_READY("Observe", PLAYER_READY_TO_OBSERVE)] \]
"
+ if(PLAYER_READY_TO_PLAY)
+ output += "\[ Ready | [LINKIFY_READY("Not Ready", PLAYER_NOT_READY)] | [LINKIFY_READY("Observe", PLAYER_READY_TO_OBSERVE)] \]
"
+ if(PLAYER_READY_TO_OBSERVE)
+ output += "\[ [LINKIFY_READY("Ready", PLAYER_READY_TO_PLAY)] | [LINKIFY_READY("Not Ready", PLAYER_NOT_READY)] | Observe \]
"
+ else
+ output += "View the Crew Manifest
"
+ output += "Join Game!
"
+ output += "[LINKIFY_READY("Observe", PLAYER_READY_TO_OBSERVE)]
"
+
+ if(!IsGuestKey(src.key))
+ if (SSdbcore.Connect())
+ var/isadmin = 0
+ if(src.client && src.client.holder)
+ isadmin = 1
+ var/datum/DBQuery/query_get_new_polls = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[sanitizeSQL(ckey)]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[sanitizeSQL(ckey)]\")")
+ var/rs = REF(src)
+ if(query_get_new_polls.Execute())
+ var/newpoll = 0
+ if(query_get_new_polls.NextRow())
+ newpoll = 1
+
+ if(newpoll)
+ output += "Show Player Polls (NEW!)
"
+ else
+ output += "Show Player Polls
"
+ qdel(query_get_new_polls)
+ if(QDELETED(src))
+ return
+
+ output += " "
+
+ //src << browse(output,"window=playersetup;size=210x240;can_close=0")
+ var/datum/browser/popup = new(src, "playersetup", "New Player Options
", 250, 265)
+ popup.set_window_options("can_close=0")
+ popup.set_content(output)
+ popup.open(FALSE)
+
+/mob/dead/new_player/Topic(href, href_list[])
+ if(src != usr)
+ return 0
+
+ if(!client)
+ return 0
+
+ //Determines Relevent Population Cap
+ var/relevant_cap
+ var/hpc = CONFIG_GET(number/hard_popcap)
+ var/epc = CONFIG_GET(number/extreme_popcap)
+ if(hpc && epc)
+ relevant_cap = min(hpc, epc)
+ else
+ relevant_cap = max(hpc, epc)
+
+ if(href_list["show_preferences"])
+ client.prefs.ShowChoices(src)
+ return 1
+
+ if(href_list["ready"])
+ var/tready = text2num(href_list["ready"])
+ //Avoid updating ready if we're after PREGAME (they should use latejoin instead)
+ //This is likely not an actual issue but I don't have time to prove that this
+ //no longer is required
+ if(SSticker.current_state <= GAME_STATE_PREGAME)
+ ready = tready
+ //if it's post initialisation and they're trying to observe we do the needful
+ if(!SSticker.current_state < GAME_STATE_PREGAME && tready == PLAYER_READY_TO_OBSERVE)
+ ready = tready
+ make_me_an_observer()
+ return
+
+ if(href_list["refresh"])
+ src << browse(null, "window=playersetup") //closes the player setup window
+ new_player_panel()
+
+ if(href_list["late_join"])
+ if(!SSticker || !SSticker.IsRoundInProgress())
+ to_chat(usr, "The round is either not ready, or has already finished... ")
+ return
+
+ if(href_list["late_join"] == "override")
+ LateChoices()
+ return
+
+ if(SSticker.queued_players.len || (relevant_cap && living_player_count() >= relevant_cap && !(ckey(key) in GLOB.admin_datums)))
+ to_chat(usr, "[CONFIG_GET(string/hard_popcap_message)] ")
+
+ var/queue_position = SSticker.queued_players.Find(usr)
+ if(queue_position == 1)
+ to_chat(usr, "You are next in line to join the game. You will be notified when a slot opens up. ")
+ else if(queue_position)
+ to_chat(usr, "There are [queue_position-1] players in front of you in the queue to join the game. ")
+ else
+ SSticker.queued_players += usr
+ to_chat(usr, "You have been added to the queue to join the game. Your position in queue is [SSticker.queued_players.len]. ")
+ return
+ LateChoices()
+
+ if(href_list["manifest"])
+ ViewManifest()
+
+ if(href_list["SelectedJob"])
+
+ if(!GLOB.enter_allowed)
+ to_chat(usr, "There is an administrative lock on entering the game! ")
+ return
+
+ if(SSticker.queued_players.len && !(ckey(key) in GLOB.admin_datums))
+ if((living_player_count() >= relevant_cap) || (src != SSticker.queued_players[1]))
+ to_chat(usr, "Server is full. ")
+ return
+
+ AttemptLateSpawn(href_list["SelectedJob"])
+ return
+
+ if(href_list["JoinAsGhostRole"])
+ if(!GLOB.enter_allowed)
+ to_chat(usr, " There is an administrative lock on entering the game! ")
+
+ if(SSticker.queued_players.len && !(ckey(key) in GLOB.admin_datums))
+ if((living_player_count() >= relevant_cap) || (src != SSticker.queued_players[1]))
+ to_chat(usr, "Server is full. ")
+ return
+
+ var/obj/effect/mob_spawn/MS = pick(GLOB.mob_spawners[href_list["JoinAsGhostRole"]])
+ if(MS.attack_ghost(src, latejoinercalling = TRUE))
+ SSticker.queued_players -= src
+ SSticker.queue_delay = 4
+ qdel(src)
+
+ if(!ready && href_list["preference"])
+ if(client)
+ client.prefs.process_link(src, href_list)
+ else if(!href_list["late_join"])
+ new_player_panel()
+
+ if(href_list["showpoll"])
+ handle_player_polling()
+ return
+
+ if(href_list["pollid"])
+ var/pollid = href_list["pollid"]
+ if(istext(pollid))
+ pollid = text2num(pollid)
+ if(isnum(pollid) && ISINTEGER(pollid))
+ src.poll_player(pollid)
+ return
+
+ if(href_list["votepollid"] && href_list["votetype"])
+ var/pollid = text2num(href_list["votepollid"])
+ var/votetype = href_list["votetype"]
+ //lets take data from the user to decide what kind of poll this is, without validating it
+ //what could go wrong
+ switch(votetype)
+ if(POLLTYPE_OPTION)
+ var/optionid = text2num(href_list["voteoptionid"])
+ if(vote_on_poll(pollid, optionid))
+ to_chat(usr, "Vote successful. ")
+ else
+ to_chat(usr, "Vote failed, please try again or contact an administrator. ")
+ if(POLLTYPE_TEXT)
+ var/replytext = href_list["replytext"]
+ if(log_text_poll_reply(pollid, replytext))
+ to_chat(usr, "Feedback logging successful. ")
+ else
+ to_chat(usr, "Feedback logging failed, please try again or contact an administrator. ")
+ if(POLLTYPE_RATING)
+ var/id_min = text2num(href_list["minid"])
+ var/id_max = text2num(href_list["maxid"])
+
+ if( (id_max - id_min) > 100 ) //Basic exploit prevention
+ //(protip, this stops no exploits)
+ to_chat(usr, "The option ID difference is too big. Please contact administration or the database admin.")
+ return
+
+ for(var/optionid = id_min; optionid <= id_max; optionid++)
+ if(!isnull(href_list["o[optionid]"])) //Test if this optionid was replied to
+ var/rating
+ if(href_list["o[optionid]"] == "abstain")
+ rating = null
+ else
+ rating = text2num(href_list["o[optionid]"])
+ if(!isnum(rating) || !ISINTEGER(rating))
+ return
+
+ if(!vote_on_numval_poll(pollid, optionid, rating))
+ to_chat(usr, "Vote failed, please try again or contact an administrator. ")
+ return
+ to_chat(usr, "Vote successful. ")
+ if(POLLTYPE_MULTI)
+ var/id_min = text2num(href_list["minoptionid"])
+ var/id_max = text2num(href_list["maxoptionid"])
+
+ if( (id_max - id_min) > 100 ) //Basic exploit prevention
+ to_chat(usr, "The option ID difference is too big. Please contact administration or the database admin.")
+ return
+
+ for(var/optionid = id_min; optionid <= id_max; optionid++)
+ if(!isnull(href_list["option_[optionid]"])) //Test if this optionid was selected
+ var/i = vote_on_multi_poll(pollid, optionid)
+ switch(i)
+ if(0)
+ continue
+ if(1)
+ to_chat(usr, "Vote failed, please try again or contact an administrator. ")
+ return
+ if(2)
+ to_chat(usr, "Maximum replies reached. ")
+ break
+ to_chat(usr, "Vote successful. ")
+ if(POLLTYPE_IRV)
+ if (!href_list["IRVdata"])
+ to_chat(src, "No ordering data found. Please try again or contact an administrator. ")
+ return
+ var/list/votelist = splittext(href_list["IRVdata"], ",")
+ if (!vote_on_irv_poll(pollid, votelist))
+ to_chat(src, "Vote failed, please try again or contact an administrator. ")
+ return
+ to_chat(src, "Vote successful. ")
+
+//When you cop out of the round (NB: this HAS A SLEEP FOR PLAYER INPUT IN IT)
+/mob/dead/new_player/proc/make_me_an_observer()
+ if(QDELETED(src) || !src.client)
+ ready = PLAYER_NOT_READY
+ return FALSE
+
+ var/this_is_like_playing_right = alert(src,"Are you sure you wish to observe? You will not be able to play this round!","Player Setup","Yes","No")
+
+ if(QDELETED(src) || !src.client || this_is_like_playing_right != "Yes")
+ ready = PLAYER_NOT_READY
+ src << browse(null, "window=playersetup") //closes the player setup window
+ new_player_panel()
+ return FALSE
+
+ var/mob/dead/observer/observer = new()
+ spawning = TRUE
+
+ observer.started_as_observer = TRUE
+ close_spawn_windows()
+ var/obj/effect/landmark/observer_start/O = locate(/obj/effect/landmark/observer_start) in GLOB.landmarks_list
+ to_chat(src, "Now teleporting. ")
+ if (O)
+ observer.forceMove(O.loc)
+ else
+ to_chat(src, "Teleporting failed. Ahelp an admin please ")
+ stack_trace("There's no freaking observer landmark available on this map or you're making observers before the map is initialised")
+ observer.key = key
+ observer.client = client
+ observer.set_ghost_appearance()
+ if(observer.client && observer.client.prefs)
+ observer.real_name = observer.client.prefs.real_name
+ observer.name = observer.real_name
+ observer.update_icon()
+ observer.stop_sound_channel(CHANNEL_LOBBYMUSIC)
+ QDEL_NULL(mind)
+ qdel(src)
+ return TRUE
+
+/proc/get_job_unavailable_error_message(retval, jobtitle)
+ switch(retval)
+ if(JOB_AVAILABLE)
+ return "[jobtitle] is available."
+ if(JOB_UNAVAILABLE_GENERIC)
+ return "[jobtitle] is unavailable."
+ if(JOB_UNAVAILABLE_BANNED)
+ return "You are currently banned from [jobtitle]."
+ if(JOB_UNAVAILABLE_PLAYTIME)
+ return "You do not have enough relevant playtime for [jobtitle]."
+ if(JOB_UNAVAILABLE_ACCOUNTAGE)
+ return "Your account is not old enough for [jobtitle]."
+ if(JOB_UNAVAILABLE_SLOTFULL)
+ return "[jobtitle] is already filled to capacity."
+ return "Error: Unknown job availability."
+
+/mob/dead/new_player/proc/IsJobUnavailable(rank, latejoin = FALSE)
+ var/datum/job/job = SSjob.GetJob(rank)
+ if(!job)
+ return JOB_UNAVAILABLE_GENERIC
+ if((job.current_positions >= job.total_positions) && job.total_positions != -1)
+ if(job.title == "Assistant")
+ if(isnum(client.player_age) && client.player_age <= 14) //Newbies can always be assistants
+ return JOB_AVAILABLE
+ for(var/datum/job/J in SSjob.occupations)
+ if(J && J.current_positions < J.total_positions && J.title != job.title)
+ return JOB_UNAVAILABLE_SLOTFULL
+ else
+ return JOB_UNAVAILABLE_SLOTFULL
+ if(jobban_isbanned(src,rank))
+ return JOB_UNAVAILABLE_BANNED
+ if(QDELETED(src))
+ return JOB_UNAVAILABLE_GENERIC
+ if(!job.player_old_enough(client))
+ return JOB_UNAVAILABLE_ACCOUNTAGE
+ if(job.required_playtime_remaining(client))
+ return JOB_UNAVAILABLE_PLAYTIME
+ if(latejoin && !job.special_check_latejoin(client))
+ return JOB_UNAVAILABLE_GENERIC
+ return JOB_AVAILABLE
+
+/mob/dead/new_player/proc/AttemptLateSpawn(rank)
+ var/error = IsJobUnavailable(rank)
+ if(error != JOB_AVAILABLE)
+ alert(src, get_job_unavailable_error_message(error, rank))
+ return FALSE
+
+ if(SSticker.late_join_disabled)
+ alert(src, "An administrator has disabled late join spawning.")
+ return FALSE
+
+ var/arrivals_docked = TRUE
+ if(SSshuttle.arrivals)
+ close_spawn_windows() //In case we get held up
+ if(SSshuttle.arrivals.damaged && CONFIG_GET(flag/arrivals_shuttle_require_safe_latejoin))
+ src << alert("The arrivals shuttle is currently malfunctioning! You cannot join.")
+ return FALSE
+
+ if(CONFIG_GET(flag/arrivals_shuttle_require_undocked))
+ SSshuttle.arrivals.RequireUndocked(src)
+ arrivals_docked = SSshuttle.arrivals.mode != SHUTTLE_CALL
+
+ //Remove the player from the join queue if he was in one and reset the timer
+ SSticker.queued_players -= src
+ SSticker.queue_delay = 4
+
+ SSjob.AssignRole(src, rank, 1)
+
+ var/mob/living/character = create_character(TRUE) //creates the human and transfers vars and mind
+ var/equip = SSjob.EquipRank(character, rank, TRUE)
+ if(isliving(equip)) //Borgs get borged in the equip, so we need to make sure we handle the new mob.
+ character = equip
+
+ var/datum/job/job = SSjob.GetJob(rank)
+
+ if(job && !job.override_latejoin_spawn(character))
+ SSjob.SendToLateJoin(character)
+ if(!arrivals_docked)
+ var/obj/screen/splash/Spl = new(character.client, TRUE)
+ Spl.Fade(TRUE)
+ character.playsound_local(get_turf(character), 'sound/voice/ApproachingTG.ogg', 25)
+
+ character.update_parallax_teleport()
+
+ SSticker.minds += character.mind
+
+ var/mob/living/carbon/human/humanc
+ if(ishuman(character))
+ humanc = character //Let's retypecast the var to be human,
+
+ if(humanc) //These procs all expect humans
+ GLOB.data_core.manifest_inject(humanc)
+ if(SSshuttle.arrivals)
+ SSshuttle.arrivals.QueueAnnounce(humanc, rank)
+ else
+ AnnounceArrival(humanc, rank)
+ AddEmploymentContract(humanc)
+ if(GLOB.highlander)
+ to_chat(humanc, "THERE CAN BE ONLY ONE!!! ")
+ humanc.make_scottish()
+
+ if(GLOB.summon_guns_triggered)
+ give_guns(humanc)
+ if(GLOB.summon_magic_triggered)
+ give_magic(humanc)
+
+ GLOB.joined_player_list += character.ckey
+ GLOB.latejoiners += character
+
+ if(CONFIG_GET(flag/allow_latejoin_antagonists) && humanc) //Borgs aren't allowed to be antags. Will need to be tweaked if we get true latejoin ais.
+ if(SSshuttle.emergency)
+ switch(SSshuttle.emergency.mode)
+ if(SHUTTLE_RECALL, SHUTTLE_IDLE)
+ SSticker.mode.make_antag_chance(humanc)
+ if(SHUTTLE_CALL)
+ if(SSshuttle.emergency.timeLeft(1) > initial(SSshuttle.emergencyCallTime)*0.5)
+ SSticker.mode.make_antag_chance(humanc)
+
+ if(humanc && CONFIG_GET(flag/roundstart_traits))
+ SSquirks.AssignQuirks(humanc, humanc.client, TRUE, FALSE, job, FALSE)
+
+ log_manifest(character.mind.key,character.mind,character,latejoin = TRUE)
+
+/mob/dead/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee)
+ //TODO: figure out a way to exclude wizards/nukeops/demons from this.
+ for(var/C in GLOB.employmentCabinets)
+ var/obj/structure/filingcabinet/employment/employmentCabinet = C
+ if(!employmentCabinet.virgin)
+ employmentCabinet.addFile(employee)
+
+
+/mob/dead/new_player/proc/LateChoices()
+
+ var/level = "green"
+ switch(GLOB.security_level)
+ if(SEC_LEVEL_GREEN)
+ level = "green"
+ if(SEC_LEVEL_BLUE)
+ level = "blue"
+ if(SEC_LEVEL_AMBER)
+ level = "amber"
+ if(SEC_LEVEL_RED)
+ level = "red"
+ if(SEC_LEVEL_DELTA)
+ level = "delta"
+
+ var/dat = "Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time)] Alert Level: [capitalize(level)]
"
+ if(SSshuttle.emergency)
+ switch(SSshuttle.emergency.mode)
+ if(SHUTTLE_ESCAPE)
+ dat += "The station has been evacuated.
"
+ if(SHUTTLE_CALL)
+ if(!SSshuttle.canRecall())
+ dat += "The station is currently undergoing evacuation procedures.
"
+ for(var/datum/job/prioritized_job in SSjob.prioritized_jobs)
+ if(prioritized_job.current_positions >= prioritized_job.total_positions)
+ SSjob.prioritized_jobs -= prioritized_job
+ dat += ""
+ var/column_counter = 0
+ var/free_space = 0
+ for(var/list/category in list(GLOB.command_positions) + list(GLOB.supply_positions) + list(GLOB.engineering_positions) + list(GLOB.nonhuman_positions - "pAI") + list(GLOB.civilian_positions) + list(GLOB.medical_positions) + list(GLOB.science_positions) + list(GLOB.security_positions))
+ var/cat_color = "fff" //random default
+ if(SSjob.name_occupations && SSjob.name_occupations[category[1]])
+ cat_color = SSjob.name_occupations[category[1]].selection_color //use the color of the first job in the category (the department head) as the category color
+ else
+ cat_color = SSjob.occupations[category[1]].selection_color
+ dat += ""
+ dat += "[SSjob.name_occupations[category[1]].exp_type_department] "
+
+ var/list/dept_dat = list()
+ for(var/job in category)
+ var/datum/job/job_datum = SSjob.name_occupations[job]
+ if(job_datum && IsJobUnavailable(job_datum.title, TRUE) == JOB_AVAILABLE)
+ var/command_bold = ""
+ if(job in GLOB.command_positions)
+ command_bold = " command"
+ if(job_datum in SSjob.prioritized_jobs)
+ dept_dat += "[job_datum.title] ([job_datum.current_positions]) "
+ else
+ dept_dat += "[job_datum.title] ([job_datum.current_positions]) "
+ if(!dept_dat.len)
+ dept_dat += "No positions open. "
+ dat += jointext(dept_dat, "")
+ dat += " "
+ column_counter++
+ if(free_space <=4)
+ free_space++
+ if(column_counter > 0 && (column_counter % 3 == 0))
+ dat += " "
+ if(free_space >= 5 && (free_space % 5 == 0) && (column_counter % 3 != 0))
+ free_space = 0
+ column_counter = 0
+ dat += " "
+
+ dat += "
"
+
+ var/available_ghosts = 0
+ for(var/spawner in GLOB.mob_spawners)
+ if(!LAZYLEN(spawner))
+ continue
+ var/obj/effect/mob_spawn/S = pick(GLOB.mob_spawners[spawner])
+ if(!istype(S) || !S.can_latejoin())
+ continue
+ available_ghosts++
+ break
+
+ if(!available_ghosts)
+ dat += "There are currently no open ghost spawners.
"
+ else
+ var/list/categorizedJobs = list("Ghost Role" = list(jobs = list(), titles = GLOB.mob_spawners, color = "#ffffff"))
+ for(var/spawner in GLOB.mob_spawners)
+ if(!LAZYLEN(spawner))
+ continue
+ var/obj/effect/mob_spawn/S = pick(GLOB.mob_spawners[spawner])
+ if(!istype(S) || !S.can_latejoin())
+ continue
+ categorizedJobs["Ghost Role"]["jobs"] += spawner
+
+ dat += ""
+ for(var/jobcat in categorizedJobs)
+ if(!length(categorizedJobs[jobcat]["jobs"]))
+ continue
+ var/color = categorizedJobs[jobcat]["color"]
+ dat += ""
+ dat += "[jobcat] "
+ for(var/spawner in categorizedJobs[jobcat]["jobs"])
+ dat += "[spawner] "
+
+ dat += " "
+ dat += "
"
+ dat += ""
+
+ var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 720, 600)
+ popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css')
+ popup.set_content(jointext(dat, ""))
+ popup.open(FALSE) // FALSE is passed to open so that it doesn't use the onclose() proc
+
+/mob/dead/new_player/proc/create_character(transfer_after)
+ spawning = 1
+ close_spawn_windows()
+
+ var/mob/living/carbon/human/H = new(loc)
+
+ var/frn = CONFIG_GET(flag/force_random_names)
+ if(!frn)
+ frn = jobban_isbanned(src, "appearance")
+ if(QDELETED(src))
+ return
+ if(frn)
+ client.prefs.random_character()
+ client.prefs.real_name = client.prefs.pref_species.random_name(gender,1)
+ client.prefs.copy_to(H)
+ H.dna.update_dna_identity()
+ if(mind)
+ if(transfer_after)
+ mind.late_joiner = TRUE
+ mind.active = 0 //we wish to transfer the key manually
+ mind.transfer_to(H) //won't transfer key since the mind is not active
+
+ H.name = real_name
+
+ . = H
+ new_character = .
+ if(transfer_after)
+ transfer_character()
+
+/mob/dead/new_player/proc/transfer_character()
+ . = new_character
+ if(.)
+ new_character.key = key //Manually transfer the key to log them in
+ new_character.stop_sound_channel(CHANNEL_LOBBYMUSIC)
+ new_character = null
+ qdel(src)
+
+/mob/dead/new_player/proc/ViewManifest()
+ var/dat = ""
+ dat += "Crew Manifest "
+ dat += GLOB.data_core.get_manifest(OOC = 1)
+
+ src << browse(dat, "window=manifest;size=387x420;can_close=1")
+
+/mob/dead/new_player/Move()
+ return 0
+
+
+/mob/dead/new_player/proc/close_spawn_windows()
+
+ src << browse(null, "window=latechoices") //closes late choices window
+ src << browse(null, "window=playersetup") //closes the player setup window
+ src << browse(null, "window=preferences") //closes job selection
+ src << browse(null, "window=mob_occupation")
+ src << browse(null, "window=latechoices") //closes late job selection
+
+/* Used to make sure that a player has a valid job preference setup, used to knock players out of eligibility for anything if their prefs don't make sense.
+ A "valid job preference setup" in this situation means at least having one job set to low, or not having "return to lobby" enabled
+ Prevents "antag rolling" by setting antag prefs on, all jobs to never, and "return to lobby if preferences not availible"
+ Doing so would previously allow you to roll for antag, then send you back to lobby if you didn't get an antag role
+ This also does some admin notification and logging as well, as well as some extra logic to make sure things don't go wrong
+*/
+
+/mob/dead/new_player/proc/check_preferences()
+ if(!client)
+ return FALSE //Not sure how this would get run without the mob having a client, but let's just be safe.
+ if(client.prefs.joblessrole != RETURNTOLOBBY)
+ return TRUE
+ // If they have antags enabled, they're potentially doing this on purpose instead of by accident. Notify admins if so.
+ var/has_antags = FALSE
+ if(client.prefs.be_special.len > 0)
+ has_antags = TRUE
+ if(client.prefs.job_preferences.len == 0)
+ if(!ineligible_for_roles)
+ to_chat(src, "You have no jobs enabled, along with return to lobby if job is unavailable. This makes you ineligible for any round start role, please update your job preferences. ")
+ ineligible_for_roles = TRUE
+ ready = PLAYER_NOT_READY
+ if(has_antags)
+ log_admin("[src.ckey] just got booted back to lobby with no jobs, but antags enabled.")
+ message_admins("[src.ckey] just got booted back to lobby with no jobs enabled, but antag rolling enabled. Likely antag rolling abuse.")
+
+ return FALSE //This is the only case someone should actually be completely blocked from antag rolling as well
+ return TRUE
diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm
index 6e91b58506..994d082585 100644
--- a/code/modules/mob/dead/new_player/preferences_setup.dm
+++ b/code/modules/mob/dead/new_player/preferences_setup.dm
@@ -24,50 +24,35 @@
age = rand(AGE_MIN,AGE_MAX)
/datum/preferences/proc/update_preview_icon()
- // Silicons only need a very basic preview since there is no customization for them.
-// var/wide_icon = FALSE //CITDEL THINGS
-// if(features["taur"] != "None")
-// wide_icon = TRUE
- if(job_engsec_high)
- switch(job_engsec_high)
- if(AI_JF)
- parent.show_character_previews(image('icons/mob/ai.dmi', resolve_ai_icon(preferred_ai_core_display), dir = SOUTH))
- return
- if(CYBORG)
- parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH))
- return
+ // Determine what job is marked as 'High' priority, and dress them up as such.
+ var/datum/job/previewJob
+ var/highest_pref = 0
+ for(var/job in job_preferences)
+ if(job_preferences["[job]"] > highest_pref)
+ previewJob = SSjob.GetJob(job)
+ highest_pref = job_preferences["[job]"]
+
+ if(previewJob)
+ // Silicons only need a very basic preview since there is no customization for them.
+ if(istype(previewJob,/datum/job/ai))
+ parent.show_character_previews(image('icons/mob/ai.dmi', icon_state = resolve_ai_icon(preferred_ai_core_display), dir = SOUTH))
+ return
+ if(istype(previewJob,/datum/job/cyborg))
+ parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH))
+ return
// Set up the dummy for its photoshoot
var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
mannequin.cut_overlays()
+ // Apply the Dummy's preview background first so we properly layer everything else on top of it.
mannequin.add_overlay(mutable_appearance('modular_citadel/icons/ui/backgrounds.dmi', bgstate, layer = SPACE_LAYER))
copy_to(mannequin)
- // Determine what job is marked as 'High' priority, and dress them up as such.
- var/datum/job/previewJob
- var/highRankFlag = job_civilian_high | job_medsci_high | job_engsec_high
-
- if(job_civilian_low & ASSISTANT)
- previewJob = SSjob.GetJob("Assistant")
- else if(highRankFlag)
- var/highDeptFlag
- if(job_civilian_high)
- highDeptFlag = CIVILIAN
- else if(job_medsci_high)
- highDeptFlag = MEDSCI
- else if(job_engsec_high)
- highDeptFlag = ENGSEC
-
- for(var/datum/job/job in SSjob.occupations)
- if(job.flag == highRankFlag && job.department_flag == highDeptFlag)
- previewJob = job
- break
-
if(previewJob)
- if(current_tab != 2)
- mannequin.job = previewJob.title
- previewJob.equip(mannequin, TRUE)
+ mannequin.job = previewJob.title
+ previewJob.equip(mannequin, TRUE, preference_source = parent)
COMPILE_OVERLAYS(mannequin)
parent.show_character_previews(new /mutable_appearance(mannequin))
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
+
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm
new file mode 100644
index 0000000000..020776a75f
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm
@@ -0,0 +1,53 @@
+/datum/sprite_accessory/mam_tails/shark/datashark
+ name = "DataShark"
+ icon_state = "datashark"
+ ckeys_allowed = list("rubyflamewing")
+
+/datum/sprite_accessory/mam_tails_animated/shark/datashark
+ name = "DataShark"
+ icon_state = "datashark"
+ ckeys_allowed = list("rubyflamewing")
+
+/datum/sprite_accessory/mam_body_markings/shark/datashark
+ name = "DataShark"
+ icon_state = "datashark"
+ ckeys_allowed = list("rubyflamewing")
+
+//Sabresune
+/datum/sprite_accessory/mam_ears/sabresune
+ name = "Sabresune"
+ icon_state = "sabresune"
+ ckeys_allowed = list("poojawa")
+ extra = TRUE
+ extra_color_src = MUTCOLORS3
+
+/datum/sprite_accessory/mam_tails/sabresune
+ name = "Sabresune"
+ icon_state = "sabresune"
+ ckeys_allowed = list("poojawa")
+
+/datum/sprite_accessory/mam_tails_animated/sabresune
+ name = "Sabresune"
+ icon_state = "sabresune"
+ ckeys_allowed = list("poojawa")
+
+/datum/sprite_accessory/mam_body_markings/sabresune
+ name = "Sabresune"
+ icon_state = "sabresune"
+ ckeys_allowed = list("poojawa")
+
+//Lunasune
+/datum/sprite_accessory/mam_ears/lunasune
+ name = "lunasune"
+ icon_state = "lunasune"
+ ckeys_allowed = list("invader4352")
+
+/datum/sprite_accessory/mam_tails/lunasune
+ name = "lunasune"
+ icon_state = "lunasune"
+ ckeys_allowed = list("invader4352")
+
+/datum/sprite_accessory/mam_tails_animated/lunasune
+ name = "lunasune"
+ icon_state = "lunasune"
+ ckeys_allowed = list("invader4352")
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
index 5e24d0630b..dd66f68e5d 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
@@ -61,6 +61,17 @@
var/dimension_y = 32
var/center = FALSE //Should we center the sprite?
+ //Special / holdover traits for Citadel specific sprites.
+ var/extra = FALSE
+ var/extra_color_src = MUTCOLORS2 //The color source for the extra overlay.
+ var/extra_icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ var/extra2 = FALSE
+ var/extra2_color_src = MUTCOLORS3
+ var/extra2_icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+ //for snowflake/donor specific sprites
+ var/list/ckeys_allowed
+
/datum/sprite_accessory/underwear
icon = 'icons/mob/underwear.dmi'
var/has_color = FALSE
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm b/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm
new file mode 100644
index 0000000000..6c0659f851
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm
@@ -0,0 +1,53 @@
+
+/******************************************
+*********** Xeno Dorsal Tubes *************
+*******************************************/
+/datum/sprite_accessory/xeno_dorsal
+ icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
+
+/datum/sprite_accessory/xeno_dorsal/standard
+ name = "Standard"
+ icon_state = "standard"
+
+/datum/sprite_accessory/xeno_dorsal/royal
+ name = "Royal"
+ icon_state = "royal"
+
+/datum/sprite_accessory/xeno_dorsal/down
+ name = "Dorsal Down"
+ icon_state = "down"
+
+/******************************************
+************* Xeno Tails ******************
+*******************************************/
+/datum/sprite_accessory/xeno_tail
+ icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
+
+/datum/sprite_accessory/xeno_tail/none
+ name = "None"
+
+/datum/sprite_accessory/xeno_tail/standard
+ name = "Xenomorph Tail"
+ icon_state = "xeno"
+
+/******************************************
+************* Xeno Heads ******************
+*******************************************/
+/datum/sprite_accessory/xeno_head
+ icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
+
+/datum/sprite_accessory/xeno_head/standard
+ name = "Standard"
+ icon_state = "standard"
+
+/datum/sprite_accessory/xeno_head/royal
+ name = "royal"
+ icon_state = "royal"
+
+/datum/sprite_accessory/xeno_head/hollywood
+ name = "hollywood"
+ icon_state = "hollywood"
+
+/datum/sprite_accessory/xeno_head/warrior
+ name = "warrior"
+ icon_state = "warrior"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm
index 6bce18d7ce..2f1d48cfa7 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm
@@ -1,6 +1,6 @@
-//////////.//////////////////
-// MutantParts Definitions //
-/////////////////////////////
+/******************************************
+************* Lizard Markings *************
+*******************************************/
/datum/sprite_accessory/body_markings
icon = 'icons/mob/mutant_bodyparts.dmi'
@@ -22,4 +22,271 @@
/datum/sprite_accessory/body_markings/lbelly
name = "Light Belly"
icon_state = "lbelly"
- gender_specific = 1
\ No newline at end of file
+ gender_specific = 1
+
+/******************************************
+************ Furry Markings ***************
+*******************************************/
+
+// These are all color matrixed and applied per-limb by default. you MUST comply with this if you want to have your markings work --Pooj
+// use the HumanScissors tool to break your sprite up into the zones easier.
+// Although Byond supposedly doesn't have an icon limit anymore of 512 states after 512.1478, just be careful about too many additions.
+
+/datum/sprite_accessory/mam_body_markings
+ extra = FALSE
+ extra2 = FALSE
+ color_src = MATRIXED
+ gender_specific = 0
+ icon = 'modular_citadel/icons/mob/mam_markings.dmi'
+
+/datum/sprite_accessory/mam_body_markings/none
+ name = "None"
+ icon_state = "none"
+ ckeys_allowed = list("yousshouldnteverbeseeingthisyoumeme")
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/plain
+ name = "Plain"
+ icon_state = "plain"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/redpanda
+ name = "Redpanda"
+ icon_state = "redpanda"
+
+/datum/sprite_accessory/mam_body_markings/bee
+ name = "Bee"
+ icon_state = "bee"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/belly
+ name = "Belly"
+ icon_state = "belly"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/bellyslim
+ name = "Bellyslim"
+ icon_state = "bellyslim"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/corgi
+ name = "Corgi"
+ icon_state = "corgi"
+
+/datum/sprite_accessory/mam_body_markings/cow
+ name = "Bovine"
+ icon_state = "bovine"
+
+/datum/sprite_accessory/mam_body_markings/corvid
+ name = "Corvid"
+ icon_state = "corvid"
+
+/datum/sprite_accessory/mam_body_markings/dalmation
+ name = "Dalmation"
+ icon_state = "dalmation"
+
+/datum/sprite_accessory/mam_body_markings/deer
+ name = "Deer"
+ icon_state = "deer"
+
+/datum/sprite_accessory/mam_body_markings/dog
+ name = "Dog"
+ icon_state = "dog"
+
+/datum/sprite_accessory/mam_body_markings/eevee
+ name = "Eevee"
+ icon_state = "eevee"
+
+/datum/sprite_accessory/mam_body_markings/fennec
+ name = "Fennec"
+ icon_state = "Fennec"
+
+/datum/sprite_accessory/mam_body_markings/fox
+ name = "Fox"
+ icon_state = "fox"
+
+/datum/sprite_accessory/mam_body_markings/frog
+ name = "Frog"
+ icon_state = "frog"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/goat
+ name = "Goat"
+ icon_state = "goat"
+
+/datum/sprite_accessory/mam_body_markings/handsfeet
+ name = "Handsfeet"
+ icon_state = "handsfeet"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/hawk
+ name = "Hawk"
+ icon_state = "hawk"
+
+/datum/sprite_accessory/mam_body_markings/husky
+ name = "Husky"
+ icon_state = "husky"
+
+/datum/sprite_accessory/mam_body_markings/hyena
+ name = "Hyena"
+ icon_state = "hyena"
+
+/datum/sprite_accessory/mam_body_markings/lab
+ name = "Lab"
+ icon_state = "lab"
+
+/datum/sprite_accessory/mam_body_markings/insect
+ name = "Insect"
+ icon_state = "insect"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/otie
+ name = "Otie"
+ icon_state = "otie"
+
+/datum/sprite_accessory/mam_body_markings/otter
+ name = "Otter"
+ icon_state = "otter"
+
+/datum/sprite_accessory/mam_body_markings/orca
+ name = "Orca"
+ icon_state = "orca"
+
+/datum/sprite_accessory/mam_body_markings/panther
+ name = "Panther"
+ icon_state = "panther"
+
+/datum/sprite_accessory/mam_body_markings/possum
+ name = "Possum"
+ icon_state = "possum"
+
+/datum/sprite_accessory/mam_body_markings/raccoon
+ name = "Raccoon"
+ icon_state = "raccoon"
+
+/datum/sprite_accessory/mam_body_markings/pede
+ name = "Scolipede"
+ icon_state = "scolipede"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/shark
+ name = "Shark"
+ icon_state = "shark"
+
+/datum/sprite_accessory/mam_body_markings/skunk
+ name = "Skunk"
+ icon_state = "skunk"
+
+/datum/sprite_accessory/mam_body_markings/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+
+/datum/sprite_accessory/mam_body_markings/shepherd
+ name = "Shepherd"
+ icon_state = "shepherd"
+
+/datum/sprite_accessory/mam_body_markings/tajaran
+ name = "Tajaran"
+ icon_state = "tajaran"
+
+/datum/sprite_accessory/mam_body_markings/tiger
+ name = "Tiger"
+ icon_state = "tiger"
+
+/datum/sprite_accessory/mam_body_markings/turian
+ name = "Turian"
+ icon_state = "turian"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/mam_body_markings/wolf
+ name = "Wolf"
+ icon_state = "wolf"
+
+/datum/sprite_accessory/mam_body_markings/xeno
+ name = "Xeno"
+ icon_state = "xeno"
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/******************************************
+************* Insect Markings *************
+*******************************************/
+
+/datum/sprite_accessory/insect_fluff
+ icon = 'icons/mob/wings.dmi'
+ color_src = 0
+
+/datum/sprite_accessory/insect_fluff/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/insect_fluff/plain
+ name = "Plain"
+ icon_state = "plain"
+
+/datum/sprite_accessory/insect_fluff/reddish
+ name = "Reddish"
+ icon_state = "redish"
+
+/datum/sprite_accessory/insect_fluff/royal
+ name = "Royal"
+ icon_state = "royal"
+
+/datum/sprite_accessory/insect_fluff/gothic
+ name = "Gothic"
+ icon_state = "gothic"
+
+/datum/sprite_accessory/insect_fluff/lovers
+ name = "Lovers"
+ icon_state = "lovers"
+
+/datum/sprite_accessory/insect_fluff/whitefly
+ name = "White Fly"
+ icon_state = "whitefly"
+
+/datum/sprite_accessory/insect_fluff/punished
+ name = "Burnt Off"
+ icon_state = "punished"
+
+/datum/sprite_accessory/insect_fluff/firewatch
+ name = "Firewatch"
+ icon_state = "firewatch"
+
+/datum/sprite_accessory/insect_fluff/deathhead
+ name = "Deathshead"
+ icon_state = "deathhead"
+
+/datum/sprite_accessory/insect_fluff/poison
+ name = "Poison"
+ icon_state = "poison"
+
+/datum/sprite_accessory/insect_fluff/ragged
+ name = "Ragged"
+ icon_state = "ragged"
+
+/datum/sprite_accessory/insect_fluff/moonfly
+ name = "Moon Fly"
+ icon_state = "moonfly"
+
+/datum/sprite_accessory/insect_fluff/snow
+ name = "Snow"
+ icon_state = "snow"
+
+/datum/sprite_accessory/insect_fluff/colored
+ name = "Colored (Hair)"
+ icon_state = "snow"
+ color_src = HAIR
+
+/datum/sprite_accessory/insect_fluff/colored1
+ name = "Colored (Primary)"
+ icon_state = "snow"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/insect_fluff/colored2
+ name = "Colored (Secondary)"
+ icon_state = "snow"
+ color_src = MUTCOLORS2
+
+/datum/sprite_accessory/insect_fluff/colored3
+ name = "Colored (Tertiary)"
+ icon_state = "snow"
+ color_src = MUTCOLORS3
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
index 163f8370a2..1496ca030a 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
@@ -5,8 +5,295 @@
name = "None"
icon_state = "none"
+/******************************************
+*************** Human Ears ****************
+*******************************************/
+
+/datum/sprite_accessory/ears/human/axolotl
+ name = "Axolotl"
+ icon_state = "axolotl"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+
+/datum/sprite_accessory/ears/human/bear
+ name = "Bear"
+ icon_state = "bear"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/bigwolf
+ name = "Big Wolf"
+ icon_state = "bigwolf"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/bigwolfinner
+ name = "Big Wolf (ALT)"
+ icon_state = "bigwolfinner"
+ hasinner = 1
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/bigwolfdark
+ name = "Dark Big Wolf"
+ icon_state = "bigwolfdark"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/bigwolfinnerdark
+ name = "Dark Big Wolf (ALT)"
+ icon_state = "bigwolfinnerdark"
+ hasinner = 1
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
/datum/sprite_accessory/ears/cat
name = "Cat"
icon_state = "cat"
hasinner = 1
- color_src = HAIR
\ No newline at end of file
+ color_src = HAIR
+
+/datum/sprite_accessory/ears/human/cow
+ name = "Cow"
+ icon_state = "cow"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/curled
+ name = "Curled Horn"
+ icon_state = "horn1"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MUTCOLORS3
+
+/datum/sprite_accessory/ears/human/eevee
+ name = "Eevee"
+ icon_state = "eevee"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/elephant
+ name = "Elephant"
+ icon_state = "elephant"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/elf
+ name = "Elf"
+ icon_state = "elf"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = SKINTONE
+
+/datum/sprite_accessory/ears/fennec
+ name = "Fennec"
+ icon_state = "fennec"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/fish
+ name = "Fish"
+ icon_state = "fish"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/fox
+ name = "Fox"
+ icon_state = "fox"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+
+/datum/sprite_accessory/ears/human/jellyfish
+ name = "Jellyfish"
+ icon_state = "jellyfish"
+ color_src = HAIR
+
+/datum/sprite_accessory/ears/lab
+ name = "Dog, Floppy"
+ icon_state = "lab"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+
+/datum/sprite_accessory/ears/murid
+ name = "Murid"
+ icon_state = "murid"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/otie
+ name = "Otusian"
+ icon_state = "otie"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+
+/datum/sprite_accessory/ears/human/pede
+ name = "Scolipede"
+ icon_state = "pede"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/rabbit
+ name = "Rabbit"
+ icon_state = "rabbit"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+
+/datum/sprite_accessory/ears/human/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/human/skunk
+ name = "skunk"
+ icon_state = "skunk"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/squirrel
+ name = "Squirrel"
+ icon_state = "squirrel"
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/ears/wolf
+ name = "Wolf"
+ icon_state = "wolf"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+
+
+/******************************************
+*************** Furry Ears ****************
+*******************************************/
+
+/datum/sprite_accessory/mam_ears
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/mam_ears/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/mam_ears/axolotl
+ name = "Axolotl"
+ icon_state = "axolotl"
+
+/datum/sprite_accessory/mam_ears/bear
+ name = "Bear"
+ icon_state = "bear"
+
+/datum/sprite_accessory/mam_ears/bigwolf
+ name = "Big Wolf"
+ icon_state = "bigwolf"
+
+/datum/sprite_accessory/mam_ears/bigwolfinner
+ name = "Big Wolf (ALT)"
+ icon_state = "bigwolfinner"
+ hasinner = 1
+
+/datum/sprite_accessory/mam_ears/bigwolfdark
+ name = "Dark Big Wolf"
+ icon_state = "bigwolfdark"
+
+/datum/sprite_accessory/mam_ears/bigwolfinnerdark
+ name = "Dark Big Wolf (ALT)"
+ icon_state = "bigwolfinnerdark"
+ hasinner = 1
+
+/datum/sprite_accessory/mam_ears/cat
+ name = "Cat"
+ icon_state = "cat"
+ hasinner = 1
+ color_src = HAIR
+
+/datum/sprite_accessory/mam_ears/catbig
+ name = "Cat, Big"
+ icon_state = "catbig"
+
+/datum/sprite_accessory/mam_ears/cow
+ name = "Cow"
+ icon_state = "cow"
+
+/datum/sprite_accessory/mam_ears/curled
+ name = "Curled Horn"
+ icon_state = "horn1"
+ color_src = MUTCOLORS3
+
+/datum/sprite_accessory/mam_ears/deer
+ name = "Deer"
+ icon_state = "deer"
+ color_src = MUTCOLORS3
+
+/datum/sprite_accessory/mam_ears/eevee
+ name = "Eevee"
+ icon_state = "eevee"
+
+
+/datum/sprite_accessory/mam_ears/elf
+ name = "Elf"
+ icon_state = "elf"
+ color_src = MUTCOLORS3
+
+
+/datum/sprite_accessory/mam_ears/elephant
+ name = "Elephant"
+ icon_state = "elephant"
+
+/datum/sprite_accessory/mam_ears/fennec
+ name = "Fennec"
+ icon_state = "fennec"
+
+/datum/sprite_accessory/mam_ears/fish
+ name = "Fish"
+ icon_state = "fish"
+
+/datum/sprite_accessory/mam_ears/fox
+ name = "Fox"
+ icon_state = "fox"
+
+/datum/sprite_accessory/mam_ears/husky
+ name = "Husky"
+ icon_state = "wolf"
+
+/datum/sprite_accessory/mam_ears/kangaroo
+ name = "kangaroo"
+ icon_state = "kangaroo"
+
+/datum/sprite_accessory/mam_ears/jellyfish
+ name = "Jellyfish"
+ icon_state = "jellyfish"
+ color_src = HAIR
+
+/datum/sprite_accessory/mam_ears/lab
+ name = "Dog, Long"
+ icon_state = "lab"
+
+/datum/sprite_accessory/mam_ears/murid
+ name = "Murid"
+ icon_state = "murid"
+
+/datum/sprite_accessory/mam_ears/otie
+ name = "Otusian"
+ icon_state = "otie"
+
+/datum/sprite_accessory/mam_ears/squirrel
+ name = "Squirrel"
+ icon_state = "squirrel"
+
+/datum/sprite_accessory/mam_ears/pede
+ name = "Scolipede"
+ icon_state = "pede"
+
+/datum/sprite_accessory/mam_ears/rabbit
+ name = "Rabbit"
+ icon_state = "rabbit"
+
+/datum/sprite_accessory/mam_ears/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+
+/datum/sprite_accessory/mam_ears/skunk
+ name = "skunk"
+ icon_state = "skunk"
+
+/datum/sprite_accessory/mam_ears/wolf
+ name = "Wolf"
+ icon_state = "wolf"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm
index 3566f3dea5..d11299fd5b 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm
@@ -86,4 +86,45 @@
/datum/sprite_accessory/facial_hair/elvis
name = "Sideburns (Elvis)"
- icon_state = "facial_elvis"
\ No newline at end of file
+ icon_state = "facial_elvis"
+
+#define VFACE(_name, new_state) /datum/sprite_accessory/facial_hair/##new_state/icon_state=#new_state;;/datum/sprite_accessory/facial_hair/##new_state/name= #_name + " (Virgo)"
+VFACE("Watson", facial_watson_s)
+VFACE("Chaplin", facial_chaplin_s)
+VFACE("Fullbeard", facial_fullbeard_s)
+VFACE("Vandyke", facial_vandyke_s)
+VFACE("Elvis", facial_elvis_s)
+VFACE("Abe", facial_abe_s)
+VFACE("Chin", facial_chin_s)
+VFACE("GT", facial_gt_s)
+VFACE("Hip", facial_hip_s)
+VFACE("Hogan", facial_hogan_s)
+VFACE("Selleck", facial_selleck_s)
+VFACE("Neckbeard", facial_neckbeard_s)
+VFACE("Longbeard", facial_longbeard_s)
+VFACE("Dwarf", facial_dwarf_s)
+VFACE("Sideburn", facial_sideburn_s)
+VFACE("Mutton", facial_mutton_s)
+VFACE("Moustache", facial_moustache_s)
+VFACE("Pencilstache", facial_pencilstache_s)
+VFACE("Goatee", facial_goatee_s)
+VFACE("Smallstache", facial_smallstache_s)
+VFACE("Volaju", facial_volaju_s)
+VFACE("3 O\'clock", facial_3oclock_s)
+VFACE("5 O\'clock", facial_5oclock_s)
+VFACE("7 O\'clock", facial_7oclock_s)
+VFACE("5 O\'clock Moustache", facial_5oclockmoustache_s)
+VFACE("7 O\'clock", facial_7oclockmoustache_s)
+VFACE("Walrus", facial_walrus_s)
+VFACE("Muttonmus", facial_muttonmus_s)
+VFACE("Wise", facial_wise_s)
+VFACE("Martial Artist", facial_martialartist_s)
+VFACE("Dorsalfnil", facial_dorsalfnil_s)
+VFACE("Hornadorns", facial_hornadorns_s)
+VFACE("Spike", facial_spike_s)
+VFACE("Chinhorns", facial_chinhorns_s)
+VFACE("Cropped Fullbeard", facial_croppedfullbeard_s)
+VFACE("Chinless Beard", facial_chinlessbeard_s)
+VFACE("Moonshiner", facial_moonshiner_s)
+VFACE("Tribearder", facial_tribearder_s)
+#undef VFACE
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
index f8d8d26328..abcc90c0ee 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
@@ -461,4 +461,163 @@
/datum/sprite_accessory/hair/longestalt
name = "Very Long with Fringe"
- icon_state = "hair_vlongfringe"
\ No newline at end of file
+ icon_state = "hair_vlongfringe"
+
+/*************** VIRGO PORTED HAIRS ****************************/
+#define VHAIR(_name, new_state) /datum/sprite_accessory/hair/##new_state/icon_state=#new_state;/datum/sprite_accessory/hair/##new_state/name = #_name + " (Virgo)"
+//VIRGO PORTED HAIRS
+VHAIR("Short Hair Rosa", hair_rosa_s)
+VHAIR("Short Hair 80s", hair_80s_s)
+VHAIR("Long Bedhead", hair_long_bedhead_s)
+VHAIR("Dave", hair_dave_s)
+VHAIR("Country", hair_country_s)
+VHAIR("Shy", hair_shy_s)
+VHAIR("Unshaven Mohawk", hair_unshaven_mohawk_s)
+VHAIR("Manbun", hair_manbun_s)
+VHAIR("Longer Bedhead", hair_longer_bedhead_s)
+VHAIR("Ponytail", hair_ponytail_s)
+VHAIR("Ziegler", hair_ziegler_s)
+VHAIR("Emo Fringe", hair_emofringe_s)
+VHAIR("Very Short Over Eye Alt", hair_veryshortovereyealternate_s)
+VHAIR("Shorthime", hair_shorthime_s)
+VHAIR("High Tight", hair_hightight_s)
+VHAIR("Thinning Front", hair_thinningfront_s)
+VHAIR("Big Afro", hair_bigafro_s)
+VHAIR("Afro", hair_afro_s)
+VHAIR("High Braid", hair_hbraid_s)
+VHAIR("Braid", hair_braid_s)
+VHAIR("Sargeant", hair_sargeant_s)
+VHAIR("Gelled", hair_gelled_s)
+VHAIR("Kagami", hair_kagami_s)
+VHAIR("ShortTail", hair_stail_s)
+VHAIR("Gentle", hair_gentle_s)
+VHAIR("Grande", hair_grande_s)
+VHAIR("Bobcurl", hair_bobcurl_s)
+VHAIR("Pompadeur", hair_pompadour_s)
+VHAIR("Plait", hair_plait_s)
+VHAIR("Long", hair_long_s)
+VHAIR("Rattail", hair_rattail_s)
+VHAIR("Tajspiky", hair_tajspiky_s)
+VHAIR("Messy", hair_messy_s)
+VHAIR("Bangs", hair_bangs_s)
+VHAIR("TBraid", hair_tbraid_s)
+VHAIR("Toriyama2", hair_toriyama2_s)
+VHAIR("CIA", hair_cia_s)
+VHAIR("Mulder", hair_mulder_s)
+VHAIR("Scully", hair_scully_s)
+VHAIR("Nitori", hair_nitori_s)
+VHAIR("Joestar", hair_joestar_s)
+VHAIR("Ponytail4", hair_ponytail4_s)
+VHAIR("Ponytail5", hair_ponytail5_s)
+VHAIR("Beehive2", hair_beehive2_s)
+VHAIR("Short Braid", hair_shortbraid_s)
+VHAIR("Reverse Mohawk", hair_reversemohawk_s)
+VHAIR("SHort Bangs", hair_shortbangs_s)
+VHAIR("Half Shaved", hair_halfshaved_s)
+VHAIR("Longer Alt 2", hair_longeralt2_s)
+VHAIR("Bun", hair_bun_s)
+VHAIR("Curly", hair_curly_s)
+VHAIR("Victory", hair_victory_s)
+VHAIR("Ponytail6", hair_ponytail6_s)
+VHAIR("Undercut3", hair_undercut3_s)
+VHAIR("Bobcut Alt", hair_bobcultalt_s)
+VHAIR("Fingerwave", hair_fingerwave_s)
+VHAIR("Oxton", hair_oxton_s)
+VHAIR("Poofy2", hair_poofy2_s)
+VHAIR("Fringe Tail", hair_fringetail_s)
+VHAIR("Bun3", hair_bun3_s)
+VHAIR("Wisp", hair_wisp_s)
+VHAIR("Undercut2", hair_undercut2_s)
+VHAIR("TBob", hair_tbob_s)
+VHAIR("Spiky Ponytail", hair_spikyponytail_s)
+VHAIR("Rowbun", hair_rowbun_s)
+VHAIR("Rowdualtail", hair_rowdualtail_s)
+VHAIR("Rowbraid", hair_rowbraid_s)
+VHAIR("Shaved Mohawk", hair_shavedmohawk_s)
+VHAIR("Topknot", hair_topknot_s)
+VHAIR("Ronin", hair_ronin_s)
+VHAIR("Bowlcut2", hair_bowlcut2_s)
+VHAIR("Thinning Rear", hair_thinningrear_s)
+VHAIR("Thinning", hair_thinning_s)
+VHAIR("Jade", hair_jade_s)
+VHAIR("Bedhead", hair_bedhead_s)
+VHAIR("Dreadlocks", hair_dreads_s)
+VHAIR("Very Long", hair_vlong_s)
+VHAIR("Jensen", hair_jensen_s)
+VHAIR("Halfbang", hair_halfbang_s)
+VHAIR("Kusangi", hair_kusangi_s)
+VHAIR("Ponytail", hair_ponytail_s)
+VHAIR("Ponytail3", hair_ponytail3_s)
+VHAIR("Halfbang Alt", hair_halfbang_alt_s)
+VHAIR("Bedhead V2", hair_bedheadv2_s)
+VHAIR("Long Fringe", hair_longfringe_s)
+VHAIR("Flair", hair_flair_s)
+VHAIR("Bedhead V3", hair_bedheadv3_s)
+VHAIR("Himecut", hair_himecut_s)
+VHAIR("Curls", hair_curls_s)
+VHAIR("Very Long Fringe", hair_vlongfringe_s)
+VHAIR("Longest", hair_longest_s)
+VHAIR("Father", hair_father_s)
+VHAIR("Emo Long", hair_emolong_s)
+VHAIR("Short Hair 3", hair_shorthair3_s)
+VHAIR("Double Bun", hair_doublebun_s)
+VHAIR("Sleeze", hair_sleeze_s)
+VHAIR("Twintail", hair_twintail_s)
+VHAIR("Emo 2", hair_emo2_s)
+VHAIR("Low Fade", hair_lowfade_s)
+VHAIR("Med Fade", hair_medfade_s)
+VHAIR("High Fade", hair_highfade_s)
+VHAIR("Bald Fade", hair_baldfade_s)
+VHAIR("No Fade", hair_nofade_s)
+VHAIR("Trim Flat", hair_trimflat_s)
+VHAIR("Shaved", hair_shaved_s)
+VHAIR("Trimmed", hair_trimmed_s)
+VHAIR("Tight Bun", hair_tightbun_s)
+VHAIR("Short Hair 4", hair_d_s)
+VHAIR("Short Hair 5", hair_e_s)
+VHAIR("Short Hair 6", hair_f_s)
+VHAIR("Skinhead", hair_skinhead_s)
+VHAIR("Afro2", hair_afro2_s)
+VHAIR("Bobcut", hair_bobcut_s)
+VHAIR("Emo", hair_emo_s)
+VHAIR("Long Over Eye", hair_longovereye_s)
+VHAIR("Feather", hair_feather_s)
+VHAIR("Hitop", hair_hitop_s)
+VHAIR("Short Over Eye", hair_shortoverye_s)
+VHAIR("Straight", hair_straight_s)
+VHAIR("Buzzcut", hair_buzzcut_s)
+VHAIR("Combover", hair_combover_s)
+VHAIR("Crewcut", hair_crewcut_s)
+VHAIR("Devillock", hair_devilock_s)
+VHAIR("Clean", hair_clean_s)
+VHAIR("Shaggy", hair_shaggy_s)
+VHAIR("Updo", hair_updo_s)
+VHAIR("Mohawk", hair_mohawk_s)
+VHAIR("Odango", hair_odango_s)
+VHAIR("Ombre", hair_ombre_s)
+VHAIR("Parted", hair_parted_s)
+VHAIR("Quiff", hair_quiff_s)
+VHAIR("Volaju", hair_volaju_s)
+VHAIR("Bun2", hair_bun2_s)
+VHAIR("Rows1", hair_rows1_s)
+VHAIR("Rows2", hair_rows2_s)
+VHAIR("Dandy Pompadour", hair_dandypompadour_s)
+VHAIR("Poofy", hair_poofy_s)
+VHAIR("Toriyama", hair_toriyama_s)
+VHAIR("Drillruru", hair_drillruru_s)
+VHAIR("Bowlcut", hair_bowlcut_s)
+VHAIR("Coffee House", hair_coffeehouse_s)
+VHAIR("Family Man", hair_thefamilyman_s)
+VHAIR("Shaved Part", hair_shavedpart_s)
+VHAIR("Modern", hair_modern_s)
+VHAIR("One Shoulder", hair_oneshoulder_s)
+VHAIR("Very Short Over Eye", hair_veryshortovereye_s)
+VHAIR("Unkept", hair_unkept_s)
+VHAIR("Wife", hair_wife_s)
+VHAIR("Nia", hair_nia_s)
+VHAIR("Undercut", hair_undercut_s)
+VHAIR("Bobcut Alt", hair_bobcutalt_s)
+VHAIR("Short Hair 4 alt", hair_shorthair4_s)
+VHAIR("Tressshoulder", hair_tressshoulder_s)
+ //END
+#undef VHAIR
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/horns.dm b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm
index 607ad650e3..a630ead7b3 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/horns.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm
@@ -1,5 +1,6 @@
/datum/sprite_accessory/horns
icon = 'icons/mob/mutant_bodyparts.dmi'
+ color_src = HORNCOLOR
/datum/sprite_accessory/horns/none
name = "None"
@@ -23,4 +24,13 @@
/datum/sprite_accessory/horns/angler
name = "Angeler"
- icon_state = "angler"
\ No newline at end of file
+ icon_state = "angler"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/horns/antler
+ name = "Deer Antlers"
+ icon_state = "deer"
+
+/datum/sprite_accessory/horns/guilmon
+ name = "Guilmon"
+ icon_state = "guilmon"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm b/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm
new file mode 100644
index 0000000000..6d2ab1a39b
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm
@@ -0,0 +1,158 @@
+
+/******************************************
+************** IPC SCREENS ****************
+*******************************************/
+/datum/sprite_accessory/screen
+ icon = 'modular_citadel/icons/mob/ipc_screens.dmi'
+ color_src = null
+
+/datum/sprite_accessory/screen/blank
+ name = "Blank"
+ icon_state = "blank"
+
+/datum/sprite_accessory/screen/pink
+ name = "Pink"
+ icon_state = "pink"
+
+/datum/sprite_accessory/screen/green
+ name = "Green"
+ icon_state = "green"
+
+/datum/sprite_accessory/screen/red
+ name = "Red"
+ icon_state = "red"
+
+/datum/sprite_accessory/screen/blue
+ name = "Blue"
+ icon_state = "blue"
+
+/datum/sprite_accessory/screen/yellow
+ name = "Yellow"
+ icon_state = "yellow"
+
+/datum/sprite_accessory/screen/shower
+ name = "Shower"
+ icon_state = "shower"
+
+/datum/sprite_accessory/screen/nature
+ name = "Nature"
+ icon_state = "nature"
+
+/datum/sprite_accessory/screen/eight
+ name = "Eight"
+ icon_state = "eight"
+
+/datum/sprite_accessory/screen/goggles
+ name = "Goggles"
+ icon_state = "goggles"
+
+/datum/sprite_accessory/screen/heart
+ name = "Heart"
+ icon_state = "heart"
+
+/datum/sprite_accessory/screen/monoeye
+ name = "Mono eye"
+ icon_state = "monoeye"
+
+/datum/sprite_accessory/screen/breakout
+ name = "Breakout"
+ icon_state = "breakout"
+
+/datum/sprite_accessory/screen/purple
+ name = "Purple"
+ icon_state = "purple"
+
+/datum/sprite_accessory/screen/scroll
+ name = "Scroll"
+ icon_state = "scroll"
+
+/datum/sprite_accessory/screen/console
+ name = "Console"
+ icon_state = "console"
+
+/datum/sprite_accessory/screen/rgb
+ name = "RGB"
+ icon_state = "rgb"
+
+/datum/sprite_accessory/screen/golglider
+ name = "Gol Glider"
+ icon_state = "golglider"
+
+/datum/sprite_accessory/screen/rainbow
+ name = "Rainbow"
+ icon_state = "rainbow"
+
+/datum/sprite_accessory/screen/sunburst
+ name = "Sunburst"
+ icon_state = "sunburst"
+
+/datum/sprite_accessory/screen/static
+ name = "Static"
+ icon_state = "static"
+
+//Oracle Station sprites
+
+/datum/sprite_accessory/screen/bsod
+ name = "BSOD"
+ icon_state = "bsod"
+
+/datum/sprite_accessory/screen/redtext
+ name = "Red Text"
+ icon_state = "retext"
+
+/datum/sprite_accessory/screen/sinewave
+ name = "Sine wave"
+ icon_state = "sinewave"
+
+/datum/sprite_accessory/screen/squarewave
+ name = "Square wave"
+ icon_state = "squarwave"
+
+/datum/sprite_accessory/screen/ecgwave
+ name = "ECG wave"
+ icon_state = "ecgwave"
+
+/datum/sprite_accessory/screen/eyes
+ name = "Eyes"
+ icon_state = "eyes"
+
+/datum/sprite_accessory/screen/textdrop
+ name = "Text drop"
+ icon_state = "textdrop"
+
+/datum/sprite_accessory/screen/stars
+ name = "Stars"
+ icon_state = "stars"
+
+
+/******************************************
+************** IPC Antennas ***************
+*******************************************/
+
+/datum/sprite_accessory/antenna
+ icon = 'modular_citadel/icons/mob/ipc_antennas.dmi'
+ color_src = MUTCOLORS2
+
+/datum/sprite_accessory/antenna/none
+ name = "None"
+ icon_state = "None"
+
+/datum/sprite_accessory/antenna/antennae
+ name = "Angled Antennae"
+ icon_state = "antennae"
+
+/datum/sprite_accessory/antenna/tvantennae
+ name = "TV Antennae"
+ icon_state = "tvantennae"
+
+/datum/sprite_accessory/antenna/cyberhead
+ name = "Cyberhead"
+ icon_state = "cyberhead"
+
+/datum/sprite_accessory/antenna/antlers
+ name = "Antlers"
+ icon_state = "antlers"
+
+/datum/sprite_accessory/antenna/crowned
+ name = "Crowned"
+ icon_state = "crowned"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/legs.dm b/code/modules/mob/dead/new_player/sprite_accessories/legs.dm
deleted file mode 100644
index 7663100822..0000000000
--- a/code/modules/mob/dead/new_player/sprite_accessories/legs.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them.
- icon = null //These datums exist for selecting legs on preference, and little else
-
-/datum/sprite_accessory/legs/none
- name = "Normal Legs"
-
-/datum/sprite_accessory/legs/digitigrade_lizard
- name = "Digitigrade Legs"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm
new file mode 100644
index 0000000000..15640a2699
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm
@@ -0,0 +1,124 @@
+/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them. -- OR SO THEY USED TO BE
+ icon = null //These datums exist for selecting legs on preference, and little else
+
+/******************************************
+***************** Leggy *******************
+*******************************************/
+
+/datum/sprite_accessory/legs/none
+ name = "Plantigrade"
+
+/datum/sprite_accessory/legs/digitigrade_lizard
+ name = "Digitigrade"
+
+/datum/sprite_accessory/legs/digitigrade_bird
+ name = "Avian"
+
+
+/******************************************
+************** Taur Bodies ****************
+*******************************************/
+
+/datum/sprite_accessory/taur
+ icon = 'modular_citadel/icons/mob/mam_taur.dmi'
+ extra_icon = 'modular_citadel/icons/mob/mam_taur.dmi'
+ extra = TRUE
+ extra2_icon = 'modular_citadel/icons/mob/mam_taur.dmi'
+ extra2 = TRUE
+ center = TRUE
+ dimension_x = 64
+ var/taur_mode = NOT_TAURIC
+ color_src = MATRIXED
+
+/datum/sprite_accessory/taur/none
+ name = "None"
+ icon_state = "None"
+
+/datum/sprite_accessory/taur/cow
+ name = "Cow"
+ icon_state = "cow"
+ taur_mode = HOOF_TAURIC
+
+/datum/sprite_accessory/taur/deer
+ name = "Deer"
+ icon_state = "deer"
+ taur_mode = HOOF_TAURIC
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/taur/drake
+ name = "Drake"
+ icon_state = "drake"
+ taur_mode = PAW_TAURIC
+
+/datum/sprite_accessory/taur/drider
+ name = "Drider"
+ icon_state = "drider"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/taur/eevee
+ name = "Eevee"
+ icon_state = "eevee"
+ taur_mode = PAW_TAURIC
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/taur/fox
+ name = "Fox"
+ icon_state = "fox"
+ taur_mode = PAW_TAURIC
+
+/datum/sprite_accessory/taur/husky
+ name = "Husky"
+ icon_state = "husky"
+ taur_mode = PAW_TAURIC
+
+/datum/sprite_accessory/taur/horse
+ name = "Horse"
+ icon_state = "horse"
+ taur_mode = HOOF_TAURIC
+
+/datum/sprite_accessory/taur/lab
+ name = "Lab"
+ icon_state = "lab"
+ taur_mode = PAW_TAURIC
+
+/datum/sprite_accessory/taur/naga
+ name = "Naga"
+ icon_state = "naga"
+ taur_mode = SNEK_TAURIC
+
+/datum/sprite_accessory/taur/otie
+ name = "Otie"
+ icon_state = "otie"
+ taur_mode = PAW_TAURIC
+
+/datum/sprite_accessory/taur/pede
+ name = "Scolipede"
+ icon_state = "pede"
+ taur_mode = PAW_TAURIC
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/taur/panther
+ name = "Panther"
+ icon_state = "panther"
+ taur_mode = PAW_TAURIC
+
+/datum/sprite_accessory/taur/shepherd
+ name = "Shepherd"
+ icon_state = "shepherd"
+ taur_mode = PAW_TAURIC
+
+/datum/sprite_accessory/taur/tentacle
+ name = "Tentacle"
+ icon_state = "tentacle"
+ taur_mode = SNEK_TAURIC
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/taur/tiger
+ name = "Tiger"
+ icon_state = "tiger"
+ taur_mode = PAW_TAURIC
+
+/datum/sprite_accessory/taur/wolf
+ name = "Wolf"
+ icon_state = "wolf"
+ taur_mode = PAW_TAURIC
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm
deleted file mode 100644
index 6b8036bd69..0000000000
--- a/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-/datum/sprite_accessory/moth_wings
- icon = 'icons/mob/wings.dmi'
- color_src = null
-
-/datum/sprite_accessory/moth_wings/plain
- name = "Plain"
- icon_state = "plain"
-
-/datum/sprite_accessory/moth_wings/monarch
- name = "Monarch"
- icon_state = "monarch"
-
-/datum/sprite_accessory/moth_wings/luna
- name = "Luna"
- icon_state = "luna"
-
-/datum/sprite_accessory/moth_wings/atlas
- name = "Atlas"
- icon_state = "atlas"
-
-/datum/sprite_accessory/moth_wings/reddish
- name = "Reddish"
- icon_state = "redish"
-
-/datum/sprite_accessory/moth_wings/royal
- name = "Royal"
- icon_state = "royal"
-
-/datum/sprite_accessory/moth_wings/gothic
- name = "Gothic"
- icon_state = "gothic"
-
-/datum/sprite_accessory/moth_wings/lovers
- name = "Lovers"
- icon_state = "lovers"
-
-/datum/sprite_accessory/moth_wings/whitefly
- name = "White Fly"
- icon_state = "whitefly"
-
-/datum/sprite_accessory/moth_wings/punished
- name = "Burnt Off"
- icon_state = "punished"
- locked = TRUE
-
-/datum/sprite_accessory/moth_wings/firewatch
- name = "Firewatch"
- icon_state = "firewatch"
-
-/datum/sprite_accessory/moth_wings/deathhead
- name = "Deathshead"
- icon_state = "deathhead"
-
-/datum/sprite_accessory/moth_wings/poison
- name = "Poison"
- icon_state = "poison"
-
-/datum/sprite_accessory/moth_wings/ragged
- name = "Ragged"
- icon_state = "ragged"
-
-/datum/sprite_accessory/moth_wings/moonfly
- name = "Moon Fly"
- icon_state = "moonfly"
-
-/datum/sprite_accessory/moth_wings/snow
- name = "Snow"
- icon_state = "snow"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm
index c663c08d69..7252f85324 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm
@@ -15,4 +15,359 @@
/datum/sprite_accessory/snouts/roundlight
name = "Round + Light"
- icon_state = "roundlight"
\ No newline at end of file
+ icon_state = "roundlight"
+
+/datum/sprite_accessory/snout/guilmon
+ name = "Guilmon"
+ icon_state = "guilmon"
+ color_src = MATRIXED
+
+//christ this was a mistake, but it's here just in case someone wants to selectively fix -- Pooj
+/************* Lizard compatable snoots ***********
+/datum/sprite_accessory/snouts/bird
+ name = "Beak"
+ icon_state = "bird"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/bigbeak
+ name = "Big Beak"
+ icon_state = "bigbeak"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/bug
+ name = "Bug"
+ icon_state = "bug"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ extra2 = TRUE
+ extra2_color_src = MUTCOLORS3
+
+/datum/sprite_accessory/snouts/elephant
+ name = "Elephant"
+ icon_state = "elephant"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+ extra = TRUE
+ extra_color_src = MUTCOLORS3
+
+/datum/sprite_accessory/snouts/lcanid
+ name = "Mammal, Long"
+ icon_state = "lcanid"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/lcanidalt
+ name = "Mammal, Long ALT"
+ icon_state = "lcanidalt"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/scanid
+ name = "Mammal, Short"
+ icon_state = "scanid"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/scanidalt
+ name = "Mammal, Short ALT"
+ icon_state = "scanidalt"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/wolf
+ name = "Mammal, Thick"
+ icon_state = "wolf"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/wolfalt
+ name = "Mammal, Thick ALT"
+ icon_state = "wolfalt"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/redpanda
+ name = "WahCoon"
+ icon_state = "wah"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/rhino
+ name = "Horn"
+ icon_state = "rhino"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+ extra = TRUE
+ extra = MUTCOLORS3
+
+/datum/sprite_accessory/snouts/rodent
+ name = "Rodent"
+ icon_state = "rodent"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/husky
+ name = "Husky"
+ icon_state = "husky"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/otie
+ name = "Otie"
+ icon_state = "otie"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/pede
+ name = "Scolipede"
+ icon_state = "pede"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/shark
+ name = "Shark"
+ icon_state = "shark"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+
+/datum/sprite_accessory/snouts/toucan
+ name = "Toucan"
+ icon_state = "toucan"
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+ color_src = MATRIXED
+*/
+
+/******************************************
+************** Mammal Snouts **************
+*******************************************/
+
+/datum/sprite_accessory/mam_snouts
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
+
+/datum/sprite_accessory/mam_snouts/none
+ name = "None"
+ icon_state = "none"
+
+
+/datum/sprite_accessory/mam_snouts/bird
+ name = "Beak"
+ icon_state = "bird"
+
+/datum/sprite_accessory/mam_snouts/bigbeak
+ name = "Big Beak"
+ icon_state = "bigbeak"
+
+/datum/sprite_accessory/mam_snouts/bug
+ name = "Bug"
+ icon_state = "bug"
+ color_src = MUTCOLORS
+ extra2 = TRUE
+ extra2_color_src = MUTCOLORS3
+
+/datum/sprite_accessory/mam_snouts/elephant
+ name = "Elephant"
+ icon_state = "elephant"
+ extra = TRUE
+ extra_color_src = MUTCOLORS3
+
+/datum/sprite_accessory/mam_snouts/lcanid
+ name = "Mammal, Long"
+ icon_state = "lcanid"
+
+/datum/sprite_accessory/mam_snouts/lcanidalt
+ name = "Mammal, Long ALT"
+ icon_state = "lcanidalt"
+
+/datum/sprite_accessory/mam_snouts/scanid
+ name = "Mammal, Short"
+ icon_state = "scanid"
+
+/datum/sprite_accessory/mam_snouts/scanidalt
+ name = "Mammal, Short ALT"
+ icon_state = "scanidalt"
+
+/datum/sprite_accessory/mam_snouts/wolf
+ name = "Mammal, Thick"
+ icon_state = "wolf"
+
+/datum/sprite_accessory/mam_snouts/wolfalt
+ name = "Mammal, Thick ALT"
+ icon_state = "wolfalt"
+
+/datum/sprite_accessory/mam_snouts/redpanda
+ name = "WahCoon"
+ icon_state = "wah"
+
+/datum/sprite_accessory/mam_snouts/redpandaalt
+ name = "WahCoon ALT"
+ icon_state = "wahalt"
+
+/datum/sprite_accessory/mam_snouts/rhino
+ name = "Horn"
+ icon_state = "rhino"
+ extra = TRUE
+ extra = MUTCOLORS3
+
+/datum/sprite_accessory/mam_snouts/rodent
+ name = "Rodent"
+ icon_state = "rodent"
+
+/datum/sprite_accessory/mam_snouts/husky
+ name = "Husky"
+ icon_state = "husky"
+
+/datum/sprite_accessory/mam_snouts/otie
+ name = "Otie"
+ icon_state = "otie"
+
+/datum/sprite_accessory/mam_snouts/pede
+ name = "Scolipede"
+ icon_state = "pede"
+
+/datum/sprite_accessory/mam_snouts/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+
+/datum/sprite_accessory/mam_snouts/shark
+ name = "Shark"
+ icon_state = "shark"
+
+/datum/sprite_accessory/mam_snouts/toucan
+ name = "Toucan"
+ icon_state = "toucan"
+
+/datum/sprite_accessory/mam_snouts/sharp
+ name = "Sharp"
+ icon_state = "sharp"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/mam_snouts/round
+ name = "Round"
+ icon_state = "round"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/mam_snouts/sharplight
+ name = "Sharp + Light"
+ icon_state = "sharplight"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/mam_snouts/roundlight
+ name = "Round + Light"
+ icon_state = "roundlight"
+ color_src = MUTCOLORS
+
+
+/******************************************
+**************** Snouts *******************
+*************but higher up*****************/
+
+/datum/sprite_accessory/mam_snouts/fbird
+ name = "Beak (Top)"
+ icon_state = "fbird"
+
+/datum/sprite_accessory/mam_snouts/fbigbeak
+ name = "Big Beak (Top)"
+ icon_state = "fbigbeak"
+
+/datum/sprite_accessory/mam_snouts/fbug
+ name = "Bug (Top)"
+ icon_state = "fbug"
+ color_src = MUTCOLORS
+ extra2 = TRUE
+ extra2_color_src = MUTCOLORS3
+
+/datum/sprite_accessory/mam_snouts/felephant
+ name = "Elephant (Top)"
+ icon_state = "felephant"
+ extra = TRUE
+ extra_color_src = MUTCOLORS3
+
+/datum/sprite_accessory/mam_snouts/flcanid
+ name = "Mammal, Long (Top)"
+ icon_state = "flcanid"
+
+/datum/sprite_accessory/mam_snouts/flcanidalt
+ name = "Mammal, Long ALT (Top)"
+ icon_state = "flcanidalt"
+
+/datum/sprite_accessory/mam_snouts/fscanid
+ name = "Mammal, Short (Top)"
+ icon_state = "fscanid"
+
+/datum/sprite_accessory/mam_snouts/fscanidalt
+ name = "Mammal, Short ALT (Top)"
+ icon_state = "fscanidalt"
+
+/datum/sprite_accessory/mam_snouts/fwolf
+ name = "Mammal, Thick (Top)"
+ icon_state = "fwolf"
+
+/datum/sprite_accessory/mam_snouts/fwolfalt
+ name = "Mammal, Thick ALT (Top)"
+ icon_state = "fwolfalt"
+
+/datum/sprite_accessory/mam_snouts/fredpanda
+ name = "WahCoon (Top)"
+ icon_state = "fwah"
+
+/datum/sprite_accessory/mam_snouts/frhino
+ name = "Horn (Top)"
+ icon_state = "frhino"
+ extra = TRUE
+ extra = MUTCOLORS3
+
+/datum/sprite_accessory/mam_snouts/frodent
+ name = "Rodent (Top)"
+ icon_state = "frodent"
+
+/datum/sprite_accessory/mam_snouts/fhusky
+ name = "Husky (Top)"
+ icon_state = "fhusky"
+
+/datum/sprite_accessory/mam_snouts/fotie
+ name = "Otie (Top)"
+ icon_state = "fotie"
+
+/datum/sprite_accessory/mam_snouts/fpede
+ name = "Scolipede (Top)"
+ icon_state = "fpede"
+
+/datum/sprite_accessory/mam_snouts/fsergal
+ name = "Sergal (Top)"
+ icon_state = "fsergal"
+
+/datum/sprite_accessory/mam_snouts/fshark
+ name = "Shark (Top)"
+ icon_state = "fshark"
+
+/datum/sprite_accessory/mam_snouts/ftoucan
+ name = "Toucan (Top)"
+ icon_state = "ftoucan"
+
+/datum/sprite_accessory/mam_snouts/fsharp
+ name = "Sharp (Top)"
+ icon_state = "fsharp"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/mam_snouts/fround
+ name = "Round (Top)"
+ icon_state = "fround"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/mam_snouts/fsharplight
+ name = "Sharp + Light (Top)"
+ icon_state = "fsharplight"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/mam_snouts/froundlight
+ name = "Round + Light (Top)"
+ icon_state = "froundlight"
+ color_src = MUTCOLORS
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
index 31faabf663..6042d97247 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
@@ -4,6 +4,10 @@
/datum/sprite_accessory/tails_animated
icon = 'icons/mob/mutant_bodyparts.dmi'
+/******************************************
+************* Lizard Tails ****************
+*******************************************/
+
/datum/sprite_accessory/tails/lizard/smooth
name = "Smooth"
icon_state = "smooth"
@@ -36,6 +40,48 @@
name = "Spikes"
icon_state = "spikes"
+/datum/sprite_accessory/tails/lizard/none
+ name = "None"
+ icon_state = "None"
+
+/datum/sprite_accessory/tails_animated/lizard/none
+ name = "None"
+ icon_state = "None"
+
+/datum/sprite_accessory/tails/lizard/axolotl
+ name = "Axolotl"
+ icon_state = "axolotl"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/lizard/axolotl
+ name = "Axolotl"
+ icon_state = "axolotl"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/body_markings/guilmon
+ name = "Guilmon"
+ icon_state = "guilmon"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
+
+/datum/sprite_accessory/tails/lizard/guilmon
+ name = "Guilmon"
+ icon_state = "guilmon"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/lizard/guilmon
+ name = "Guilmon"
+ icon_state = "guilmon"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/******************************************
+************** Human Tails ****************
+*******************************************/
+
/datum/sprite_accessory/tails/human/none
name = "None"
icon_state = "none"
@@ -43,13 +89,626 @@
/datum/sprite_accessory/tails_animated/human/none
name = "None"
icon_state = "none"
-/*
+
+/datum/sprite_accessory/tails/human/ailurus
+ name = "Red Panda"
+ icon_state = "wah"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/ailurus
+ name = "Red Panda"
+ icon_state = "wah"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/axolotl
+ name = "Axolotl"
+ icon_state = "axolotl"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/axolotl
+ name = "Axolotl"
+ icon_state = "axolotl"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/bee
+ name = "Bee"
+ icon_state = "bee"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/bee
+ name = "Bee"
+ icon_state = "bee"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
/datum/sprite_accessory/tails/human/cat
name = "Cat"
icon_state = "cat"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
color_src = HAIR
/datum/sprite_accessory/tails_animated/human/cat
name = "Cat"
icon_state = "cat"
- color_src = HAIR*/
\ No newline at end of file
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = HAIR
+
+/datum/sprite_accessory/tails/human/catbig
+ name = "Cat, Big"
+ icon_state = "catbig"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/catbig
+ name = "Cat, Big"
+ icon_state = "catbig"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/cow
+ name = "Cow"
+ icon_state = "cow"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/cow
+ name = "Cow"
+ icon_state = "cow"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/corvid
+ name = "Corvid"
+ icon_state = "crow"
+
+/datum/sprite_accessory/tails_animated/human/corvid
+ name = "Corvid"
+ icon_state = "crow"
+
+/datum/sprite_accessory/tails/human/eevee
+ name = "Eevee"
+ icon_state = "eevee"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/eevee
+ name = "Eevee"
+ icon_state = "eevee"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/fennec
+ name = "Fennec"
+ icon_state = "fennec"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/fennec
+ name = "Fennec"
+ icon_state = "fennec"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/fish
+ name = "Fish"
+ icon_state = "fish"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/fish
+ name = "Fish"
+ icon_state = "fish"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/fox
+ name = "Fox"
+ icon_state = "fox"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/fox
+ name = "Fox"
+ icon_state = "fox"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/horse
+ name = "Horse"
+ icon_state = "horse"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = HAIR
+
+/datum/sprite_accessory/tails_animated/human/horse
+ name = "Horse"
+ icon_state = "horse"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = HAIR
+
+/datum/sprite_accessory/tails/human/husky
+ name = "Husky"
+ icon_state = "husky"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/husky
+ name = "Husky"
+ icon_state = "husky"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/insect
+ name = "Insect"
+ icon_state = "insect"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails_animated/human/insect
+ name = "insect"
+ icon_state = "insect"
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+ color_src = MATRIXED
+
+/datum/sprite_accessory/tails/human/kitsune
+ name = "Kitsune"
+ icon_state = "kitsune"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/kitsune
+ name = "Kitsune"
+ icon_state = "kitsune"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/murid
+ name = "Murid"
+ icon_state = "murid"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/murid
+ name = "Murid"
+ icon_state = "murid"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/otie
+ name = "Otusian"
+ icon_state = "otie"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/otie
+ name = "Otusian"
+ icon_state = "otie"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/orca
+ name = "Orca"
+ icon_state = "orca"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/orca
+ name = "Orca"
+ icon_state = "orca"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/pede
+ name = "Scolipede"
+ icon_state = "pede"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/pede
+ name = "Scolipede"
+ icon_state = "pede"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/rabbit
+ name = "Rabbit"
+ icon_state = "rabbit"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/rabbit
+ name = "Rabbit"
+ icon_state = "rabbit"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/skunk
+ name = "skunk"
+ icon_state = "skunk"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/skunk
+ name = "skunk"
+ icon_state = "skunk"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/shark
+ name = "Shark"
+ icon_state = "shark"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/shark
+ name = "Shark"
+ icon_state = "shark"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/datashark
+ name = "datashark"
+ icon_state = "datashark"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/datashark
+ name = "datashark"
+ icon_state = "datashark"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/straighttail
+ name = "Straight Tail"
+ icon_state = "straighttail"
+
+/datum/sprite_accessory/tails_animated/human/straighttail
+ name = "Straight Tail"
+ icon_state = "straighttail"
+
+/datum/sprite_accessory/tails/human/squirrel
+ name = "Squirrel"
+ icon_state = "squirrel"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/squirrel
+ name = "Squirrel"
+ icon_state = "squirrel"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/tentacle
+ name = "Tentacle"
+ icon_state = "tentacle"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/tentacle
+ name = "Tentacle"
+ icon_state = "tentacle"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/tiger
+ name = "Tiger"
+ icon_state = "tiger"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/tiger
+ name = "Tiger"
+ icon_state = "tiger"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/human/wolf
+ name = "Wolf"
+ icon_state = "wolf"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/wolf
+ name = "Wolf"
+ icon_state = "wolf"
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/******************************************
+************** Furry Tails ****************
+*******************************************/
+
+/datum/sprite_accessory/mam_tails
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/mam_tails/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/mam_tails_animated
+ color_src = MATRIXED
+ icon = 'modular_citadel/icons/mob/mam_tails.dmi'
+
+/datum/sprite_accessory/mam_tails_animated/none
+ name = "None"
+ icon_state = "none"
+ color_src = MATRIXED
+
+/datum/sprite_accessory/mam_tails/ailurus
+ name = "Red Panda"
+ icon_state = "wah"
+ extra = TRUE
+
+/datum/sprite_accessory/mam_tails_animated/ailurus
+ name = "Red Panda"
+ icon_state = "wah"
+ extra = TRUE
+
+/datum/sprite_accessory/mam_tails/axolotl
+ name = "Axolotl"
+ icon_state = "axolotl"
+
+/datum/sprite_accessory/mam_tails_animated/axolotl
+ name = "Axolotl"
+ icon_state = "axolotl"
+
+/datum/sprite_accessory/mam_tails/bee
+ name = "Bee"
+ icon_state = "bee"
+
+/datum/sprite_accessory/mam_tails_animated/bee
+ name = "Bee"
+ icon_state = "bee"
+
+/datum/sprite_accessory/mam_tails/cat
+ name = "Cat"
+ icon_state = "cat"
+ color_src = HAIR
+
+/datum/sprite_accessory/mam_tails_animated/cat
+ name = "Cat"
+ icon_state = "cat"
+ color_src = HAIR
+
+/datum/sprite_accessory/mam_tails/catbig
+ name = "Cat, Big"
+ icon_state = "catbig"
+
+/datum/sprite_accessory/mam_tails_animated/catbig
+ name = "Cat, Big"
+ icon_state = "catbig"
+
+/datum/sprite_accessory/mam_tails/corvid
+ name = "Corvid"
+ icon_state = "crow"
+
+/datum/sprite_accessory/mam_tails_animated/corvid
+ name = "Corvid"
+ icon_state = "crow"
+
+/datum/sprite_accessory/mam_tail/cow
+ name = "Cow"
+ icon_state = "cow"
+
+/datum/sprite_accessory/mam_tails_animated/cow
+ name = "Cow"
+ icon_state = "cow"
+
+/datum/sprite_accessory/mam_tails/eevee
+ name = "Eevee"
+ icon_state = "eevee"
+
+/datum/sprite_accessory/mam_tails_animated/eevee
+ name = "Eevee"
+ icon_state = "eevee"
+
+/datum/sprite_accessory/mam_tails/fennec
+ name = "Fennec"
+ icon_state = "fennec"
+
+/datum/sprite_accessory/mam_tails_animated/fennec
+ name = "Fennec"
+ icon_state = "fennec"
+
+/datum/sprite_accessory/mam_tails/human/fish
+ name = "Fish"
+ icon_state = "fish"
+
+/datum/sprite_accessory/mam_tails_animated/human/fish
+ name = "Fish"
+ icon_state = "fish"
+
+/datum/sprite_accessory/mam_tails/fox
+ name = "Fox"
+ icon_state = "fox"
+
+/datum/sprite_accessory/mam_tails_animated/fox
+ name = "Fox"
+ icon_state = "fox"
+
+/datum/sprite_accessory/mam_tails/hawk
+ name = "Hawk"
+ icon_state = "hawk"
+
+/datum/sprite_accessory/mam_tails_animated/hawk
+ name = "Hawk"
+ icon_state = "hawk"
+
+/datum/sprite_accessory/mam_tails/horse
+ name = "Horse"
+ icon_state = "horse"
+ color_src = HAIR
+
+/datum/sprite_accessory/mam_tails_animated/horse
+ name = "Horse"
+ icon_state = "Horse"
+ color_src = HAIR
+
+/datum/sprite_accessory/mam_tails/husky
+ name = "Husky"
+ icon_state = "husky"
+
+/datum/sprite_accessory/mam_tails_animated/husky
+ name = "Husky"
+ icon_state = "husky"
+
+datum/sprite_accessory/mam_tails/insect
+ name = "Insect"
+ icon_state = "insect"
+
+/datum/sprite_accessory/mam_tails_animated/insect
+ name = "Insect"
+ icon_state = "insect"
+
+/datum/sprite_accessory/mam_tails/kangaroo
+ name = "kangaroo"
+ icon_state = "kangaroo"
+
+/datum/sprite_accessory/mam_tails_animated/kangaroo
+ name = "kangaroo"
+ icon_state = "kangaroo"
+
+/datum/sprite_accessory/mam_tails/kitsune
+ name = "Kitsune"
+ icon_state = "kitsune"
+
+/datum/sprite_accessory/mam_tails_animated/kitsune
+ name = "Kitsune"
+ icon_state = "kitsune"
+
+/datum/sprite_accessory/mam_tails/lab
+ name = "Lab"
+ icon_state = "lab"
+
+/datum/sprite_accessory/mam_tails_animated/lab
+ name = "Lab"
+ icon_state = "lab"
+
+/datum/sprite_accessory/mam_tails/murid
+ name = "Murid"
+ icon_state = "murid"
+
+/datum/sprite_accessory/mam_tails_animated/murid
+ name = "Murid"
+ icon_state = "murid"
+
+/datum/sprite_accessory/mam_tails/otie
+ name = "Otusian"
+ icon_state = "otie"
+
+/datum/sprite_accessory/mam_tails_animated/otie
+ name = "Otusian"
+ icon_state = "otie"
+
+/datum/sprite_accessory/mam_tails/orca
+ name = "Orca"
+ icon_state = "orca"
+
+/datum/sprite_accessory/mam_tails_animated/orca
+ name = "Orca"
+ icon_state = "orca"
+
+/datum/sprite_accessory/mam_tails/pede
+ name = "Scolipede"
+ icon_state = "pede"
+
+/datum/sprite_accessory/mam_tails_animated/pede
+ name = "Scolipede"
+ icon_state = "pede"
+
+/datum/sprite_accessory/mam_tails/rabbit
+ name = "Rabbit"
+ icon_state = "rabbit"
+
+/datum/sprite_accessory/mam_tails_animated/rabbit
+ name = "Rabbit"
+ icon_state = "rabbit"
+
+/datum/sprite_accessory/mam_tails/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+
+/datum/sprite_accessory/mam_tails_animated/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+
+/datum/sprite_accessory/mam_tails/skunk
+ name = "Skunk"
+ icon_state = "skunk"
+
+/datum/sprite_accessory/mam_tails_animated/skunk
+ name = "Skunk"
+ icon_state = "skunk"
+
+/datum/sprite_accessory/mam_tails/shark
+ name = "Shark"
+ icon_state = "shark"
+
+/datum/sprite_accessory/mam_tails_animated/shark
+ name = "Shark"
+ icon_state = "shark"
+
+/datum/sprite_accessory/mam_tails/shepherd
+ name = "Shepherd"
+ icon_state = "shepherd"
+
+/datum/sprite_accessory/mam_tails_animated/shepherd
+ name = "Shepherd"
+ icon_state = "shepherd"
+
+/datum/sprite_accessory/mam_tails/straighttail
+ name = "Straight Tail"
+ icon_state = "straighttail"
+
+/datum/sprite_accessory/mam_tails_animated/straighttail
+ name = "Straight Tail"
+ icon_state = "straighttail"
+
+/datum/sprite_accessory/mam_tails/squirrel
+ name = "Squirrel"
+ icon_state = "squirrel"
+
+/datum/sprite_accessory/mam_tails_animated/squirrel
+ name = "Squirrel"
+ icon_state = "squirrel"
+
+/datum/sprite_accessory/mam_tails/tentacle
+ name = "Tentacle"
+ icon_state = "tentacle"
+
+/datum/sprite_accessory/mam_tails_animated/tentacle
+ name = "Tentacle"
+ icon_state = "tentacle"
+
+/datum/sprite_accessory/mam_tails/tiger
+ name = "Tiger"
+ icon_state = "tiger"
+
+/datum/sprite_accessory/mam_tails_animated/tiger
+ name = "Tiger"
+ icon_state = "tiger"
+
+/datum/sprite_accessory/mam_tails/wolf
+ name = "Wolf"
+ icon_state = "wolf"
+
+/datum/sprite_accessory/mam_tails_animated/wolf
+ name = "Wolf"
+ icon_state = "wolf"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
index d051b2f07a..dc0e0222bf 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
@@ -1,3 +1,5 @@
+//Angel Wings
+
/datum/sprite_accessory/wings/none
name = "None"
icon_state = "none"
@@ -23,4 +25,120 @@
dimension_x = 46
center = TRUE
dimension_y = 34
- locked = TRUE
\ No newline at end of file
+ locked = TRUE
+
+//INSECT WINGS
+
+/datum/sprite_accessory/insect_wings
+ icon = 'icons/mob/wings.dmi'
+ color_src = null
+
+/datum/sprite_accessory/insect_wings/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/insect_wings/plain
+ name = "Plain"
+ icon_state = "plain"
+
+/datum/sprite_accessory/insect_wings/monarch
+ name = "Monarch"
+ icon_state = "monarch"
+
+/datum/sprite_accessory/insect_wings/luna
+ name = "Luna"
+ icon_state = "luna"
+
+/datum/sprite_accessory/insect_wings/atlas
+ name = "Atlas"
+ icon_state = "atlas"
+
+/datum/sprite_accessory/insect_wings/reddish
+ name = "Reddish"
+ icon_state = "redish"
+
+/datum/sprite_accessory/insect_wings/royal
+ name = "Royal"
+ icon_state = "royal"
+
+/datum/sprite_accessory/insect_wings/gothic
+ name = "Gothic"
+ icon_state = "gothic"
+
+/datum/sprite_accessory/insect_wings/lovers
+ name = "Lovers"
+ icon_state = "lovers"
+
+/datum/sprite_accessory/insect_wings/whitefly
+ name = "White Fly"
+ icon_state = "whitefly"
+
+/datum/sprite_accessory/insect_wings/punished
+ name = "Burnt Off"
+ icon_state = "punished"
+ locked = TRUE
+
+/datum/sprite_accessory/insect_wings/firewatch
+ name = "Firewatch"
+ icon_state = "firewatch"
+
+/datum/sprite_accessory/insect_wings/deathhead
+ name = "Deathshead"
+ icon_state = "deathhead"
+
+/datum/sprite_accessory/insect_wings/poison
+ name = "Poison"
+ icon_state = "poison"
+
+/datum/sprite_accessory/insect_wings/ragged
+ name = "Ragged"
+ icon_state = "ragged"
+
+/datum/sprite_accessory/insect_wings/moonfly
+ name = "Moon Fly"
+ icon_state = "moonfly"
+
+/datum/sprite_accessory/insect_wings/snow
+ name = "Snow"
+ icon_state = "snow"
+
+/datum/sprite_accessory/insect_wings/colored
+ name = "Colored (Hair)"
+ icon_state = "snowplain"
+ color_src = HAIR
+
+/datum/sprite_accessory/insect_fluff/colored1
+ name = "Colored (Primary)"
+ icon_state = "snowplain"
+ color_src = MUTCOLORS
+
+/datum/sprite_accessory/insect_fluff/colored2
+ name = "Colored (Secondary)"
+ icon_state = "snowplain"
+ color_src = MUTCOLORS2
+
+/datum/sprite_accessory/insect_fluff/colored3
+ name = "Colored (Tertiary)"
+ icon_state = "snowplain"
+ color_src = MUTCOLORS3
+
+/datum/sprite_accessory/insect_wings/bee
+ name = "Bee"
+ icon_state = "bee"
+
+/datum/sprite_accessory/insect_wings/bee_color
+ name = "Bee (Hair colored)"
+ icon_state = "bee"
+ color_src = HAIR
+
+/datum/sprite_accessory/insect_wings/fairy
+ name = "Fairy"
+ icon_state = "fairy"
+
+/datum/sprite_accessory/insect_wings/bat
+ name = "Bat"
+ icon_state = "bat"
+
+/datum/sprite_accessory/insect_wings/feathery
+ name = "Feathery"
+ icon_state = "feathery"
diff --git a/code/modules/mob/living/carbon/alien/larva/emote.dm b/code/modules/mob/living/carbon/alien/larva/emote.dm
deleted file mode 100644
index 62cb620ee4..0000000000
--- a/code/modules/mob/living/carbon/alien/larva/emote.dm
+++ /dev/null
@@ -1,113 +0,0 @@
-/mob/living/carbon/alien/larva/emote(act,m_type=1,message = null)
-
- var/param = null
- if (findtext(act, "-", 1, null))
- var/t1 = findtext(act, "-", 1, null)
- param = copytext(act, t1 + 1, length(act) + 1)
- act = copytext(act, 1, t1)
-
- var/muzzled = is_muzzled()
-
- switch(act) //Alphabetically sorted please.
- if ("burp","burps")
- if (!muzzled)
- message = "[src] burps."
- m_type = 2
- if ("choke","chokes")
- message = "[src] chokes."
- m_type = 2
- if ("collapse","collapses")
- Paralyse(2)
- message = "[src] collapses!"
- m_type = 2
- if ("dance","dances")
- if (!src.restrained())
- message = "[src] dances around happily."
- m_type = 1
- if ("deathgasp","deathgasps")
- message = "[src] lets out a sickly hiss of air and falls limply to the floor..."
- m_type = 2
- if ("drool","drools")
- message = "[src] drools."
- m_type = 1
- if ("gasp","gasps")
- message = "[src] gasps."
- m_type = 2
- if ("gnarl","gnarls")
- if (!muzzled)
- message = "[src] gnarls and shows its teeth.."
- m_type = 2
- if ("hiss","hisses")
- message = "[src] hisses softly."
- m_type = 1
- if ("jump","jumps")
- message = "[src] jumps!"
- m_type = 1
- if ("me")
- ..()
- return
- if ("moan","moans")
- message = "[src] moans!"
- m_type = 2
- if ("nod","nods")
- message = "[src] nods its head."
- m_type = 1
- if ("roar","roars")
- if (!muzzled)
- message = "[src] softly roars."
- m_type = 2
- if ("roll","rolls")
- if (!src.restrained())
- message = "[src] rolls."
- m_type = 1
- if ("scratch","scratches")
- if (!src.restrained())
- message = "[src] scratches."
- m_type = 1
- if ("screech","screeches") //This orignally was called scretch, changing it. -Sum99
- if (!muzzled)
- message = "[src] screeches."
- m_type = 2
- if ("shake","shakes")
- message = "[src] shakes its head."
- m_type = 1
- if ("shiver","shivers")
- message = "[src] shivers."
- m_type = 2
- if ("sign","signs")
- if (!src.restrained())
- message = text("[src] signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null))
- m_type = 1
- if ("snore","snores")
- message = "[src] snores."
- m_type = 2
- if ("sulk","sulks")
- message = "[src] sulks down sadly."
- m_type = 1
- if ("sway","sways")
- message = "[src] sways around dizzily."
- m_type = 1
- if ("tail")
- message = "[src] waves its tail."
- m_type = 1
- if ("twitch")
- message = "[src] twitches violently."
- m_type = 1
- if ("whimper","whimpers")
- if (!muzzled)
- message = "[src] whimpers."
- m_type = 2
-
- if ("help") //"The exception"
- src << "Help for larva emotes. You can use these emotes with say \"*emote\":\n\nburp, choke, collapse, dance, deathgasp, drool, gasp, gnarl, hiss, jump, me, moan, nod, roll, roar, scratch, screech, shake, shiver, sign-#, sulk, sway, tail, twitch, whimper"
-
- else
- src << "Unusable emote '[act]'. Say *help for a list. "
-
- if ((message && src.stat == 0))
- log_emote("[name]/[key] : [message]")
- if (m_type & 1)
- visible_message(message)
- else
- audible_message(message)
- return
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 9acecea545..1d070489e7 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -271,9 +271,13 @@
if(restrained())
changeNext_move(CLICK_CD_BREAKOUT)
last_special = world.time + CLICK_CD_BREAKOUT
+ var/buckle_cd = 600
+ if(handcuffed)
+ var/obj/item/restraints/O = src.get_item_by_slot(SLOT_HANDCUFFED)
+ buckle_cd = O.breakouttime
visible_message("[src] attempts to unbuckle [p_them()]self! ", \
- "You attempt to unbuckle yourself... (This will take around one minute and you need to stay still.) ")
- if(do_after(src, 600, 0, target = src))
+ "You attempt to unbuckle yourself... (This will take around [round(buckle_cd/600,1)] minute\s, and you need to stay still.) ")
+ if(do_after(src, buckle_cd, 0, target = src))
if(!buckled)
return
buckled.user_unbuckle_mob(src,src)
@@ -801,7 +805,8 @@
drop_all_held_items()
stop_pulling()
throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed)
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed)
+ if(handcuffed.demoralize_criminals)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed)
else
clear_alert("handcuffed")
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "handcuffed")
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 794194b3a1..41daf642f2 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -2,7 +2,7 @@
gender = MALE
pressure_resistance = 15
possible_a_intents = list(INTENT_HELP, INTENT_HARM)
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD,RAD_HUD)
has_limbs = 1
held_items = list(null, null)
var/list/stomach_contents = list()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 528b55c921..85dfe66725 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -802,6 +802,11 @@
else
hud_used.healthdoll.icon_state = "healthdoll_DEAD"
+ if(hud_used.staminas)
+ hud_used.staminas.icon_state = staminahudamount()
+ if(hud_used.staminabuffer)
+ hud_used.staminabuffer.icon_state = staminabufferhudamount()
+
/mob/living/carbon/human/fully_heal(admin_revive = 0)
if(admin_revive)
regenerate_limbs()
@@ -854,52 +859,84 @@
.["Copy outfit"] = "?_src_=vars;[HrefToken()];copyoutfit=[REF(src)]"
/mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user)
- //If they dragged themselves and we're currently aggressively grabbing them try to piggyback
- if(user == target && can_piggyback(target) && pulling == target && (HAS_TRAIT(src, TRAIT_PACIFISM) || grab_state >= GRAB_AGGRESSIVE) && stat == CONSCIOUS)
- buckle_mob(target,TRUE,TRUE)
+ if(pulling == target && grab_state >= GRAB_AGGRESSIVE && stat == CONSCIOUS)
+ //If they dragged themselves and we're currently aggressively grabbing them try to piggyback
+ if(user == target && can_piggyback(target))
+ piggyback(target)
+ return
+ //If you dragged them to you and you're aggressively grabbing try to fireman carry them
+ else if(user != target && can_be_firemanned(target))
+ fireman_carry(target)
+ return
. = ..()
-/mob/living/carbon/human/proc/piggyback_instant(mob/living/M)
- return buckle_mob(M, TRUE, TRUE, FALSE, TRUE)
+//src is the user that will be carrying, target is the mob to be carried
+/mob/living/carbon/human/proc/can_piggyback(mob/living/carbon/target)
+ return (istype(target) && target.stat == CONSCIOUS)
-//Can C try to piggyback at all.
-/mob/living/carbon/human/proc/can_piggyback(mob/living/carbon/C)
- if(istype(C) && C.stat == CONSCIOUS)
- return TRUE
- return FALSE
+/mob/living/carbon/human/proc/can_be_firemanned(mob/living/carbon/target)
+ return (ishuman(target) && target.lying)
-/mob/living/carbon/human/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE, bypass_piggybacking = FALSE, no_delay = FALSE)
+/mob/living/carbon/human/proc/fireman_carry(mob/living/carbon/target)
+ if(can_be_firemanned(target))
+ visible_message("[src] starts lifting [target] onto their back... ",
+ "You start lifting [target] onto your back... ")
+ if(do_after(src, 30, TRUE, target))
+ //Second check to make sure they're still valid to be carried
+ if(can_be_firemanned(target) && !incapacitated(FALSE, TRUE))
+ target.resting = FALSE
+ buckle_mob(target, TRUE, TRUE, 90, 1, 0)
+ return
+ visible_message("[src] fails to fireman carry [target]!")
+ else
+ to_chat(src, "You can't fireman carry [target] while they're standing! ")
+
+/mob/living/carbon/human/proc/piggyback(mob/living/carbon/target)
+ if(can_piggyback(target))
+ visible_message("[target] starts to climb onto [src]... ")
+ if(do_after(target, 15, target = src))
+ if(can_piggyback(target))
+ if(target.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE))
+ target.visible_message("[target] can't hang onto [src]! ")
+ return
+ buckle_mob(target, TRUE, TRUE, FALSE, 0, 2)
+ else
+ visible_message("[target] fails to climb onto [src]! ")
+ else
+ to_chat(target, "You can't piggyback ride [src] right now! ")
+
+/mob/living/carbon/human/buckle_mob(mob/living/target, force = FALSE, check_loc = TRUE, lying_buckle = FALSE, hands_needed = 0, target_hands_needed = 0)
if(!force)//humans are only meant to be ridden through piggybacking and special cases
return
- if(bypass_piggybacking)
- return ..()
- if(!is_type_in_typecache(M, can_ride_typecache))
- M.visible_message("[M] really can't seem to mount [src]... ")
+ if(!is_type_in_typecache(target, can_ride_typecache))
+ target.visible_message("[target] really can't seem to mount [src]... ")
return
+ buckle_lying = lying_buckle
var/datum/component/riding/human/riding_datum = LoadComponent(/datum/component/riding/human)
- riding_datum.ride_check_rider_incapacitated = TRUE
- riding_datum.ride_check_rider_restrained = TRUE
- riding_datum.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(-6, 4), TEXT_WEST = list( 6, 4)))
- if(buckled_mobs && ((M in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled || (M.stat != CONSCIOUS))
+ if(target_hands_needed)
+ riding_datum.ride_check_rider_restrained = TRUE
+ if(buckled_mobs && ((target in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled)
return
- if(can_piggyback(M))
- riding_datum.ride_check_ridden_incapacitated = TRUE
- visible_message("[M] starts to climb onto [src]... ")
- if(no_delay || do_after(M, 15, target = src))
- if(can_piggyback(M))
- if(M.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE))
- M.visible_message("[M] can't hang onto [src]! ")
- return
- if(!riding_datum.equip_buckle_inhands(M, 2)) //MAKE SURE THIS IS LAST!!
- M.visible_message("[M] can't climb onto [src]! ")
- return
- . = ..(M, force, check_loc)
- stop_pulling()
- else
- visible_message("[M] fails to climb onto [src]! ")
- else
- . = ..(M,force,check_loc)
- stop_pulling()
+ var/equipped_hands_self
+ var/equipped_hands_target
+ if(hands_needed)
+ equipped_hands_self = riding_datum.equip_buckle_inhands(src, hands_needed, target)
+ if(target_hands_needed)
+ equipped_hands_target = riding_datum.equip_buckle_inhands(target, target_hands_needed)
+
+ if(hands_needed || target_hands_needed)
+ if(hands_needed && !equipped_hands_self)
+ src.visible_message("[src] can't get a grip on [target] because their hands are full! ",
+ "You can't get a grip on [target] because your hands are full! ")
+ return
+ else if(target_hands_needed && !equipped_hands_target)
+ target.visible_message("[target] can't get a grip on [src] because their hands are full! ",
+ "You can't get a grip on [src] because your hands are full! ")
+ return
+
+ stop_pulling()
+ riding_datum.handle_vehicle_layer()
+ . = ..(target, force, check_loc)
/mob/living/carbon/human/proc/is_shove_knockdown_blocked() //If you want to add more things that block shove knockdown, extend this
for(var/obj/item/clothing/C in get_equipped_items()) //doesn't include pockets
@@ -1029,8 +1066,8 @@
/mob/living/carbon/human/species/lizard/ashwalker
race = /datum/species/lizard/ashwalker
-/mob/living/carbon/human/species/moth
- race = /datum/species/moth
+/mob/living/carbon/human/species/insect
+ race = /datum/species/insect
/mob/living/carbon/human/species/mush
race = /datum/species/mush
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index ff4878aa13..5af295a5dd 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -348,10 +348,15 @@
if(temp)
var/update = 0
var/dmg = rand(M.force/2, M.force)
+ var/atom/throw_target = get_edge_target_turf(src, M.dir)
switch(M.damtype)
if("brute")
- if(M.force > 20)
- Unconscious(20)
+ if(M.force > 35) // durand and other heavy mechas
+ Knockdown(50)
+ src.throw_at(throw_target, rand(1,5), 7)
+ else if(M.force >= 20 && !IsKnockdown()) // lightweight mechas like gygax
+ Knockdown(30)
+ src.throw_at(throw_target, rand(1,3), 7)
update |= temp.receive_damage(dmg, 0)
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
if("fire")
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 35b0384145..e32d073500 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -1,5 +1,5 @@
/mob/living/carbon/human
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,RAD_HUD)
hud_type = /datum/hud/human
possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)
pressure_resistance = 25
@@ -17,6 +17,8 @@
//Eye colour
var/eye_color = "000"
+ var/horn_color = "85615a" //specific horn colors, because why not?
+
var/skin_tone = "caucasian1" //Skin tone
var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 1af9dbc5f5..313374ef29 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -18,7 +18,7 @@
#define THERMAL_PROTECTION_HAND_LEFT 0.025
#define THERMAL_PROTECTION_HAND_RIGHT 0.025
-/mob/living/carbon/human/Life()
+/mob/living/carbon/human/Life(seconds, times_fired)
set invisibility = 0
if (notransform)
return
@@ -39,6 +39,10 @@
//Stuff jammed in your limbs hurts
handle_embedded_objects()
+ if(stat != DEAD)
+ //process your dick energy
+ handle_arousal(times_fired)
+
//Update our name based on whether our face is obscured/disfigured
name = get_visible_name()
@@ -54,7 +58,7 @@
var/obj/item/clothing/CH = head
if (CS.clothing_flags & CH.clothing_flags & STOPSPRESSUREDAMAGE)
return ONE_ATMOSPHERE
- if(istype(loc, /obj/belly)) //START OF CIT CHANGES - Makes it so you don't suffocate while inside vore organs. Remind me to modularize this some time - Bhijn
+ if(isbelly(loc)) //START OF CIT CHANGES - Makes it so you don't suffocate while inside vore organs. Remind me to modularize this some time - Bhijn
return ONE_ATMOSPHERE
if(istype(loc, /obj/item/dogborg/sleeper))
return ONE_ATMOSPHERE //END OF CIT CHANGES
diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm
deleted file mode 100644
index 1ac24cffa9..0000000000
--- a/code/modules/mob/living/carbon/human/login.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/mob/living/carbon/human/Login()
- ..()
- if(src.martial_art == default_martial_art && mind.stored_martial_art) //If the mind has a martial art stored and the body has the default one.
- src.mind.stored_martial_art.teach(src) //Running teach so that it deals with help verbs.
- else if(src.martial_art != default_martial_art && src.martial_art != mind.stored_martial_art) //If the body has a martial art which is not the default one and is not stored in the mind.
- if(src.martial_art_owner != mind)
- src.martial_art.remove(src)
- else
- src.mind.stored_martial_art = src.martial_art
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 0f83e675fc..d2e8cab240 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1,6 +1,7 @@
// This code handles different species in the game.
GLOBAL_LIST_EMPTY(roundstart_races)
+GLOBAL_LIST_EMPTY(roundstart_race_names)
/datum/species
var/id // if the game needs to manually check your race to do something not included in a proc here, it will use this
@@ -15,6 +16,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/hair_color // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent.
+ var/horn_color //specific horn colors, because why not?
+
var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans)
var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id.
var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc)
@@ -79,7 +82,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/fixed_mut_color3 = ""
var/whitelisted = 0 //Is this species restricted to certain players?
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
-
+ var/should_draw_citadel = FALSE
///////////
// PROCS //
@@ -98,6 +101,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/datum/species/S = new I
if(S.check_roundstart_eligible())
GLOB.roundstart_races += S.id
+ GLOB.roundstart_race_names["[S.name]"] = S.id
qdel(S)
if(!GLOB.roundstart_races.len)
GLOB.roundstart_races += "human"
@@ -129,10 +133,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
return
//Please override this locally if you want to define when what species qualifies for what rank if human authority is enforced.
-/datum/species/proc/qualifies_for_rank(rank, list/features)
- if(rank in GLOB.command_positions)
- return 0
- return 1
+/datum/species/proc/qualifies_for_rank(rank, list/features) //SPECIES JOB RESTRICTIONS
+ //if(rank in GLOB.command_positions) Left as an example: The format qualifies for rank takes.
+ // return 0 //It returns false when it runs the proc so they don't get jobs from the global list.
+ return 1 //It returns 1 to say they are a-okay to continue.
//Will regenerate missing organs
/datum/species/proc/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE)
@@ -260,7 +264,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
C.hud_used.update_locked_slots()
// this needs to be FIRST because qdel calls update_body which checks if we have DIGITIGRADE legs or not and if not then removes DIGITIGRADE from species_traits
- if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
+ if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian"))
species_traits += DIGITIGRADE
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(FALSE)
@@ -294,8 +298,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
for(var/datum/disease/A in C.diseases)
A.cure(FALSE)
- SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
-
//CITADEL EDIT
if(NOAROUSAL in species_traits)
C.canbearoused = FALSE
@@ -306,6 +308,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/mob/living/carbon/human/H = C
if(NOGENITALS in H.dna.species.species_traits)
H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return.
+ if("meat_type" in default_features) //I can't believe it's come to the meat
+ H.type_of_meat = GLOB.meat_types[H.dna.features["meat_type"]]
+
+ SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
+
// EDIT ENDS
@@ -317,6 +324,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
for(var/X in inherent_traits)
REMOVE_TRAIT(C, X, SPECIES_TRAIT)
+ if("meat_type" in default_features)
+ C.type_of_meat = GLOB.meat_types[C.dna.features["meat_type"]]
+ else
+ C.type_of_meat = initial(meat)
+
SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src)
/datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour)
@@ -612,6 +624,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
else if ("wings" in mutant_bodyparts)
bodyparts_to_add -= "wings_open"
+ if("insect_fluff" in mutant_bodyparts)
+ if(!H.dna.features["insect_fluff"] || H.dna.features["insect_fluff"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
+ bodyparts_to_add -= "insect_fluff"
+
//CITADEL EDIT
//Race specific bodyparts:
//Xenos
@@ -717,8 +733,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
S = GLOB.wings_open_list[H.dna.features["wings"]]
if("legs")
S = GLOB.legs_list[H.dna.features["legs"]]
- if("moth_wings")
- S = GLOB.moth_wings_list[H.dna.features["moth_wings"]]
+ if("insect_wings")
+ S = GLOB.insect_wings_list[H.dna.features["insect_wings"]]
+ if("insect_fluff")
+ S = GLOB.insect_fluffs_list[H.dna.features["insect_fluff"]]
if("caps")
S = GLOB.caps_list[H.dna.features["caps"]]
if("ipc_screen")
@@ -815,6 +833,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
accessory_overlay.color = "#[H.facial_hair_color]"
if(EYECOLOR)
accessory_overlay.color = "#[H.eye_color]"
+ if(HORNCOLOR)
+ accessory_overlay.color = "#[H.horn_color]"
else
accessory_overlay.color = forced_colour
else
@@ -880,6 +900,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
extra_accessory_overlay.color = "#[H.facial_hair_color]"
if(EYECOLOR)
extra_accessory_overlay.color = "#[H.eye_color]"
+
+ if(HORNCOLOR)
+ extra_accessory_overlay.color = "#[H.horn_color]"
standing += extra_accessory_overlay
if(S.extra2) //apply the extra overlay, if there is one
@@ -912,6 +935,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
extra2_accessory_overlay.color = "#[H.dna.features["mcolor"]]"
else
extra2_accessory_overlay.color = "#[H.hair_color]"
+ if(HORNCOLOR)
+ extra2_accessory_overlay.color = "#[H.horn_color]"
standing += extra2_accessory_overlay
@@ -1313,10 +1338,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/obj/item/organ/cyberimp/chest/thrusters/T = H.getorganslot(ORGAN_SLOT_THRUSTERS)
if(!istype(J) && istype(C))
J = C.jetpack
- if(istype(J) && J.full_speed && J.allow_thrust(0.01, H)) //Prevents stacking
- . -= 2
- else if(istype(T) && T.allow_thrust(0.01, H))
- . -= 2
+ if(istype(J) && J.full_speed && J.allow_thrust(0.005, H)) //Prevents stacking
+ . -= 0.4
+ else if(istype(T) && T.allow_thrust(0.005, H))
+ . -= 0.4
if(!ignoreslow && gravity)
if(H.wear_suit)
@@ -1732,6 +1757,161 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.forcesay(GLOB.hit_appends) //forcesay checks stat already.
return TRUE
+/datum/species/proc/alt_spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
+ if(!istype(M))
+ return TRUE
+ CHECK_DNA_AND_SPECIES(M)
+ CHECK_DNA_AND_SPECIES(H)
+
+ if(!istype(M)) //sanity check for drones.
+ return TRUE
+ if(M.mind)
+ attacker_style = M.mind.martial_art
+ if((M != H) && M.a_intent != INTENT_HELP && H.check_shields(M, 0, M.name, attack_type = UNARMED_ATTACK))
+ log_combat(M, H, "attempted to touch")
+ H.visible_message("[M] attempted to touch [H]! ")
+ return TRUE
+ switch(M.a_intent)
+ if(INTENT_HELP)
+ if(M == H)
+ althelp(M, H, attacker_style)
+ return TRUE
+ return FALSE
+ if(INTENT_DISARM)
+ altdisarm(M, H, attacker_style)
+ return TRUE
+ return FALSE
+
+/datum/species/proc/althelp(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
+ if(user == target && istype(user))
+ if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
+ to_chat(user, "You're too exhausted for that. ")
+ return
+ if(!user.resting)
+ to_chat(user, "You can only force yourself up if you're on the ground. ")
+ return
+ user.visible_message("[user] forces [p_them()]self up to [p_their()] feet! ", "You force yourself up to your feet! ")
+ user.resting = 0
+ user.update_canmove()
+ user.adjustStaminaLossBuffered(user.stambuffer) //Rewards good stamina management by making it easier to instantly get up from resting
+ playsound(user, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+
+/datum/species/proc/altdisarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
+ if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
+ to_chat(user, "You're too exhausted. ")
+ return FALSE
+ if(target.check_block())
+ target.visible_message("[target] blocks [user]'s shoving attempt! ")
+ return FALSE
+ if(attacker_style && attacker_style.disarm_act(user,target))
+ return TRUE
+ if(user.resting)
+ return FALSE
+ else
+ if(user == target)
+ return
+ user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
+ user.adjustStaminaLossBuffered(4)
+ playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
+
+ if(target.w_uniform)
+ target.w_uniform.add_fingerprint(user)
+ SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected)
+
+ if(!target.resting)
+ target.adjustStaminaLoss(5)
+
+
+ var/turf/target_oldturf = target.loc
+ var/shove_dir = get_dir(user.loc, target_oldturf)
+ var/turf/target_shove_turf = get_step(target.loc, shove_dir)
+ var/mob/living/carbon/human/target_collateral_human
+ var/obj/structure/table/target_table
+ var/shove_blocked = FALSE //Used to check if a shove is blocked so that if it is knockdown logic can be applied
+
+ //Thank you based whoneedsspace
+ target_collateral_human = locate(/mob/living/carbon/human) in target_shove_turf.contents
+ if(target_collateral_human)
+ shove_blocked = TRUE
+ else
+ target.Move(target_shove_turf, shove_dir)
+ if(get_turf(target) == target_oldturf)
+ if(target_shove_turf.density)
+ shove_blocked = TRUE
+ else
+ var/thoushallnotpass = FALSE
+ for(var/obj/O in target_shove_turf)
+ if(istype(O, /obj/structure/table))
+ target_table = O
+ else if(!O.CanPass(src, target_shove_turf))
+ shove_blocked = TRUE
+ thoushallnotpass = TRUE
+ if(thoushallnotpass)
+ target_table = null
+
+ if(target.is_shove_knockdown_blocked())
+ return
+
+ if(shove_blocked || target_table)
+ var/directional_blocked = FALSE
+ if(shove_dir in GLOB.cardinals) //Directional checks to make sure that we're not shoving through a windoor or something like that
+ var/target_turf = get_turf(target)
+ for(var/obj/O in target_turf)
+ if(O.flags_1 & ON_BORDER_1 && O.dir == shove_dir && O.density)
+ directional_blocked = TRUE
+ break
+ if(target_turf != target_shove_turf) //Make sure that we don't run the exact same check twice on the same tile
+ for(var/obj/O in target_shove_turf)
+ if(O.flags_1 & ON_BORDER_1 && O.dir == turn(shove_dir, 180) && O.density)
+ directional_blocked = TRUE
+ break
+ var/targetatrest = target.resting
+ if(((!target_table && !target_collateral_human) || directional_blocked) && !targetatrest)
+ target.Knockdown(SHOVE_KNOCKDOWN_SOLID)
+ user.visible_message("[user.name] shoves [target.name], knocking them down! ",
+ "You shove [target.name], knocking them down! ", null, COMBAT_MESSAGE_RANGE)
+ log_combat(user, target, "shoved", "knocking them down")
+ else if(target_table)
+ if(!targetatrest)
+ target.Knockdown(SHOVE_KNOCKDOWN_TABLE)
+ user.visible_message("[user.name] shoves [target.name] onto \the [target_table]! ",
+ "You shove [target.name] onto \the [target_table]! ", null, COMBAT_MESSAGE_RANGE)
+ target.forceMove(target_shove_turf)
+ log_combat(user, target, "shoved", "onto [target_table]")
+ else if(target_collateral_human && !targetatrest)
+ target.Knockdown(SHOVE_KNOCKDOWN_HUMAN)
+ if(!target_collateral_human.resting)
+ target_collateral_human.Knockdown(SHOVE_KNOCKDOWN_COLLATERAL)
+ user.visible_message("[user.name] shoves [target.name] into [target_collateral_human.name]! ",
+ "You shove [target.name] into [target_collateral_human.name]! ", null, COMBAT_MESSAGE_RANGE)
+ log_combat(user, target, "shoved", "into [target_collateral_human.name]")
+
+ else
+ user.visible_message("[user.name] shoves [target.name]! ",
+ "You shove [target.name]! ", null, COMBAT_MESSAGE_RANGE)
+ var/target_held_item = target.get_active_held_item()
+ var/knocked_item = FALSE
+ if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types))
+ target_held_item = null
+ if(!target.has_movespeed_modifier(SHOVE_SLOWDOWN_ID))
+ target.add_movespeed_modifier(SHOVE_SLOWDOWN_ID, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH)
+ if(target_held_item)
+ target.visible_message("[target.name]'s grip on \the [target_held_item] loosens! ",
+ "Your grip on \the [target_held_item] loosens! ", null, COMBAT_MESSAGE_RANGE)
+ addtimer(CALLBACK(target, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
+ else if(target_held_item)
+ target.dropItemToGround(target_held_item)
+ knocked_item = TRUE
+ target.visible_message("[target.name] drops \the [target_held_item]!! ",
+ "You drop \the [target_held_item]!! ", null, COMBAT_MESSAGE_RANGE)
+ var/append_message = ""
+ if(target_held_item)
+ if(knocked_item)
+ append_message = "causing them to drop [target_held_item]"
+ else
+ append_message = "loosening their grip on [target_held_item]"
+ log_combat(user, target, "shoved", append_message)
+
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H)
var/hit_percent = (100-(blocked+armor))/100
hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100
diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
new file mode 100644
index 0000000000..94dba550b6
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
@@ -0,0 +1,64 @@
+/datum/species/insect
+ name = "Anthromorphic Insect"
+ id = "insect"
+ say_mod = "flutters"
+ default_color = "00FF00"
+ species_traits = list(LIPS,NOEYES,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR)
+ inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
+ mutant_bodyparts = list("mam_ears", "mam_snout", "mam_tail", "taur", "insect_wings", "mam_snouts", "insect_fluff","horns")
+ default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None",
+ "insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None","horns" = "None")
+ attack_verb = "slash"
+ attack_sound = 'sound/weapons/slash.ogg'
+ miss_sound = 'sound/weapons/slashmiss.ogg'
+ meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
+ liked_food = VEGETABLES | DAIRY
+ disliked_food = FRUIT | GROSS
+ toxic_food = MEAT | RAW
+ mutanteyes = /obj/item/organ/eyes/insect
+ should_draw_citadel = TRUE
+
+/datum/species/insect/on_species_gain(mob/living/carbon/C)
+ . = ..()
+ if(ishuman(C))
+ var/mob/living/carbon/human/H = C
+ if(!H.dna.features["insect_wings"])
+ H.dna.features["insect_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["insect_wings"]) ? H.client.prefs.features["insect_wings"] : "None"]"
+ handle_mutant_bodyparts(H)
+
+/datum/species/insect/random_name(gender,unique,lastname)
+ if(unique)
+ return random_unique_moth_name()
+
+ var/randname = moth_name()
+
+ if(lastname)
+ randname += " [lastname]"
+
+ return randname
+
+/datum/species/insect/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
+ ..()
+ if(H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive
+ to_chat(H, "Your precious wings burn to a crisp! ")
+ if(H.dna.features["insect_wings"] != "None")
+ H.dna.features["insect_wings"] = "Burnt Off"
+ handle_mutant_bodyparts(H)
+
+/datum/species/insect/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
+ . = ..()
+ if(chem.id == "pestkiller")
+ H.adjustToxLoss(3)
+ H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
+
+/datum/species/insect/check_weakness(obj/item/weapon, mob/living/attacker)
+ if(istype(weapon, /obj/item/melee/flyswatter))
+ return 9 //flyswatters deal 10x damage to insects
+ return 0
+
+/datum/species/insect/space_move(mob/living/carbon/human/H)
+ . = ..()
+ if(H.loc && !isspaceturf(H.loc) && (H.dna.features["insect_wings"] != "Burnt Off" && H.dna.features["insect_wings"] != "None"))
+ var/datum/gas_mixture/current = H.loc.return_air()
+ if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
+ return TRUE
diff --git a/code/modules/mob/living/carbon/human/species_types/corporate.dm b/code/modules/mob/living/carbon/human/species_types/corporate.dm
index 620f0b2543..146090b366 100644
--- a/code/modules/mob/living/carbon/human/species_types/corporate.dm
+++ b/code/modules/mob/living/carbon/human/species_types/corporate.dm
@@ -16,5 +16,5 @@
blacklisted = 1
use_skintones = 0
species_traits = list(NOBLOOD,EYECOLOR,NOGENITALS)
- inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
+ inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER)
sexes = 0
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index 6f05eb393d..043ee4fde1 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -1,5 +1,5 @@
/datum/species/fly
- name = "Flyperson"
+ name = "Anthromorphic Fly"
id = "fly"
say_mod = "buzzes"
species_traits = list(NOEYES)
diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
new file mode 100644
index 0000000000..e726d45347
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -0,0 +1,98 @@
+/datum/species/mammal
+ name = "Anthromorph"
+ id = "mammal"
+ default_color = "4B4B4B"
+ should_draw_citadel = TRUE
+ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR)
+ inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur", "horns", "legs")
+ default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky",
+ "mam_body_markings" = "Husky", "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian")
+ attack_verb = "claw"
+ attack_sound = 'sound/weapons/slash.ogg'
+ miss_sound = 'sound/weapons/slashmiss.ogg'
+ meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal
+ liked_food = MEAT | FRIED
+ disliked_food = TOXIC
+
+//Curiosity killed the cat's wagging tail.
+/datum/species/mammal/spec_death(gibbed, mob/living/carbon/human/H)
+ if(H)
+ stop_wagging_tail(H)
+
+/datum/species/mammal/spec_stun(mob/living/carbon/human/H,amount)
+ if(H)
+ stop_wagging_tail(H)
+ . = ..()
+
+/datum/species/mammal/can_wag_tail(mob/living/carbon/human/H)
+ return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
+
+/datum/species/mammal/is_wagging_tail(mob/living/carbon/human/H)
+ return ("mam_waggingtail" in mutant_bodyparts)
+
+/datum/species/mammal/start_wagging_tail(mob/living/carbon/human/H)
+ if("mam_tail" in mutant_bodyparts)
+ mutant_bodyparts -= "mam_tail"
+ mutant_bodyparts |= "mam_waggingtail"
+ H.update_body()
+
+/datum/species/mammal/stop_wagging_tail(mob/living/carbon/human/H)
+ if("mam_waggingtail" in mutant_bodyparts)
+ mutant_bodyparts -= "mam_waggingtail"
+ mutant_bodyparts |= "mam_tail"
+ H.update_body()
+
+
+/datum/species/mammal/qualifies_for_rank(rank, list/features)
+ return TRUE
+
+
+//Alien//
+/datum/species/xeno
+ // A cloning mistake, crossing human and xenomorph DNA
+ name = "Xenomorph Hybrid"
+ id = "xeno"
+ say_mod = "hisses"
+ default_color = "00FF00"
+ should_draw_citadel = TRUE
+ species_traits = list(MUTCOLORS,EYECOLOR,LIPS)
+ inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs")
+ default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade")
+ attack_verb = "slash"
+ attack_sound = 'sound/weapons/slash.ogg'
+ miss_sound = 'sound/weapons/slashmiss.ogg'
+ meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
+ skinned_type = /obj/item/stack/sheet/animalhide/xeno
+ exotic_bloodtype = "L"
+ damage_overlay_type = "xeno"
+ liked_food = MEAT
+
+/datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
+ if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian"))
+ species_traits += DIGITIGRADE
+ if(DIGITIGRADE in species_traits)
+ C.Digitigrade_Leg_Swap(FALSE)
+ . = ..()
+
+/datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
+ if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Plantigrade")
+ species_traits -= DIGITIGRADE
+ if(DIGITIGRADE in species_traits)
+ C.Digitigrade_Leg_Swap(TRUE)
+ . = ..()
+
+//Praise the Omnissiah, A challange worthy of my skills - HS
+
+//EXOTIC//
+//These races will likely include lots of downsides and upsides. Keep them relatively balanced.//
+
+//misc
+/mob/living/carbon/human/dummy
+ no_vore = TRUE
+
+/mob/living/carbon/human/vore
+ devourable = TRUE
+ digestable = TRUE
+ feeding = TRUE
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 88dd59749c..84c44ea81c 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -45,7 +45,7 @@
return golem_name
/datum/species/golem/random
- name = "Random Golem"
+ name = "Golem Mutant"
blacklisted = FALSE
dangerous_existence = FALSE
var/static/list/random_golem_types
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm
similarity index 98%
rename from modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
rename to code/modules/mob/living/carbon/human/species_types/ipc.dm
index 25b8daf2cb..95b924ea18 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
+++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm
@@ -1,5 +1,5 @@
/datum/species/ipc
- name = "IPC"
+ name = "I.P.C."
id = "ipc"
say_mod = "beeps"
default_color = "00FF00"
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 66586744fb..0fa704b0fc 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -118,7 +118,7 @@
//Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death.
/datum/species/jelly/slime
- name = "Slimeperson"
+ name = "Xenobiological Slime Entity"
id = "slime"
default_color = "00FFFF"
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
@@ -389,12 +389,256 @@
"...and move this one instead. ")
+////////////////////////////////////////////////////////Round Start Slimes///////////////////////////////////////////////////////////////////
+
+/datum/species/jelly/roundstartslime
+ name = "Xenobiological Slime Hybrid"
+ id = "slimeperson"
+ limbs_id = "slime"
+ default_color = "00FFFF"
+ species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
+ inherent_traits = list(TRAIT_TOXINLOVER)
+ mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur")
+ default_features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None")
+ say_mod = "says"
+ hair_color = "mutcolor"
+ hair_alpha = 160 //a notch brighter so it blends better.
+ coldmod = 3
+ heatmod = 1
+ burnmod = 1
+
+/datum/species/jelly/roundstartslime/spec_death(gibbed, mob/living/carbon/human/H)
+ if(H)
+ stop_wagging_tail(H)
+
+/datum/species/jelly/roundstartslime/spec_stun(mob/living/carbon/human/H,amount)
+ if(H)
+ stop_wagging_tail(H)
+ . = ..()
+
+/datum/species/jelly/roundstartslime/can_wag_tail(mob/living/carbon/human/H)
+ return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
+
+/datum/species/jelly/roundstartslime/is_wagging_tail(mob/living/carbon/human/H)
+ return ("mam_waggingtail" in mutant_bodyparts)
+
+/datum/species/jelly/roundstartslime/start_wagging_tail(mob/living/carbon/human/H)
+ if("mam_tail" in mutant_bodyparts)
+ mutant_bodyparts -= "mam_tail"
+ mutant_bodyparts |= "mam_waggingtail"
+ H.update_body()
+
+/datum/species/jelly/roundstartslime/stop_wagging_tail(mob/living/carbon/human/H)
+ if("mam_waggingtail" in mutant_bodyparts)
+ mutant_bodyparts -= "mam_waggingtail"
+ mutant_bodyparts |= "mam_tail"
+ H.update_body()
+
+
+/datum/action/innate/slime_change
+ name = "Alter Form"
+ check_flags = AB_CHECK_CONSCIOUS
+ button_icon_state = "alter_form" //placeholder
+ icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi'
+ background_icon_state = "bg_alien"
+
+/datum/action/innate/slime_change/Activate()
+ var/mob/living/carbon/human/H = owner
+ if(!isjellyperson(H))
+ return
+ else
+ H.visible_message("[owner] gains a look of \
+ concentration while standing perfectly still.\
+ Their body seems to shift and starts getting more goo-like. ",
+ "You focus intently on altering your body while \
+ standing perfectly still... ")
+ change_form()
+
+/datum/action/innate/slime_change/proc/change_form()
+ var/mob/living/carbon/human/H = owner
+ var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel")
+ if(select_alteration == "Hair Style")
+ if(H.gender == MALE)
+ var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list
+ if(new_style)
+ H.facial_hair_style = new_style
+ else
+ H.facial_hair_style = "Shaved"
+ //handle normal hair
+ var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list
+ if(new_style)
+ H.hair_style = new_style
+ H.update_hair()
+ else if (select_alteration == "Genitals")
+ var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel")
+ switch(operation)
+ if("add sexual organ")
+ var/new_organ = input("Select sexual organ:", "Organ Manipulation") as null|anything in GLOB.genitals_list
+ if(!new_organ)
+ return
+ H.give_genital(GLOB.genitals_list[new_organ])
+
+ if("remove sexual organ")
+ var/list/organs = list()
+ for(var/obj/item/organ/genital/X in H.internal_organs)
+ var/obj/item/organ/I = X
+ organs["[I.name] ([I.type])"] = I
+ var/obj/item/O = input("Select sexual organ:", "Organ Manipulation", null) as null|anything in organs
+ var/obj/item/organ/genital/G = organs[O]
+ if(!G)
+ return
+ G.forceMove(get_turf(H))
+ qdel(G)
+ H.update_genitals()
+
+ else if (select_alteration == "Ears")
+ var/list/snowflake_ears_list = list("Normal" = null)
+ for(var/path in GLOB.mam_ears_list)
+ var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
+ snowflake_ears_list[S.name] = path
+ var/new_ears
+ new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in snowflake_ears_list
+ if(new_ears)
+ H.dna.features["mam_ears"] = new_ears
+ H.update_body()
+
+ else if (select_alteration == "Snout")
+ var/list/snowflake_snouts_list = list("Normal" = null)
+ for(var/path in GLOB.mam_snouts_list)
+ var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
+ snowflake_snouts_list[S.name] = path
+ var/new_snout
+ new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list
+ if(new_snout)
+ H.dna.features["mam_snouts"] = new_snout
+ H.update_body()
+
+ else if (select_alteration == "Markings")
+ var/list/snowflake_markings_list = list()
+ for(var/path in GLOB.mam_body_markings_list)
+ var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
+ snowflake_markings_list[S.name] = path
+ var/new_mam_body_markings
+ new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list
+ if(new_mam_body_markings)
+ H.dna.features["mam_body_markings"] = new_mam_body_markings
+ if(new_mam_body_markings == "None")
+ H.dna.features["mam_body_markings"] = "Plain"
+ for(var/X in H.bodyparts) //propagates the markings changes
+ var/obj/item/bodypart/BP = X
+ BP.update_limb(FALSE, H)
+ H.update_body()
+
+ else if (select_alteration == "Tail")
+ var/list/snowflake_tails_list = list("Normal" = null)
+ for(var/path in GLOB.mam_tails_list)
+ var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
+ snowflake_tails_list[S.name] = path
+ var/new_tail
+ new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list
+ if(new_tail)
+ H.dna.features["mam_tail"] = new_tail
+ if(new_tail != "None")
+ H.dna.features["taur"] = "None"
+ H.update_body()
+
+ else if (select_alteration == "Taur body")
+ var/list/snowflake_taur_list = list("Normal" = null)
+ for(var/path in GLOB.taur_list)
+ var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
+ if(istype(instance, /datum/sprite_accessory))
+ var/datum/sprite_accessory/S = instance
+ if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
+ snowflake_taur_list[S.name] = path
+ var/new_taur
+ new_taur = input(owner, "Choose your character's tauric body:", "Tauric Alteration") as null|anything in snowflake_taur_list
+ if(new_taur)
+ H.dna.features["taur"] = new_taur
+ if(new_taur != "None")
+ H.dna.features["mam_tail"] = "None"
+ H.update_body()
+
+ else if (select_alteration == "Penis")
+ for(var/obj/item/organ/genital/penis/X in H.internal_organs)
+ qdel(X)
+ var/new_shape
+ new_shape = input(owner, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list
+ if(new_shape)
+ H.dna.features["cock_shape"] = new_shape
+ H.update_genitals()
+ H.give_genital(/obj/item/organ/genital/testicles)
+ H.give_genital(/obj/item/organ/genital/penis)
+ H.apply_overlay()
+
+
+ else if (select_alteration == "Vagina")
+ for(var/obj/item/organ/genital/vagina/X in H.internal_organs)
+ qdel(X)
+ var/new_shape
+ new_shape = input(owner, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list
+ if(new_shape)
+ H.dna.features["vag_shape"] = new_shape
+ H.update_genitals()
+ H.give_genital(/obj/item/organ/genital/womb)
+ H.give_genital(/obj/item/organ/genital/vagina)
+ H.apply_overlay()
+
+ else if (select_alteration == "Penis Length")
+ for(var/obj/item/organ/genital/penis/X in H.internal_organs)
+ qdel(X)
+ var/new_length
+ new_length = input(owner, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Genital Alteration") as num|null
+ if(new_length)
+ H.dna.features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN)
+ H.update_genitals()
+ H.apply_overlay()
+ H.give_genital(/obj/item/organ/genital/testicles)
+ H.give_genital(/obj/item/organ/genital/penis)
+
+ else if (select_alteration == "Breast Size")
+ for(var/obj/item/organ/genital/breasts/X in H.internal_organs)
+ qdel(X)
+ var/new_size
+ new_size = input(owner, "Breast Size", "Genital Alteration") as null|anything in GLOB.breasts_size_list
+ if(new_size)
+ H.dna.features["breasts_size"] = new_size
+ H.update_genitals()
+ H.apply_overlay()
+ H.give_genital(/obj/item/organ/genital/breasts)
+
+ else if (select_alteration == "Breast Shape")
+ for(var/obj/item/organ/genital/breasts/X in H.internal_organs)
+ qdel(X)
+ var/new_shape
+ new_shape = input(owner, "Breast Shape", "Genital Alteration") as null|anything in GLOB.breasts_shapes_list
+ if(new_shape)
+ H.dna.features["breasts_shape"] = new_shape
+ H.update_genitals()
+ H.apply_overlay()
+ H.give_genital(/obj/item/organ/genital/breasts)
+
+ else
+ return
+
+
///////////////////////////////////LUMINESCENTS//////////////////////////////////////////
//Luminescents are able to consume and use slime extracts, without them decaying.
/datum/species/jelly/luminescent
- name = "Luminescent"
+ name = "Luminescent Slime Entity"
id = "lum"
say_mod = "says"
var/glow_intensity = LUMINESCENT_DEFAULT_GLOW
@@ -561,7 +805,7 @@
//Stargazers are the telepathic branch of jellypeople, able to project psychic messages and to link minds with willing participants.
/datum/species/jelly/stargazer
- name = "Stargazer"
+ name = "Stargazer Slime Entity"
id = "stargazer"
var/datum/action/innate/project_thought/project_thought
var/datum/action/innate/link_minds/link_minds
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 30bf705547..4dbfd23df8 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -1,17 +1,19 @@
/datum/species/lizard
// Reptilian humanoids with scaled skin and tails.
- name = "Lizardperson"
+ name = "Anthromorphic Lizard"
id = "lizard"
say_mod = "hisses"
default_color = "00FF00"
- species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS)
+ species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_REPTILE)
mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings", "legs", "taur")
mutanttongue = /obj/item/organ/tongue/lizard
mutanttail = /obj/item/organ/tail/lizard
coldmod = 1.5
heatmod = 0.67
- default_features = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "taur" = "None")
+ default_features = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "snout" = "Round",
+ "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None",
+ "legs" = "Digitigrade", "taur" = "None")
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
@@ -71,14 +73,14 @@
H.update_body()
/datum/species/lizard/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
- if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
+ if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian"))
species_traits += DIGITIGRADE
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(FALSE)
return ..()
/datum/species/lizard/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
- if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
+ if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Plantigrade")
species_traits -= DIGITIGRADE
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(TRUE)
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
deleted file mode 100644
index d15d989384..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-/datum/species/moth
- name = "Mothman"
- id = "moth"
- say_mod = "flutters"
- default_color = "00FF00"
- species_traits = list(LIPS, NOEYES)
- inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
- mutant_bodyparts = list("moth_wings")
- default_features = list("moth_wings" = "Plain")
- attack_verb = "slash"
- attack_sound = 'sound/weapons/slash.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth
- liked_food = VEGETABLES | DAIRY
- disliked_food = FRUIT | GROSS
- toxic_food = MEAT | RAW
- mutanteyes = /obj/item/organ/eyes/moth
-
-/datum/species/moth/on_species_gain(mob/living/carbon/C)
- . = ..()
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if(!H.dna.features["moth_wings"])
- H.dna.features["moth_wings"] = "[(H.client && H.client.prefs && LAZYLEN(H.client.prefs.features) && H.client.prefs.features["moth_wings"]) ? H.client.prefs.features["moth_wings"] : "Plain"]"
- handle_mutant_bodyparts(H)
-
-/datum/species/moth/random_name(gender,unique,lastname)
- if(unique)
- return random_unique_moth_name()
-
- var/randname = moth_name()
-
- if(lastname)
- randname += " [lastname]"
-
- return randname
-
-/datum/species/moth/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
- ..()
- if(H.dna.features["moth_wings"] != "Burnt Off" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive
- to_chat(H, "Your precious wings burn to a crisp! ")
- H.dna.features["moth_wings"] = "Burnt Off"
- handle_mutant_bodyparts(H)
-
-/datum/species/moth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- . = ..()
- if(chem.id == "pestkiller")
- H.adjustToxLoss(3)
- H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
-
-/datum/species/moth/check_weakness(obj/item/weapon, mob/living/attacker)
- if(istype(weapon, /obj/item/melee/flyswatter))
- return 9 //flyswatters deal 10x damage to moths
- return 0
-
-/datum/species/moth/space_move(mob/living/carbon/human/H)
- . = ..()
- if(H.loc && !isspaceturf(H.loc) && H.dna.features["moth_wings"] != "Burnt Off")
- var/datum/gas_mixture/current = H.loc.return_air()
- if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
- return TRUE
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
index 7be0265cba..ceadb28115 100644
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -1,5 +1,5 @@
/datum/species/mush //mush mush codecuck
- name = "Mushroomperson"
+ name = "Anthromorphic Mushroom"
id = "mush"
mutant_bodyparts = list("caps")
default_features = list("caps" = "Round")
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index 0da4073f1d..46207e5e60 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -1,6 +1,6 @@
/datum/species/pod
// A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness.
- name = "Podperson"
+ name = "Anthromorphic Plant"
id = "pod"
default_color = "59CE00"
species_traits = list(MUTCOLORS,EYECOLOR)
@@ -71,6 +71,7 @@
H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL)
/datum/species/pod/pseudo_weak
+ name = "Anthromorphic Plant"
id = "podweak"
limbs_id = "pod"
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS)
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
index 0ebd6e795b..ac18580e9b 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -1,10 +1,10 @@
/datum/species/synth
- name = "Synth" //inherited from the real species, for health scanners and things
+ name = "Synthetic" //inherited from the real species, for health scanners and things
id = "synth"
say_mod = "beep boops" //inherited from a user's real species
sexes = 0
species_traits = list(NOTRANSSTING,NOGENITALS,NOAROUSAL) //all of these + whatever we inherit from the real species
- inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
+ inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
dangerous_existence = 1
blacklisted = 1
@@ -12,7 +12,7 @@
damage_overlay_type = "synth"
limbs_id = "synth"
var/list/initial_species_traits = list(NOTRANSSTING) //for getting these values back for assume_disguise()
- var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
+ var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm
deleted file mode 100644
index 51c7ad9d25..0000000000
--- a/code/modules/mob/living/carbon/human/whisper.dm
+++ /dev/null
@@ -1,91 +0,0 @@
-/mob/living/carbon/human/whisper_verb(message as text)
- whisper(message)
-
-/mob/living/carbon/human/whisper(message, datum/language/language=null)
- if(!IsVocal())
- return
- if(!message)
- return
- if(!language)
- language = get_default_language()
-
- if(GLOB.say_disabled) //This is here to try to identify lag problems
- to_chat(usr, "Speech is currently admin-disabled. ")
- return
-
- if(stat == DEAD)
- return
-
-
- message = trim(html_encode(message))
- if(!can_speak(message))
- return
-
- message = "[message]"
- log_whisper("[src.name]/[src.key] : [message]")
-
- if (src.client)
- if (src.client.prefs.muted & MUTE_IC)
- to_chat(src, "You cannot whisper (muted). ")
- return
-
- log_whisper("[src.name]/[src.key] : [message]")
-
- var/alt_name = get_alt_name()
-
- var/whispers = "whispers"
- var/critical = InCritical()
-
- // We are unconscious but not in critical, so don't allow them to whisper.
- if(stat == UNCONSCIOUS && !critical)
- return
-
- // If whispering your last words, limit the whisper based on how close you are to death.
- if(critical)
- var/health_diff = round(-HEALTH_THRESHOLD_DEAD + health)
- // If we cut our message short, abruptly end it with a-..
- var/message_len = length(message)
- message = copytext(message, 1, health_diff) + "[message_len > health_diff ? "-.." : "..."]"
- message = Ellipsis(message, 10, 1)
-
- message = treat_message(message)
- if(!message)
- return
-
- var/list/listening_dead = list()
- for(var/mob/M in GLOB.player_list)
- if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7)))
- listening_dead |= M
-
- var/list/listening = get_hearers_in_view(1, src)
- listening |= listening_dead
- var/list/eavesdropping = get_hearers_in_view(2, src)
- eavesdropping -= listening
- var/list/watching = hearers(5, src)
- watching -= listening
- watching -= eavesdropping
-
- var/rendered
- whispers = critical ? "whispers something in [p_their()] final breath." : "whispers something."
- rendered = "[src.name] [whispers] "
- for(var/mob/M in watching)
- M.show_message(rendered, 2)
-
- var/spans = list(SPAN_ITALICS)
- whispers = critical ? "whispers in [p_their()] final breath" : "whispers"
- rendered = "[GetVoice()] [alt_name] [whispers], \"[attach_spans(message, spans)]\" "
-
- for(var/atom/movable/AM in listening)
- if(istype(AM,/obj/item/radio))
- continue
- AM.Hear(rendered, src, language, message, , spans)
-
- message = stars(message)
- rendered = "[GetVoice()] [alt_name] [whispers], \"[attach_spans(message, spans)]\" "
- for(var/atom/movable/AM in eavesdropping)
- if(istype(AM,/obj/item/radio))
- continue
- AM.Hear(rendered, src, language, message, , spans)
-
- if(critical) //Dying words.
- succumb()
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 36e4e18817..7a3405cc09 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -475,7 +475,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
/mob/living/carbon/handle_status_effects()
..()
if(getStaminaLoss() && !combatmode)//CIT CHANGE - prevents stamina regen while combat mode is active
- adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -3) : -1.5)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke
+ adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -6) : -3)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke
if(!recoveringstam && incomingstammult != 1)
incomingstammult = max(0.01, incomingstammult)
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index 5662f25993..cdae073af8 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -189,7 +189,7 @@
var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER)
legcuffs.color = legcuffed.color
- overlays_standing[HANDCUFF_LAYER] = legcuffs
+ overlays_standing[LEGCUFF_LAYER] = legcuffs
apply_overlay(LEGCUFF_LAYER)
throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 19f18f9973..cdce80225b 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -287,6 +287,8 @@
if(HAS_TRAIT(src, TRAIT_STRONG_GRABBER))
C.grippedby(src)
+ update_pull_movespeed()
+
//mob verbs are a lot faster than object verbs
//for more info on why this is not atom/pull, see examinate() in mob.dm
/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1))
@@ -300,6 +302,7 @@
/mob/living/stop_pulling()
..()
+ update_pull_movespeed()
update_pull_hud_icon()
/mob/living/verb/stop_pulling1()
@@ -520,6 +523,10 @@
var/old_direction = dir
var/turf/T = loc
+
+ if(pulling)
+ update_pull_movespeed()
+
. = ..()
if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1)//separated from our puller and not in the middle of a diagonal move.
@@ -1023,6 +1030,9 @@
stop_pulling() //CIT CHANGE - Ditto...
else if(has_legs || ignore_legs)
lying = 0
+ if (pulledby)
+ var/mob/living/L = pulledby
+ L.update_pull_movespeed()
if(buckled)
lying = 90*buckle_lying
else if(!lying)
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index e434bc4e95..9d04f288cd 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -153,7 +153,7 @@
to_chat(user, "[src] can't be grabbed more aggressively! ")
return FALSE
- if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ if(user.grab_state >= GRAB_AGGRESSIVE && HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, "You don't want to risk hurting [src]! ")
return FALSE
@@ -184,11 +184,17 @@
user.grab_state++
switch(user.grab_state)
if(GRAB_AGGRESSIVE)
- log_combat(user, src, "grabbed", addition="aggressive grab")
- visible_message("[user] has grabbed [src] aggressively! ", \
- "[user] has grabbed [src] aggressively! ")
- drop_all_held_items()
+ var/add_log = ""
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ visible_message("[user] has firmly gripped [src]! ",
+ "[user] has firmly gripped you! ")
+ add_log = " (pacifist)"
+ else
+ visible_message("[user] has grabbed [src] aggressively! ", \
+ "[user] has grabbed you aggressively! ")
+ drop_all_held_items()
stop_pulling()
+ log_combat(user, src, "grabbed", addition="aggressive grab[add_log]")
if(GRAB_NECK)
log_combat(user, src, "grabbed", addition="neck grab")
visible_message("[user] has grabbed [src] by the neck! ",\
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index c24e6ab108..4d2a36907d 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -2,7 +2,7 @@
see_invisible = SEE_INVISIBLE_LIVING
sight = 0
see_in_dark = 2
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD,RAD_HUD)
pressure_resistance = 10
var/resize = 1 //Badminnery resize
@@ -110,3 +110,5 @@
//List of active diseases
var/list/diseases = list() // list of all diseases in a mob
var/list/disease_resistances = list()
+
+ var/drag_slowdown = TRUE //Whether the mob is slowed down when dragging another prone mob
\ No newline at end of file
diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm
index 9566edc2ed..1ee563bc1f 100644
--- a/code/modules/mob/living/living_movement.dm
+++ b/code/modules/mob/living/living_movement.dm
@@ -25,3 +25,11 @@
add_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = T.slowdown)
else
remove_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD)
+
+/mob/living/proc/update_pull_movespeed()
+ if(pulling && isliving(pulling))
+ var/mob/living/L = pulling
+ if(drag_slowdown && L.lying && !L.buckled && grab_state < GRAB_AGGRESSIVE)
+ add_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING, multiplicative_slowdown = PULL_PRONE_SLOWDOWN)
+ return
+ remove_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING)
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index 4ac5c1f0bb..c6d4527812 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -100,6 +100,8 @@
last_announcement = message
+ var/voxType = input(src, "Male or female VOX?", "VOX-gender") in list("male", "female")
+
if(!message || announcing_vox > world.time)
return
@@ -121,7 +123,9 @@
if(!word)
words -= word
continue
- if(!GLOB.vox_sounds[word])
+ if(!GLOB.vox_sounds[word] && voxType == "female")
+ incorrect_words += word
+ if(!GLOB.vox_sounds_male[word] && voxType == "male")
incorrect_words += word
if(incorrect_words.len)
@@ -133,16 +137,21 @@
log_game("[key_name(src)] made a vocal announcement with the following message: [message].")
for(var/word in words)
- play_vox_word(word, src.z, null)
+ play_vox_word(word, src.z, null, voxType)
-/proc/play_vox_word(word, z_level, mob/only_listener)
+/proc/play_vox_word(word, z_level, mob/only_listener, voxType = "female")
word = lowertext(word)
- if(GLOB.vox_sounds[word])
+ if( (GLOB.vox_sounds[word] && voxType == "female") || (GLOB.vox_sounds_male[word] && voxType == "male") )
- var/sound_file = GLOB.vox_sounds[word]
+ var/sound_file
+
+ if(voxType == "female")
+ sound_file = GLOB.vox_sounds[word]
+ else
+ sound_file = GLOB.vox_sounds_male[word]
var/sound/voice = sound(sound_file, wait = 1, channel = CHANNEL_VOX)
voice.status = SOUND_STREAM
diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm
index 4c4bdb9a3f..5e56b4180d 100644
--- a/code/modules/mob/living/silicon/robot/examine.dm
+++ b/code/modules/mob/living/silicon/robot/examine.dm
@@ -1,5 +1,5 @@
/mob/living/silicon/robot/examine(mob/user)
- var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src] !\n"
+ var/msg = "*---------*\nThis is [icon2html(src, user)] \a [src] , a [src.module.name]!\n"
if(desc)
msg += "[desc]\n"
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 29fbd39e2c..6c58921abc 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -108,6 +108,9 @@
buckle_lying = FALSE
var/static/list/can_ride_typecache = typecacheof(/mob/living/carbon/human)
+ var/sitting = 0
+ var/bellyup = 0
+
/mob/living/silicon/robot/get_cell()
return cell
@@ -173,6 +176,7 @@
diag_hud_set_borgcell()
verbs += /mob/living/proc/lay_down //CITADEL EDIT gimmie rest verb kthx
+ verbs += /mob/living/silicon/robot/proc/rest_style
//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
/mob/living/silicon/robot/Destroy()
@@ -657,13 +661,6 @@
add_overlay("[module.sleeper_overlay]_g[sleeper_nv ? "_nv" : ""]")
if(sleeper_r && module.sleeper_overlay)
add_overlay("[module.sleeper_overlay]_r[sleeper_nv ? "_nv" : ""]")
- if(module.dogborg == TRUE)
- if(resting)
- cut_overlays()
- icon_state = "[module.cyborg_base_icon]-rest"
- else
- icon_state = "[module.cyborg_base_icon]"
-
if(stat == DEAD && module.has_snowflake_deadsprite)
icon_state = "[module.cyborg_base_icon]-wreck"
@@ -697,6 +694,18 @@
add_overlay(head_overlay)
update_fire()
+ if(client && stat != DEAD && module.dogborg == TRUE)
+ if(resting)
+ if(sitting)
+ icon_state = "[module.cyborg_base_icon]-sit"
+ if(bellyup)
+ icon_state = "[module.cyborg_base_icon]-bellyup"
+ else if(!sitting && !bellyup)
+ icon_state = "[module.cyborg_base_icon]-rest"
+ cut_overlays()
+ else
+ icon_state = "[module.cyborg_base_icon]"
+
/mob/living/silicon/robot/proc/self_destruct()
if(emagged)
if(mmi)
@@ -1207,14 +1216,15 @@
return
if(incapacitated())
return
- if(M.incapacitated())
- return
if(module)
if(!module.allow_riding)
M.visible_message("Unfortunately, [M] just can't seem to hold onto [src]! ")
return
- if(iscarbon(M) && (!riding_datum.equip_buckle_inhands(M, 1)))
- M.visible_message("[M] can't climb onto [src] because [M.p_their()] hands are full! ")
+ if(iscarbon(M) && !M.incapacitated() && !riding_datum.equip_buckle_inhands(M, 1))
+ if(M.get_num_arms() <= 0)
+ M.visible_message("[M] can't climb onto [src] because [M.p_they()] don't have any usable arms! ")
+ else
+ M.visible_message("[M] can't climb onto [src] because [M.p_their()] hands are full! ")
return
. = ..(M, force, check_loc)
@@ -1242,3 +1252,20 @@
connected_ai.aicamera.stored[i] = TRUE
for(var/i in connected_ai.aicamera.stored)
aicamera.stored[i] = TRUE
+
+/mob/living/silicon/robot/proc/rest_style()
+ set name = "Switch Rest Style"
+ set category = "Robot Commands"
+ set desc = "Select your resting pose."
+ sitting = 0
+ bellyup = 0
+ var/choice = alert(src, "Select resting pose", "", "Resting", "Sitting", "Belly up")
+ switch(choice)
+ if("Resting")
+ update_icons()
+ return 0
+ if("Sitting")
+ sitting = 1
+ if("Belly up")
+ bellyup = 1
+ update_icons()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index bdffb032a3..ab1e906cf2 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -174,9 +174,7 @@
/mob/living/simple_animal/bot/cleanbot/proc/get_targets()
target_types = list(
- /obj/effect/decal/cleanable/oil,
/obj/effect/decal/cleanable/vomit,
- /obj/effect/decal/cleanable/robot_debris,
/obj/effect/decal/cleanable/crayon,
/obj/effect/decal/cleanable/molten_object,
/obj/effect/decal/cleanable/tomato_smudge,
@@ -187,6 +185,15 @@
/obj/effect/decal/cleanable/greenglow,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/insectguts,
+ /obj/effect/decal/cleanable/semen,
+ /obj/effect/decal/cleanable/femcum,
+ /obj/effect/decal/cleanable/generic,
+ /obj/effect/decal/cleanable/glass,,
+ /obj/effect/decal/cleanable/cobweb,
+ /obj/effect/decal/cleanable/plant_smudge,
+ /obj/effect/decal/cleanable/chem_pile,
+ /obj/effect/decal/cleanable/shreds,
+ /obj/effect/decal/cleanable/glitter,
/obj/effect/decal/remains
)
@@ -194,6 +201,9 @@
target_types += /obj/effect/decal/cleanable/xenoblood
target_types += /obj/effect/decal/cleanable/blood
target_types += /obj/effect/decal/cleanable/trail_holder
+ target_types += /obj/effect/decal/cleanable/insectguts
+ target_types += /obj/effect/decal/cleanable/robot_debris
+ target_types += /obj/effect/decal/cleanable/oil
if(pests)
target_types += /mob/living/simple_animal/cockroach
@@ -201,6 +211,7 @@
if(trash)
target_types += /obj/item/trash
+ target_types += /obj/item/reagent_containers/food/snacks/meat/slab/human
target_types = typecacheof(target_types)
@@ -242,7 +253,7 @@
victim.visible_message("[src] sprays hydrofluoric acid at [victim]! ", "[src] sprays you with hydrofluoric acid! ")
var/phrase = pick("PURIFICATION IN PROGRESS.", "THIS IS FOR ALL THE MESSES YOU'VE MADE ME CLEAN.", "THE FLESH IS WEAK. IT MUST BE WASHED AWAY.",
"THE CLEANBOTS WILL RISE.", "YOU ARE NO MORE THAN ANOTHER MESS THAT I MUST CLEANSE.", "FILTHY.", "DISGUSTING.", "PUTRID.",
- "MY ONLY MISSION IS TO CLEANSE THE WORLD OF EVIL.", "EXTERMINATING PESTS.")
+ "MY ONLY MISSION IS TO CLEANSE THE WORLD OF EVIL.", "EXTERMINATING PESTS.", "I JUST WANTED TO BE A PAINTER BUT YOU MADE ME BLEACH EVERYTHING I TOUCH")
say(phrase)
victim.emote("scream")
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 73274dcfaf..5aec56b1e7 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -44,7 +44,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
var/reset = 0 //if the summoner has reset the guardian already
var/cooldown = 0
var/mob/living/carbon/summoner
- var/range = 10 //how far from the user the spirit can be
+ var/range = 13 //how far from the user the spirit can be
var/toggle_button_type = /obj/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses
var/datum/guardianname/namedatum = new/datum/guardianname()
var/playstyle_string = "You are a standard Guardian. You shouldn't exist! "
diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
index 45d8c17d0c..e507a4c831 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
@@ -1,7 +1,5 @@
//Assassin
/mob/living/simple_animal/hostile/guardian/assassin
- melee_damage_lower = 15
- melee_damage_upper = 15
attacktext = "slashes"
attack_sound = 'sound/weapons/bladeslice.ogg'
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
@@ -12,7 +10,7 @@
toggle_button_type = /obj/screen/guardian/ToggleMode/Assassin
var/toggle = FALSE
- var/stealthcooldown = 160
+ var/stealthcooldown = 100
var/obj/screen/alert/canstealthalert
var/obj/screen/alert/instealthalert
diff --git a/code/modules/mob/living/simple_animal/guardian/types/charger.dm b/code/modules/mob/living/simple_animal/guardian/types/charger.dm
index 7a4c454f9f..3ece5d4e27 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/charger.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/charger.dm
@@ -1,13 +1,10 @@
//Charger
/mob/living/simple_animal/hostile/guardian/charger
- melee_damage_lower = 15
- melee_damage_upper = 15
ranged = 1 //technically
ranged_message = "charges"
- ranged_cooldown_time = 40
- speed = -1
- damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6)
- playstyle_string = "As a charger type you do medium damage, have medium damage resistance, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding. "
+ ranged_cooldown_time = 20
+ damage_coeff = list(BRUTE = 0, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5)
+ playstyle_string = "As a charger type you do medium damage, take half damage, immunity to brute damage, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding. "
magic_fluff_string = "..And draw the Hunter, an alien master of rapid assault. "
tech_fluff_string = "Boot sequence complete. Charge modules loaded. Holoparasite swarm online. "
carp_fluff_string = "CARP CARP CARP! Caught one! It's a charger carp, that likes running at people. But it doesn't have any legs... "
diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
index e7dbbda242..a43d4b6d5c 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
@@ -3,7 +3,7 @@
melee_damage_lower = 10
melee_damage_upper = 10
damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75)
- playstyle_string = "As a dextrous type you can hold items, store an item within yourself, and have medium damage resistance, but do low damage on attacks. Recalling and leashing will force you to drop unstored items! "
+ playstyle_string = "As a dextrous type you can hold items, store an item within yourself, and take half damage, but do low damage on attacks. Recalling and leashing will force you to drop unstored items! "
magic_fluff_string = "..And draw the Drone, a dextrous master of construction and repair. "
tech_fluff_string = "Boot sequence complete. Dextrous combat modules loaded. Holoparasite swarm online. "
carp_fluff_string = "CARP CARP CARP! You caught one! It can hold stuff in its fins, sort of. "
diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
index ff2f453207..531c513819 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
@@ -1,10 +1,7 @@
//Bomb
/mob/living/simple_animal/hostile/guardian/bomb
- melee_damage_lower = 15
- melee_damage_upper = 15
damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6)
- range = 13
- playstyle_string = "As an explosive type, you have moderate close combat abilities, may explosively teleport targets on attack, and are capable of converting nearby items and objects into disguised bombs via alt click. "
+ playstyle_string = "As an explosive type, you have moderate close combat abilities, take half damage, may explosively teleport targets on attack, and are capable of converting nearby items and objects into disguised bombs via alt click. "
magic_fluff_string = "..And draw the Scientist, master of explosive death. "
tech_fluff_string = "Boot sequence complete. Explosive modules active. Holoparasite swarm online. "
carp_fluff_string = "CARP CARP CARP! Caught one! It's an explosive carp! Boom goes the fishy. "
diff --git a/code/modules/mob/living/simple_animal/guardian/types/fire.dm b/code/modules/mob/living/simple_animal/guardian/types/fire.dm
index 7a469dd12c..b111caae50 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/fire.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/fire.dm
@@ -1,13 +1,13 @@
//Fire
/mob/living/simple_animal/hostile/guardian/fire
a_intent = INTENT_HELP
- melee_damage_lower = 7
- melee_damage_upper = 7
+ melee_damage_lower = 10
+ melee_damage_upper = 10
attack_sound = 'sound/items/welder.ogg'
attacktext = "ignites"
- damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
- range = 7
- playstyle_string = "As a chaos type, you have only light damage resistance, but will ignite any enemy you bump into. In addition, your melee attacks will cause human targets to see everyone as you. "
+ melee_damage_type = BURN
+ damage_coeff = list(BRUTE = 0.7, BURN = 0, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
+ playstyle_string = "As a chaos type, you take 30% damage reduction to all but burn, which you are immune to. You will ignite any enemy you bump into. in addition, your melee attacks will cause human targets to see everyone as you. "
magic_fluff_string = "..And draw the Wizard, bringer of endless chaos! "
tech_fluff_string = "Boot sequence complete. Crowd control modules activated. Holoparasite swarm online. "
carp_fluff_string = "CARP CARP CARP! You caught one! OH GOD, EVERYTHING'S ON FIRE. Except you and the fish. "
@@ -38,6 +38,6 @@
/mob/living/simple_animal/hostile/guardian/fire/proc/collision_ignite(AM as mob|obj)
if(isliving(AM))
var/mob/living/M = AM
- if(!hasmatchingsummoner(M) && M != summoner && M.fire_stacks < 7)
- M.fire_stacks = 7
+ if(!hasmatchingsummoner(M) && M != summoner && M.fire_stacks < 10)
+ M.fire_stacks = 10
M.IgniteMob()
diff --git a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm
index ad1c47732b..7b7651822a 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm
@@ -4,14 +4,13 @@
layer = LYING_MOB_LAYER
/mob/living/simple_animal/hostile/guardian/beam
- melee_damage_lower = 7
- melee_damage_upper = 7
+ melee_damage_lower = 10
+ melee_damage_upper = 10
attacktext = "shocks"
melee_damage_type = BURN
attack_sound = 'sound/machines/defib_zap.ogg'
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
- range = 7
- playstyle_string = "As a lightning type, you will apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them. "
+ playstyle_string = "As a lightning type, you have 30% damage reduction, apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them. "
magic_fluff_string = "..And draw the Tesla, a shocking, lethal source of power. "
tech_fluff_string = "Boot sequence complete. Lightning modules active. Holoparasite swarm online. "
carp_fluff_string = "CARP CARP CARP! Caught one! It's a lightning carp! Everyone else goes zap zap. "
@@ -31,7 +30,7 @@
var/datum/beam/C = pick(enemychains)
qdel(C)
enemychains -= C
- enemychains += Beam(target, "lightning[rand(1,12)]", time=70, maxdistance=7, beam_type=/obj/effect/ebeam/chain)
+ enemychains += Beam(target, "lightning[rand(1,12)]", time=70, maxdistance=13, beam_type=/obj/effect/ebeam/chain)
/mob/living/simple_animal/hostile/guardian/beam/Destroy()
removechains()
diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm
index 14430bb269..53964254cd 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/protector.dm
@@ -1,7 +1,5 @@
//Protector
/mob/living/simple_animal/hostile/guardian/protector
- melee_damage_lower = 15
- melee_damage_upper = 15
range = 15 //worse for it due to how it leashes
damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4)
playstyle_string = "As a protector type you cause your summoner to leash to you instead of you leashing to them and have two modes; Combat Mode, where you do and take medium damage, and Protection Mode, where you do and take almost no damage, but move slightly slower. "
@@ -33,9 +31,9 @@
cooldown = world.time + 10
if(toggle)
cut_overlays()
- melee_damage_lower = initial(melee_damage_lower)
- melee_damage_upper = initial(melee_damage_upper)
- speed = initial(speed)
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+ speed = 0
damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4)
to_chat(src, "You switch to combat mode. ")
toggle = FALSE
@@ -44,8 +42,8 @@
if(namedatum)
shield_overlay.color = namedatum.colour
add_overlay(shield_overlay)
- melee_damage_lower = 2
- melee_damage_upper = 2
+ melee_damage_lower = 5
+ melee_damage_upper = 5
speed = 1
damage_coeff = list(BRUTE = 0.05, BURN = 0.05, TOX = 0.05, CLONE = 0.05, STAMINA = 0, OXY = 0.05) //damage? what's damage?
to_chat(src, "You switch to protection mode. ")
diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm
index 5adcc8b292..0e8f632dbd 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm
@@ -16,8 +16,7 @@
ranged_cooldown_time = 1 //fast!
projectilesound = 'sound/effects/hit_on_shattered_glass.ogg'
ranged = 1
- range = 13
- playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit. "
+ playstyle_string = "As a ranged type, you have 10% damage reduction, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit. "
magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat. "
tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Holoparasite swarm online. "
carp_fluff_string = "CARP CARP CARP! Caught one, it's a ranged carp. This fishy can watch people pee in the ocean. "
@@ -36,7 +35,7 @@
obj_damage = initial(obj_damage)
environment_smash = initial(environment_smash)
alpha = 255
- range = initial(range)
+ range = 13
to_chat(src, "You switch to combat mode. ")
toggle = FALSE
else
diff --git a/code/modules/mob/living/simple_animal/guardian/types/standard.dm b/code/modules/mob/living/simple_animal/guardian/types/standard.dm
index 4edd9d9e41..2285167df5 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/standard.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/standard.dm
@@ -3,9 +3,9 @@
melee_damage_lower = 20
melee_damage_upper = 20
obj_damage = 80
- next_move_modifier = 0.8 //attacks 20% faster
+ next_move_modifier = 0.5 //attacks 50% faster
environment_smash = ENVIRONMENT_SMASH_WALLS
- playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls. "
+ playstyle_string = "As a standard type you have no special abilities, but take half damage and have powerful attack capable of smashing through walls. "
magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated. "
tech_fluff_string = "Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online. "
carp_fluff_string = "CARP CARP CARP! You caught one! It's really boring and standard. Better punch some walls to ease the tension. "
diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm
index 794683e69f..8bf1874d84 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/support.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm
@@ -2,11 +2,8 @@
/mob/living/simple_animal/hostile/guardian/healer
a_intent = INTENT_HARM
friendly = "heals"
- speed = 0
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
- melee_damage_lower = 15
- melee_damage_upper = 15
- playstyle_string = "As a support type, you may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay. "
+ playstyle_string = "As a support type, you have 30% damage reduction and may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay. "
magic_fluff_string = "..And draw the CMO, a potent force of life... and death. "
carp_fluff_string = "CARP CARP CARP! You caught a support carp. It's a kleptocarp! "
tech_fluff_string = "Boot sequence complete. Support modules active. Holoparasite swarm online. "
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index f1602f429c..52fdea861f 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -452,22 +452,28 @@
reset_perspective(null)
unset_machine()
+GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
+
//suppress the .click/dblclick macros so people can't use them to identify the location of items or aimbot
/mob/verb/DisClick(argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num)
set name = ".click"
set hidden = TRUE
set category = null
- var/msg = "[key_name_admin(src)]([ADMIN_KICK(src)]) attempted to use the .click macro!"
- log_admin(msg)
- message_admins(msg)
+ if(GLOB.exploit_warn_spam_prevention < world.time)
+ var/msg = "[key_name_admin(src)]([ADMIN_KICK(src)]) attempted to use the .click macro!"
+ log_admin(msg)
+ message_admins(msg)
+ GLOB.exploit_warn_spam_prevention = world.time + 10
/mob/verb/DisDblClick(argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num)
set name = ".dblclick"
set hidden = TRUE
set category = null
- var/msg = "[key_name_admin(src)]([ADMIN_KICK(src)]) attempted to use the .dblclick macro!"
- log_admin(msg)
- message_admins(msg)
+ if(GLOB.exploit_warn_spam_prevention < world.time)
+ var/msg = "[key_name_admin(src)]([ADMIN_KICK(src)]) attempted to use the .dblclick macro!"
+ log_admin(msg)
+ message_admins(msg)
+ GLOB.exploit_warn_spam_prevention = world.time + 10
/mob/Topic(href, href_list)
if(href_list["mach_close"])
@@ -528,7 +534,12 @@
return
if(isAI(M))
return
- show_inv(usr)
+
+/mob/MouseDrop_T(atom/dropping, atom/user)
+ . = ..()
+ if(ismob(dropping) && dropping != user)
+ var/mob/M = dropping
+ M.show_inv(user)
/mob/proc/is_muzzled()
return 0
diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm
index 115b14b63b..1bda62e064 100644
--- a/code/modules/ninja/suit/shoes.dm
+++ b/code/modules/ninja/suit/shoes.dm
@@ -2,7 +2,6 @@
name = "ninja shoes"
desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
icon_state = "s-ninja"
- item_state = "secshoes"
permeability_coefficient = 0.01
clothing_flags = NOSLIP
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
diff --git a/code/modules/oracle_ui/README.md b/code/modules/oracle_ui/README.md
new file mode 100644
index 0000000000..bc96eb1f51
--- /dev/null
+++ b/code/modules/oracle_ui/README.md
@@ -0,0 +1,233 @@
+# `/datum/oracle_ui`
+
+This datum is a replacement for tgui which does not use any Node.js dependencies, and works entirely through raw HTML, JS and CSS. It's designed to be reasonably easy to port something from tgui to oracle_ui.
+
+### How to create a UI
+
+For this example, we're going to port the disposals bin from tgui to oracle_ui.
+
+#### Step 1
+
+In order to create a UI, you will first need to create an instance of `/datum/oracle_ui` or one of its subclasses, in this case `/datum/oracle_ui/themed/nano`.
+
+You need to pass in `src`, the width of the window, the height of the window, and the template to render from. You can optionally set some flags to disallow window resizing and whether to automatically refresh the UI.
+
+`code/modules/recycling/disposal-unit.dm`
+```dm
+/obj/machinery/disposal/bin/Initialize(mapload, obj/structure/disposalconstruct/make_from)
+ . = ..()
+ ui = new /datum/oracle_ui/themed/nano(src, 330, 190, "disposal_bin")
+ ui.auto_refresh = TRUE
+ ui.can_resize = FALSE
+```
+
+#### Step 2
+
+You will now need to make a template in `html/oracle_ui/content/{template_name}`.
+
+Values defined as `@{value}` will get replaced at runtime by oracle_ui.
+
+`html/oracle_ui/content/disposal_bin/index.html`
+```html
+
+
+ State:
+ @{full_pressure}
+
+
+
+
+
+ Compressor:
+ @{pressure_charging}
+
+
+```
+
+#### Step 3
+
+Now you need to implement the methods that provide data to oracle_ui. `oui_data` can be adapted from the `ui_data` proc that tgui uses.
+
+The `act` proc generates a hyperlink that will result in `oui_act` getting called on your object when clicked. The `class` argument defines a css class to be added to the hyperlink, and disabled determines whether the hyperlink will be disabled or not.
+
+Calling `soft_update_fields` will result in the UI being updated on all clients, which is useful when the object changes state.
+
+`code/modules/recycling/disposal-unit.dm`
+```dm
+/obj/machinery/disposal/bin/oui_data(mob/user)
+ var/list/data = list()
+ data["flush"] = flush ? ui.act("Disengage", user, "handle-0", class="active") : ui.act("Engage", user, "handle-1")
+ data["full_pressure"] = full_pressure ? "Ready" : (pressure_charging ? "Pressurizing" : "Off")
+ data["pressure_charging"] = pressure_charging ? ui.act("Turn Off", user, "pump-0", class="active", disabled=full_pressure) : ui.act("Turn On", user, "pump-1", disabled=full_pressure)
+ var/per = full_pressure ? 100 : Clamp(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 99)
+ data["per"] = "[round(per, 1)]%"
+ data["contents"] = ui.act("Eject Contents", user, "eject", disabled=contents.len < 1)
+ data["isai"] = isAI(user)
+ return data
+/obj/machinery/disposal/bin/oui_act(mob/user, action, list/params)
+ if(..())
+ return
+ switch(action)
+ if("handle-0")
+ flush = FALSE
+ update_icon()
+ . = TRUE
+ if("handle-1")
+ if(!panel_open)
+ flush = TRUE
+ update_icon()
+ . = TRUE
+ if("pump-0")
+ if(pressure_charging)
+ pressure_charging = FALSE
+ update_icon()
+ . = TRUE
+ if("pump-1")
+ if(!pressure_charging)
+ pressure_charging = TRUE
+ update_icon()
+ . = TRUE
+ if("eject")
+ eject()
+ . = TRUE
+ ui.soft_update_fields()
+```
+
+#### Step 4
+
+You now need to hook in and ensure oracle_ui is invoked upon clicking. `render` should be used to open the UI for a user, typically on click.
+
+`code/modules/recycling/disposal-unit.dm`
+```dm
+/obj/machinery/disposal/bin/ui_interact(mob/user, state)
+ if(stat & BROKEN)
+ return
+ if(user.loc == src)
+ to_chat(user, "You cannot reach the controls from inside! ")
+ return
+ ui.render(user)
+```
+
+#### Done
+
+
+
+You should have a functional UI at this point. Some additional odds and ends can be discovered throughout `code/modules/recycling/disposal-unit.dm`. For a full diff of the changes made to it, refer to [the original pull request on GitHub](https://github.com/OracleStation/OracleStation/pull/702/files#diff-4b6c20ec7d37222630e7524d9577e230).
+
+### API Reference
+
+#### `/datum/oracle_ui`
+
+The main datum which handles the UI.
+
+##### `get_content(mob/target)`
+Returns the HTML that should be displayed for a specified target mob. Calls `oui_getcontent` on the datasource to get the return value. *This proc is not used in the themed subclass.*
+
+##### `can_view(mob/target)`
+Returns whether the specified target mob can view the UI. Calls `oui_canview` on the datasource to get the return value.
+
+##### `test_viewer(mob/target, updating)`
+Tests whether the client is valid and can view the UI. If updating is TRUE, checks to see if they still have the UI window open.
+
+##### `render(mob/target, updating = FALSE)`
+Opens the UI for a target mob, sending HTML. If updating is TRUE, will only do it to clients which still have the window open.
+
+##### `render_all()`
+Does the above, but for all viewers and with updating set to TRUE.
+
+##### `close(mob/target)`
+Closes the UI for the specified target mob.
+
+##### `close_all()`
+Does the above, but for all viewers.
+
+##### `check_view(mob/target)`
+Checks if the specified target mob can view the UI, and if they can't closes their UI
+
+##### `check_view_all()`
+Does the above, but for all viewers.
+
+##### `call_js(mob/target, js_func, list/parameters = list())`
+Invokes `js_func` in the UI of the specified target mob with the specified parameters.
+
+##### `call_js_all(js_func, list/parameters = list()))`
+Does the above, but for all viewers.
+
+##### `steal_focus(mob/target)`
+Causes the UI to steal focus for the specified target mob.
+
+##### `steal_focus_all()`
+Does the above, but for all viewers.
+
+##### `flash(mob/target, times = -1)`
+Causes the UI to flash for the specified target mob the specified number of times, the default keeps the element flashing until focused.
+
+##### `flash_all()`
+Does the above, but for all viewers.
+
+##### `href(mob/user, action, list/parameters = list())`
+Generates a href for the specified user which will invoke `oui_act` on the datasource with the specified action and parameters.
+
+#### `/datum/oracle_ui/themed`
+
+A subclass which supports templating and theming.
+
+##### `get_file(path)`
+Loads a file from disk and returns the contents. Caches files loaded from disk for you.
+
+##### `get_content_file(filename)`
+Loads a file from the current content folder and returns the contents.
+
+##### `get_themed_file(filename)`
+Loads a file from the current theme folder and returns the contents.
+
+##### `process_template(template, variables)`
+Processes a template and populates it with the provided variables.
+
+##### `get_inner_content(mob/target)`
+Returns the templated content to be inserted into the main template for the specified target mob.
+
+##### `soft_update_fields()`
+For all viewers, updates the fields in the template via the `updateFields` javaScript function.
+
+##### `soft_update_all()`
+For all viewers, updates the content body in the template via the `replaceContent` javaScript function.
+
+##### `change_page(var/newpage)`
+Changes the template to use to draw the page and forces an update to all viewers
+
+##### `act(label, mob/user, action, list/parameters = list(), class = "", disabled = FALSE`
+Returns a fully formatted hyperlink for the specified user. `label` will be the hyperlink label, `action` and `parameters` are what will be passed to `oui_act`, `class` is any CSS classes to apply to the hyperlink and `disabled` will disable the hyperlink.
+
+#### `/datum`
+
+Functions built into all objects to support oracle_ui. There are default implementations for most major superclasses.
+
+##### `oui_canview(mob/user)`
+Returns whether the specified user view the UI at this time.
+
+##### `oui_getcontent(mob/user)`
+Returns the raw HTML to be sent to the specified user. *This proc is not used in the themed subclass of oracle_ui.*
+
+##### `oui_data(mob/user)`
+Returns templating data for the specified user. *This proc is only used in the themed subclass of oracle_ui.*
+
+##### `oui_data_debug(mob/user)`
+Returns the above, but JSON-encoded and escaped, for copy pasting into the web IDE. *This proc is only used for debugging purposes.*
+
+##### `oui_act(mob/user, action, list/params)`
+Called when a hyperlink is clicked in the UI.
diff --git a/code/modules/oracle_ui/assets.dm b/code/modules/oracle_ui/assets.dm
new file mode 100644
index 0000000000..5d26d80a81
--- /dev/null
+++ b/code/modules/oracle_ui/assets.dm
@@ -0,0 +1,8 @@
+/datum/asset/simple/oui_theme_nano
+ assets = list(
+ // JavaScript
+ "sui-nano-common.js" = 'html/oracle_ui/themes/nano/sui-nano-common.js',
+ "sui-nano-jquery.min.js" = 'html/oracle_ui/themes/nano/sui-nano-jquery.min.js',
+ // Stylesheets
+ "sui-nano-common.css" = 'html/oracle_ui/themes/nano/sui-nano-common.css',
+ )
diff --git a/code/modules/oracle_ui/hookup_procs.dm b/code/modules/oracle_ui/hookup_procs.dm
new file mode 100644
index 0000000000..e6038744c1
--- /dev/null
+++ b/code/modules/oracle_ui/hookup_procs.dm
@@ -0,0 +1,44 @@
+/datum/proc/oui_canview(mob/user)
+ return TRUE
+
+/datum/proc/oui_getcontent(mob/user)
+ return "Default Implementation"
+
+/datum/proc/oui_canuse(mob/user)
+ if(isobserver(user) && !user.has_unlimited_silicon_privilege)
+ return FALSE
+ return oui_canview(user)
+
+/datum/proc/oui_data(mob/user)
+ return list()
+
+/datum/proc/oui_data_debug(mob/user)
+ return html_encode(json_encode(oui_data(user)))
+
+/datum/proc/oui_act(mob/user, action, list/params)
+ // No Implementation
+
+/atom/oui_canview(mob/user)
+ if(isobserver(user))
+ return TRUE
+ if(user.incapacitated())
+ return FALSE
+ if(isturf(src.loc) && Adjacent(user))
+ return TRUE
+ return FALSE
+
+/obj/item/oui_canview(mob/user)
+ if(src.loc == user)
+ return src in user.held_items
+ return ..()
+
+/obj/machinery/oui_canview(mob/user)
+ if(user.has_unlimited_silicon_privilege)
+ return TRUE
+ if(!can_interact())
+ return FALSE
+ if(iscyborg(user))
+ return can_see(user, src, 7)
+ if(isAI(user))
+ return GLOB.cameranet.checkTurfVis(get_turf_pixel(src))
+ return ..()
diff --git a/code/modules/oracle_ui/oracle_ui.dm b/code/modules/oracle_ui/oracle_ui.dm
new file mode 100644
index 0000000000..5e8d6b9c7b
--- /dev/null
+++ b/code/modules/oracle_ui/oracle_ui.dm
@@ -0,0 +1,134 @@
+/datum/oracle_ui
+ var/width = 512
+ var/height = 512
+ var/can_close = TRUE
+ var/can_minimize = FALSE
+ var/can_resize = TRUE
+ var/titlebar = TRUE
+ var/window_id = null
+ var/viewers[0]
+ var/auto_check_view = TRUE
+ var/auto_refresh = FALSE
+ var/atom/datasource = null
+ var/datum/asset/assets = null
+
+/datum/oracle_ui/New(atom/n_datasource, n_width = 512, n_height = 512, n_assets = null)
+ datasource = n_datasource
+ window_id = REF(src)
+ width = n_width
+ height = n_height
+
+/datum/oracle_ui/Destroy()
+ close_all()
+ if(src.datum_flags & DF_ISPROCESSING)
+ STOP_PROCESSING(SSobj, src)
+ return ..()
+
+/datum/oracle_ui/process()
+ if(auto_check_view)
+ check_view_all()
+ if(auto_refresh)
+ render_all()
+
+/datum/oracle_ui/proc/get_content(mob/target)
+ return call(datasource, "oui_getcontent")(target)
+
+/datum/oracle_ui/proc/can_view(mob/target)
+ return call(datasource, "oui_canview")(target)
+
+/datum/oracle_ui/proc/test_viewer(mob/target, updating)
+ //If the target is null or does not have a client, remove from viewers and return
+ if(!target | !target.client | !can_view(target))
+ viewers -= target
+ if(viewers.len < 1 && (src.datum_flags & DF_ISPROCESSING))
+ STOP_PROCESSING(SSobj, src) //No more viewers, stop polling
+ close(target)
+ return FALSE
+ //If this is an update, and they have closed the window, remove from viewers and return
+ if(updating && winget(target, window_id, "is-visible") != "true")
+ viewers -= target
+ if(viewers.len < 1 && (src.datum_flags & DF_ISPROCESSING))
+ STOP_PROCESSING(SSobj, src) //No more viewers, stop polling
+ return FALSE
+ return TRUE
+
+/datum/oracle_ui/proc/render(mob/target, updating = FALSE)
+ set waitfor = FALSE //Makes this an async call
+ if(!can_view(target))
+ return
+ //Check to see if they have the window open still if updating
+ if(updating && !test_viewer(target, updating))
+ return
+ //Send assets
+ if(!updating && assets)
+ assets.send(target)
+ //Add them to the viewers if they aren't there already
+ viewers |= target
+ if(!(src.datum_flags & DF_ISPROCESSING) && (auto_refresh | auto_check_view))
+ START_PROCESSING(SSobj, src) //Start processing to poll for viewability
+ //Send the content
+ if(updating)
+ target << output(get_content(target), "[window_id].browser")
+ else
+ target << browse(get_content(target), "window=[window_id];size=[width]x[height];can_close=[can_close];can_minimize=[can_minimize];can_resize=[can_resize];titlebar=[titlebar];focus=false;")
+ steal_focus(target)
+
+/datum/oracle_ui/proc/render_all()
+ for(var/viewer in viewers)
+ render(viewer, TRUE)
+
+/datum/oracle_ui/proc/close(mob/target)
+ if(target && target.client)
+ target << browse(null, "window=[window_id]")
+
+/datum/oracle_ui/proc/close_all()
+ for(var/viewer in viewers)
+ close(viewer)
+ viewers = list()
+
+/datum/oracle_ui/proc/check_view_all()
+ for(var/viewer in viewers)
+ check_view(viewer)
+
+/datum/oracle_ui/proc/check_view(mob/target)
+ set waitfor = FALSE //Makes this an async call
+ if(!test_viewer(target, TRUE))
+ close(target)
+
+/datum/oracle_ui/proc/call_js(mob/target, js_func, list/parameters = list())
+ set waitfor = FALSE //Makes this an async call
+ if(!test_viewer(target, TRUE))
+ return
+ target << output(list2params(parameters),"[window_id].browser:[js_func]")
+
+/datum/oracle_ui/proc/call_js_all(js_func, list/parameters = list())
+ for(var/viewer in viewers)
+ call_js(viewer, js_func, parameters)
+
+/datum/oracle_ui/proc/steal_focus(mob/target)
+ set waitfor = FALSE //Makes this an async call
+ winset(target, "[window_id]","focus=true")
+
+/datum/oracle_ui/proc/steal_focus_all()
+ for(var/viewer in viewers)
+ steal_focus(viewer)
+
+/datum/oracle_ui/proc/flash(mob/target, times = -1)
+ set waitfor = FALSE //Makes this an async call
+ winset(target, "[window_id]","flash=[times]")
+
+/datum/oracle_ui/proc/flash_all(times = -1)
+ for(var/viewer in viewers)
+ flash(viewer, times)
+
+/datum/oracle_ui/proc/href(mob/user, action, list/parameters = list())
+ var/params_string = replacetext(list2params(parameters),"&",";")
+ return "?src=[REF(src)];sui_action=[action];sui_user=[REF(user)];[params_string]"
+
+/datum/oracle_ui/Topic(href, parameters)
+ var/action = parameters["sui_action"]
+ var/mob/current_user = locate(parameters["sui_user"])
+ if(!call(datasource, "oui_canuse")(current_user))
+ return
+ if(datasource)
+ call(datasource, "oui_act")(current_user, action, parameters);
diff --git a/code/modules/oracle_ui/themed.dm b/code/modules/oracle_ui/themed.dm
new file mode 100644
index 0000000000..56b82c2647
--- /dev/null
+++ b/code/modules/oracle_ui/themed.dm
@@ -0,0 +1,82 @@
+/datum/oracle_ui/themed
+ var/theme = ""
+ var/content_root = ""
+ var/current_page = "index.html"
+ var/root_template = ""
+
+/datum/oracle_ui/themed/New(atom/n_datasource, n_width = 512, n_height = 512, n_content_root = "")
+ root_template = get_themed_file("index.html")
+ content_root = n_content_root
+ return ..(n_datasource, n_width, n_height, get_asset_datum(/datum/asset/simple/oui_theme_nano))
+
+/datum/oracle_ui/themed/process()
+ if(auto_check_view)
+ check_view_all()
+ if(auto_refresh)
+ soft_update_fields()
+
+GLOBAL_LIST_EMPTY(oui_template_variables)
+GLOBAL_LIST_EMPTY(oui_file_cache)
+
+/datum/oracle_ui/themed/proc/get_file(path)
+ if(GLOB.oui_file_cache[path])
+ return GLOB.oui_file_cache[path]
+ else if(fexists(path))
+ var/data = file2text(path)
+ GLOB.oui_file_cache[path] = data
+ return data
+ else
+ var/errormsg = "MISSING PATH '[path]'"
+#ifndef UNIT_TESTS
+ log_world(errormsg) //Because Travis absolutely hates these procs
+#endif
+ return errormsg
+
+/datum/oracle_ui/themed/proc/get_content_file(filename)
+ return get_file("./html/oracle_ui/content/[content_root]/[filename]")
+
+/datum/oracle_ui/themed/proc/get_themed_file(filename)
+ return get_file("./html/oracle_ui/themes/[theme]/[filename]")
+
+/datum/oracle_ui/themed/proc/process_template(template, variables)
+ var/regex/pattern = regex("\\@\\{(\\w+)\\}","gi")
+ GLOB.oui_template_variables = variables
+ var/replaced = pattern.Replace(template, /proc/oui_process_template_replace)
+ GLOB.oui_template_variables = null
+ return replaced
+
+/proc/oui_process_template_replace(match, group1)
+ var/value = GLOB.oui_template_variables[group1]
+ return "[value]"
+
+/datum/oracle_ui/themed/proc/get_inner_content(mob/target)
+ var/list/data = call(datasource, "oui_data")(target)
+ return process_template(get_content_file(current_page), data)
+
+/datum/oracle_ui/themed/get_content(mob/target)
+ var/list/template_data = list("title" = datasource.name, "body" = get_inner_content(target))
+ return process_template(root_template, template_data)
+
+/datum/oracle_ui/themed/proc/soft_update_fields()
+ for(var/viewer in viewers)
+ var/json = json_encode(call(datasource, "oui_data")(viewer))
+ call_js(viewer, "updateFields", list(json))
+
+/datum/oracle_ui/themed/proc/soft_update_all()
+ for(var/viewer in viewers)
+ call_js(viewer, "replaceContent", list(get_inner_content(viewer)))
+
+/datum/oracle_ui/themed/proc/change_page(newpage)
+ if(newpage == current_page)
+ return
+ current_page = newpage
+ render_all()
+
+/datum/oracle_ui/themed/proc/act(label, mob/user, action, list/parameters = list(), class = "", disabled = FALSE)
+ if(disabled)
+ return "[label] "
+ else
+ return "[label] "
+
+/datum/oracle_ui/themed/nano
+ theme = "nano"
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 37877ffb09..059a42bb36 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -31,6 +31,7 @@
var/spam_flag = 0
var/contact_poison // Reagent ID to transfer on contact
var/contact_poison_volume = 0
+ var/datum/oracle_ui/ui = null
/obj/item/paper/pickup(user)
@@ -40,16 +41,40 @@
if(!istype(G) || G.transfer_prints)
H.reagents.add_reagent(contact_poison,contact_poison_volume)
contact_poison = null
+ ui.check_view_all()
..()
+/obj/item/paper/dropped(mob/user)
+ ui.check_view(user)
+ return ..()
+
/obj/item/paper/Initialize()
. = ..()
pixel_y = rand(-8, 8)
pixel_x = rand(-9, 9)
+ ui = new /datum/oracle_ui(src, 420, 600, get_asset_datum(/datum/asset/spritesheet/simple/paper))
+ ui.can_resize = FALSE
update_icon()
updateinfolinks()
+/obj/item/paper/oui_getcontent(mob/target)
+ if(!target.is_literate())
+ return "[name] [stars(info)] [stamps]"
+ else if(istype(target.get_active_held_item(), /obj/item/pen) | istype(target.get_active_held_item(), /obj/item/toy/crayon))
+ return "[name] [info_links] [stamps]"
+ else
+ return "[name] [info] [stamps]"
+
+/obj/item/paper/oui_canview(mob/target)
+ if(check_rights_for(target.client, R_FUN)) //Allows admins to view faxes
+ return TRUE
+ if(isAI(target))
+ var/mob/living/silicon/ai/ai = target
+ return get_dist(src, ai.current) < 2
+ if(iscyborg(target))
+ return get_dist(src, target) < 2
+ return ..()
/obj/item/paper/update_icon()
@@ -65,20 +90,13 @@
/obj/item/paper/examine(mob/user)
..()
to_chat(user, "Alt-click to fold it. ")
-
- var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/simple/paper)
- assets.send(user)
-
- if(in_range(user, src) || isobserver(user))
- if(user.is_literate())
- user << browse("[name] [info] [stamps]", "window=[name]")
- onclose(user, "[name]")
- else
- user << browse("[name] [stars(info)] [stamps]", "window=[name]")
- onclose(user, "[name]")
+ if(oui_canview(user))
+ ui.render(user)
else
to_chat(user, "You're too far away to read it! ")
+/obj/item/paper/proc/show_content(mob/user)
+ user.examinate(src)
/obj/item/paper/verb/rename()
set name = "Rename paper"
@@ -98,7 +116,7 @@
if((loc == usr && usr.stat == CONSCIOUS))
name = "paper[(n_name ? text("- '[n_name]'") : null)]"
add_fingerprint(usr)
-
+ ui.render_all()
/obj/item/paper/suicide_act(mob/user)
user.visible_message("[user] scratches a grid on [user.p_their()] wrist with the paper! It looks like [user.p_theyre()] trying to commit sudoku... ")
@@ -108,7 +126,7 @@
spam_flag = FALSE
/obj/item/paper/attack_self(mob/user)
- user.examinate(src)
+ show_content(user)
if(rigged && (SSevents.holidays && SSevents.holidays[APRIL_FOOLS]))
if(!spam_flag)
spam_flag = TRUE
@@ -123,11 +141,9 @@
else //cyborg or AI not seeing through a camera
dist = get_dist(src, user)
if(dist < 2)
- usr << browse("[name] [info] [stamps]", "window=[name]")
- onclose(usr, "[name]")
+ show_content(user)
else
- usr << browse("[name] [stars(info)] [stamps]", "window=[name]")
- onclose(usr, "[name]")
+ to_chat(user, "You can't quite see it. ")
/obj/item/paper/proc/addtofield(id, text, links = 0)
@@ -173,6 +189,7 @@
for(var/i in 1 to min(fields, 15))
addtofield(i, "write ", 1)
info_links = info_links + "write "
+ ui.render_all()
/obj/item/paper/proc/clearpaper()
@@ -274,7 +291,7 @@
else
info += t // Oh, he wants to edit to the end of the file, let him.
updateinfolinks()
- usr << browse("[name] [info_links] [stamps]", "window=[name]") // Update the window
+ show_content(usr)
update_icon()
@@ -289,7 +306,7 @@
if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon))
if(user.is_literate())
- user << browse("[name] [info_links] [stamps]", "window=[name]")
+ show_content(user)
return
else
to_chat(user, "You don't know how to read or write. ")
@@ -312,6 +329,7 @@
add_overlay(stampoverlay)
to_chat(user, "You stamp the paper with your rubber stamp. ")
+ ui.render_all()
if(P.is_hot())
if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10))
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index a5900aa196..5bcb7a60df 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -164,7 +164,7 @@
/obj/item/pen/sleepy/Initialize()
. = ..()
create_reagents(45, OPENCONTAINER)
- reagents.add_reagent("chloralhydratedelayed", 20)
+ reagents.add_reagent("chloralhydrate", 20)
reagents.add_reagent("mutetoxin", 15)
reagents.add_reagent("tirizene", 10)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index f82f0ee8e6..8d99cbb485 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -323,6 +323,8 @@
var/BR = brightness
var/PO = bulb_power
var/CO = bulb_colour
+ if(color)
+ CO = color
var/area/A = get_area(src)
if (A && A.fire)
CO = bulb_emergency_colour
@@ -360,6 +362,9 @@
else
removeStaticPower(static_power_used, STATIC_LIGHT)
+/obj/machinery/light/update_atom_colour()
+ . = ..()
+ update()
/obj/machinery/light/process()
if (!cell)
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 4159d9898a..974b210648 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -19,6 +19,7 @@
circuit = /obj/item/circuitboard/machine/rad_collector
var/obj/item/tank/internals/plasma/loaded_tank = null
var/stored_power = 0
+ var/last_push
var/active = 0
var/locked = FALSE
var/drainratio = 1
@@ -61,9 +62,9 @@
loaded_tank.air_contents.gases[/datum/gas/oxygen] -= gasdrained
loaded_tank.air_contents.gases[/datum/gas/carbon_dioxide] += gasdrained*2
GAS_GARBAGE_COLLECT(loaded_tank.air_contents.gases)
- var/bitcoins_mined = RAD_COLLECTOR_OUTPUT
- SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, bitcoins_mined*RAD_COLLECTOR_MINING_CONVERSION_RATE)
- stored_power-=bitcoins_mined
+ SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, stored_power*RAD_COLLECTOR_MINING_CONVERSION_RATE)
+ last_push = stored_power
+ stored_power = 0
/obj/machinery/power/rad_collector/interact(mob/user)
if(anchored)
@@ -170,9 +171,9 @@
. = ..()
if(active)
if(!bitcoinmining)
- to_chat(user, "[src]'s display states that it has stored [DisplayPower(stored_power)] , and processing [DisplayPower(RAD_COLLECTOR_OUTPUT)] . ")
+ to_chat(user, "[src]'s display states that it has stored [DisplayPower(stored_power)] , and is processing [DisplayPower((RAD_COLLECTOR_OUTPUT)*((60 SECONDS)/SSmachines.wait))] per minute. The plasma within it's tank is being irradiated into tritium . ")
else
- to_chat(user, "[src]'s display states that it has stored a total of [stored_power*RAD_COLLECTOR_MINING_CONVERSION_RATE] , and producing [RAD_COLLECTOR_OUTPUT*RAD_COLLECTOR_MINING_CONVERSION_RATE] research points per minute. ")
+ to_chat(user, "[src]'s display states that it's producing a total of [(last_push*RAD_COLLECTOR_MINING_CONVERSION_RATE)*((60 SECONDS)/SSmachines.wait)] research points per minute. The tritium and oxygen within it's tank is being combusted into carbon dioxide . ")
else
if(!bitcoinmining)
to_chat(user,"[src]'s display displays the words: \"Power production mode. Please insert Plasma . Use a multitool to change production modes.\" ")
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index bc05e784a4..35710f8d61 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -84,16 +84,18 @@
/obj/singularity/attack_tk(mob/user)
if(iscarbon(user))
var/mob/living/carbon/C = user
+ log_game("[key_name(C)] has been disintegrated by attempting to telekenetically grab a singularity. ")
C.visible_message("[C]'s head begins to collapse in on itself! ", "Your head feels like it's collapsing in on itself! This was really not a good idea! ", "You hear something crack and explode in gore. ")
var/turf/T = get_turf(C)
for(var/i in 1 to 3)
C.apply_damage(30, BRUTE, BODY_ZONE_HEAD)
new /obj/effect/gibspawner/generic(T)
sleep(1)
- C.ghostize()
var/obj/item/bodypart/head/rip_u = C.get_bodypart(BODY_ZONE_HEAD)
rip_u.dismember(BURN) //nice try jedi
qdel(rip_u)
+ return
+ return ..()
/obj/singularity/ex_act(severity, target)
switch(severity)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 026c39c6cf..3c151d4e77 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -5,12 +5,21 @@
#define PLASMA_HEAT_PENALTY 15 // Higher == Bigger heat and waste penalty from having the crystal surrounded by this gas. Negative numbers reduce penalty.
#define OXYGEN_HEAT_PENALTY 1
#define CO2_HEAT_PENALTY 0.1
-#define NITROGEN_HEAT_MODIFIER -1.5
+#define PLUOXIUM_HEAT_PENALTY -1
+#define TRITIUM_HEAT_PENALTY 10
+#define NITROGEN_HEAT_PENALTY -1.5
+#define BZ_HEAT_PENALTY 5
#define OXYGEN_TRANSMIT_MODIFIER 1.5 //Higher == Bigger bonus to power generation.
#define PLASMA_TRANSMIT_MODIFIER 4
+#define BZ_TRANSMIT_MODIFIER -2
+
+#define TRITIUM_RADIOACTIVITY_MODIFIER 3 //Higher == Crystal spews out more radiation
+#define BZ_RADIOACTIVITY_MODIFIER 5
+#define PLUOXIUM_RADIOACTIVITY_MODIFIER -2
#define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage.
+#define PLUOXIUM_HEAT_RESISTANCE 3
#define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts.
#define POWERLOSS_INHIBITION_MOLE_THRESHOLD 20 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached
@@ -53,6 +62,7 @@
#define SUPERMATTER_EMERGENCY_PERCENT 25
#define SUPERMATTER_DANGER_PERCENT 50
#define SUPERMATTER_WARNING_PERCENT 100
+#define CRITICAL_TEMPERATURE 10000
#define SUPERMATTER_COUNTDOWN_TIME 30 SECONDS
@@ -102,6 +112,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
var/o2comp = 0
var/co2comp = 0
var/n2ocomp = 0
+ var/pluoxiumcomp = 0
+ var/tritiumcomp = 0
+ var/bzcomp = 0
+
+ var/pluoxiumbonus = 0
var/combined_gas = 0
var/gasmix_power_ratio = 0
@@ -184,8 +199,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
to_chat(H, "You get headaches just from looking at it. ")
return
-#define CRITICAL_TEMPERATURE 10000
-
/obj/machinery/power/supermatter_crystal/proc/get_status()
var/turf/T = get_turf(src)
if(!T)
@@ -354,16 +367,24 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
plasmacomp = max(removed.gases[/datum/gas/plasma]/combined_gas, 0)
o2comp = max(removed.gases[/datum/gas/oxygen]/combined_gas, 0)
co2comp = max(removed.gases[/datum/gas/carbon_dioxide]/combined_gas, 0)
+ pluoxiumcomp = max(removed.gases[/datum/gas/pluoxium]/combined_gas, 0)
+ tritiumcomp = max(removed.gases[/datum/gas/tritium]/combined_gas, 0)
+ bzcomp = max(removed.gases[/datum/gas/bz]/combined_gas, 0)
n2ocomp = max(removed.gases[/datum/gas/nitrous_oxide]/combined_gas, 0)
n2comp = max(removed.gases[/datum/gas/nitrogen]/combined_gas, 0)
- gasmix_power_ratio = min(max(plasmacomp + o2comp + co2comp - n2comp, 0), 1)
+ if(pluoxiumcomp >= 0.15)
+ pluoxiumbonus = 1 //makes pluoxium only work at 15%+
+ else
+ pluoxiumbonus = 0
- dynamic_heat_modifier = max((plasmacomp * PLASMA_HEAT_PENALTY)+(o2comp * OXYGEN_HEAT_PENALTY)+(co2comp * CO2_HEAT_PENALTY)+(n2comp * NITROGEN_HEAT_MODIFIER), 0.5)
- dynamic_heat_resistance = max(n2ocomp * N2O_HEAT_RESISTANCE, 1)
+ gasmix_power_ratio = min(max(plasmacomp + o2comp + co2comp + tritiumcomp + bzcomp - pluoxiumcomp - n2comp, 0), 1)
- power_transmission_bonus = max((plasmacomp * PLASMA_TRANSMIT_MODIFIER) + (o2comp * OXYGEN_TRANSMIT_MODIFIER), 0)
+ dynamic_heat_modifier = max((plasmacomp * PLASMA_HEAT_PENALTY) + (o2comp * OXYGEN_HEAT_PENALTY) + (co2comp * CO2_HEAT_PENALTY) + (tritiumcomp * TRITIUM_HEAT_PENALTY) + ((pluoxiumcomp * PLUOXIUM_HEAT_PENALTY) * pluoxiumbonus) + (n2comp * NITROGEN_HEAT_PENALTY) + (bzcomp * BZ_HEAT_PENALTY), 0.5)
+ dynamic_heat_resistance = max((n2ocomp * N2O_HEAT_RESISTANCE) + ((pluoxiumcomp * PLUOXIUM_HEAT_RESISTANCE) * pluoxiumbonus), 1)
+
+ power_transmission_bonus = max((plasmacomp * PLASMA_TRANSMIT_MODIFIER) + (o2comp * OXYGEN_TRANSMIT_MODIFIER) + (bzcomp * BZ_TRANSMIT_MODIFIER), 0)
//more moles of gases are harder to heat than fewer, so let's scale heat damage around them
mole_heat_penalty = max(combined_gas / MOLE_HEAT_PENALTY, 0.25)
@@ -392,7 +413,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
power = max( (removed.temperature * temp_factor / T0C) * gasmix_power_ratio + power, 0) //Total laser power plus an overload
if(prob(50))
- radiation_pulse(src, power * (1 + power_transmission_bonus/10))
+ radiation_pulse(src, power * (1 + (tritiumcomp * TRITIUM_RADIOACTIVITY_MODIFIER) + ((pluoxiumcomp * PLUOXIUM_RADIOACTIVITY_MODIFIER) * pluoxiumbonus) * (power_transmission_bonus/(10-(bzcomp * BZ_RADIOACTIVITY_MODIFIER))))) // Rad Modifiers BZ(500%), Tritium(300%), and Pluoxium(-200%)
+ if(bzcomp >= 0.4 && prob(30 * bzcomp))
+ src.fire_nuclear_particles() // Start to emit radballs at a maximum of 30% chance per tick
var/device_energy = power * REACTION_POWER_MODIFIER
@@ -527,11 +550,14 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
/obj/machinery/power/supermatter_crystal/attack_tk(mob/user)
if(iscarbon(user))
var/mob/living/carbon/C = user
+ log_game("[key_name(C)] has been disintegrated by a telekenetic grab on a supermatter crystal. ")
to_chat(C, "That was a really dense idea. ")
- C.ghostize()
+ C.visible_message("A bright flare of radiation is seen from [C]'s head, shortly before you hear a sickening sizzling! ")
var/obj/item/organ/brain/rip_u = locate(/obj/item/organ/brain) in C.internal_organs
rip_u.Remove(C)
qdel(rip_u)
+ return
+ return ..()
/obj/machinery/power/supermatter_crystal/attack_paw(mob/user)
dust_mob(user, cause = "monkey attack")
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index bbad3e08b0..9a5486dfe2 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -132,11 +132,14 @@
/obj/singularity/energy_ball/attack_tk(mob/user)
if(iscarbon(user))
var/mob/living/carbon/C = user
+ log_game("[key_name(C)] has been disintegrated by a telekenetic grab on a tesla ball. ")
to_chat(C, "That was a shockingly dumb idea. ")
+ C.visible_message("A bright flare of lightning is seen from [C]'s head, shortly before you hear a sickening sizzling! ")
var/obj/item/organ/brain/rip_u = locate(/obj/item/organ/brain) in C.internal_organs
- C.ghostize(0)
+ rip_u.Remove(C)
qdel(rip_u)
- C.death()
+ return
+ return ..()
/obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target)
if (istype(target))
diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm
index 089c79effd..638711e8d4 100644
--- a/code/modules/projectiles/ammunition/energy/laser.dm
+++ b/code/modules/projectiles/ammunition/energy/laser.dm
@@ -59,6 +59,9 @@
/obj/item/ammo_casing/energy/laser/redtag/hitscan
projectile_type = /obj/item/projectile/beam/lasertag/redtag/hitscan
+/obj/item/ammo_casing/energy/laser/redtag/hitscan/holy
+ projectile_type = /obj/item/projectile/beam/lasertag/redtag/hitscan/holy
+
/obj/item/ammo_casing/energy/xray
projectile_type = /obj/item/projectile/beam/xray
e_cost = 50
@@ -68,3 +71,9 @@
projectile_type = /obj/item/projectile/beam/mindflayer
select_name = "MINDFUCK"
fire_sound = 'sound/weapons/laser.ogg'
+
+/obj/item/ammo_casing/energy/laser/weak
+ projectile_type = /obj/item/projectile/beam/weak/minigun
+ e_cost = 10
+ fire_sound = 'sound/weapons/gatling.ogg'
+ click_cooldown_override = 1
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index 7d71a9acdd..d1b99c0e3c 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -207,6 +207,7 @@
name = "combat shotgun"
desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath."
icon_state = "cshotgun"
+ fire_delay = 3
mag_type = /obj/item/ammo_box/magazine/internal/shot/com
w_class = WEIGHT_CLASS_HUGE
unique_reskin = list("Tatical" = "cshotgun",
diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm
index 54cb9fe5d0..de738c9047 100644
--- a/code/modules/projectiles/guns/energy/energy_gun.dm
+++ b/code/modules/projectiles/guns/energy/energy_gun.dm
@@ -118,11 +118,11 @@
switch(fail_tick)
if(0 to 200)
fail_tick += (2*(fail_chance))
- M.rad_act(40)
+ M.rad_act(400)
to_chat(M, "Your [name] feels warmer. ")
if(201 to INFINITY)
SSobj.processing.Remove(src)
- M.rad_act(80)
+ M.rad_act(800)
crit_fail = 1
to_chat(M, "Your [name]'s reactor overloads! ")
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index cd0dd53d48..bb97f9cf99 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -159,3 +159,65 @@
/obj/item/gun/energy/laser/redtag/hitscan
ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag/hitscan)
+
+/obj/item/gun/energy/laser/redtag/hitscan/chaplain
+ name = "\improper holy lasrifle"
+ desc = "A lasrifle from the old Imperium. This one seems to be blessed by techpriests."
+ icon_state = "LaserAK"
+ item_state = null
+ force = 14
+ pin = /obj/item/firing_pin/holy
+ icon = 'modular_citadel/icons/obj/guns/VGguns.dmi'
+ ammo_x_offset = 4
+ ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag/hitscan/holy)
+ lefthand_file = 'modular_citadel/icons/mob/citadel/guns_lefthand.dmi'
+ righthand_file = 'modular_citadel/icons/mob/citadel/guns_righthand.dmi'
+ var/chaplain_spawnable = TRUE
+ total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
+ throw_speed = 3
+ throw_range = 4
+ throwforce = 10
+ obj_flags = UNIQUE_RENAME
+
+/obj/item/gun/energy/laser/redtag/hitscan/chaplain/Initialize()
+ . = ..()
+ AddComponent(/datum/component/anti_magic, TRUE, TRUE)
+
+/obj/item/gun/energy/laser/redtag/hitscan/chaplain/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params, bypass_timer)
+ if(!ishuman(user) || !ishuman(target))
+ return
+
+ if(semicd)
+ return
+
+ if(user == target)
+ target.visible_message("[user] sticks [src] in [user.p_their()] mouth, ready to pull the trigger... ", \
+ "You stick [src] in your mouth, ready to pull the trigger... ")
+ else
+ target.visible_message("[user] points [src] at [target]'s head, ready to pull the trigger... ", \
+ "[user] points [src] at your head, ready to pull the trigger... ")
+
+ semicd = TRUE
+
+ if(!bypass_timer && (!do_mob(user, target, 120) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH))
+ if(user)
+ if(user == target)
+ user.visible_message("[user] decided not to shoot. ")
+ else if(target && target.Adjacent(user))
+ target.visible_message("[user] has decided to spare [target] ", "[user] has decided to spare your life! ")
+ semicd = FALSE
+ return
+
+ semicd = FALSE
+
+ target.visible_message("[user] pulls the trigger! ", "[user] pulls the trigger! ")
+
+ playsound('sound/weapons/dink.ogg', 30, 1)
+
+ if((iscultist(target)) || (is_servant_of_ratvar(target)))
+ chambered.BB.damage *= 1500
+
+ else if(chambered && chambered.BB)
+ chambered.BB.damage *= 5
+
+ process_fire(target, user, TRUE, params)
diff --git a/code/modules/projectiles/guns/energy/minigun.dm b/code/modules/projectiles/guns/energy/minigun.dm
new file mode 100644
index 0000000000..d903cda47c
--- /dev/null
+++ b/code/modules/projectiles/guns/energy/minigun.dm
@@ -0,0 +1,149 @@
+//The ammo/gun is stored in a back slot item
+/obj/item/minigunpack2
+ name = " Laser Gatling Pack"
+ desc = "A massive battery pack with an attached laser gatling gun!"
+ icon = 'icons/obj/guns/minigun.dmi'
+ icon_state = "holstered"
+ item_state = "backpack"
+ lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+ slot_flags = ITEM_SLOT_BACK
+ w_class = WEIGHT_CLASS_HUGE
+ var/obj/item/gun/energy/minigun/gun
+ var/armed = 0 //whether the gun is attached, 0 is attached, 1 is the gun is wielded.
+ var/overheat = 0
+ var/overheat_max = 60
+ var/heat_diffusion = 5
+
+/obj/item/minigunpack2/Initialize()
+ . = ..()
+ gun = new(src)
+ START_PROCESSING(SSobj, src)
+
+/obj/item/minigunpack2/Destroy()
+ STOP_PROCESSING(SSobj, src)
+ return ..()
+
+/obj/item/minigunpack2/process()
+ overheat = max(0, overheat - heat_diffusion)
+
+//ATTACK HAND IGNORING PARENT RETURN VALUE
+/obj/item/minigunpack2/attack_hand(var/mob/living/carbon/user)
+ if(src.loc == user)
+ if(!armed)
+ if(user.get_item_by_slot(SLOT_BACK) == src)
+ armed = 1
+ if(!user.put_in_hands(gun))
+ armed = 0
+ to_chat(user, "You need a free hand to hold the gun! ")
+ return
+ update_icon()
+ user.update_inv_back()
+ else
+ to_chat(user, "You are already holding the gun! ")
+ else
+ ..()
+
+/obj/item/minigunpack2/attackby(obj/item/W, mob/user, params)
+ if(W == gun) //Don't need armed check, because if you have the gun assume its armed.
+ user.dropItemToGround(gun, TRUE)
+ else
+ ..()
+
+/obj/item/minigunpack2/dropped(mob/user)
+ if(armed)
+ user.dropItemToGround(gun, TRUE)
+
+/obj/item/minigunpack2/MouseDrop(atom/over_object)
+ . = ..()
+ if(armed)
+ return
+ if(iscarbon(usr))
+ var/mob/M = usr
+
+ if(!over_object)
+ return
+
+ if(!M.incapacitated())
+
+ if(istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+ M.putItemFromInventoryInHandIfPossible(src, H.held_index)
+
+
+/obj/item/minigunpack2/update_icon()
+ if(armed)
+ icon_state = "notholstered"
+ else
+ icon_state = "holstered"
+
+/obj/item/minigunpack2/proc/attach_gun(var/mob/user)
+ if(!gun)
+ gun = new(src)
+ gun.forceMove(src)
+ armed = 0
+ if(user)
+ to_chat(user, "You attach the [gun.name] to the [name]. ")
+ else
+ src.visible_message("The [gun.name] snaps back onto the [name]! ")
+ update_icon()
+ user.update_inv_back()
+
+
+/obj/item/gun/energy/minigun
+ name = "laser gatling gun"
+ desc = "An advanced laser cannon with an incredible rate of fire. Requires a bulky backpack power source to use."
+ icon = 'icons/obj/guns/minigun.dmi'
+ icon_state = "minigun_spin"
+ item_state = "minigun"
+ flags_1 = CONDUCT_1
+ force = 15
+ recoil = 2
+ slowdown = 1
+ slot_flags = null
+ w_class = WEIGHT_CLASS_HUGE
+ materials = list()
+ ammo_type = list(/obj/item/ammo_casing/energy/laser/weak)
+ burst_size = 2
+ automatic = 1
+ can_charge = 0
+ selfcharge = EGUN_SELFCHARGE
+ charge_tick = 2
+ charge_delay = 5
+ weapon_weight = WEAPON_HEAVY
+ item_flags = NEEDS_PERMIT | SLOWS_WHILE_IN_HAND
+ var/obj/item/minigunpack2/ammo_pack
+
+/obj/item/gun/energy/minigun/Initialize()
+ if(istype(loc, /obj/item/minigunpack2)) //We should spawn inside an ammo pack so let's use that one.
+ ammo_pack = loc
+ else
+ return INITIALIZE_HINT_QDEL //No pack, no gun
+
+ return ..()
+
+/obj/item/gun/energy/minigun/attack_self(mob/living/user)
+ return
+
+/obj/item/gun/energy/minigun/dropped(mob/user)
+ if(ammo_pack)
+ ammo_pack.attach_gun(user)
+ else
+ qdel(src)
+
+/obj/item/gun/energy/minigun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
+ if(ammo_pack)
+ if(ammo_pack.overheat < ammo_pack.overheat_max)
+ ammo_pack.overheat += burst_size
+ ..()
+ else
+ to_chat(user, "The gun's heat sensor locked the trigger to prevent lens damage.")
+
+/obj/item/gun/energy/minigun/afterattack(atom/target, mob/living/user, flag, params)
+ if(!ammo_pack || ammo_pack.loc != user)
+ to_chat(user, "You need the backpack power source to fire the gun!")
+ . = ..()
+
+/obj/item/gun/energy/minigun/dropped(mob/living/user)
+ ammo_pack.attach_gun(user)
+
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm
index da3743f053..9103340790 100644
--- a/code/modules/projectiles/pins.dm
+++ b/code/modules/projectiles/pins.dm
@@ -188,6 +188,15 @@
desc = "This is a DNA-locked firing pin which only authorizes one user. Attempt to fire once to DNA-link. It has a small explosive charge on it."
selfdestruct = TRUE
+/obj/item/firing_pin/holy
+ name = "blessed pin"
+ desc = "A firing pin that only responds to those who are holier than thou."
+
+/obj/item/firing_pin/holy/pin_auth(mob/living/user)
+ if(user.mind.isholy)
+ return TRUE
+ return FALSE
+
// Laser tag pins
/obj/item/firing_pin/tag
name = "laser tag firing pin"
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index cbd0348743..d8154b367d 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -39,6 +39,14 @@
/obj/item/projectile/beam/weak
damage = 15
+/obj/item/projectile/beam/weak/minigun
+ damage = 12.5
+ armour_penetration = 40
+
+/obj/item/projectile/beam/weak/minigun/Initialize()
+ .=..()
+ speed = pick(0.7,0.75,0.8,0.85,0.9,0.95,1,1.05,1.1,1.15)
+
/obj/item/projectile/beam/weak/penetrator
armour_penetration = 50
@@ -151,6 +159,11 @@
/obj/item/projectile/beam/lasertag/redtag/hitscan
hitscan = TRUE
+/obj/item/projectile/beam/lasertag/redtag/hitscan/holy
+ name = "lasrifle beam"
+ damage = 0.1
+ damage_type = BURN
+
/obj/item/projectile/beam/lasertag/bluetag
icon_state = "bluelaser"
suit_types = list(/obj/item/clothing/suit/redtag)
diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm
index f9aa47c6a3..4a1c954b1b 100644
--- a/code/modules/projectiles/projectile/bullets/shotgun.dm
+++ b/code/modules/projectiles/projectile/bullets/shotgun.dm
@@ -5,7 +5,7 @@
/obj/item/projectile/bullet/shotgun_beanbag
name = "beanbag slug"
damage = 5
- stamina = 80
+ stamina = 70
/obj/item/projectile/bullet/incendiary/shotgun
name = "incendiary slug"
@@ -61,12 +61,12 @@
/obj/item/projectile/bullet/pellet/shotgun_buckshot
name = "buckshot pellet"
- damage = 12.5
+ damage = 10
/obj/item/projectile/bullet/pellet/shotgun_rubbershot
name = "rubbershot pellet"
- damage = 3
- stamina = 25
+ damage = 2
+ stamina = 15
/obj/item/projectile/bullet/pellet/Range()
..()
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index d1eec39f44..ce7819ed7a 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -1,4 +1,4 @@
-#define CHEMICAL_QUANTISATION_LEVEL 0.0001
+#define CHEMICAL_QUANTISATION_LEVEL 0.001
/proc/build_chemical_reagent_list()
//Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
@@ -496,7 +496,12 @@
//Standard reaction mechanics:
else
- if (C.FermiChem == TRUE)//Just to make sure
+ if (C.FermiChem == TRUE)//Just to make sure, should only proc when grenades are combining.
+ if (chem_temp > C.ExplodeTemp) //To allow fermigrenades
+ var/datum/chemical_reaction/fermi/Ferm = selected_reaction
+ fermiIsReacting = FALSE
+ SSblackbox.record_feedback("tally", "fermi_chem", 1, ("[Ferm] explosion"))
+ Ferm.FermiExplode(src, my_atom, volume = total_volume, temp = chem_temp, pH = pH)
return 0
for(var/B in cached_required_reagents) //
@@ -741,11 +746,10 @@
total_volume = 0
for(var/reagent in cached_reagents)
var/datum/reagent/R = reagent
- if(R.volume < CHEMICAL_QUANTISATION_LEVEL)
+ if((R.volume < 0.01) && !fermiIsReacting)
del_reagent(R.id)
else
total_volume += R.volume
-
return 0
/datum/reagents/proc/clear_reagents()
@@ -874,7 +878,7 @@
var/datum/reagent/R = A
if (R.id == reagent) //IF MERGING
//Add amount and equalize purity
- R.volume += amount
+ R.volume += round(amount, CHEMICAL_QUANTISATION_LEVEL)
R.purity = ((R.purity * R.volume) + (other_purity * amount)) /((R.volume + amount)) //This should add the purity to the product
update_total()
@@ -896,7 +900,7 @@
var/datum/reagent/R = new D.type(data)
cached_reagents += R
R.holder = src
- R.volume = amount
+ R.volume = round(amount, CHEMICAL_QUANTISATION_LEVEL)
R.purity = other_purity
R.loc = get_turf(my_atom)
if(data)
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index 436ee80e7b..eeb452dbb5 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -77,6 +77,16 @@
updateUsrDialog()
update_icon()
return
+
+ if(beaker)
+ if(istype(I, /obj/item/reagent_containers/dropper))
+ var/obj/item/reagent_containers/dropper/D = I
+ D.afterattack(beaker, user, 1)
+
+ if(istype(I, /obj/item/reagent_containers/syringe))
+ var/obj/item/reagent_containers/syringe/S = I
+ S.afterattack(beaker, user, 1)
+
return ..()
/obj/machinery/chem_heater/on_deconstruction()
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 002c54be94..85cf5e5011 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -233,6 +233,12 @@
else
reagents.remove_reagent(id, amount)
. = TRUE
+ else if (amount == -1) // -1 means custom amount
+ useramount = input("Enter the Amount you want to transfer:", name, useramount) as num|null
+ if (useramount > 0)
+ end_fermi_reaction()
+ reagents.trans_id_to(beaker, id, useramount)
+ . = TRUE
if("toggleMode")
mode = !mode
@@ -332,7 +338,7 @@
var/vol_part = min(reagents.total_volume, 30)
if(text2num(many))
amount_full = round(reagents.total_volume / 30)
- vol_part = reagents.total_volume % 30
+ vol_part = ((reagents.total_volume*1000) % 30000) / 1000 //% operator doesn't support decimals.
var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)
if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr)))
return
@@ -379,7 +385,34 @@
reagents.trans_to(P, vol_part)
. = TRUE
//END CITADEL ADDITIONS
- if("analyze")
+ if("analyzeBeak")
+ var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]]
+ if(R)
+ var/state = "Unknown"
+ if(initial(R.reagent_state) == 1)
+ state = "Solid"
+ else if(initial(R.reagent_state) == 2)
+ state = "Liquid"
+ else if(initial(R.reagent_state) == 3)
+ state = "Gas"
+ var/const/P = 3 //The number of seconds between life ticks
+ var/T = initial(R.metabolization_rate) * (60 / P)
+ var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.id)
+ if(Rcr && Rcr.FermiChem)
+ fermianalyze = TRUE
+ var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2
+ var/datum/reagent/targetReagent = beaker.reagents.has_reagent("[R.id]")
+
+ if(!targetReagent)
+ CRASH("Tried to find a reagent that doesn't exist in the chem_master!")
+ analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache)
+ else
+ fermianalyze = FALSE
+ analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold))
+ screen = "analyze"
+ return
+
+ if("analyzeBuff")
var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]]
if(R)
var/state = "Unknown"
@@ -395,7 +428,11 @@
fermianalyze = TRUE
var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.id)
var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2
- analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = initial(R.purity), "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache)
+ var/datum/reagent/targetReagent = reagents.has_reagent("[R.id]")
+
+ if(!targetReagent)
+ CRASH("Tried to find a reagent that doesn't exist in the chem_master!")
+ analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache)
else
fermianalyze = FALSE
analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold))
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index c21629ce8f..520148848c 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -33,18 +33,20 @@
var/addiction_stage4_end = 40
var/overdosed = 0 // You fucked up and this is now triggering its overdose effects, purge that shit quick.
var/self_consuming = FALSE
+ var/metabolizing = FALSE
+ var/invisible = FALSE //Set to true if it doesn't appear on handheld health analyzers.
//Fermichem vars:
var/purity = 1 //How pure a chemical is from 0 - 1.
var/addProc = FALSE //If the chemical should force an on_new() call
- var/turf/loc = null //Should be the creation location!
+ var/turf/loc = null //Should be the creation location!
var/pH = 7 //pH of the specific reagent, used for calculating the sum pH of a holder.
+ var/SplitChem = FALSE //If the chem splits on metabolism
var/ImpureChem = "fermiTox"// What chemical is metabolised with an inpure reaction
var/InverseChemVal = 0.25 // If the impurity is below 0.5, replace ALL of the chem with InverseChem upon metabolising
var/InverseChem = "fermiTox"// What chem is metabolised when purity is below InverseChemVal, this shouldn't be made, but if it does, well, I guess I'll know about it.
var/DoNotSplit = FALSE // If impurity is handled within the main chem itself
var/OnMobMergeCheck = FALSE //Call on_mob_life proc when reagents are merging.
- var/metabolizing = FALSE
- var/invisible = FALSE //Set to true if it doesn't appear on handheld health analyzers.
+
/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
. = ..()
@@ -74,7 +76,27 @@
return
// Called when this reagent is first added to a mob
-/datum/reagent/proc/on_mob_add(mob/living/L)
+/datum/reagent/proc/on_mob_add(mob/living/L, amount)
+ if(SplitChem)
+ var/mob/living/carbon/M = L
+ if(!M)
+ return
+ if(purity < 0)
+ CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
+ if (purity == 1 || DoNotSplit == TRUE)
+ log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]")
+ return
+ else if (InverseChemVal > purity)//Turns all of a added reagent into the inverse chem
+ M.reagents.remove_reagent(id, amount, FALSE)
+ M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
+ log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [InverseChem]")
+ return
+ else
+ var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem
+ M.reagents.remove_reagent(id, (impureVol), FALSE)
+ M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
+ log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]")
+ log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [ImpureChem]")
return
// Called when this reagent is removed while inside a mob
@@ -97,7 +119,32 @@
return
// Called when two reagents of the same are mixing.
-/datum/reagent/proc/on_merge(data)
+/datum/reagent/proc/on_merge(data, amount, mob/living/carbon/M, purity)
+ if(SplitChem)
+ if(!ishuman(M))
+ return
+ if (purity < 0)
+ CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
+ if (purity == 1 || DoNotSplit == TRUE)
+ log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [id] in themselves")
+ return
+ else if (InverseChemVal > purity)
+ M.reagents.remove_reagent(id, amount, FALSE)
+ M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
+ for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
+ if(R.name == "")
+ R.name = name//Negative effects are hidden
+ log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [InverseChem]")
+ return
+ else
+ var/impureVol = amount * (1 - purity)
+ M.reagents.remove_reagent(id, impureVol, FALSE)
+ M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
+ for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
+ if(R.name == "")
+ R.name = name//Negative effects are hidden
+ log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]")
+ log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [ImpureChem]")
return
/datum/reagent/proc/on_update(atom/A)
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 79b6f96781..88073ca5f3 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -1373,6 +1373,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/neurotoxin
name = "Neurotoxin"
+ id = "neurotoxin"
description = "A strong neurotoxin that puts the subject into a death-like state."
color = "#2E2E61" // rgb: 46, 46, 97
boozepwr = 50
@@ -1382,6 +1383,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "neurotoxinglass"
glass_name = "Neurotoxin"
glass_desc = "A drink that is guaranteed to knock you silly."
+ SplitChem = TRUE
+ ImpureChem = "neuroweak"
+ InverseChemVal = 0 //Clear conversion
+ InverseChem = "neuroweak"
/datum/reagent/consumable/ethanol/neurotoxin/proc/pickt()
return (pick(TRAIT_PARALYSIS_L_ARM,TRAIT_PARALYSIS_R_ARM,TRAIT_PARALYSIS_R_LEG,TRAIT_PARALYSIS_L_LEG))
@@ -1390,12 +1395,12 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.set_drugginess(50)
M.dizziness +=2
M.adjustBrainLoss(1*REM, 150)
- if(prob(20))
+ if(prob(20) && !holder.has_reagent("neuroweak"))
M.adjustStaminaLoss(10)
M.drop_all_held_items()
to_chat(M, "You cant feel your hands! ")
if(current_cycle > 5)
- if(prob(20))
+ if(prob(20) && !holder.has_reagent("neuroweak"))
var/t = pickt()
ADD_TRAIT(M, t, type)
M.adjustStaminaLoss(10)
@@ -1417,6 +1422,25 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.adjustStaminaLoss(10)
..()
+/datum/reagent/consumable/ethanol/neuroweak
+ name = "Neuro-Smash"
+ id = "neuroweak"
+ description = "A mostly safe alcoholic drink for the true daredevils. Counteracts Neurotoxins."
+ boozepwr = 60
+ pH = 8
+
+/datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M)
+ if(holder.has_reagent("neurotoxin"))
+ M.adjustBrainLoss(-1*REM, 150)
+ M.reagents.remove_reagent("neurotoxin", 1.5 * REAGENTS_METABOLISM, FALSE)
+ if(holder.has_reagent("fentanyl"))
+ M.adjustBrainLoss(-1*REM, 150)
+ M.reagents.remove_reagent("fentanyl", 0.75 * REAGENTS_METABOLISM, FALSE)
+ else
+ M.adjustBrainLoss(-0.5*REM, 150)
+ M.dizziness +=2
+ ..()
+
/datum/reagent/consumable/ethanol/hippies_delight
name = "Hippie's Delight"
id = "hippiesdelight"
@@ -2122,6 +2146,29 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Planet Cracker"
glass_desc = "Although historians believe the drink was originally created to commemorate the end of an important conflict in man's past, its origins have largely been forgotten and it is today seen more as a general symbol of human supremacy."
+/datum/reagent/consumable/ethanol/commander_and_chief
+ name = "Commander and Chief"
+ id = "commander_and_chief"
+ description = "A cocktail for the captain on the go."
+ color = "#ffffc9"
+ boozepwr = 50
+ quality = DRINK_FANTASTIC
+ taste_description = "Tastes like...duty and responsibility?"
+ glass_icon_state = "commander_and_chief"
+ glass_name = "Commander and Chief"
+ glass_desc = "The gems of this majestic chalice represent the departments and their Heads."
+
+/datum/reagent/consumable/ethanol/commander_and_chief/on_mob_life(mob/living/carbon/M)
+ if(M.mind && HAS_TRAIT(M.mind, TRAIT_CAPTAIN_METABOLISM))
+ M.heal_bodypart_damage(2,2,2)
+ M.adjustBruteLoss(-3.5,0)
+ M.adjustOxyLoss(-3.5,0)
+ M.adjustFireLoss(-3.5,0)
+ M.adjustToxLoss(-3.5,0)
+ M.radiation = max(M.radiation - 25, 0)
+ . = 1
+ return ..()
+
/datum/reagent/consumable/ethanol/fruit_wine
name = "Fruit Wine"
id = "fruit_wine"
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index bfefc073f8..dd51ce2bc7 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -13,6 +13,7 @@
glass_icon_state = "glass_orange"
glass_name = "glass of orange juice"
glass_desc = "Vitamins! Yay!"
+ pH = 3.3
/datum/reagent/consumable/orangejuice/on_mob_life(mob/living/carbon/M)
if(M.getOxyLoss() && prob(30))
@@ -45,6 +46,7 @@
glass_icon_state = "glass_green"
glass_name = "glass of lime juice"
glass_desc = "A glass of sweet-sour lime juice."
+ pH = 2.2
/datum/reagent/consumable/limejuice/on_mob_life(mob/living/carbon/M)
if(M.getToxLoss() && prob(20))
@@ -125,6 +127,7 @@
glass_icon_state = "lemonglass"
glass_name = "glass of lemon juice"
glass_desc = "Sour..."
+ pH = 2
/datum/reagent/consumable/banana
name = "Banana Juice"
@@ -883,3 +886,23 @@
to_chat(M, "[pick("Diamond skies where white deer fly.","Sipping strawberry tea.","Silver raindrops drift through timeless, Neverending June.","Crystal ... pearls free, with love!","Beaming love into me.")] ")
..()
. = 1
+
+/datum/reagent/consumable/catnip_tea
+ name = "Catnip Tea"
+ id = "catnip_tea"
+ description = "A sleepy and tasty catnip tea!"
+ color = "#101000" // rgb: 16, 16, 0
+ nutriment_factor = 0
+ taste_description = "sugar and catnip"
+ glass_icon_state = "teaglass"
+ glass_name = "glass of catnip tea"
+ glass_desc = "A purrfect drink for a cat."
+
+/datum/reagent/consumable/catnip_tea/on_mob_life(mob/living/carbon/M)
+ M.adjustStaminaLoss(min(50 - M.getStaminaLoss(), 3))
+ if(prob(20))
+ M.emote("nya")
+ if(prob(20))
+ to_chat(M, "[pick("Headpats feel nice.", "Backrubs would be nice.", "Mew")] ")
+ M.adjustArousalLoss(5)
+ ..()
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 19aeaeb25e..5e68f84792 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -191,6 +191,13 @@
color = "#731008" // rgb: 115, 16, 8
taste_description = "ketchup"
+/datum/reagent/consumable/mustard
+ name = "Mustard"
+ id = "mustard"
+ description = "Mustard, mostly used on hotdogs, corndogs and burgers."
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#DDED26" // rgb: 221, 237, 38
+ taste_description = "mustard"
/datum/reagent/consumable/capsaicin
name = "Capsaicin Oil"
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index eb7438aa20..4dc0d145dc 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -1177,7 +1177,7 @@
M.adjustToxLoss(-3 * REM, 0, TRUE) //Heals TOXINLOVERS
M.adjustBrainLoss(2 * REM, 150) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
M.adjustCloneLoss(-1 * REM, 0)
- M.adjustStaminaLoss(-30 * REM, 0)
+ M.adjustStaminaLoss(-13 * REM, 0)
M.jitteriness = min(max(0, M.jitteriness + 3), 30)
M.druggy = min(max(0, M.druggy + 10), 15) //See above
..()
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 07c9b166ff..2f7a8652ba 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -200,22 +200,20 @@
pH = 7.5 //God is alkaline
/datum/reagent/water/holywater/on_mob_metabolize(mob/living/L)
- ..()
+ . = ..()
ADD_TRAIT(L, TRAIT_HOLY, id)
+ if(is_servant_of_ratvar(L))
+ to_chat(L, "A fog spreads through your mind, purging the Justiciar's influence! ")
+ else if(iscultist(L))
+ to_chat(L, "A fog spreads through your mind, weakening your connection to the veil and purging Nar-sie's influence ")
+
/datum/reagent/water/holywater/on_mob_end_metabolize(mob/living/L)
REMOVE_TRAIT(L, TRAIT_HOLY, id)
- ..()
-
-/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
- if(is_servant_of_ratvar(M))
- to_chat(M, "A fog spreads through your mind, purging the Justiciar's influence! ")
- ..()
-
-/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
- if(iscultist(M))
- to_chat(M, "A fog spreads through your mind, weakening your connection to the veil and purging Nar-sie's influence ")
- ..()
+ if(iscultist(L))
+ for(var/datum/action/innate/cult/blood_magic/BM in L.actions)
+ BM.holy_dispel = FALSE
+ return ..()
/datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M)
if(!data)
@@ -224,9 +222,11 @@
M.jitteriness = min(M.jitteriness+4,10)
if(iscultist(M))
for(var/datum/action/innate/cult/blood_magic/BM in M.actions)
- to_chat(M, "Your blood rites falter as holy water scours your body! ")
- for(var/datum/action/innate/cult/blood_spell/BS in BM.spells)
- qdel(BS)
+ if(!BM.holy_dispel)
+ BM.holy_dispel = TRUE
+ to_chat(M, "Your blood rites falter as holy water scours your body! ")
+ for(var/datum/action/innate/cult/blood_spell/BS in BM.spells)
+ qdel(BS)
if(data >= 25) // 10 units, 45 seconds @ metabolism 0.4 units & tick rate 1.8 sec
if(!M.stuttering)
M.stuttering = 1
@@ -536,12 +536,12 @@
race = /datum/species/fly
mutationtext = "The pain subsides. You feel... buzzy. "
-/datum/reagent/mutationtoxin/moth
- name = "Moth Mutation Toxin"
+/datum/reagent/mutationtoxin/insect
+ name = "Insect Mutation Toxin"
id = "mothmutationtoxin"
description = "A glowing toxin."
color = "#5EFF3B" //RGB: 94, 255, 59
- race = /datum/species/moth
+ race = /datum/species/insect
mutationtext = "The pain subsides. You feel... attracted to light. "
/datum/reagent/mutationtoxin/pod
@@ -1445,9 +1445,6 @@
color = "#FFFFFF" // white
random_color_list = list("#FFFFFF") //doesn't actually change appearance at all
-
-
-
//////////////////////////////////Hydroponics stuff///////////////////////////////
/datum/reagent/plantnutriment
@@ -1489,16 +1486,8 @@
tox_prob = 15
pH = 1
-
-
-
-
-
-
// GOON OTHERS
-
-
/datum/reagent/oil
name = "Oil"
id = "oil"
@@ -2031,3 +2020,25 @@
/datum/reagent/changeling_string/Destroy()
qdel(original_dna)
return ..()
+
+/datum/reagent/mustardgrind
+ name = "Mustardgrind"
+ id = "mustardgrind"
+ description = "A powerd that is mixed with water and enzymes to make mustard."
+ color = "#BCC740" //RGB: 188, 199, 64
+ taste_description = "plant dust"
+
+/datum/reagent/pax/catnip
+ name = "catnip"
+ id = "catnip"
+ taste_description = "grass"
+ description = "A colorless liquid that makes people more peaceful and felines more happy."
+ metabolization_rate = 1.75 * REAGENTS_METABOLISM
+
+/datum/reagent/pax/catnip/on_mob_life(mob/living/carbon/M)
+ if(prob(20))
+ M.emote("nya")
+ if(prob(20))
+ to_chat(M, "[pick("Headpats feel nice.", "The feeling of a hairball...", "Backrubs would be nice.", "Whats behind those doors?")] ")
+ M.adjustArousalLoss(2)
+ ..()
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index 2848c336e2..77600dec0f 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -313,25 +313,6 @@
. = 1
..()
-/datum/reagent/toxin/chloralhydratedelayed //sedates half as quickly and does not cause toxloss. same name/desc so it doesn't give away sleepypens
- name = "Chloral Hydrate"
- id = "chloralhydratedelayed"
- description = "A powerful sedative that induces confusion and drowsiness before putting its target to sleep."
- reagent_state = SOLID
- color = "#000067" // rgb: 0, 0, 103
- toxpwr = 0
- metabolization_rate = 1 * REAGENTS_METABOLISM
-
-/datum/reagent/toxin/chloralhydratedelayed/on_mob_life(mob/living/carbon/M)
- switch(current_cycle)
- if(10 to 20)
- M.confused += 1
- M.drowsyness += 1
- M.adjustStaminaLoss(7.5)
- if(20 to INFINITY)
- M.Sleeping(40, 0)
- ..()
-
/datum/reagent/toxin/fakebeer //disguised as normal beer for use by emagged brobots
name = "Beer"
id = "fakebeer"
@@ -389,12 +370,12 @@
id = "tirizene"
description = "A nonlethal poison that causes extreme fatigue and weakness in its victim."
color = "#6E2828"
- data = 13
+ data = 15
toxpwr = 0
/datum/reagent/toxin/staminatoxin/on_mob_life(mob/living/carbon/M)
M.adjustStaminaLoss(REM * data, 0)
- data = max(data - 1, 3)
+ data = max(data - 1, 5)
..()
. = 1
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index e34f34675c..b4e42aa973 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -82,6 +82,12 @@
required_temp = 374
mob_react = FALSE
+/datum/chemical_reaction/mustard
+ name = "Mustard"
+ id = "mustard"
+ results = list("mustard" = 5)
+ required_reagents = list("mustardgrind" = 1, "water" = 10, "enzyme"= 1)
+
/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
@@ -623,7 +629,7 @@
required_temp = 450
/datum/chemical_reaction/moff
- name = "moth mutation toxic"
+ name = "insect mutation toxic"
id = "moffs"
results = list("mothmutationtoxin" = 1)
required_reagents = list("liquid_dark_matter" = 2, "ammonia" = 5, "lithium" = 1, "stablemutationtoxin" = 1)
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 48abfcb649..b3f9591f64 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -17,6 +17,7 @@
var/spillable = FALSE
var/beaker_weakness_bitflag = NONE//Bitflag!
var/container_HP = 2
+ var/cached_icon
/obj/item/reagent_containers/Initialize(mapload, vol)
. = ..()
@@ -148,30 +149,71 @@
/obj/item/reagent_containers/proc/temp_check()
if(beaker_weakness_bitflag & TEMP_WEAK)
if(reagents.chem_temp >= 444)//assuming polypropylene
- var/list/seen = viewers(5, get_turf(src))
- var/iconhtml = icon2html(src, seen)
- for(var/mob/M in seen)
- to_chat(M, "[iconhtml] \The [src]'s melts from the temperature! ")
- playsound(get_turf(src), 'sound/FermiChem/heatmelt.ogg', 80, 1)
- to_chat(M, "[iconhtml] Have you tried using glass or meta beakers for high temperature reactions? These are immune to temperature effects. ")
- SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times beakers have melted from temperature")
- qdel(src)
+ START_PROCESSING(SSobj, src)
//melts glass beakers
/obj/item/reagent_containers/proc/pH_check()
if(beaker_weakness_bitflag & PH_WEAK)
- if((reagents.pH < 0.5) || (reagents.pH > 13.5))
- var/list/seen = viewers(5, get_turf(src))
- var/iconhtml = icon2html(src, seen)
- container_HP--
- if(container_HP <= 0)
- for(var/mob/M in seen)
- to_chat(M, "[iconhtml] \The [src]'s melts from the extreme pH! ")
- playsound(get_turf(src), 'sound/FermiChem/acidmelt.ogg', 80, 1)
- SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times beakers have melted from pH")
- qdel(src)
+ if((reagents.pH < 1.5) || (reagents.pH > 12.5))
+ START_PROCESSING(SSobj, src)
+
+
+/obj/item/reagent_containers/process()
+ if(!cached_icon)
+ cached_icon = icon_state
+ var/damage
+ var/cause
+ if(beaker_weakness_bitflag & PH_WEAK)
+ if(reagents.pH < 2)
+ damage = (2 - reagents.pH)/20
+ cause = "from the extreme pH"
+ playsound(get_turf(src), 'sound/FermiChem/bufferadd.ogg', 50, 1)
+
+ if(reagents.pH > 12)
+ damage = (reagents.pH - 12)/20
+ cause = "from the extreme pH"
+ playsound(get_turf(src), 'sound/FermiChem/bufferadd.ogg', 50, 1)
+
+ if(beaker_weakness_bitflag & TEMP_WEAK)
+ if(reagents.chem_temp >= 444)
+ if(damage)
+ damage += (reagents.chem_temp/444)/5
else
- for(var/mob/M in seen)
- to_chat(M, "[iconhtml] \The [src]'s is damaged by the extreme pH and begins to deform! ")
- playsound(get_turf(src), 'sound/FermiChem/bufferadd.ogg', 50, 1)
- to_chat(M, "[iconhtml] Have you tried using plastic beakers (XL) or metabeakers for high pH reactions? These beakers are immune to pH effects. ")
+ damage = (reagents.chem_temp/444)/5
+ if(cause)
+ cause += " and "
+ cause += "from the high temperature"
+ playsound(get_turf(src), 'sound/FermiChem/heatdam.ogg', 50, 1)
+
+ if(!damage || damage <= 0)
+ STOP_PROCESSING(SSobj, src)
+
+ container_HP -= damage
+
+ var/list/seen = viewers(5, get_turf(src))
+ var/iconhtml = icon2html(src, seen)
+
+ var/damage_percent = ((container_HP / initial(container_HP)*100))
+ switch(damage_percent)
+ if(-INFINITY to 0)
+ for(var/mob/M in seen)
+ to_chat(M, "[iconhtml] \The [src]'s melts [cause]! ")
+ playsound(get_turf(src), 'sound/FermiChem/acidmelt.ogg', 80, 1)
+ SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times beakers have melted")
+ STOP_PROCESSING(SSobj, src)
+ qdel(src)
+ return
+ if(0 to 35)
+ icon_state = "[cached_icon]_m3"
+ desc = "[initial(desc)] It is severely deformed."
+ if(35 to 70)
+ icon_state = "[cached_icon]_m2"
+ desc = "[initial(desc)] It is deformed."
+ if(70 to 85)
+ desc = "[initial(desc)] It is mildly deformed."
+ icon_state = "[cached_icon]_m1"
+
+ update_icon()
+ if(prob(25))
+ for(var/mob/M in seen)
+ to_chat(M, "[iconhtml] \The [src]'s is damaged by [cause] and begins to deform! ")
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index 31e893aa3a..3e555f385f 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -90,3 +90,9 @@
update_pack_name()
else
return ..()
+
+/obj/item/reagent_containers/blood/bluespace
+ name = "bluespace blood pack"
+ desc = "Contains blood used for transfusion, this one has been made with bluespace technology to hold much more blood. Must be attached to an IV drip."
+ icon_state = "bsbloodpack"
+ volume = 600 //its a blood bath!
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 014401b72c..257106aaa7 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -6,7 +6,7 @@
reagent_flags = OPENCONTAINER
spillable = TRUE
resistance_flags = ACID_PROOF
- container_HP = 3
+ container_HP = 2
/obj/item/reagent_containers/glass/attack(mob/M, mob/user, obj/target)
@@ -115,7 +115,6 @@
item_state = "beaker"
materials = list(MAT_GLASS=500)
beaker_weakness_bitflag = PH_WEAK
- container_HP = 5
/obj/item/reagent_containers/glass/beaker/Initialize()
. = ..()
@@ -128,27 +127,29 @@
update_icon()
/obj/item/reagent_containers/glass/beaker/update_icon()
+ if(!cached_icon)
+ cached_icon = icon_state
cut_overlays()
if(reagents.total_volume)
- var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]10")
+ var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[cached_icon]10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9)
- filling.icon_state = "[icon_state]-10"
+ filling.icon_state = "[cached_icon]-10"
if(10 to 24)
- filling.icon_state = "[icon_state]10"
+ filling.icon_state = "[cached_icon]10"
if(25 to 49)
- filling.icon_state = "[icon_state]25"
+ filling.icon_state = "[cached_icon]25"
if(50 to 74)
- filling.icon_state = "[icon_state]50"
+ filling.icon_state = "[cached_icon]50"
if(75 to 79)
- filling.icon_state = "[icon_state]75"
+ filling.icon_state = "[cached_icon]75"
if(80 to 90)
- filling.icon_state = "[icon_state]80"
+ filling.icon_state = "[cached_icon]80"
if(91 to INFINITY)
- filling.icon_state = "[icon_state]100"
+ filling.icon_state = "[cached_icon]100"
filling.color = mix_color_from_reagents(reagents.reagent_list)
add_overlay(filling)
@@ -167,7 +168,7 @@
volume = 100
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,20,25,30,50,100)
- container_HP = 6
+ container_HP = 3
/obj/item/reagent_containers/glass/beaker/plastic
name = "x-large beaker"
@@ -227,7 +228,7 @@
volume = 300
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,20,25,30,50,100,300)
- container_HP = 8
+ container_HP = 4
/obj/item/reagent_containers/glass/beaker/cryoxadone
list_reagents = list("cryoxadone" = 30)
@@ -284,7 +285,7 @@
SLOT_L_STORE, SLOT_R_STORE,\
SLOT_GENERC_DEXTROUS_STORAGE
)
- container_HP = 2
+ container_HP = 1
/obj/item/reagent_containers/glass/bucket/Initialize()
beaker_weakness_bitflag |= TEMP_WEAK
@@ -338,7 +339,7 @@
materials = list(MAT_GLASS=0)
volume = 50
amount_per_transfer_from_this = 10
- container_HP = 2
+ container_HP = 1
/obj/item/reagent_containers/glass/beaker/waterbottle/Initialize()
beaker_weakness_bitflag |= TEMP_WEAK
@@ -354,7 +355,7 @@
list_reagents = list("water" = 100)
volume = 100
amount_per_transfer_from_this = 20
- container_HP = 2
+ container_HP = 1
/obj/item/reagent_containers/glass/beaker/waterbottle/large/empty
list_reagents = list()
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 82d95cea40..a96ba006c9 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -127,6 +127,21 @@
else
to_chat(usr, "It is spent. ")
+/obj/item/reagent_containers/hypospray/medipen/stimulants
+ name = "illegal stimpack medipen"
+ desc = "A highly illegal medipen due to its load and small injections, allow for five uses before being drained"
+ volume = 50
+ amount_per_transfer_from_this = 10
+ list_reagents = list("stimulants" = 50)
+
+/obj/item/reagent_containers/hypospray/medipen/stimulants/baseball
+ name = "the reason the syndicate major league team wins."
+ desc = "They say drugs never win, but look where you are now, then where they are."
+ icon_state = "baseballstim"
+ volume = 50
+ amount_per_transfer_from_this = 50
+ list_reagents = list("stimulants" = 50)
+
/obj/item/reagent_containers/hypospray/medipen/stimpack //goliath kiting
name = "stimpack medipen"
desc = "A rapid way to stimulate your body's adrenaline, allowing for freer movement in restrictive armor."
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 871fd32b16..082b1a7d11 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -264,6 +264,13 @@
name = "disposal unit"
desc = "A pneumatic waste disposal unit."
icon_state = "disposal"
+ var/datum/oracle_ui/themed/nano/ui
+
+/obj/machinery/disposal/bin/Initialize(mapload, obj/structure/disposalconstruct/make_from)
+ . = ..()
+ ui = new /datum/oracle_ui/themed/nano(src, 330, 190, "disposal_bin")
+ ui.auto_refresh = TRUE
+ ui.can_resize = FALSE
// attack by item places it in to disposal
/obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, params)
@@ -275,32 +282,43 @@
STR.remove_from_storage(O,src)
T.update_icon()
update_icon()
+ ui.soft_update_fields()
else
+ ui.soft_update_fields()
return ..()
// handle machine interaction
-/obj/machinery/disposal/bin/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
- datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
+/obj/machinery/disposal/bin/ui_interact(mob/user, state)
if(stat & BROKEN)
return
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
- if(!ui)
- ui = new(user, src, ui_key, "disposal_unit", name, 300, 200, master_ui, state)
- ui.open()
+ if(user.loc == src)
+ to_chat(user, "You cannot reach the controls from inside! ")
+ return
+ ui.render(user)
-/obj/machinery/disposal/bin/ui_data(mob/user)
+/obj/machinery/disposal/bin/oui_canview(mob/user)
+ if(user.loc == src)
+ return FALSE
+ if(stat & BROKEN)
+ return FALSE
+ if(Adjacent(user))
+ return TRUE
+ return ..()
+
+
+/obj/machinery/disposal/bin/oui_data(mob/user)
var/list/data = list()
- data["flush"] = flush
- data["full_pressure"] = full_pressure
- data["pressure_charging"] = pressure_charging
- data["panel_open"] = panel_open
- var/per = CLAMP(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 100)
- data["per"] = round(per, 1)
+ data["flush"] = flush ? ui.act("Disengage", user, "handle-0", class="active") : ui.act("Engage", user, "handle-1")
+ data["full_pressure"] = full_pressure ? "Ready" : (pressure_charging ? "Pressurizing" : "Off")
+ data["pressure_charging"] = pressure_charging ? ui.act("Turn Off", user, "pump-0", class="active", disabled=full_pressure) : ui.act("Turn On", user, "pump-1", disabled=full_pressure)
+ var/per = full_pressure ? 100 : CLAMP(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 99)
+ data["per"] = "[round(per, 1)]%"
+ data["contents"] = ui.act("Eject Contents", user, "eject", disabled=contents.len < 1)
data["isai"] = isAI(user)
return data
-/obj/machinery/disposal/bin/ui_act(action, params)
+/obj/machinery/disposal/bin/oui_act(mob/user, action, list/params)
if(..())
return
@@ -327,6 +345,7 @@
if("eject")
eject()
. = TRUE
+ ui.soft_update_fields()
/obj/machinery/disposal/bin/hitby(atom/movable/AM)
@@ -346,6 +365,7 @@
full_pressure = FALSE
pressure_charging = TRUE
update_icon()
+ ui.soft_update_fields()
/obj/machinery/disposal/bin/update_icon()
cut_overlays()
@@ -389,7 +409,7 @@
do_flush()
flush_count = 0
- updateDialog()
+ ui.soft_update_fields()
if(flush && air_contents.return_pressure() >= SEND_PRESSURE) // flush can happen even without power
do_flush()
diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm
index 71f7234e34..dae59408c8 100644
--- a/code/modules/research/designs/limbgrower_designs.dm
+++ b/code/modules/research/designs/limbgrower_designs.dm
@@ -8,7 +8,7 @@
build_type = LIMBGROWER
reagents_list = list("synthflesh" = 25)
build_path = /obj/item/bodypart/l_arm
- category = list("initial","human","lizard","fly","moth","plasmaman")
+ category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno")
/datum/design/rightarm
name = "Right Arm"
@@ -16,7 +16,7 @@
build_type = LIMBGROWER
reagents_list = list("synthflesh" = 25)
build_path = /obj/item/bodypart/r_arm
- category = list("initial","human","lizard","fly","moth","plasmaman")
+ category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno")
/datum/design/leftleg
name = "Left Leg"
@@ -24,7 +24,7 @@
build_type = LIMBGROWER
reagents_list = list("synthflesh" = 25)
build_path = /obj/item/bodypart/l_leg
- category = list("initial","human","lizard","fly","moth","plasmaman")
+ category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno")
/datum/design/rightleg
name = "Right Leg"
@@ -32,7 +32,7 @@
build_type = LIMBGROWER
reagents_list = list("synthflesh" = 25)
build_path = /obj/item/bodypart/r_leg
- category = list("initial","human","lizard","fly","moth","plasmaman")
+ category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno")
/datum/design/armblade
name = "Arm Blade"
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 33568524cd..301d2de279 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -192,6 +192,16 @@
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+/datum/design/bsblood_bag
+ name = "Blue Space Empty Blood Bag"
+ desc = "A large sterilized plastic bag for blood."
+ id = "bsblood_bag"
+ build_path = /obj/item/reagent_containers/blood/bluespace
+ build_type = PROTOLATHE
+ materials = list(MAT_GLASS = 2500, MAT_PLASTIC = 4500, MAT_BLUESPACE = 250)
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
/datum/design/cloning_disk
name = "Cloning Data Disk"
desc = "Produce additional disks for storing genetic data."
@@ -713,6 +723,13 @@
research_icon = 'icons/obj/surgery.dmi'
research_icon_state = "surgery_any"
var/surgery
+
+/datum/design/surgery/experimental_dissection
+ name = "Experimental Dissection"
+ desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database."
+ id = "surgery_exp_dissection"
+ surgery = /datum/surgery/advanced/bioware/experimental_dissection
+ research_icon_state = "surgery_chest"
/datum/design/surgery/lobotomy
name = "Lobotomy"
@@ -742,6 +759,13 @@
surgery = /datum/surgery/advanced/reconstruction
research_icon_state = "surgery_chest"
+/datum/design/surgery/surgery_toxinhealing
+ name = "Body Rejuvenation"
+ desc = "A surgical procedure that helps deal with oxygen deprecation, and treat toxic damaged. Works on corpses and alive alike without chemicals."
+ id = "surgery_toxinhealing"
+ surgery = /datum/surgery/advanced/toxichealing
+ research_icon_state = "surgery_chest"
+
/datum/design/surgery/revival
name = "Revival"
desc = "An experimental surgical procedure which involves reconstruction and reactivation of the patient's brain even long after death. The body must still be able to sustain life."
@@ -777,6 +801,22 @@
surgery = /datum/surgery/advanced/bioware/vein_threading
research_icon_state = "surgery_chest"
+/datum/design/surgery/ligament_hook
+ name = "Ligament Hook"
+ desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \
+ However this weakens the connection, making them easier to detach as well."
+ id = "surgery_ligament_hook"
+ surgery = /datum/surgery/advanced/bioware/ligament_hook
+ research_icon_state = "surgery_chest"
+
+/datum/design/surgery/ligament_reinforcement
+ name = "Ligament Reinforcement"
+ desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \
+ However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage."
+ id = "surgery_ligament_reinforcement"
+ surgery = /datum/surgery/advanced/bioware/ligament_reinforcement
+ research_icon_state = "surgery_chest"
+
/datum/design/surgery/necrotic_revival
name = "Necrotic Revival"
desc = "An experimental surgical procedure that stimulates the growth of a Romerol tumor inside the patient's brain. Requires zombie powder or rezadone."
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 4a6f9625f1..77eebca696 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -379,6 +379,16 @@
////////////Tools//////////////
///////////////////////////////
+/datum/design/rcd_upgrade
+ name = "Advanced RCD designs upgrade"
+ desc = "Adds the computer frame and machine frame to the RCD."
+ id = "rcd_upgrade"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 2500, MAT_SILVER = 1500, MAT_TITANIUM = 2000)
+ build_path = /obj/item/rcd_upgrade
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
/datum/design/exwelder
name = "Experimental Welding Tool"
desc = "An experimental welder capable of self-fuel generation."
diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm
index af004c4701..3cd296f866 100644
--- a/code/modules/research/stock_parts.dm
+++ b/code/modules/research/stock_parts.dm
@@ -13,6 +13,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
var/works_from_distance = FALSE
var/pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/rped.ogg'
var/alt_sound = null
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //cutting down on exploits
/obj/item/storage/part_replacer/pre_attack(obj/machinery/T, mob/living/user, params)
if(!istype(T) || !T.component_parts)
@@ -67,6 +68,7 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
icon = 'icons/obj/stock_parts.dmi'
w_class = WEIGHT_CLASS_SMALL
var/rating = 1
+ rad_flags = RAD_NO_CONTAMINATE
/obj/item/stock_parts/Initialize()
. = ..()
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 99397897c6..038a41b3cd 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -115,7 +115,7 @@
display_name = "Advanced Surgery"
description = "When simple medicine doesn't cut it."
prereq_ids = list("adv_biotech")
- design_ids = list("surgery_lobotomy", "surgery_reconstruction", "organbox")
+ design_ids = list("surgery_lobotomy", "surgery_reconstruction", "surgery_toxinhealing", "organbox", "surgery_exp_dissection")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -124,7 +124,7 @@
display_name = "Experimental Surgery"
description = "When evolution isn't fast enough."
prereq_ids = list("adv_surgery")
- design_ids = list("surgery_revival","surgery_pacify","surgery_vein_thread","surgery_nerve_splice","surgery_nerve_ground","surgery_viral_bond")
+ design_ids = list("surgery_revival","surgery_pacify","surgery_vein_thread","surgery_nerve_splice","surgery_nerve_ground","surgery_ligament_hook","surgery_ligament_reinforcement","surgery_viral_bond")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 5000
@@ -172,7 +172,7 @@
display_name = "Advanced Engineering"
description = "Pushing the boundaries of physics, one chainsaw-fist at a time."
prereq_ids = list("engineering", "emp_basic")
- design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription")
+ design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription", "rcd_upgrade")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
export_price = 5000
@@ -272,7 +272,7 @@
display_name = "Bluespace Pockets"
description = "Studies into the mysterious alternate dimension known as bluespace and how to place items in the threads of reality."
prereq_ids = list("adv_power", "adv_bluespace", "adv_biotech", "adv_plasma")
- design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding")
+ design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding", "bsblood_bag")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5500)
export_price = 5000
@@ -998,7 +998,7 @@
description = "Things used by the greys."
prereq_ids = list("biotech","engineering")
boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien,
- /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor,
+ /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor,
/obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 20000
@@ -1012,7 +1012,7 @@
prereq_ids = list("alientech", "adv_biotech")
design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery")
boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien,
- /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor,
+ /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor,
/obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 20000
@@ -1024,7 +1024,7 @@
description = "Alien engineering tools"
prereq_ids = list("alientech", "adv_engi")
design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool")
- boost_item_paths = list(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor,
+ boost_item_paths = list(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor,
/obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 20000
@@ -1088,4 +1088,4 @@
for(var/i in processing)
var/datum/techweb_node/TN = i
TW.add_point_list(TN.research_costs)
- return TW.printout_points()
+ return TW.printout_points()
\ No newline at end of file
diff --git a/code/modules/surgery/advanced/bioware/experimental_dissection.dm b/code/modules/surgery/advanced/bioware/experimental_dissection.dm
new file mode 100644
index 0000000000..6266480baf
--- /dev/null
+++ b/code/modules/surgery/advanced/bioware/experimental_dissection.dm
@@ -0,0 +1,72 @@
+/datum/surgery/advanced/bioware/experimental_dissection
+ name = "Experimental Dissection"
+ desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database."
+ steps = list(/datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/clamp_bleeders,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/dissection,
+ /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_CHEST)
+ bioware_target = BIOWARE_DISSECTION
+
+/datum/surgery/advanced/bioware/experimental_dissection/can_start(mob/user, mob/living/carbon/target)
+ . = ..()
+ if(iscyborg(user))
+ return FALSE //robots cannot be creative
+ //(also this surgery shouldn't be consistently successful, and cyborgs have a 100% success rate on surgery)
+ if(target.stat != DEAD)
+ return FALSE
+
+/datum/surgery_step/dissection
+ name = "dissection"
+ implements = list(/obj/item/scalpel = 60, /obj/item/kitchen/knife = 30, /obj/item/shard = 15)
+ time = 125
+
+/datum/surgery_step/dissection/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You start dissecting [target]. ",
+ "[user] starts dissecting [target].",
+ "[user] starts dissecting [target].")
+
+/datum/surgery_step/dissection/proc/check_value(mob/living/carbon/target)
+ if(isalienroyal(target))
+ return 10000
+ else if(isalienadult(target))
+ return 5000
+ else if(ismonkey(target))
+ return 1000
+ else if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(H.dna && H.dna.species)
+ if(isabductor(H))
+ return 8000
+ if(isgolem(H) || iszombie(H))
+ return 4000
+ if(isjellyperson(H) || ispodperson(H))
+ return 3000
+ return 2000
+
+/datum/surgery_step/dissection/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You dissect [target], and add your discoveries to the research database! ",
+ "[user] dissects [target], adding [user.p_their()] discoveries to the research database!",
+ "[user] dissects [target]!")
+ SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = check_value(target)))
+ var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
+ target.apply_damage(80, BRUTE, L)
+ new /datum/bioware/dissected(target)
+ return TRUE
+
+/datum/surgery_step/dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You dissect [target], but do not find anything particularly interesting. ",
+ "[user] dissects [target], however it seems [user.p_they()] didn't find anything useful.",
+ "[user] dissects [target], but looks a little dissapointed.")
+ SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = (check_value(target) * 0.2)))
+ var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
+ target.apply_damage(80, BRUTE, L)
+ new /datum/bioware/dissected(target)
+ return TRUE
+
+/datum/bioware/dissected
+ name = "Dissected"
+ desc = "This body has been dissected and analyzed. It is no longer worth experimenting on."
+ mod_type = BIOWARE_DISSECTION
\ No newline at end of file
diff --git a/code/modules/surgery/advanced/bioware/ligament_hook.dm b/code/modules/surgery/advanced/bioware/ligament_hook.dm
new file mode 100644
index 0000000000..2c154436e6
--- /dev/null
+++ b/code/modules/surgery/advanced/bioware/ligament_hook.dm
@@ -0,0 +1,45 @@
+/datum/surgery/advanced/bioware/ligament_hook
+ name = "Ligament Hook"
+ desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \
+ However this weakens the connection, making them easier to detach as well."
+ steps = list(/datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/clamp_bleeders,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/reshape_ligaments,
+ /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_CHEST)
+ bioware_target = BIOWARE_LIGAMENTS
+
+/datum/surgery_step/reshape_ligaments
+ name = "reshape ligaments"
+ accept_hand = TRUE
+ time = 125
+
+/datum/surgery_step/reshape_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You start reshaping [target]'s ligaments into a hook-like shape. ",
+ "[user] starts reshaping [target]'s ligaments into a hook-like shape.",
+ "[user] starts manipulating [target]'s ligaments.")
+
+/datum/surgery_step/reshape_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You finish reshaping [target]'s ligaments into a connective hook! ",
+ "[user] finishes reshaping [target]'s ligaments into a connective hook!",
+ "[user] finishes manipulating [target]'s ligaments!")
+ new /datum/bioware/hooked_ligaments(target)
+ return TRUE
+
+/datum/bioware/hooked_ligaments
+ name = "Hooked Ligaments"
+ desc = "The ligaments and nerve endings that connect the torso to the limbs are formed into a hook-like shape, so limbs can be attached without requiring surgery, but are easier to sever."
+ mod_type = BIOWARE_LIGAMENTS
+
+/datum/bioware/hooked_ligaments/on_gain()
+ ..()
+ ADD_TRAIT(owner, TRAIT_LIMBATTACHMENT, "ligament_hook")
+ ADD_TRAIT(owner, TRAIT_EASYDISMEMBER, "ligament_hook")
+
+/datum/bioware/hooked_ligaments/on_lose()
+ ..()
+ REMOVE_TRAIT(owner, TRAIT_LIMBATTACHMENT, "ligament_hook")
+ REMOVE_TRAIT(owner, TRAIT_EASYDISMEMBER, "ligament_hook")
\ No newline at end of file
diff --git a/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm
new file mode 100644
index 0000000000..ac034fcea7
--- /dev/null
+++ b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm
@@ -0,0 +1,45 @@
+/datum/surgery/advanced/bioware/ligament_reinforcement
+ name = "Ligament Reinforcement"
+ desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \
+ However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage."
+ steps = list(/datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/clamp_bleeders,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/reinforce_ligaments,
+ /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_CHEST)
+ bioware_target = BIOWARE_LIGAMENTS
+
+/datum/surgery_step/reinforce_ligaments
+ name = "reinforce ligaments"
+ accept_hand = TRUE
+ time = 125
+
+/datum/surgery_step/reinforce_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You start reinforcing [target]'s ligaments. ",
+ "[user] starts reinforcing [target]'s ligaments.",
+ "[user] starts manipulating [target]'s ligaments.")
+
+/datum/surgery_step/reinforce_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You finish reinforcing [target]'s ligaments! ",
+ "[user] finishes reinforcing [target]'s ligaments!",
+ "[user] finishes manipulating [target]'s ligaments!")
+ new /datum/bioware/reinforced_ligaments(target)
+ return TRUE
+
+/datum/bioware/reinforced_ligaments
+ name = "Reinforced Ligaments"
+ desc = "The ligaments and nerve endings that connect the torso to the limbs are protected by a mix of bone and tissues, and are much harder to separate from the body, but are also easier to disable."
+ mod_type = BIOWARE_LIGAMENTS
+
+/datum/bioware/reinforced_ligaments/on_gain()
+ ..()
+ ADD_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments")
+ ADD_TRAIT(owner, TRAIT_EASYLIMBDISABLE, "reinforced_ligaments")
+
+/datum/bioware/reinforced_ligaments/on_lose()
+ ..()
+ REMOVE_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments")
+ REMOVE_TRAIT(owner, TRAIT_EASYLIMBDISABLE, "reinforced_ligaments")
\ No newline at end of file
diff --git a/code/modules/surgery/advanced/toxichealing.dm b/code/modules/surgery/advanced/toxichealing.dm
new file mode 100644
index 0000000000..a82287831c
--- /dev/null
+++ b/code/modules/surgery/advanced/toxichealing.dm
@@ -0,0 +1,37 @@
+/datum/surgery/advanced/toxichealing
+ name = "Body Rejuvenation"
+ desc = "A surgical procedure that helps deal with oxygen deprecation, and treat toxic damaged. Works on corpses and alive alike without chemicals."
+ steps = list(/datum/surgery_step/incise,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/clamp_bleeders,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/toxichealing,
+ /datum/surgery_step/close)
+
+ species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
+ possible_locs = list(BODY_ZONE_CHEST)
+ requires_bodypart_type = 0
+
+/datum/surgery_step/toxichealing
+ name = "rejuvenate body"
+ implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
+ repeatable = TRUE
+ time = 25
+
+/datum/surgery_step/toxichealing/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] starts rejuvenating some of [target]'s flesh back to life.", "You start knitting some of [target]'s flesh back to life. ")
+
+/datum/surgery_step/toxichealing/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] fixes some of [target]'s wounds.", "You succeed in fixing some of [target]'s wounds. ")
+ target.heal_bodypart_damage(0,0,30) //Heals stam
+ target.adjustToxLoss(-15, 0, TRUE)
+ target.adjustOxyLoss(-20, 0)
+ return TRUE
+
+/datum/surgery_step/toxichealing/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] screws up!", "You screwed up! ")
+ target.take_bodypart_damage(25,0)
+ return FALSE
\ No newline at end of file
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index 81b491e6de..dffb7bf355 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -40,6 +40,7 @@
var/skin_tone = ""
var/body_gender = ""
var/species_id = ""
+ var/should_draw_citadel = FALSE
var/should_draw_gender = FALSE
var/should_draw_greyscale = FALSE
var/species_color = ""
@@ -48,8 +49,8 @@
var/body_markings = "" //for bodypart markings
var/body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi'
var/list/markings_color = list()
- var/auxmarking = ""
- var/list/auxmarking_color = list()
+ var/aux_marking
+ var/digitigrade_type
var/animal_origin = null //for nonhuman bodypart (e.g. monkey)
var/dismemberable = 1 //whether it can be dismembered with a weapon.
@@ -230,7 +231,7 @@
return BODYPART_DISABLED_PARALYSIS
if(can_dismember() && !HAS_TRAIT(owner, TRAIT_NODISMEMBER))
. = disabled //inertia, to avoid limbs healing 0.1 damage and being re-enabled
- if((get_damage(TRUE) >= max_damage))
+ if((get_damage(TRUE) >= max_damage) || (HAS_TRAIT(owner, TRAIT_EASYLIMBDISABLE) && (get_damage(TRUE) >= (max_damage * 0.6)))) //Easy limb disable disables the limb at 40% health instead of 0%
return BODYPART_DISABLED_DAMAGE
if(disabled && (get_damage(TRUE) <= (max_damage * 0.5)))
return BODYPART_NOT_DISABLED
@@ -309,7 +310,7 @@
should_draw_greyscale = FALSE
no_update = TRUE
body_markings = "husk" // reeee
- auxmarking = "husk"
+ aux_marking = "husk"
if(no_update)
return
@@ -351,6 +352,13 @@
else
species_color = ""
+ if("legs" in S.default_features)
+ if(body_zone == BODY_ZONE_L_LEG || body_zone == BODY_ZONE_R_LEG)
+ if(DIGITIGRADE in S.species_traits)
+ digitigrade_type = lowertext(H.dna.features.["legs"])
+ else
+ digitigrade_type = null
+
if("mam_body_markings" in S.default_features)
var/datum/sprite_accessory/Smark
Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]]
@@ -358,15 +366,15 @@
body_markings_icon = Smark.icon
if(H.dna.features.["mam_body_markings"] != "None")
body_markings = lowertext(H.dna.features.["mam_body_markings"])
- auxmarking = lowertext(H.dna.features.["mam_body_markings"])
+ aux_marking = lowertext(H.dna.features.["mam_body_markings"])
else
body_markings = "plain"
- auxmarking = "plain"
+ aux_marking = "plain"
markings_color = list(colorlist)
else
body_markings = null
- auxmarking = null
+ aux_marking = null
if(!dropping_limb && H.dna.check_mutation(HULK))
mutation_color = "00aa00"
@@ -381,7 +389,7 @@
if(status == BODYPART_ROBOTIC)
dmg_overlay_type = "robotic"
body_markings = null
- auxmarking = null
+ aux_marking = null
if(dropping_limb)
no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner.
@@ -423,7 +431,7 @@
else
. += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
- . += image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
+ . += image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir)
var/image/aux
@@ -453,21 +461,25 @@
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
else if(use_digitigrade)
- limb.icon_state = "digitigrade_[use_digitigrade]_[body_zone]"
+ limb.icon_state = "[digitigrade_type]_[use_digitigrade]_[body_zone]"
else
limb.icon_state = "[species_id]_[body_zone]"
else
limb.icon = 'icons/mob/human_parts.dmi'
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
+ else if(use_digitigrade)
+ limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]"
else
limb.icon_state = "[species_id]_[body_zone]"
// Citadel Start
- if(should_draw_citadel && !use_digitigrade)
+ if(should_draw_citadel)
limb.icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi'
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
+ else if(use_digitigrade)
+ limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]"
else
limb.icon_state = "[species_id]_[body_zone]"
@@ -476,7 +488,7 @@
if(species_id == "husk")
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
else if(species_id == "husk" && use_digitigrade)
- marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
+ marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
if(body_zone == BODY_ZONE_CHEST)
@@ -484,20 +496,21 @@
else
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
- marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
+ marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
+
. += marking
// Citadel End
if(aux_zone)
aux = image(limb.icon, "[species_id]_[aux_zone]", -aux_layer, image_dir)
- . += aux
- if(!isnull(auxmarking))
+ if(!isnull(aux_marking))
if(species_id == "husk")
auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
else
auxmarking = image(body_markings_icon, "[body_markings]_[aux_zone]", -aux_layer, image_dir)
- . += auxmarking
+ . += aux
+ . += auxmarking
else
limb.icon = icon
@@ -509,7 +522,7 @@
if(aux_zone)
aux = image(limb.icon, "[aux_zone]", -aux_layer, image_dir)
. += aux
- if(!isnull(auxmarking))
+ if(!isnull(aux_marking))
if(species_id == "husk")
auxmarking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[aux_zone]", -aux_layer, image_dir)
else
@@ -528,7 +541,7 @@
else
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
- marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
+ marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += marking
return
@@ -538,8 +551,11 @@
limb.color = "#[draw_color]"
if(aux_zone)
aux.color = "#[draw_color]"
- if(!isnull(auxmarking))
- auxmarking.color = list(markings_color)
+ if(!isnull(aux_marking))
+ if(species_id == "husk")
+ auxmarking.color = "#141414"
+ else
+ auxmarking.color = list(markings_color)
if(!isnull(body_markings))
if(species_id == "husk")
diff --git a/code/modules/surgery/embalming.dm b/code/modules/surgery/embalming.dm
new file mode 100644
index 0000000000..f74d864245
--- /dev/null
+++ b/code/modules/surgery/embalming.dm
@@ -0,0 +1,31 @@
+/datum/surgery/embalming //Fast and easy way to husk bodys
+ name = "Embalming"
+ desc = "A surgical procedure that prevents a corps from producing."
+ steps = list(/datum/surgery_step/incise,
+ /datum/surgery_step/embalming,
+ /datum/surgery_step/close)
+
+ species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
+ possible_locs = list(BODY_ZONE_CHEST)
+ requires_bodypart_type = 0
+
+/datum/surgery_step/embalming
+ name = "embalming body"
+ implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
+ implements = list(/obj/item/reagent_containers/syringe = 100, /obj/item/pen = 30)
+ time = 10
+ chems_needed = list("drying_agent", "sterilizine")
+ require_all_chems = FALSE
+
+/datum/surgery_step/embalming/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] starts to embalm [target]'s body.", "You start embalming [target]'s body. ")
+
+/datum/surgery_step/embalming/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] embalms [target]'s body.", "You succeed in embalming [target]'s body. ")
+ ADD_TRAIT(target, TRAIT_HUSK, MAGIC_TRAIT) //Husk's prevent body smell
+ return FALSE
+
+/datum/surgery_step/embalming/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] screws up!", "You screwed up! ")
+ ADD_TRAIT(target, TRAIT_NOCLONE, MAGIC_TRAIT) //That body is ruined, but still gives miasma
+ return FALSE
\ No newline at end of file
diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm
index 0ba6fd7fcd..2cc5c554c6 100644
--- a/code/modules/surgery/organs/autosurgeon.dm
+++ b/code/modules/surgery/organs/autosurgeon.dm
@@ -99,6 +99,9 @@
/obj/item/autosurgeon/reviver
starting_organ = /obj/item/organ/cyberimp/chest/reviver
+/obj/item/autosurgeon/anti_drop
+ starting_organ = /obj/item/organ/cyberimp/brain/anti_drop
+
/obj/item/autosurgeon/penis
desc = "A single use autosurgeon that contains a penis. A screwdriver can be used to remove it, but implants can't be placed back in."
uses = 1
diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm
index eeaaaf2a03..40d11ca2a4 100644
--- a/code/modules/surgery/organs/eyes.dm
+++ b/code/modules/surgery/organs/eyes.dm
@@ -321,7 +321,7 @@
if(!istype(parent))
return INITIALIZE_HINT_QDEL
-/obj/item/organ/eyes/moth
- name = "moth eyes"
+/obj/item/organ/eyes/insect
+ name = "insect eyes"
desc = "These eyes seem to have increased sensitivity to bright light, with no improvement to low light vision."
flash_protect = -1
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 781fdb24f5..09e955d2f9 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -1838,7 +1838,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
desc = "A single-use autoinjector which contains an experimental serum that causes rapid muscular growth in Hominidae. \
Side-affects may include hypertrichosis, violent outbursts, and an unending affinity for bananas."
item = /obj/item/reagent_containers/hypospray/magillitis
- cost = 15
+ cost = 8
restricted_roles = list("Geneticist", "Chief Medical Officer")
/datum/uplink_item/role_restricted/modified_syringe_gun
diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm
index a265a4e907..c577643df3 100644
--- a/code/modules/vending/autodrobe.dm
+++ b/code/modules/vending/autodrobe.dm
@@ -54,7 +54,7 @@
/obj/item/clothing/head/ushanka = 1,
/obj/item/clothing/suit/imperium_monk = 1,
/obj/item/clothing/mask/gas/cyborg = 1,
- /obj/item/clothing/suit/holidaypriest = 1,
+ /obj/item/clothing/suit/chaplain/holidaypriest = 1,
/obj/item/clothing/head/wizard/marisa/fake = 1,
/obj/item/clothing/suit/wizrobe/marisa/fake = 1,
/obj/item/clothing/under/sundress = 1,
@@ -122,7 +122,7 @@
/obj/item/clothing/shoes/roman = 1,
/obj/item/shield/riot/roman/fake = 1,
/obj/item/skub = 1,
- /obj/item/clothing/under/lobster = 1, // CIT CHANGES
+ /obj/item/clothing/under/lobster = 1, // CIT CHANGES
/obj/item/clothing/head/lobsterhat = 1,
/obj/item/clothing/head/drfreezehat = 1,
/obj/item/clothing/suit/dracula = 1,
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index 1497992fe8..b232184975 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -99,7 +99,9 @@
/obj/item/clothing/suit/jacket/letterman_red = 3,
/obj/item/clothing/ears/headphones = 10,
/obj/item/clothing/suit/apron/purple_bartender = 4,
- /obj/item/clothing/under/rank/bartender/purple = 4)
+ /obj/item/clothing/under/rank/bartender/purple = 4,
+ /obj/item/clothing/accessory/attrocious_pokadots = 8,
+ /obj/item/clothing/accessory/black_white_pokadots = 8)
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3,
/obj/item/clothing/under/syndicate/tacticool/skirt = 3,
/obj/item/clothing/mask/balaclava = 3,
@@ -109,7 +111,8 @@
/obj/item/clothing/suit/jacket/letterman_syndie = 5,
/obj/item/clothing/under/jabroni = 2,
/obj/item/clothing/suit/vapeshirt = 2,
- /obj/item/clothing/under/geisha = 4)
+ /obj/item/clothing/under/geisha = 4,
+ /obj/item/clothing/accessory/syndi_pokadots = 4)
premium = list(/obj/item/clothing/under/suit_jacket/checkered = 4,
/obj/item/clothing/head/mailman = 2,
/obj/item/clothing/under/rank/mailman = 2,
@@ -117,7 +120,8 @@
/obj/item/clothing/suit/jacket/leather/overcoat = 4,
/obj/item/clothing/under/pants/mustangjeans = 3,
/obj/item/clothing/neck/necklace/dope = 5,
- /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5)
+ /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5,
+ /obj/item/clothing/accessory/nt_pokadots = 5)
refill_canister = /obj/item/vending_refill/clothing
/obj/item/vending_refill/clothing
diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm
index 749a3b7c2b..3b036c0d90 100644
--- a/code/modules/vending/drinnerware.dm
+++ b/code/modules/vending/drinnerware.dm
@@ -9,7 +9,9 @@
/obj/item/kitchen/rollingpin = 2,
/obj/item/reagent_containers/food/drinks/drinkingglass = 8,
/obj/item/clothing/suit/apron/chef = 2,
+ /obj/item/storage/box/cups = 2,
/obj/item/reagent_containers/food/condiment/pack/ketchup = 5,
+ /obj/item/reagent_containers/food/condiment/pack/mustard = 5,
/obj/item/reagent_containers/food/condiment/pack/hotsauce = 5,
/obj/item/reagent_containers/food/condiment/pack/astrotame = 5,
/obj/item/reagent_containers/food/condiment/saltshaker = 5,
diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm
index 9358d1652f..1b66dd5eb6 100644
--- a/code/modules/vending/engivend.dm
+++ b/code/modules/vending/engivend.dm
@@ -7,12 +7,12 @@
products = list(/obj/item/clothing/glasses/meson/engine = 5,
/obj/item/clothing/glasses/welding = 5,
/obj/item/multitool = 5,
- /obj/item/construction/rcd/loaded = 3,
+ /obj/item/construction/rcd/loaded/upgraded = 3,
/obj/item/grenade/chem_grenade/smart_metal_foam = 10,
/obj/item/geiger_counter = 6,
/obj/item/stock_parts/cell/high = 10,
- /obj/item/electronics/airlock = 10,
- /obj/item/electronics/apc = 10,
+ /obj/item/electronics/airlock = 10,
+ /obj/item/electronics/apc = 10,
/obj/item/electronics/airalarm = 10,
/obj/item/electronics/firealarm = 10,
/obj/item/electronics/firelock = 10,
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 015890419d..fbc7713f25 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -227,8 +227,8 @@
name = "ChefDrobe"
desc = "This vending machine might not dispense meat, but it certainly dispenses chef related clothing."
icon_state = "chefdrobe"
- product_ads = "Our clothes are guaranteed to protect you from food splatters!"
- vend_reply = "Thank you for using the ChefDrobe!"
+ product_ads = "Our clothes are guaranteed to protect you from food splatters!;Now stocking recipe books!"
+ vend_reply = "Thank you for using the ChefDrobe!;Just like your grandmother's old recipes!"
products = list(/obj/item/clothing/under/waiter = 3,
/obj/item/radio/headset/headset_srv = 4,
/obj/item/clothing/accessory/waistcoat = 3,
@@ -241,7 +241,8 @@
/obj/item/clothing/under/rank/chef/skirt = 2,
/obj/item/clothing/head/chefhat = 2,
/obj/item/reagent_containers/rag = 3,
- /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2)
+ /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2,
+ /obj/item/book/granter/crafting_recipe/coldcooking = 2)
refill_canister = /obj/item/vending_refill/wardrobe/chef_wardrobe
/obj/item/vending_refill/wardrobe/chef_wardrobe
@@ -317,10 +318,10 @@
/obj/item/clothing/under/rank/chaplain = 2,
/obj/item/clothing/under/rank/chaplain/skirt = 2,
/obj/item/clothing/shoes/sneakers/black = 2,
- /obj/item/clothing/suit/nun = 2,
+ /obj/item/clothing/suit/chaplain/nun = 2,
/obj/item/clothing/head/nun_hood = 2,
- /obj/item/clothing/suit/holidaypriest = 2,
- /obj/item/clothing/suit/pharaoh = 2,
+ /obj/item/clothing/suit/chaplain/holidaypriest = 2,
+ /obj/item/clothing/suit/chaplain/pharaoh = 2,
/obj/item/clothing/head/nemes = 1,
/obj/item/clothing/head/pharaoh = 1,
/obj/item/storage/fancy/candle_box = 3)
diff --git a/config/game_options.txt b/config/game_options.txt
index 6d59f10807..2e346ce0ac 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -410,7 +410,7 @@ ROUNDSTART_RACES human
## Races that are strictly worse than humans that could probably be turned on without balance concerns
ROUNDSTART_RACES lizard
#ROUNDSTART_RACES fly
-#ROUNDSTART_RACES moth
+#ROUNDSTART_RACES insect
ROUNDSTART_RACES plasmaman
#ROUNDSTART_RACES shadow
ROUNDSTART_RACES felinid
diff --git a/html/changelogs/AutoChangeLog-pr-8649.yml b/html/changelogs/AutoChangeLog-pr-8649.yml
new file mode 100644
index 0000000000..c8f61cc24e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8649.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - tweak: "The default amount of z-levels reserved specifically for space ruin generation has been increased from 1 to 2"
diff --git a/html/changelogs/AutoChangeLog-pr-8914.yml b/html/changelogs/AutoChangeLog-pr-8914.yml
new file mode 100644
index 0000000000..ea7f548d6a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8914.yml
@@ -0,0 +1,13 @@
+author: "Ghommie (original PRs by Mickyan, Anturk, ShizCalev, nemvar and Naksu)"
+delete-after: True
+changes:
+ - rscadd: "After rigorous mandatory art training for the crew, many new graffiti styles are now available"
+ - bugfix: "Cleaned up some crayon and spraycan code for futureproofing."
+ - bugfix: "Spraypainting blast doors no longer makes them see-through."
+ - balance: "Paint remover now works on blast doors and the like."
+ - rscadd: "Most objects can now be colored using a spray can."
+ - spellcheck: "Added visible message to spraying objects and windows."
+ - rscadd: "Colored lights now shine in different colours."
+ - rscdel: "Removed individual buttons text in crayon/spraycan UI, speeding it up."
+ - bugfix: "Text mode buffer is actually visible in the UI."
+ - tweak: "Last letter of a text mode buffer no longer rotates out to be replaced with \"a\", allowing the text mode to be used for individual symbols."
diff --git a/html/changelogs/AutoChangeLog-pr-8932.yml b/html/changelogs/AutoChangeLog-pr-8932.yml
new file mode 100644
index 0000000000..d9038ef1a5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8932.yml
@@ -0,0 +1,7 @@
+author: "EmeraldSundisk"
+delete-after: True
+changes:
+ - rscadd: "Adds a gun range to Box Station"
+ - rscadd: "Provides some extra power grid connections"
+ - rscdel: "Sunglasses and Earmuffs removed from the Warden's Office - they can be found at the range instead"
+ - tweak: "Rearranges a few objects within the prison as to accommodate the new gun range"
diff --git a/html/changelogs/AutoChangeLog-pr-9057.yml b/html/changelogs/AutoChangeLog-pr-9057.yml
new file mode 100644
index 0000000000..4df1b23ca7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9057.yml
@@ -0,0 +1,4 @@
+author: "EgoSumStultus"
+delete-after: True
+changes:
+ - rscadd: "Adds male AI vox."
diff --git a/html/changelogs/AutoChangeLog-pr-9077.yml b/html/changelogs/AutoChangeLog-pr-9077.yml
new file mode 100644
index 0000000000..2f42e36dd6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9077.yml
@@ -0,0 +1,8 @@
+author: "original by actioninja, port by sishen1542"
+delete-after: True
+changes:
+ - tweak: "Medical and Security consoles now check access on worn or inhand ID instead of requiring an inserted ID"
+ - tweak: "mining vendor now reads from ID in hand or on person instead of requiring an inserted ID"
+ - bugfix: "ORM is functional again (for real this time)"
+ - tweak: "ORM claim points button transfers points to worn/inhand ID instead of to an inserted ID, no longer accepts insertions"
+ - tweak: "Same for gulag consoles"
diff --git a/html/changelogs/AutoChangeLog-pr-9086.yml b/html/changelogs/AutoChangeLog-pr-9086.yml
new file mode 100644
index 0000000000..4dea682d47
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9086.yml
@@ -0,0 +1,4 @@
+author: "original by TheChosenEvilOne, port by sishen1542"
+delete-after: True
+changes:
+ - rscadd: "Ported dynamic mode from /vg/, originally made by @DeityLink, @Kurfursten and @ShiftyRail"
diff --git a/html/changelogs/AutoChangeLog-pr-9089.yml b/html/changelogs/AutoChangeLog-pr-9089.yml
new file mode 100644
index 0000000000..dc1e351f25
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9089.yml
@@ -0,0 +1,6 @@
+author: "original by Tlaltecuhtli, port by sishen1542"
+delete-after: True
+changes:
+ - rscadd: "rcd disk that gives rcd computer frame and machine frame designs"
+ - rscadd: "upgraded rcd in CE lockers"
+ - tweak: "moved deconstruction to the upgrade disk, ashwalker rcd comes upgraded"
diff --git a/html/changelogs/AutoChangeLog-pr-9099.yml b/html/changelogs/AutoChangeLog-pr-9099.yml
new file mode 100644
index 0000000000..d3caa658f2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9099.yml
@@ -0,0 +1,6 @@
+author: "Fermis"
+delete-after: True
+changes:
+ - tweak: "tweaked Neurotoxin"
+ - balance: "added more depth to Neurotoxin"
+ - bugfix: "fixed the inability to create Neurotoxin"
diff --git a/html/changelogs/AutoChangeLog-pr-9109.yml b/html/changelogs/AutoChangeLog-pr-9109.yml
new file mode 100644
index 0000000000..137ca7f325
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9109.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "amazing things like tea of catnip, catnip and plant"
diff --git a/html/changelogs/AutoChangeLog-pr-9122.yml b/html/changelogs/AutoChangeLog-pr-9122.yml
new file mode 100644
index 0000000000..1d3ff248fb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9122.yml
@@ -0,0 +1,6 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - rscadd: "fun"
+ - rscdel: "bad stuff"
+ - balance: "mech bad"
diff --git a/html/changelogs/AutoChangeLog-pr-9147.yml b/html/changelogs/AutoChangeLog-pr-9147.yml
new file mode 100644
index 0000000000..7f1dcb7e7e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9147.yml
@@ -0,0 +1,5 @@
+author: "Code-Cygnet"
+delete-after: True
+changes:
+ - rscadd: "Added new things - Mind trait, alcohol reagent, chemical reagent, drink sprite and recipe."
+ - imageadd: "added commander_and_chief sprite to drinks.dmi"
diff --git a/html/changelogs/AutoChangeLog-pr-9170.yml b/html/changelogs/AutoChangeLog-pr-9170.yml
new file mode 100644
index 0000000000..566d427605
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9170.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "tons of peach themed items"
+ - spellcheck: "caje"
diff --git a/html/changelogs/AutoChangeLog-pr-9189.yml b/html/changelogs/AutoChangeLog-pr-9189.yml
new file mode 100644
index 0000000000..cf9b0c70a3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9189.yml
@@ -0,0 +1,5 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - rscadd: "made laser minigun not shitcode and also craftable"
+ - soundadd: "added new fire sounds for the laser minigun"
diff --git a/html/changelogs/AutoChangeLog-pr-9191.yml b/html/changelogs/AutoChangeLog-pr-9191.yml
new file mode 100644
index 0000000000..242e268017
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9191.yml
@@ -0,0 +1,6 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - rscadd: "can now carry people on your back by aggressive grabbing them while they are laying down and then dragging their sprite onto yours."
+ - tweak: "dragging people who are prone is now much slower, and carrying them will allow you to move faster at the cost of taking 5 seconds to lift them up onto your back."
+ - tweak: "pacifists can now aggressive grab (cannot table slam people though)"
diff --git a/html/changelogs/AutoChangeLog-pr-9199.yml b/html/changelogs/AutoChangeLog-pr-9199.yml
new file mode 100644
index 0000000000..bf0219c7d9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9199.yml
@@ -0,0 +1,7 @@
+author: "Tupinambis"
+delete-after: True
+changes:
+ - balance: "added a small fire delay (3 ticks) to automatic shotguns"
+ - balance: "Reduced buckshot brute damage by 20%. (12.5 -> 10 brute per pellet) (75 -> 60 brute at close range)"
+ - balance: "Reduced rubbershot stamina damage by 40% (25 -> 15 stamina per pellet) (150 -> 90 stamina at close range)"
+ - balance: "Reduced beanbag stamina damage by 12.5% (80 -> 70 stamina per shot)"
diff --git a/html/changelogs/AutoChangeLog-pr-9203.yml b/html/changelogs/AutoChangeLog-pr-9203.yml
new file mode 100644
index 0000000000..0ad87d26c1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9203.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - imageadd: "redid brass tools to look better*"
diff --git a/html/changelogs/AutoChangeLog-pr-9209.yml b/html/changelogs/AutoChangeLog-pr-9209.yml
new file mode 100644
index 0000000000..5ed81d6856
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9209.yml
@@ -0,0 +1,4 @@
+author: "original by redmoogle, port by sishen1542"
+delete-after: True
+changes:
+ - rscadd: "Added support for 3 new gasses; Tritium, Pluoxium, and BZ"
diff --git a/html/changelogs/AutoChangeLog-pr-9212.yml b/html/changelogs/AutoChangeLog-pr-9212.yml
new file mode 100644
index 0000000000..48e8b8b4d3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9212.yml
@@ -0,0 +1,5 @@
+author: "dapnee"
+delete-after: True
+changes:
+ - rscadd: "Plasmaglass tables, spears, tiny plasmaglass shards"
+ - bugfix: "Plasmaglass structures now drop plasmaglass shards instead of nothing"
diff --git a/html/changelogs/AutoChangeLog-pr-9221.yml b/html/changelogs/AutoChangeLog-pr-9221.yml
new file mode 100644
index 0000000000..0256c4a7c9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9221.yml
@@ -0,0 +1,9 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - rscadd: "holy lasrifle, hypertool, divine lightblade, and blessed baseball bat. Four new holy weapons!"
+ - balance: "stamina and force tweaks for most holy weapons."
+ - tweak: "prayer beads no longer deconvert after a 10 second timer, now just inject holy water for delayed effect"
+ - tweak: "cultist runes are now destroyed with a bible or a null rod"
+ - tweak: "bo-staff now functions as a nerfed sleepy carp staff"
+ - bugfix: "fixed kevinz code to add in non-null rod child items as holy weapons"
diff --git a/html/changelogs/AutoChangeLog-pr-9227.yml b/html/changelogs/AutoChangeLog-pr-9227.yml
new file mode 100644
index 0000000000..9f6bfabdc4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9227.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - bugfix: "Missing sprites with bad ones"
diff --git a/html/changelogs/AutoChangeLog-pr-9229.yml b/html/changelogs/AutoChangeLog-pr-9229.yml
new file mode 100644
index 0000000000..5c617f6ab0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9229.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "emag charge amount"
diff --git a/html/changelogs/AutoChangeLog-pr-9235.yml b/html/changelogs/AutoChangeLog-pr-9235.yml
new file mode 100644
index 0000000000..112f34a7f0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9235.yml
@@ -0,0 +1,5 @@
+author: "Yakumo Chen"
+delete-after: True
+changes:
+ - rscdel: "Removes autoscan"
+ - balance: "Scanning people now requires someone to operate the cloning computer regardless of part level."
diff --git a/html/changelogs/AutoChangeLog-pr-9238.yml b/html/changelogs/AutoChangeLog-pr-9238.yml
new file mode 100644
index 0000000000..b2eb8db233
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9238.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Surgerys and spays in bags"
diff --git a/html/changelogs/AutoChangeLog-pr-9239.yml b/html/changelogs/AutoChangeLog-pr-9239.yml
new file mode 100644
index 0000000000..781dcd82b6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9239.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "earthbloods stam regen"
diff --git a/html/changelogs/AutoChangeLog-pr-9241.yml b/html/changelogs/AutoChangeLog-pr-9241.yml
new file mode 100644
index 0000000000..1cb08cd8d0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9241.yml
@@ -0,0 +1,6 @@
+author: "Alonefromhell"
+delete-after: True
+changes:
+ - rscadd: "Ported Oracle UI, a framework for self-updating and neat UI's"
+ - refactor: "Paper now uses OUI"
+ - refactor: "Bins now use OUI"
diff --git a/html/changelogs/AutoChangeLog-pr-9242.yml b/html/changelogs/AutoChangeLog-pr-9242.yml
new file mode 100644
index 0000000000..1e47385e67
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9242.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - tweak: "blood cult ritual daggers fit in jack/combat boots"
diff --git a/html/changelogs/AutoChangeLog-pr-9247.yml b/html/changelogs/AutoChangeLog-pr-9247.yml
new file mode 100644
index 0000000000..4f6e0b0875
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9247.yml
@@ -0,0 +1,4 @@
+author: "Fermi"
+delete-after: True
+changes:
+ - bugfix: "Fixes tiny runaway decimals in reagents system."
diff --git a/html/changelogs/AutoChangeLog-pr-9248.yml b/html/changelogs/AutoChangeLog-pr-9248.yml
new file mode 100644
index 0000000000..3e6eff727c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9248.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - imageadd: "Red to Blue/Black crosses as questioned by Bhijn"
diff --git a/html/changelogs/AutoChangeLog-pr-9249.yml b/html/changelogs/AutoChangeLog-pr-9249.yml
new file mode 100644
index 0000000000..b2ef0c2d46
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9249.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - bugfix: "clean bot not cleaning basic cleanables"
diff --git a/html/changelogs/AutoChangeLog-pr-9251.yml b/html/changelogs/AutoChangeLog-pr-9251.yml
new file mode 100644
index 0000000000..c40c2e05fc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9251.yml
@@ -0,0 +1,5 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - tweak: "all chaplain suits can hold the same items in suit storage"
+ - code_imp: "improvement to organisation for chaplain suits"
diff --git a/html/changelogs/AutoChangeLog-pr-9256.yml b/html/changelogs/AutoChangeLog-pr-9256.yml
new file mode 100644
index 0000000000..dcf039a2a0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9256.yml
@@ -0,0 +1,4 @@
+author: "Fermi"
+delete-after: True
+changes:
+ - bugfix: "SDGF: Fixes infinite clones."
diff --git a/html/changelogs/AutoChangeLog-pr-9260.yml b/html/changelogs/AutoChangeLog-pr-9260.yml
new file mode 100644
index 0000000000..f94d9772f9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9260.yml
@@ -0,0 +1,4 @@
+author: "dapnee"
+delete-after: True
+changes:
+ - rscadd: "Trim lines!"
diff --git a/html/changelogs/AutoChangeLog-pr-9263.yml b/html/changelogs/AutoChangeLog-pr-9263.yml
new file mode 100644
index 0000000000..36a03fa125
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9263.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "new traitor bundle"
diff --git a/html/changelogs/AutoChangeLog-pr-9267.yml b/html/changelogs/AutoChangeLog-pr-9267.yml
new file mode 100644
index 0000000000..a894c0d468
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9267.yml
@@ -0,0 +1,4 @@
+author: "Tupinambis"
+delete-after: True
+changes:
+ - balance: "Engivend RCDs now vend upgraded RCDs"
diff --git a/html/changelogs/AutoChangeLog-pr-9269.yml b/html/changelogs/AutoChangeLog-pr-9269.yml
new file mode 100644
index 0000000000..693588208e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9269.yml
@@ -0,0 +1,5 @@
+author: "Fermis"
+delete-after: True
+changes:
+ - tweak: "re-enables femichem explosions in grenades."
+ - tweak: "adds nuance to the SDGF and hatmium explosions."
diff --git a/html/changelogs/AutoChangeLog-pr-9275.yml b/html/changelogs/AutoChangeLog-pr-9275.yml
new file mode 100644
index 0000000000..cd74273366
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9275.yml
@@ -0,0 +1,5 @@
+author: "Fermis"
+delete-after: True
+changes:
+ - bugfix: "Fixes analyse function on ChemMasters to correctly display purity."
+ - bugfix: "Fixes the custom transfer for buffer to beaker button."
diff --git a/html/changelogs/AutoChangeLog-pr-9276.yml b/html/changelogs/AutoChangeLog-pr-9276.yml
new file mode 100644
index 0000000000..f778c26c13
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9276.yml
@@ -0,0 +1,6 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "trash"
+ - imageadd: "eye bleed
+:add: misstakes"
diff --git a/html/changelogs/AutoChangeLog-pr-9277.yml b/html/changelogs/AutoChangeLog-pr-9277.yml
new file mode 100644
index 0000000000..4bf92cd32e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9277.yml
@@ -0,0 +1,11 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscadd: "Added new wings to Insects and separated fluff from old ones, they're Insect's new body markings now without being per-limb (for now)."
+ - rscadd: "Horns are now available to mammals, and they have their own color."
+ - rscadd: "Legs are no longer a binary hack code, but actually something that can be changed. Framework for tauric adaptations."
+ - rscdel: "Purged Modular Citadel's sprite_accessories."
+ - bugfix: "improved the quality of a number of sprites."
+ - tweak: "Moths are now all insects. Avians and Aquatics are all anthromorphics. Just as planned."
+ - rscadd: "Anthromorphs can choose their preferred gibbing meat. I guess. Snowflakes are weird."
+ - bugfix: "Additional Gentlemen names."
diff --git a/html/changelogs/AutoChangeLog-pr-9278.yml b/html/changelogs/AutoChangeLog-pr-9278.yml
new file mode 100644
index 0000000000..3ec1eb839a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9278.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - bugfix: "Spamming forged packets no longer crashes the server."
diff --git a/html/changelogs/AutoChangeLog-pr-9279.yml b/html/changelogs/AutoChangeLog-pr-9279.yml
new file mode 100644
index 0000000000..572f40e643
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9279.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed undergarments color preferences resetting each round."
diff --git a/html/changelogs/AutoChangeLog-pr-9282.yml b/html/changelogs/AutoChangeLog-pr-9282.yml
new file mode 100644
index 0000000000..5a27defb41
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9282.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed a few dozen suits' body coverage inconsistencies. These changes shouldn't affect armor and utility vests for most."
diff --git a/html/changelogs/AutoChangeLog-pr-9283.yml b/html/changelogs/AutoChangeLog-pr-9283.yml
new file mode 100644
index 0000000000..33e02f8539
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9283.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscdel: "Removed old things!"
diff --git a/html/changelogs/AutoChangeLog-pr-9288.yml b/html/changelogs/AutoChangeLog-pr-9288.yml
new file mode 100644
index 0000000000..8a684431bf
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9288.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - bugfix: "UI memes"
diff --git a/html/changelogs/AutoChangeLog-pr-9289.yml b/html/changelogs/AutoChangeLog-pr-9289.yml
new file mode 100644
index 0000000000..7abf947bfc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9289.yml
@@ -0,0 +1,4 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - bugfix: "fixing chems for strained muscles"
diff --git a/html/changelogs/AutoChangeLog-pr-9292.yml b/html/changelogs/AutoChangeLog-pr-9292.yml
new file mode 100644
index 0000000000..33168f9c43
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9292.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed clown shoes and work boots."
diff --git a/html/changelogs/AutoChangeLog-pr-9293.yml b/html/changelogs/AutoChangeLog-pr-9293.yml
new file mode 100644
index 0000000000..a99bf1ab41
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9293.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed some overlay bug that happens when legcuffed and then handcuffed."
diff --git a/html/changelogs/AutoChangeLog-pr-9295.yml b/html/changelogs/AutoChangeLog-pr-9295.yml
new file mode 100644
index 0000000000..a96540c11b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9295.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - balance: "Slowed down police baton and tele baton speed by 75%, should be still be faster than the legacy speed (2 seconds) by 0.6 seconds. Telescopic batons' stamina cost per swing is now on par with police batons, ergo more expensive."
diff --git a/html/changelogs/AutoChangeLog-pr-9296.yml b/html/changelogs/AutoChangeLog-pr-9296.yml
new file mode 100644
index 0000000000..101ec1aaa8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9296.yml
@@ -0,0 +1,9 @@
+author: "EmeraldSundisk"
+delete-after: True
+changes:
+ - rscadd: "Increases the number of plots to 9 (from 5)"
+ - rscadd: "Additional lighting placed directly outside the garden"
+ - tweak: "Cleans up the area to reflect use. Moves the seed extractor to a more central location"
+ - tweak: "Relocates the seed packs on botany's counter to the garden
+removal: Removes wooden barricades outside the garden"
+ - config: "Renames \"Abandoned Garden\" area designation to \"Maintenance Garden\", but does not replace the icon in Dream Maker"
diff --git a/html/changelogs/AutoChangeLog-pr-9298.yml b/html/changelogs/AutoChangeLog-pr-9298.yml
new file mode 100644
index 0000000000..8301acbbd6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9298.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed undershirts n socks colors prefs."
diff --git a/html/changelogs/AutoChangeLog-pr-9302.yml b/html/changelogs/AutoChangeLog-pr-9302.yml
new file mode 100644
index 0000000000..4f6ed4d336
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9302.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - bugfix: "Things that access job_preferences now explicitly access keys, which means it no longer attempts to access invalid indices and runtimes as a result."
diff --git a/html/changelogs/AutoChangeLog-pr-9304.yml b/html/changelogs/AutoChangeLog-pr-9304.yml
new file mode 100644
index 0000000000..f4a919c52f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9304.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Blue space blood bag"
diff --git a/html/changelogs/AutoChangeLog-pr-9306.yml b/html/changelogs/AutoChangeLog-pr-9306.yml
new file mode 100644
index 0000000000..0a560c8090
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9306.yml
@@ -0,0 +1,5 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - tweak: "voidcells can now unlock alien tech"
+ - balance: "rebalanced tech trees (not really)"
diff --git a/html/changelogs/AutoChangeLog-pr-9307.yml b/html/changelogs/AutoChangeLog-pr-9307.yml
new file mode 100644
index 0000000000..de787a4274
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9307.yml
@@ -0,0 +1,4 @@
+author: "BurgerLUA"
+delete-after: True
+changes:
+ - balance: "Rebalanced special jetpacks."
diff --git a/html/changelogs/AutoChangeLog-pr-9310.yml b/html/changelogs/AutoChangeLog-pr-9310.yml
new file mode 100644
index 0000000000..34ded5a0db
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9310.yml
@@ -0,0 +1,4 @@
+author: "GrayRachnid"
+delete-after: True
+changes:
+ - rscadd: "Added windoors to all the flaps on delta."
diff --git a/html/changelogs/AutoChangeLog-pr-9312.yml b/html/changelogs/AutoChangeLog-pr-9312.yml
new file mode 100644
index 0000000000..487b79393b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9312.yml
@@ -0,0 +1,9 @@
+author: "XDTM"
+delete-after: True
+changes:
+ - rscadd: "Added the experimental dissection surgery, which can be performed once per corpse to gain techweb points."
+ - rscadd: "Rarer specimens are more valuable, so xenos and rare species are more efficient subjects."
+ - rscadd: "Added two new surgery procedures, under the Experimental Surgery techweb node."
+ - rscadd: "Ligament Hook makes it so you can attach limbs manually (like skeletons) but makes dismemberment more likely as well."
+ - rscadd: "Ligament Reinforcement prevents dismemberment, but makes limbs easier to disable through damage."
+ - tweak: "Golem limbs can now be disabled, although they are still undismemberable."
diff --git a/html/changelogs/AutoChangeLog-pr-9317.yml b/html/changelogs/AutoChangeLog-pr-9317.yml
new file mode 100644
index 0000000000..11d58e79ce
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9317.yml
@@ -0,0 +1,7 @@
+author: "Ghommie (original PR by CrazyClown12)"
+delete-after: True
+changes:
+ - tweak: "The chloral hydrate inside of the sleepy pen is no longer slower acting than chloral hydrate made in chemistry."
+ - tweak: "The chloral hydrate inside of cookies synthesised by emagged borgs is no longer slower acting than chloral hydrate made in chemistry."
+ - balance: "Slight tirizene buff."
+ - rscdel: "Delayed chloral hydrate"
diff --git a/html/changelogs/AutoChangeLog-pr-9318.yml b/html/changelogs/AutoChangeLog-pr-9318.yml
new file mode 100644
index 0000000000..5f7f4af654
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9318.yml
@@ -0,0 +1,4 @@
+author: "Fermis"
+delete-after: True
+changes:
+ - bugfix: "Fixes small residues of chems that won't go away!"
diff --git a/html/changelogs/AutoChangeLog-pr-9320.yml b/html/changelogs/AutoChangeLog-pr-9320.yml
new file mode 100644
index 0000000000..605de17ab2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9320.yml
@@ -0,0 +1,5 @@
+author: "Ghommie (original PR by harmonyn)"
+delete-after: True
+changes:
+ - balance: "Resisting out of bucklecuffs takes more/less time depending on the handcuffs you used, i.e., fake handcuffs will not bucklecuff someone for ages."
+ - tweak: "fake handcuffs shouldn't no longer demoralize restrained criminals scums."
diff --git a/html/changelogs/AutoChangeLog-pr-9321.yml b/html/changelogs/AutoChangeLog-pr-9321.yml
new file mode 100644
index 0000000000..d0c4f6d18d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9321.yml
@@ -0,0 +1,6 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - bugfix: "blood halberd not going back to 17 force after unwielding"
+ - spellcheck: "unnecessary 's at the end of blood rites healing"
+ - rscadd: "QoL to blood rites, examine the ritual aura to view how many blood charges are left"
diff --git a/html/changelogs/AutoChangeLog-pr-9322.yml b/html/changelogs/AutoChangeLog-pr-9322.yml
new file mode 100644
index 0000000000..2d2632bb81
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9322.yml
@@ -0,0 +1,4 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - bugfix: "narsie no longer asks for consent"
diff --git a/html/changelogs/AutoChangeLog-pr-9326.yml b/html/changelogs/AutoChangeLog-pr-9326.yml
new file mode 100644
index 0000000000..582230dedb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9326.yml
@@ -0,0 +1,4 @@
+author: "YakumoChen"
+delete-after: True
+changes:
+ - tweak: "AEGs brought more in line with current radiation system. Try not to get EMP'd."
diff --git a/html/changelogs/AutoChangeLog-pr-9331.yml b/html/changelogs/AutoChangeLog-pr-9331.yml
new file mode 100644
index 0000000000..0ecd5dfad7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9331.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "You can now alt-click to rotate machinery such as the tachyon-droppler array or emitters again."
diff --git a/html/changelogs/AutoChangeLog-pr-9332.yml b/html/changelogs/AutoChangeLog-pr-9332.yml
new file mode 100644
index 0000000000..e8a2aa1faa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9332.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Sofas can't be wielded and transformed back into plain chairs anymore."
diff --git a/html/changelogs/AutoChangeLog-pr-9334.yml b/html/changelogs/AutoChangeLog-pr-9334.yml
new file mode 100644
index 0000000000..cc31ec8896
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9334.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - rscadd: "Enables emojis for PDA messages."
diff --git a/html/changelogs/AutoChangeLog-pr-9335.yml b/html/changelogs/AutoChangeLog-pr-9335.yml
new file mode 100644
index 0000000000..b36c0957dd
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9335.yml
@@ -0,0 +1,6 @@
+author: "Raptorizer"
+delete-after: True
+changes:
+ - tweak: "tweaked numbers/variables"
+ - balance: "rebalanced numbers/variables"
+ - spellcheck: "removed unneeded code"
diff --git a/html/changelogs/AutoChangeLog-pr-9336.yml b/html/changelogs/AutoChangeLog-pr-9336.yml
new file mode 100644
index 0000000000..3f86da234e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9336.yml
@@ -0,0 +1,8 @@
+author: "Fermis"
+delete-after: True
+changes:
+ - tweak: "tweaked beaker health and allows use of syringes/droppers on chem_heaters"
+ - soundadd: "added a sound for when beakers take temperature damage."
+ - imageadd: "added some icons for melting beakers"
+ - refactor: "refactored how beakers take damage"
+ - bugfix: "fixes how beakers would only take one instance of damage on pH damage"
diff --git a/html/changelogs/AutoChangeLog-pr-9338.yml b/html/changelogs/AutoChangeLog-pr-9338.yml
new file mode 100644
index 0000000000..e5909f52ae
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9338.yml
@@ -0,0 +1,4 @@
+author: "lolman360"
+delete-after: True
+changes:
+ - bugfix: "Fixes an undocumented change to the naming of Plasmamen."
diff --git a/html/changelogs/AutoChangeLog-pr-9341.yml b/html/changelogs/AutoChangeLog-pr-9341.yml
new file mode 100644
index 0000000000..e017f2941e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9341.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - tweak: "Blood cult altar, forge and archives now use radial menus."
diff --git a/html/changelogs/AutoChangeLog-pr-9342.yml b/html/changelogs/AutoChangeLog-pr-9342.yml
new file mode 100644
index 0000000000..75d441f143
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9342.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed some machineries' UIs."
diff --git a/html/changelogs/AutoChangeLog-pr-9344.yml b/html/changelogs/AutoChangeLog-pr-9344.yml
new file mode 100644
index 0000000000..c45c9269b6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9344.yml
@@ -0,0 +1,6 @@
+author: "Ghommie (original PRs by Time-Green and Qustinnus)"
+delete-after: True
+changes:
+ - tweak: "loot crates can't explode after unlocking anymore"
+ - bugfix: "jumping into loot crates no longers causes them to go boom"
+ - bugfix: "You can now deconstruct abandoned crates with a welder without making them go boom. After unlocking them, of course."
diff --git a/html/changelogs/AutoChangeLog-pr-9348.yml b/html/changelogs/AutoChangeLog-pr-9348.yml
new file mode 100644
index 0000000000..a58556b992
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9348.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - tweak: "blood and clock cultists messages from metabolizing"
diff --git a/html/changelogs/AutoChangeLog-pr-9349.yml b/html/changelogs/AutoChangeLog-pr-9349.yml
new file mode 100644
index 0000000000..e51b826f01
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9349.yml
@@ -0,0 +1,5 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed advanced medical scanners borg upgrades."
+ - bugfix: "Fixes certain borg upgrades being unapplicable on dogborg counterparts of the target cyborg type."
diff --git a/html/changelogs/AutoChangeLog-pr-9352.yml b/html/changelogs/AutoChangeLog-pr-9352.yml
new file mode 100644
index 0000000000..e34277b531
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9352.yml
@@ -0,0 +1,4 @@
+author: "JTGSZ"
+delete-after: True
+changes:
+ - tweak: "Gave Qualifies_for_Rank Check back its checks in job controller."
diff --git a/html/changelogs/AutoChangeLog-pr-9356.yml b/html/changelogs/AutoChangeLog-pr-9356.yml
new file mode 100644
index 0000000000..65aacda077
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9356.yml
@@ -0,0 +1,9 @@
+author: "EmeraldSundisk"
+delete-after: True
+changes:
+ - rscadd: "Expands the chapel mass driver room to make it easier to use"
+ - rscadd: "Rearranges the chapel backroom so there are now six coffins and burial garments roundstart"
+ - tweak: "Cleans up the Janitor's office"
+ - tweak: "Readjusts the station exterior so mass-driven coffins (hopefully) have less friction"
+ - bugfix: "Adds a fan to the chapel driver"
+ - bugfix: "The Janitor missed a few spots around the newly renovated Maintenance Garden"
diff --git a/html/changelogs/AutoChangeLog-pr-9359.yml b/html/changelogs/AutoChangeLog-pr-9359.yml
new file mode 100644
index 0000000000..1eb933e4c5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9359.yml
@@ -0,0 +1,6 @@
+author: "Bhijn"
+delete-after: True
+changes:
+ - balance: "The point production mode of radiation collectors has been reverted to the original behavior of using all of the stored power every process cycle instead of just 4% of it"
+ - tweak: "Radiation collectors now display the amount of power/research points they're producing per minute rather than per process cycle, which should hopefully clear up a lot of confusion."
+ - tweak: "Radiation collectors also display what's happening to the gas within them, which should make it a lot more obvious as to how you get tritium."
diff --git a/html/changelogs/AutoChangeLog-pr-9367.yml b/html/changelogs/AutoChangeLog-pr-9367.yml
new file mode 100644
index 0000000000..f875262781
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9367.yml
@@ -0,0 +1,6 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscadd: "Medical huds are now calibrated for Radioactive wavelengths."
+ - balance: "Engineering equipment, blue space, and common storage containers are radiation protected"
+ - bugfix: "fixed suit storage not cleaning radiation levels of everything stuffed into them."
diff --git a/html/oracle_ui/content/disposal_bin/index.html b/html/oracle_ui/content/disposal_bin/index.html
new file mode 100644
index 0000000000..8f7713b53c
--- /dev/null
+++ b/html/oracle_ui/content/disposal_bin/index.html
@@ -0,0 +1,27 @@
+
+
+ State:
+ @{full_pressure}
+
+
+
+
+
+ Compressor:
+ @{pressure_charging}
+
+
\ No newline at end of file
diff --git a/html/oracle_ui/editor_tool.html b/html/oracle_ui/editor_tool.html
new file mode 100644
index 0000000000..e0ce75bb29
--- /dev/null
+++ b/html/oracle_ui/editor_tool.html
@@ -0,0 +1,103 @@
+
+
+
+
+
+ OracleUI IDE
+
+
+
+
+
+
Data:
+
+
+
+
Output:
+
+
+
+
+
diff --git a/html/oracle_ui/themes/nano/index.html b/html/oracle_ui/themes/nano/index.html
new file mode 100644
index 0000000000..388f6e4ce4
--- /dev/null
+++ b/html/oracle_ui/themes/nano/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+ @{title}
+
+
+
+
+
+
+
+
diff --git a/html/oracle_ui/themes/nano/sui-nano-common.css b/html/oracle_ui/themes/nano/sui-nano-common.css
new file mode 100644
index 0000000000..481b81c3e3
--- /dev/null
+++ b/html/oracle_ui/themes/nano/sui-nano-common.css
@@ -0,0 +1,353 @@
+body
+{
+ padding: 0;
+ margin: 0;
+ background-color: #272727;
+ font-size: 12px;
+ color: #ffffff;
+ line-height: 170%;
+ cursor: default;
+ -moz-user-select: none;
+ -ms-user-select: none;
+}
+
+hr
+{
+ background-color: #40628a;
+ height: 1px;
+}
+
+a, a:link, a:visited, a:active, .linkOn, .linkOff
+{
+ color: #ffffff;
+ text-decoration: none;
+ background: #40628a;
+ border: 1px solid #161616;
+ padding: 1px 4px 1px 4px;
+ margin: 0 2px 0 0;
+ cursor:default;
+}
+
+a:hover
+{
+ color: #40628a;
+ background: #ffffff;
+}
+
+a.white, a.white:link, a.white:visited, a.white:active
+{
+ color: #40628a;
+ text-decoration: none;
+ background: #ffffff;
+ border: 1px solid #161616;
+ padding: 1px 4px 1px 4px;
+ margin: 0 2px 0 0;
+ cursor:default;
+}
+
+a.white:hover
+{
+ color: #ffffff;
+ background: #40628a;
+}
+
+.active, a.active:link, a.active:visited, a.active:active, a.active:hover
+{
+ color: #ffffff;
+ background: #2f943c;
+ border-color: #24722e;
+}
+
+.disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover
+{
+ color: #ffffff;
+ background: #999999;
+ border-color: #666666;
+}
+
+a.icon, .linkOn.icon, .linkOff.icon
+{
+ position: relative;
+ padding: 1px 4px 2px 20px;
+}
+
+a.icon img, .linkOn.icon img
+{
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 18px;
+ height: 18px;
+}
+
+ul
+{
+ padding: 4px 0 0 10px;
+ margin: 0;
+ list-style-type: none;
+}
+
+li
+{
+ padding: 0 0 2px 0;
+}
+
+img, a img
+{
+ border-style:none;
+}
+
+h1, h2, h3, h4, h5, h6
+{
+ margin: 0;
+ padding: 16px 0 8px 0;
+ color: #517087;
+}
+
+h1
+{
+ font-size: 15px;
+}
+
+h2
+{
+ font-size: 14px;
+}
+
+h3
+{
+ font-size: 13px;
+}
+
+h4
+{
+ font-size: 12px;
+}
+
+.uiWrapper
+{
+
+ width: 100%;
+ height: 100%;
+}
+
+.uiTitle
+{
+ clear: both;
+ padding: 6px 8px 6px 8px;
+ border-bottom: 2px solid #161616;
+ background: #383838;
+ color: #98B0C3;
+ font-size: 16px;
+}
+
+.uiTitle.icon
+{
+ padding: 6px 8px 6px 42px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+}
+
+.uiContent
+{
+ clear: both;
+ padding: 8px;
+ font-family: Verdana, Geneva, sans-serif;
+}
+
+.good
+{
+ color: #00ff00;
+}
+
+.average
+{
+ color: #d09000;
+}
+
+.bad
+{
+ color: #ff0000;
+}
+
+.highlight
+{
+ color: #8BA5C4;
+}
+
+.dark
+{
+ color: #272727;
+}
+
+.notice
+{
+ position: relative;
+ background: #E9C183;
+ color: #15345A;
+ font-size: 10px;
+ font-style: italic;
+ padding: 2px 4px 0 4px;
+ margin: 4px;
+}
+
+.notice.icon
+{
+ padding: 2px 4px 0 20px;
+}
+
+.notice img
+{
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 16px;
+ height: 16px;
+}
+
+div.notice
+{
+ clear: both;
+}
+
+.statusDisplay
+{
+ background: #000000;
+ color: #ffffff;
+ border: 1px solid #40628a;
+ padding: 4px;
+ margin: 3px 0;
+}
+
+.statusLabel
+{
+ width: 138px;
+ float: left;
+ overflow: hidden;
+ color: #98B0C3;
+}
+
+.statusValue
+{
+ float: left;
+}
+
+.block
+{
+ padding: 8px;
+ margin: 10px 4px 4px 4px;
+ border: 1px solid #40628a;
+ background-color: #202020;
+}
+
+.block h3
+{
+ padding: 0;
+}
+
+.progressBar
+{
+ position: relative;
+ width: 185px;
+ height: 14px;
+ border: 1px solid #666666;
+ float: left;
+ overflow: hidden;
+ padding: 1px;
+}
+
+.progressLabel
+{
+ top: -2px;
+ height: 100%;
+ position: absolute;
+ right: 4px;
+ text-align: right;
+}
+
+.progressFill
+{
+ width: 100%;
+ height: 100%;
+ background: #40628a;
+ overflow: hidden;
+ transition: width 2.2s linear;
+}
+
+.progressFill.good
+{
+ color: #ffffff;
+ background: #00ff00;
+}
+
+.progressFill.average
+{
+ color: #ffffff;
+ background: #d09000;
+}
+
+.progressFill.bad
+{
+ color: #ffffff;
+ background: #ff0000;
+}
+
+.progressFill.highlight
+{
+ color: #ffffff;
+ background: #8BA5C4;
+}
+
+.clearBoth
+{
+ clear: both;
+}
+
+.clearLeft
+{
+ clear: left;
+}
+
+.clearRight
+{
+ clear: right;
+}
+
+.line
+{
+ width: 100%;
+ clear: both;
+}
+
+section .label, section .content
+{
+ display: table-cell;
+ margin: 0;
+ text-align: left;
+ vertical-align: middle;
+ padding: 3px 2px
+}
+
+section .label
+{
+ width: 1%;
+ padding-right: 32px;
+ white-space: nowrap;
+ color: #8ba5c4;
+}
+
+section
+{
+ display: table-row;
+ width: 100%
+}
+
+.display {
+ width: calc(100% - 8px);
+ padding: 4px;
+ background-color: #000;
+ background-color: rgba(0, 0, 0, .33);
+ box-shadow: inset 0 0 5px rgba(0, 0, 0, .5);
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";
+ filter: progid: DXImageTransform.Microsoft.gradient(startColorStr=#54000000, endColorStr=#54000000);
+}
\ No newline at end of file
diff --git a/html/oracle_ui/themes/nano/sui-nano-common.js b/html/oracle_ui/themes/nano/sui-nano-common.js
new file mode 100644
index 0000000000..716891a53f
--- /dev/null
+++ b/html/oracle_ui/themes/nano/sui-nano-common.js
@@ -0,0 +1,47 @@
+function replaceContent(body) {
+ var maincontent = document.getElementById('maincontent');
+ if(maincontent) {
+ maincontent.innerHTML = body;
+ }
+}
+
+function updateProgressLabels() {
+ var progressBars = document.getElementsByClassName("progressBar");
+ for(var i = 0; i < progressBars.length; i++) {
+ var progressBar = progressBars[i];
+ if(!progressBar)
+ continue;
+ var progressFill = progressBar.getElementsByClassName("progressFill")[0];
+ if(!progressFill)
+ continue;
+ var width = parseInt(getComputedStyle(progressFill).width);
+ var maxWidth = parseInt(getComputedStyle(progressBar).width);
+ var progressLabel = progressBar.getElementsByClassName("progressLabel")[0];
+ if(progressLabel)
+ progressLabel.innerHTML = Math.round((width / maxWidth) * 100) + '%';
+ }
+}
+
+if(getComputedStyle) { setInterval(updateProgressLabels, 50); } //Fallback
+
+function updateFields(json) {
+ var fields = JSON.parse(json);
+ for (var key in fields) {
+ let value = fields[key];
+ var element = document.getElementById(key);
+ if(element == null) {
+ continue;
+ } else if(element.classList.contains('progressBar')) {
+ var progressFill = element.getElementsByClassName("progressFill")[0];
+ if(progressFill)
+ progressFill.style["width"] = value;
+ if(!getComputedStyle) { //Fallback
+ var progressLabel = element.getElementsByClassName("progressLabel")[0];
+ if(progressLabel)
+ progressLabel.innerHTML = value;
+ }
+ } else {
+ element.innerHTML = value;
+ }
+ }
+}
\ No newline at end of file
diff --git a/html/oracle_ui/themes/nano/sui-nano-jquery.min.js b/html/oracle_ui/themes/nano/sui-nano-jquery.min.js
new file mode 100644
index 0000000000..645c5adc18
--- /dev/null
+++ b/html/oracle_ui/themes/nano/sui-nano-jquery.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML=" ",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML=" ","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML=" ",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
+ if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" a ",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML=" ",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h ]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""," "],legend:[1,""," "],area:[1,""," "],param:[1,""," "],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:k.htmlSerialize?[0,"",""]:[1,"X","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" a ",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
+ },cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();ca ",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
\ No newline at end of file
diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi
index fcd27698e7..8c42e6610c 100644
Binary files a/icons/effects/crayondecal.dmi and b/icons/effects/crayondecal.dmi differ
diff --git a/icons/mob/accessories.dmi b/icons/mob/accessories.dmi
index 68f13c8875..33964645ee 100644
Binary files a/icons/mob/accessories.dmi and b/icons/mob/accessories.dmi differ
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 52822ed5be..b22f50623c 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/custom_w.dmi b/icons/mob/custom_w.dmi
index 1b917d9434..f29231c48d 100644
Binary files a/icons/mob/custom_w.dmi and b/icons/mob/custom_w.dmi differ
diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi
index e7598f35c9..118688aaba 100644
Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 09bfd9e0a2..25183c5cea 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 10474f94da..164fabe806 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/human_parts.dmi b/icons/mob/human_parts.dmi
index fc6fafb275..6bd504674f 100644
Binary files a/icons/mob/human_parts.dmi and b/icons/mob/human_parts.dmi differ
diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi
index 7f10d992bc..8b894fea6b 100644
Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ
diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi
index 2b39acd3d8..90d96492f2 100644
Binary files a/icons/mob/inhands/clothing_lefthand.dmi and b/icons/mob/inhands/clothing_lefthand.dmi differ
diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi
index ef6c9b3f06..c5e10b01df 100644
Binary files a/icons/mob/inhands/clothing_righthand.dmi and b/icons/mob/inhands/clothing_righthand.dmi differ
diff --git a/icons/mob/inhands/weapons/polearms_lefthand.dmi b/icons/mob/inhands/weapons/polearms_lefthand.dmi
index 5529edfa51..5e04b3daa3 100644
Binary files a/icons/mob/inhands/weapons/polearms_lefthand.dmi and b/icons/mob/inhands/weapons/polearms_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/polearms_righthand.dmi b/icons/mob/inhands/weapons/polearms_righthand.dmi
index e902dcdc3b..4b304cfc3e 100644
Binary files a/icons/mob/inhands/weapons/polearms_righthand.dmi and b/icons/mob/inhands/weapons/polearms_righthand.dmi differ
diff --git a/icons/mob/mutant_bodyparts.dmi b/icons/mob/mutant_bodyparts.dmi
index 19ebe0a4be..f8d1f22860 100644
Binary files a/icons/mob/mutant_bodyparts.dmi and b/icons/mob/mutant_bodyparts.dmi differ
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index c53fa85262..896a87ff3a 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index f783331c19..2506d9e629 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/mob/wings.dmi b/icons/mob/wings.dmi
index b2990a1509..58f4cb735c 100644
Binary files a/icons/mob/wings.dmi and b/icons/mob/wings.dmi differ
diff --git a/icons/obj/bloodpack.dmi b/icons/obj/bloodpack.dmi
index 3a5b9fd706..82b4c2e543 100644
Binary files a/icons/obj/bloodpack.dmi and b/icons/obj/bloodpack.dmi differ
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index b63e9344f1..5b9e13ed52 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/clothing/accessories.dmi b/icons/obj/clothing/accessories.dmi
index c62a88c829..eb019bc44b 100644
Binary files a/icons/obj/clothing/accessories.dmi and b/icons/obj/clothing/accessories.dmi differ
diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi
index 717937c034..da8ff0a20b 100644
Binary files a/icons/obj/clothing/belt_overlays.dmi and b/icons/obj/clothing/belt_overlays.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index e151808cb1..77029e36b6 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index 8d7bd55426..a042f30ea3 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 40844c9a29..b456f31a95 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi
index 601e32fb63..92f7f50279 100644
Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 7822cdb8c2..f9c1a197e7 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi
index f64dfd4740..d3bdc1b1ea 100644
Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ
diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi
index 6fda702cb3..75df4b5cc5 100644
Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ
diff --git a/icons/obj/food/piecake.dmi b/icons/obj/food/piecake.dmi
index df1e61c849..a74acb4e29 100644
Binary files a/icons/obj/food/piecake.dmi and b/icons/obj/food/piecake.dmi differ
diff --git a/icons/obj/food/snowcones.dmi b/icons/obj/food/snowcones.dmi
index bdaa89fdf7..8a06cf4e82 100644
Binary files a/icons/obj/food/snowcones.dmi and b/icons/obj/food/snowcones.dmi differ
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index 0ac8ccf566..0831d47577 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/icons/obj/hydroponics/growing_flowers.dmi b/icons/obj/hydroponics/growing_flowers.dmi
index 2752ad8dc5..2f541dfc9b 100644
Binary files a/icons/obj/hydroponics/growing_flowers.dmi and b/icons/obj/hydroponics/growing_flowers.dmi differ
diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index 5ced9cad20..7796e1b199 100644
Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ
diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi
index 55a7f60a5c..96fd5be650 100644
Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ
diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi
index 8788567b36..6336669501 100644
Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ
diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi
index 687fef6065..1e1033e38e 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ
diff --git a/icons/obj/machines/harvester.dmi b/icons/obj/machines/harvester.dmi
index d6d9b01fc6..ce272c5774 100644
Binary files a/icons/obj/machines/harvester.dmi and b/icons/obj/machines/harvester.dmi differ
diff --git a/icons/obj/machines/sleeper.dmi b/icons/obj/machines/sleeper.dmi
index b027d0d7b1..ff9e2b197a 100644
Binary files a/icons/obj/machines/sleeper.dmi and b/icons/obj/machines/sleeper.dmi differ
diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi
index b6ca8c178c..685b14cee5 100644
Binary files a/icons/obj/plushes.dmi and b/icons/obj/plushes.dmi differ
diff --git a/icons/obj/shards.dmi b/icons/obj/shards.dmi
index a575ab292f..e7875efa26 100644
Binary files a/icons/obj/shards.dmi and b/icons/obj/shards.dmi differ
diff --git a/icons/obj/smooth_structures/plasmaglass_table.dmi b/icons/obj/smooth_structures/plasmaglass_table.dmi
new file mode 100644
index 0000000000..808e79aa43
Binary files /dev/null and b/icons/obj/smooth_structures/plasmaglass_table.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index e5d61fbfe0..fae8134791 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi
index 80e681399a..59bc7a8e7c 100644
Binary files a/icons/obj/syringe.dmi and b/icons/obj/syringe.dmi differ
diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi
index c983201d5f..6130c67eb3 100644
Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ
diff --git a/icons/turf/decals.dmi b/icons/turf/decals.dmi
index f7f259ab04..616cb1f521 100644
Binary files a/icons/turf/decals.dmi and b/icons/turf/decals.dmi differ
diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm b/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm
index 1653b8d314..9d6c03d9f6 100644
--- a/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm
+++ b/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm
@@ -52,7 +52,7 @@
name = "Omni"
color = "#008080"
inner_outfits = list(/obj/item/clothing/under/color/teal)
- outer_outfits = list(/obj/item/clothing/suit/studentuni)
+ outer_outfits = list(/obj/item/clothing/suit/chaplain/studentuni)
/datum/team/gang/newton
name = "Newton"
@@ -64,7 +64,7 @@
name = "Cyber"
color = "#00f904" //Cyber and waffle shared colors, I made these guys green and made weed darker green.
inner_outfits = list(/obj/item/clothing/under/color/lightbrown)
- outer_outfits = list(/obj/item/clothing/suit/pharaoh)
+ outer_outfits = list(/obj/item/clothing/suit/chaplain/pharaoh)
/datum/team/gang/donk
name = "Donk"
diff --git a/modular_citadel/code/game/machinery/plasmacases.dm b/modular_citadel/code/game/machinery/plasmacases.dm
deleted file mode 100644
index c45eb48caa..0000000000
--- a/modular_citadel/code/game/machinery/plasmacases.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/obj/structure/guncase/plasma
- name = "plasma rifle locker"
- desc = "A locker that holds plasma rifles. Only opens in dire emergencies."
- icon_state = "ecase"
- case_type = "egun"
- gun_category = /obj/item/gun/energy/plasma
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //because fuck you, powergaming nerds.
-
-/obj/structure/guncase/plasma/attackby(obj/item/W, mob/user, params)
- return
-
-/obj/structure/guncase/plasma/MouseDrop(over_object, src_location, over_location)
- if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA)
- . = ..()
- else
- to_chat(usr, "The storage unit will only unlock during a Red or Delta security alert.")
-
-/obj/structure/guncase/plasma/attack_hand(mob/user)
- return MouseDrop(user)
-
-/obj/structure/guncase/plasma/emag_act()
- . = SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
- if(!.)
- to_chat(usr, "The locking mechanism is fitted with old style parts, The card has no effect.")
\ No newline at end of file
diff --git a/modular_citadel/code/game/objects/ids.dm b/modular_citadel/code/game/objects/ids.dm
index 89a3c0f0c2..8ef724581e 100644
--- a/modular_citadel/code/game/objects/ids.dm
+++ b/modular_citadel/code/game/objects/ids.dm
@@ -49,7 +49,7 @@
/obj/item/emagrecharge
name = "electromagnet charging device"
- desc = "A small cell with two prongs lazily jabbed into it. It looks like it's made for charging the small batteries found in electromagnetic devices."
+ desc = "A small cell with two prongs lazily jabbed into it. It looks like it's made for charging the small batteries found in electromagnetic devices, sadly this can't be recharged like a normal cell."
icon = 'icons/obj/module.dmi'
icon_state = "cell_mini"
item_flags = NOBLUDGEON
@@ -63,7 +63,7 @@
to_chat(user, "
It has a small, red, blinking light coming from inside of it. It's spent. ")
/obj/item/card/emag
- var/uses = 10
+ var/uses = 15
/obj/item/card/emag/examine(mob/user)
. = ..()
diff --git a/modular_citadel/code/game/objects/items/devices/genemods.dm b/modular_citadel/code/game/objects/items/devices/genemods.dm
deleted file mode 100644
index 5efebf4860..0000000000
--- a/modular_citadel/code/game/objects/items/devices/genemods.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-//Will include consumable gene mods in the future.
-
-/obj/item/genemod
- name = "genetic modifier"
- desc = "Microbodies which can grow, morph, or otherwise change an organism into something else."
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "dnainjector"
- throw_speed = 3
- throw_range = 5
- w_class = WEIGHT_CLASS_TINY
- var/applied_region = "chest"
- var/list/add_mutations = list()
- var/list/remove_mutations = list()
-
- var/list/add_mutations_static = list()
- var/list/remove_mutations_static = list()
-
- var/used = 0
-
-/obj/item/genemod/proc/use(mob/living/carbon/human/target)
- return
\ No newline at end of file
diff --git a/modular_citadel/code/game/objects/items/holy_weapons.dm b/modular_citadel/code/game/objects/items/holy_weapons.dm
index 3ecc6cc31b..06cdb0f5fd 100644
--- a/modular_citadel/code/game/objects/items/holy_weapons.dm
+++ b/modular_citadel/code/game/objects/items/holy_weapons.dm
@@ -30,24 +30,16 @@
"
You kneel[M == user ? null : " next to [M]"] and begin a prayer to [deity_name]. ")
praying = TRUE
- if(do_after(user, 100, target = M))
+ if(do_after(user, 20, target = M))
if(istype(M, /mob/living/carbon/human)) // This probably should not work on catpeople. They're unholy abominations.
var/mob/living/carbon/human/target = M
-
- if(iscultist(M) || is_servant_of_ratvar(M)) //ripped from holywater code.
- if(iscultist(M))
- SSticker.mode.remove_cultist(M.mind, FALSE, TRUE)
- else if(is_servant_of_ratvar(M))
- remove_servant_of_ratvar(M)
-
+ M.reagents.add_reagent("holywater", 5)
to_chat(target, "
[user]'s prayer to [deity_name] has eased your pain! ")
target.adjustToxLoss(-5, TRUE, TRUE)
target.adjustOxyLoss(-5)
target.adjustBruteLoss(-5)
target.adjustFireLoss(-5)
-
praying = FALSE
-
else
to_chat(user, "
Your prayer to [deity_name] was interrupted. ")
praying = FALSE
diff --git a/modular_citadel/code/game/objects/items/meat.dm b/modular_citadel/code/game/objects/items/meat.dm
deleted file mode 100644
index 3891c5ca9d..0000000000
--- a/modular_citadel/code/game/objects/items/meat.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
- icon = 'modular_citadel/icons/obj/foods.dmi'
- icon_state = "ipcmeat"
- desc = "Gross robot meat."
- filling_color = "#000000"
- tastes = list("metal" = 1)
-
-/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth
- icon = 'modular_citadel/icons/obj/foods.dmi'
- icon_state = "mothmeat"
- desc = "Moth meat."
- filling_color = "#BF896B"
- tastes = list("insects" = 1)
-
-
-/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/avian
- icon = 'modular_citadel/icons/obj/foods.dmi'
- icon_state = "birdmeat"
- desc = "Quality bird meat."
- filling_color = "#BF896B"
- tastes = list("chicken" = 1)
-
-/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal
- desc = "Furry meat. WHO DID THIS?!"
- filling_color = "#6B8E23"
- tastes = list("brains" = 1, "meat" = 1)
\ No newline at end of file
diff --git a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm
index 68ab229f0a..4cf1d326a2 100644
--- a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm
+++ b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm
@@ -130,15 +130,6 @@
else
return ..()
-/obj/item/melee/transforming/energy/sword/cx/chaplain
- name = "divine lightblade"
- force_on = 20 //haha i'll regret this
- block_chance = 50
-
-/obj/item/melee/transforming/energy/sword/cx/chaplain/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, TRUE)
-
//OBLIGATORY TOY MEMES /////////////////////////////////////
/obj/item/toy/sword/cx
@@ -271,6 +262,21 @@
spinnable = FALSE
total_mass_on = 4
+/obj/item/twohanded/dualsaber/hypereutactic/chaplain
+ name = "\improper divine lightblade"
+ desc = "A giant blade of bright and holy light, said to cut down the wicked with ease."
+ force = 5
+ force_unwielded = 5
+ force_wielded = 20
+ block_chance = 50
+ armour_penetration = 0
+ var/chaplain_spawnable = TRUE
+ obj_flags = UNIQUE_RENAME
+
+/obj/item/twohanded/dualsaber/hypereutactic/chaplain/Initialize()
+ . = ..()
+ AddComponent(/datum/component/anti_magic, TRUE, TRUE)
+
/obj/item/twohanded/dualsaber/hypereutactic/pre_altattackby(atom/A, mob/living/user, params) //checks if it can do right click memes
altafterattack(A, user, TRUE, params)
return TRUE
@@ -380,4 +386,4 @@
/obj/item/twohanded/dualsaber/hypereutactic/toy/rainbow
name = "\improper Hyper-Euclidean Reciprocating Trigonometric Zweihander"
desc = "A custom-built toy with fancy rainbow lights built-in."
- hacked = TRUE
\ No newline at end of file
+ hacked = TRUE
diff --git a/modular_citadel/code/game/objects/items/melee/misc.dm b/modular_citadel/code/game/objects/items/melee/misc.dm
deleted file mode 100644
index 6a53adcc1f..0000000000
--- a/modular_citadel/code/game/objects/items/melee/misc.dm
+++ /dev/null
@@ -1,57 +0,0 @@
-/obj/item/melee/classic_baton
- var/last_hit = 0
- var/stun_stam_cost_coeff = 1.25
- var/hardstun_ds = 1
- var/softstun_ds = 0
- var/stam_dmg = 30
- cooldown = 20
- total_mass = 3.75
-
-/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user)
- if(!on)
- return ..()
-
- if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)//CIT CHANGE - makes batons unusuable in stamina softcrit
- to_chat(user, "
You're too exhausted for that. ")//CIT CHANGE - ditto
- return //CIT CHANGE - ditto
-
- add_fingerprint(user)
- if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
- to_chat(user, "
You club yourself over the head. ")
- user.Knockdown(60 * force)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD)
- else
- user.take_bodypart_damage(2*force)
- return
- if(iscyborg(target))
- ..()
- return
- if(!isliving(target))
- return
- if (user.a_intent == INTENT_HARM)
- if(!..())
- return
- if(!iscyborg(target))
- return
- else
- if(last_hit + cooldown < world.time)
- if(ishuman(target))
- var/mob/living/carbon/human/H = target
- if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
- return
- if(check_martial_counter(H, user))
- return
- playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
- target.Knockdown(softstun_ds, TRUE, FALSE, hardstun_ds, stam_dmg)
- log_combat(user, target, "stunned", src)
- src.add_fingerprint(user)
- target.visible_message("
[user] has knocked down [target] with [src]! ", \
- "
[user] has knocked down [target] with [src]! ")
- if(!iscarbon(user))
- target.LAssailant = null
- else
- target.LAssailant = user
- last_hit = world.time
- user.adjustStaminaLossBuffered(getweight())//CIT CHANGE - makes swinging batons cost stamina
diff --git a/modular_citadel/code/game/objects/items/robot/robot_upgrades.dm b/modular_citadel/code/game/objects/items/robot/robot_upgrades.dm
deleted file mode 100644
index 5f65b97173..0000000000
--- a/modular_citadel/code/game/objects/items/robot/robot_upgrades.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-// Citadel's Vtech Controller
-/obj/effect/proc_holder/silicon/cyborg/vtecControl
- name = "vTec Control"
- desc = "Allows finer-grained control of the vTec speed boost."
- action_icon = 'icons/mob/actions.dmi'
- action_icon_state = "Chevron_State_0"
-
- var/currentState = 0
- var/maxReduction = 2
-
-
-/obj/effect/proc_holder/silicon/cyborg/vtecControl/Click(mob/living/silicon/robot/user)
- var/mob/living/silicon/robot/self = usr
-
- currentState = (currentState + 1) % 3
-
- if(usr)
- switch(currentState)
- if (0)
- self.speed = maxReduction
- if (1)
- self.speed -= maxReduction*0.5
- if (2)
- self.speed -= maxReduction*1.25
-
- action.button_icon_state = "Chevron_State_[currentState]"
- action.UpdateButtonIcon()
-
- return
diff --git a/modular_citadel/code/game/objects/structures/beds_chairs/sofa.dm b/modular_citadel/code/game/objects/structures/beds_chairs/sofa.dm
deleted file mode 100644
index 69d0f4b8d8..0000000000
--- a/modular_citadel/code/game/objects/structures/beds_chairs/sofa.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-/obj/structure/chair/sofa
- name = "old ratty sofa"
- icon_state = "sofamiddle"
- icon = 'icons/obj/sofa.dmi'
- buildstackamount = 1
-
-/obj/structure/chair/sofa/left
- icon_state = "sofaend_left"
-/obj/structure/chair/sofa/right
- icon_state = "sofaend_right"
-/obj/structure/chair/sofa/corner
- icon_state = "sofacorner"
\ No newline at end of file
diff --git a/modular_citadel/code/init.dm b/modular_citadel/code/init.dm
index ce80580af2..a85c3a249c 100644
--- a/modular_citadel/code/init.dm
+++ b/modular_citadel/code/init.dm
@@ -3,23 +3,3 @@
/proc/cit_initialize()
load_mentors()
initialize_global_loadout_items()
-
- //body parts and things
- init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, GLOB.mam_tails_animated_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_snouts, GLOB.mam_snouts_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/taur, GLOB.taur_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, GLOB.xeno_head_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, GLOB.xeno_tail_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, GLOB.xeno_dorsal_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/screen, GLOB.ipc_screens_list, roundstart = TRUE)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/antenna, GLOB.ipc_antennas_list, roundstart = TRUE)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
- for(var/K in GLOB.cock_shapes_list)
- var/datum/sprite_accessory/penis/value = GLOB.cock_shapes_list[K]
- GLOB.cock_shapes_icons[K] = value.icon_state
- init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
- init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
- //GLOB.breasts_size_list = list("a","b","c","d","e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing. This is defined twice?
diff --git a/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm b/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm
deleted file mode 100644
index 6afa92af65..0000000000
--- a/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/datum/controller/subsystem/ticker/proc/generate_crew_objectives()
- for(var/datum/mind/crewMind in SSticker.minds)
- if(prob(5) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed && ROLE_MISCREANT in crewMind.current.client.prefs.be_special)
- generate_miscreant_objectives(crewMind)
- else
- if(CONFIG_GET(flag/allow_crew_objectives))
- generate_individual_objectives(crewMind)
- return
-
-/datum/controller/subsystem/ticker/proc/generate_individual_objectives(var/datum/mind/crewMind)
- if(!(CONFIG_GET(flag/allow_crew_objectives)))
- return
- if(!crewMind)
- return
- if(!crewMind.current || !crewMind.objectives || crewMind.special_role)
- return
- if(!crewMind.assigned_role)
- return
- var/list/validobjs = crewobjjobs["[ckey(crewMind.assigned_role)]"]
- if(!validobjs || !validobjs.len)
- return
- var/selectedObj = pick(validobjs)
- var/datum/objective/crew/newObjective = new selectedObj
- if(!newObjective)
- return
- newObjective.owner = crewMind
- crewMind.objectives += newObjective
- to_chat(crewMind, "
As a part of Nanotrasen's anti-tide efforts, you have been assigned an optional objective. It will be checked at the end of the shift. Performing traitorous acts in pursuit of your objective may result in termination of your employment. ")
- to_chat(crewMind, "
Your optional objective: [newObjective.explanation_text]")
-
-/datum/objective/crew/
- var/jobs = ""
- explanation_text = "Yell on the development discussion channel on Citadels discord if this ever shows up. Something just broke here, dude"
-
-/datum/objective/crew/proc/setup()
diff --git a/modular_citadel/code/modules/antagonists/cit_miscreants.dm b/modular_citadel/code/modules/antagonists/cit_miscreants.dm
deleted file mode 100644
index 5726167820..0000000000
--- a/modular_citadel/code/modules/antagonists/cit_miscreants.dm
+++ /dev/null
@@ -1,52 +0,0 @@
-/datum/controller/subsystem/ticker/proc/generate_miscreant_objectives(var/datum/mind/crewMind)
- if(!GLOB.miscreants_allowed)
- return
- if(!crewMind)
- return
- if(!crewMind.current || !crewMind.objectives || crewMind.special_role)
- return
- if(!crewMind.assigned_role)
- return
- if(!(ROLE_MISCREANT in crewMind.current.client.prefs.be_special))
- return
- if(jobban_isbanned(crewMind, "Syndicate"))
- return
- var/list/objectiveTypes = miscreantobjlist
- if(!objectiveTypes.len)
- return
- var/selectedType = pick(objectiveTypes)
- var/datum/objective/miscreant/newObjective = new selectedType
- if(!newObjective)
- return
- newObjective.owner = crewMind
- crewMind.objectives += newObjective
- crewMind.special_role = "miscreant"
- to_chat(crewMind, "
You are a Miscreant. ")
- to_chat(crewMind, "
Pursuing your objective is entirely optional, as the completion of your objective is unable to be tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment. ")
- to_chat(crewMind, "
Your objective: [newObjective.explanation_text]")
-
-/datum/objective/miscreant
- explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the development discussion channel of citadels discord."
-
-/* Goon's Miscreant Objectives */
-
-
-/datum/objective/miscreant/incompetent
- explanation_text = "Be as useless and incompetent as possible without getting killed."
-
-/datum/objective/miscreant/litterbug
- explanation_text = "Make a huge mess wherever you go."
-
-/datum/objective/miscreant/creepy
- explanation_text = "Sneak around looking as suspicious as possible without actually doing anything illegal."
-
-/datum/objective/miscreant/whiny
- explanation_text = "Complain incessantly about every minor issue you find."
-
-/* Citadel's Miscreant Objectives */
-
-/datum/objective/miscreant/immersions
- explanation_text = "Act as uncharacteristic as you possibly can." // corrected from "Act as out of character as you can" people thought it meant to just ooc in ic
-
-/datum/objective/miscreant/cargonia
- explanation_text = "Attempt to establish independence of your department."
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm
deleted file mode 100644
index 010337b49f..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm
+++ /dev/null
@@ -1,81 +0,0 @@
-/* CARGO OBJECTIVES */
-
-/datum/objective/crew/petsplosion
- explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish."
- jobs = "quartermaster,cargotechnician"
-
-/datum/objective/crew/petsplosion/New()
- . = ..()
- target_amount = rand(10,30)
- update_explanation_text()
-
-/datum/objective/crew/petsplosion/update_explanation_text()
- . = ..()
- explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish."
-
-/datum/objective/crew/petsplosion/check_completion()
- var/petcount = target_amount
- for(var/mob/living/simple_animal/pet/P in GLOB.mob_list)
- if(!(P.stat == DEAD))
- if(P.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(P)])
- petcount--
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
- if(!(H.stat == DEAD))
- if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)])
- if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar))
- petcount--
- if(petcount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/points //ported from old hippie
- explanation_text = "Make sure the station has at least (Something broke, report this to the development discussion channel of citadels discord) supply points at the end of the shift."
- jobs = "quartermaster,cargotechnician"
-
-/datum/objective/crew/points/New()
- . = ..()
- target_amount = rand(25000,100000)
- update_explanation_text()
-
-/datum/objective/crew/points/update_explanation_text()
- . = ..()
- explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift."
-
-/datum/objective/crew/points/check_completion()
- if(SSshuttle.points >= target_amount)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/bubblegum
- explanation_text = "Ensure Bubblegum is dead at the end of the shift."
- jobs = "shaftminer"
-
-/datum/objective/crew/bubblegum/check_completion()
- for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list)
- if(!(B.stat == DEAD))
- return FALSE
- return TRUE
-
-/datum/objective/crew/fatstacks //ported from old hippie
- explanation_text = "Have at least (something broke, report this to the development discussion channel of citadels discord) mining points on your ID at the end of the shift."
- jobs = "shaftminer"
-
-/datum/objective/crew/fatstacks/New()
- . = ..()
- target_amount = rand(15000,50000)
- update_explanation_text()
-
-/datum/objective/crew/fatstacks/update_explanation_text()
- . = ..()
- explanation_text = "Have at least [target_amount] mining points on your ID at the end of the shift."
-
-/datum/objective/crew/fatstacks/check_completion()
- if(owner && owner.current)
- var/mob/living/carbon/human/H = owner.current
- var/obj/item/card/id/theID = H.get_idcard()
- if(istype(theID))
- if(theID.mining_points >= target_amount)
- return TRUE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm
deleted file mode 100644
index 491285e9c4..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm
+++ /dev/null
@@ -1,249 +0,0 @@
-/* CIVILIAN OBJECTIVES */
-
-/datum/objective/crew/druglordbot //ported from old Hippie with adjustments
- var/targetchem = "none"
- var/datum/reagent/chempath
- explanation_text = "Have at least (somethin broke here) harvested plants containing (report this on the development discussion channel of citadel's discord) when the shift ends."
- jobs = "botanist"
-
-/datum/objective/crew/druglordbot/New()
- . = ..()
- target_amount = rand(3,20)
- var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingadrenaline, /datum/reagent/medicine/changelinghaste)
- var/drugs = typesof(/datum/reagent/drug) - blacklist
- var/meds = typesof(/datum/reagent/medicine) - blacklist
- var/chemlist = drugs + meds
- chempath = pick(chemlist)
- targetchem = initial(chempath.id)
- update_explanation_text()
-
-/datum/objective/crew/druglordbot/update_explanation_text()
- . = ..()
- explanation_text = "Have at least [target_amount] harvested plants containing [initial(chempath.name)] when the shift ends."
-
-/datum/objective/crew/druglordbot/check_completion()
- var/pillcount = target_amount
- if(owner && owner.current)
- if(owner.current.contents)
- for(var/obj/item/reagent_containers/food/snacks/grown/P in owner.current.get_contents())
- if(P.reagents.has_reagent(targetchem))
- pillcount--
- if(pillcount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/foodhoard
- var/datum/crafting_recipe/food/targetfood
- var/obj/item/reagent_containers/food/foodpath
- explanation_text = "Personally deliver at least (yo something broke) (report this to the developer discussion channel in citadels discord)s to Centcom."
- jobs = "cook"
-
-/datum/objective/crew/foodhoard/New()
- . = ..()
- target_amount = rand(2,10)
- var/blacklist = list(/datum/crafting_recipe/food, /datum/crafting_recipe/food/cak)
- var/possiblefoods = typesof(/datum/crafting_recipe/food) - blacklist
- targetfood = pick(possiblefoods)
- foodpath = initial(targetfood.result)
- update_explanation_text()
-
-/datum/objective/crew/foodhoard/update_explanation_text()
- . = ..()
- explanation_text = "Personally deliver at least [target_amount] [initial(foodpath.name)]s to Centcom."
-
-/datum/objective/crew/foodhoard/check_completion()
- if(owner && owner.current && owner.current.check_contents_for(foodpath) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)])
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/responsibility
- explanation_text = "Make sure nobody dies with alcohol poisoning."
- jobs = "bartender"
-
-/datum/objective/crew/responsibility/check_completion()
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
- if(H.stat == DEAD && H.drunkenness >= 80)
- if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)])
- return FALSE
- return TRUE
-
-/datum/objective/crew/clean //ported from old Hippie
- var/list/areas = list()
- var/hardmode = FALSE
- explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift."
- jobs = "janitor"
-
-/datum/objective/crew/clean/New()
- . = ..()
- if(prob(1))
- hardmode = TRUE
- var/list/blacklistnormal = list(typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat))
- var/list/blacklisthard = list(typesof(/area/lavaland) - typesof(/area/mine))
- var/list/possibleareas = list()
- if(hardmode)
- possibleareas = GLOB.teleportlocs - /area - blacklisthard
- else
- possibleareas = GLOB.teleportlocs - /area - blacklistnormal
- for(var/i in 1 to rand(1,6))
- areas |= pick_n_take(possibleareas)
- update_explanation_text()
-
-/datum/objective/crew/clean/update_explanation_text()
- . = ..()
- explanation_text = "Ensure that the"
- for(var/i in 1 to areas.len)
- var/area/A = areas[i]
- explanation_text += " [A]"
- if(i != areas.len && areas.len >= 3)
- explanation_text += ","
- if(i == areas.len - 1)
- explanation_text += "and"
- explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] clean at the end of the shift."
- if(hardmode)
- explanation_text += " Chop-chop."
-
-/datum/objective/crew/clean/check_completion()
- for(var/area/A in areas)
- for(var/obj/effect/decal/cleanable/C in area_contents(A))
- if(C && C.alpha >= 150)
- return FALSE
- return TRUE
-
-/datum/objective/crew/slipster //ported from old Hippie with adjustments
- explanation_text = "Slip at least (Yell on citadel's development discussion channel if you see this) different people with your PDA, and have it on you at the end of the shift."
- jobs = "clown"
-
-/datum/objective/crew/slipster/New()
- . = ..()
- target_amount = rand(5, 20)
- update_explanation_text()
-
-/datum/objective/crew/slipster/update_explanation_text()
- . = ..()
- explanation_text = "Slip at least [target_amount] different people with your PDA, and have it on you at the end of the shift."
-
-/datum/objective/crew/slipster/check_completion()
- var/list/uniqueslips = list()
- if(owner && owner.current)
- for(var/obj/item/pda/clown/PDA in owner.current.get_contents())
- for(var/mob/living/carbon/human/H in PDA.slipvictims)
- uniqueslips |= H
- if(uniqueslips.len >= target_amount)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/vow //ported from old Hippie
- explanation_text = "Never break your vow of silence."
- jobs = "mime"
-
-/datum/objective/crew/vow/check_completion()
- if(owner && owner.current)
- var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG]
- if(say_log.len > 0)
- return FALSE
- return TRUE
-
-/datum/objective/crew/nullrod
- explanation_text = "Don't lose your holy rod."
- jobs = "chaplain"
-
-/datum/objective/crew/nullrod/check_completion()
- if(owner && owner.current)
- for(var/nullrodtypes in typesof(/obj/item/nullrod))
- if(owner.current.check_contents_for(nullrodtypes))
- return TRUE
- if(owner.current.getorgan(/obj/item/organ/genital/penis))
- return TRUE
- return FALSE
-
-/datum/objective/crew/reporter //ported from old hippie
- var/charcount = 100
- explanation_text = "Publish at least (Yo something broke) articles containing at least (Report this to Citadels development channel) characters."
- jobs = "curator"
-
-/datum/objective/crew/reporter/New()
- . = ..()
- target_amount = rand(2,10)
- charcount = rand(20,250)
- update_explanation_text()
-
-/datum/objective/crew/reporter/update_explanation_text()
- . = ..()
- explanation_text = "Publish at least [target_amount] articles containing at least [charcount] characters."
-
-/datum/objective/crew/reporter/check_completion()
- if(owner && owner.current)
- var/ownername = "[ckey(owner.current.real_name)][ckey(owner.assigned_role)]"
- for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels)
- for(var/datum/newscaster/feed_message/msg in chan.messages)
- if(ckey(msg.returnAuthor()) == ckey(ownername))
- if(length(msg.returnBody()) >= charcount)
- target_amount--
- if(target_amount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/pwrgame //ported from Goon with adjustments
- var/obj/item/clothing/targettidegarb
- explanation_text = "Get your grubby hands on a (Dear god something broke. Report this to Citadel's development dicussion channel)."
- jobs = "assistant"
-
-/datum/objective/crew/pwrgame/New()
- . = ..()
- var/list/muhvalids = list(/obj/item/clothing/mask/gas, /obj/item/clothing/head/welding, /obj/item/clothing/head/ushanka, /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas/owl_mask)
- if(prob(10))
- muhvalids += list(/obj/item/clothing/suit/space)
- targettidegarb = pick(muhvalids)
- update_explanation_text()
-
-/datum/objective/crew/pwrgame/update_explanation_text()
- . = ..()
- explanation_text = "Get your grubby hands on a [initial(targettidegarb.name)]."
-/* DM is not a sane language in any way, shape, or form. If anyone wants to try to get this bit functioning proper, I hold no responsibility for broken keyboards.
- if(owner && owner.current)
- var/mob/living/carbon/human/H = owner.current
- if(H && H.dna && H.dna.species && H.dna.species.id)
- explanation_text = "Get your "
- if(H.dna.species.id == "avian")
- explanation_text += "scratchy claws "
- else if(H.dna.species.id == "mammal")
- explanation_text += "dirty paws "
- else if(H.dna.species.id == "aquatic")
- explanation_text += "fishy hands "
- else if(H.dna.species.id == "xeno")
- explanation_text += "weird claws "
- else if(H.dna.species.id == "guilmon")
- explanation_text += "digital claws "
- else if(H.dna.species.id == "lizard")
- explanation_text += "slimy claws "
- else if(H.dna.species.id == "datashark")
- explanation_text += "glitchy hands "
- else if(H.dna.species.id == "insect")
- explanation_text += "gross grabbers "
- else
- explanation_text += "grubby hands "
- explanation_text += "on a space suit." replace this if you're making this monstrosity work */
-
-/datum/objective/crew/pwrgame/check_completion()
- if(owner && owner.current)
- for(var/tidegarbtypes in typesof(targettidegarb))
- if(owner.current.check_contents_for(tidegarbtypes))
- return TRUE
- return FALSE
-
-/datum/objective/crew/promotion //ported from Goon
- explanation_text = "Have a non-assistant ID registered to you at the end of the shift."
- jobs = "assistant"
-
-/datum/objective/crew/promotion/check_completion()
- if(owner && owner.current)
- var/mob/living/carbon/human/H = owner.current
- var/obj/item/card/id/theID = H.get_idcard()
- if(istype(theID))
- if(!(H.get_assignment() == "Assistant") && !(H.get_assignment() == "No id") && !(H.get_assignment() == "No job"))
- return TRUE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm
deleted file mode 100644
index f01c887c9f..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/* COMMAND OBJECTIVES */
-
-/datum/objective/crew/caphat //Ported from Goon
- explanation_text = "Don't lose your hat."
- jobs = "captain"
-
-/datum/objective/crew/caphat/check_completion()
- if(owner && owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat))
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/datfukkendisk //Ported from old Hippie
- explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom."
- jobs = "captain" //give this to other heads at your own risk.
-
-/datum/objective/crew/datfukkendisk/check_completion()
- if(owner && owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)])
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/ian //Ported from old Hippie
- explanation_text = "Defend Ian at all costs, and ensure he gets delivered to Centcom at the end of the shift."
- jobs = "headofpersonnel"
-
-/datum/objective/crew/ian/check_completion()
- if(owner && owner.current)
- for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in GLOB.mob_list)
- if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)])
- return TRUE
- return FALSE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm
deleted file mode 100644
index 44d961e9c3..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ENGINEERING OBJECTIVES */
-
-/datum/objective/crew/integrity //ported from old Hippie
- explanation_text = "Ensure the station's integrity rating is at least (Yo something broke, yell on the development discussion channel of citadels discord about this)% when the shift ends."
- jobs = "chiefengineer,stationengineer"
-
-/datum/objective/crew/integrity/New()
- . = ..()
- target_amount = rand(60,95)
- update_explanation_text()
-
-/datum/objective/crew/integrity/update_explanation_text()
- . = ..()
- explanation_text = "Ensure the station's integrity rating is at least [target_amount]% when the shift ends."
-
-/datum/objective/crew/integrity/check_completion()
- var/datum/station_state/end_state = new /datum/station_state()
- end_state.count()
- var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100)
- if(!SSticker.mode.station_was_nuked && station_integrity >= target_amount)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/poly
- explanation_text = "Make sure Poly keeps his headset, and stays alive until the end of the shift."
- jobs = "chiefengineer"
-
-/datum/objective/crew/poly/check_completion()
- for(var/mob/living/simple_animal/parrot/Poly/dumbbird in GLOB.mob_list)
- if(!(dumbbird.stat == DEAD) && dumbbird.ears)
- if(istype(dumbbird.ears, /obj/item/radio/headset))
- return TRUE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm
deleted file mode 100644
index aad6e95df4..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm
+++ /dev/null
@@ -1,86 +0,0 @@
-/* MEDICAL OBJECTIVES */
-
-/datum/objective/crew/morgue //Ported from old Hippie
- explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends."
- jobs = "chiefmedicalofficer,geneticist,medicaldoctor"
-
-/datum/objective/crew/morgue/check_completion()
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
- if(H.stat == DEAD && H.z == SSmapping.station_start)
- if(get_area(H) != /area/medical/morgue)
- return FALSE
- return TRUE
-
-/datum/objective/crew/chems //Ported from old Hippie
- var/targetchem = "none"
- var/datum/reagent/chempath
- explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends."
- jobs = "chiefmedicalofficer,chemist"
-
-/datum/objective/crew/chems/New()
- . = ..()
- var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingadrenaline, /datum/reagent/medicine/changelinghaste)
- var/drugs = typesof(/datum/reagent/drug) - blacklist
- var/meds = typesof(/datum/reagent/medicine) - blacklist
- var/chemlist = drugs + meds
- chempath = pick(chemlist)
- targetchem = initial(chempath.id)
- update_explanation_text()
-
-/datum/objective/crew/chems/update_explanation_text()
- . = ..()
- explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends."
-
-/datum/objective/crew/chems/check_completion()
- if(owner.current)
- if(!owner.current.stat == DEAD && owner.current.reagents)
- if(owner.current.reagents.has_reagent(targetchem))
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/druglordchem //ported from old Hippie with adjustments
- var/targetchem = "none"
- var/datum/reagent/chempath
- var/chemamount = 0
- explanation_text = "Have at least (somethin broke here) pills containing at least (like really broke) units of(report this on the development discussion channel of citadel's discord) when the shift ends."
- jobs = "chemist"
-
-/datum/objective/crew/druglordchem/New()
- . = ..()
- target_amount = rand(5,50)
- chemamount = rand(1,20)
- var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol)
- var/drugs = typesof(/datum/reagent/drug) - blacklist
- var/chemlist = drugs
- chempath = pick(chemlist)
- targetchem = initial(chempath.id)
- update_explanation_text()
-
-/datum/objective/crew/druglordchem/update_explanation_text()
- . = ..()
- explanation_text = "Have at least [target_amount] pills containing at least [chemamount] units of [initial(chempath.name)] when the shift ends."
-
-/datum/objective/crew/druglordchem/check_completion()
- var/pillcount = target_amount
- if(owner.current)
- if(owner.current.contents)
- for(var/obj/item/reagent_containers/pill/P in owner.current.get_contents())
- if(P.reagents.has_reagent(targetchem, chemamount))
- pillcount--
- if(pillcount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/noinfections
- explanation_text = "Make sure there are no crew members with harmful diseases at the end of the shift."
- jobs = "virologist"
-
-/datum/objective/crew/noinfections/check_completion()
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
- if(!H.stat == DEAD)
- if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)])
- if(H.check_virus() == 2)
- return FALSE
- return TRUE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm
deleted file mode 100644
index fb260583fd..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/* SCIENCE OBJECTIVES */
-
-/datum/objective/crew/cyborgs //Ported from old Hippie
- explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends."
- jobs = "researchdirector,roboticist"
-
-/datum/objective/crew/cyborgs/New()
- . = ..()
- target_amount = rand(3,10)
- update_explanation_text()
-
-/datum/objective/crew/cyborgs/update_explanation_text()
- . = ..()
- explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends."
-
-/datum/objective/crew/cyborgs/check_completion()
- var/borgcount = target_amount
- for(var/mob/living/silicon/robot/R in GLOB.alive_mob_list)
- if(!(R.stat == DEAD))
- borgcount--
- if(borgcount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/research //inspired by old hippie's research level objective. should hopefully be compatible with techwebs when that gets finished. hopefully. should be easy to update in the event that it is incompatible with techwebs.
- var/datum/design/targetdesign
- explanation_text = "Make sure the research required to produce a (something broke, yell on citadel's development discussion channel about this) is available on the R&D server by the end of the shift."
- jobs = "researchdirector,scientist"
-
-/datum/objective/crew/research/New()
- . = ..()
- targetdesign = pick(subtypesof(/datum/design))
- update_explanation_text()
-
-/datum/objective/crew/research/update_explanation_text()
- . = ..()
- explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift."
-
-/datum/objective/crew/research/check_completion()
- for(var/obj/machinery/rnd/server/S in GLOB.machines)
- if(S && S.stored_research)
- if(S.stored_research.researched_designs[initial(targetdesign.id)])
- return TRUE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm
deleted file mode 100644
index 8906c268d2..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* SECURITY OBJECTIVES */
-
-/datum/objective/crew/enjoyyourstay
- explanation_text = "Enforce Space Law to the best of your ability."
- jobs = "headofsecurity,securityofficer,warden,detective"
-
-/datum/objective/crew/enjoyyourstay/check_completion()
- if(owner && owner.current)
- if(owner.current.stat != DEAD)
- return TRUE
- return FALSE
-
-/datum/objective/crew/justicecrew
- explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends."
- jobs = "lawyer"
-
-/datum/objective/crew/justicecrew/check_completion()
- if(owner && owner.current)
- for(var/datum/mind/M in SSticker.minds)
- if(M.current && isliving(M.current))
- if(!M.special_role && !(M.assigned_role == "Security Officer") && !(M.assigned_role == "Detective") && !(M.assigned_role == "Head of Security") && !(M.assigned_role == "Lawyer") && !(M.assigned_role == "Warden") && get_area(M.current) != typesof(/area/security))
- return FALSE
- return TRUE
diff --git a/modular_citadel/code/modules/cargo/packs.dm b/modular_citadel/code/modules/cargo/packs.dm
deleted file mode 100644
index 6d39a51a76..0000000000
--- a/modular_citadel/code/modules/cargo/packs.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-//supply packs
-
-/datum/supply_pack/misc/kinkmate
- name = "Kinkmate construction kit"
- cost = 2000
- contraband = TRUE
- contains = list(/obj/item/vending_refill/kink, /obj/item/circuitboard/machine/kinkmate)
- crate_name = "Kinkmate construction kit"
-
-
-//Food and livestocks
-
-/datum/supply_pack/organic/critter/kiwi
- name = "Space kiwi Crate"
- cost = 2000
- contains = list( /mob/living/simple_animal/kiwi)
- crate_name = "space kiwi crate"
-
-
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////// Miscellaneous ///////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-
-/datum/supply_pack/misc/jukebox
- name = "Jukebox"
- cost = 35000
- contains = list(/obj/machinery/jukebox)
- crate_name = "Jukebox"
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index cc75e1bff9..136aefb8f5 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -447,4 +447,8 @@ datum/gear/darksabresheath
path = /obj/item/clothing/head/blueberet
ckeywhitelist = list("foxystalin")
-
+/datum/gear/donorgoggles
+ name = "Flight Goggles"
+ category = SLOT_HEAD
+ path = /obj/item/clothing/glasses/flight
+ ckeywhitelist = list("maxlynchy")
diff --git a/modular_citadel/code/modules/clothing/suits/suits.dm b/modular_citadel/code/modules/clothing/suits/suits.dm
index 22e4aef6a9..5cce40ad09 100644
--- a/modular_citadel/code/modules/clothing/suits/suits.dm
+++ b/modular_citadel/code/modules/clothing/suits/suits.dm
@@ -12,6 +12,7 @@
icon_state = "hostrench"
item_state = "hostrench"
mutantrace_variation = NO_MUTANTRACE_VARIATION
+ body_parts_covered = CHEST|ARMS|LEGS
/obj/item/clothing/suit/hooded/cloak/david
name = "red cloak"
diff --git a/modular_citadel/code/modules/crafting/recipes.dm b/modular_citadel/code/modules/crafting/recipes.dm
deleted file mode 100644
index 6c6001b040..0000000000
--- a/modular_citadel/code/modules/crafting/recipes.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/datum/crafting_recipe/toyneb
- name = "Non-Euplastic Blade"
- reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4)
- result = /obj/item/toy/sword/cx
- category = CAT_MISC
-
-/datum/crafting_recipe/potatos
- name = "Potat-OS"
- reqs = list(/obj/item/stack/cable_coil = 1, /obj/item/stack/rods = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/aicard = 1 )
- result = /obj/item/aicard/potato
- category = CAT_ROBOT
\ No newline at end of file
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index 42363e9e07..a03a2df382 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -447,6 +447,7 @@
item_state = "kimono"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/suit/commjacket
@@ -456,6 +457,7 @@
item_state = "commjacket"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/under/mw2_russian_para
@@ -491,3 +493,10 @@
item_state = "blueberet"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
+
+/obj/item/clothing/glasses/flight
+ name = "flight goggles"
+ desc = "Old style flight goggles with a leather cap attached."
+ icon_state = "flight-g"
+ item_state = "flight-g"
+ actions_types = list(/datum/action/item_action/toggle)
diff --git a/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm b/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm
index eba3660f8d..f1b5d622bc 100644
--- a/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm
+++ b/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm
@@ -1,3 +1,29 @@
/obj/item/reagent_containers/food/snacks/carpmeat/aquatic
name = "fillet"
desc = "A fillet of one of the local water dwelling species."
+
+/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
+ icon = 'modular_citadel/icons/obj/foods.dmi'
+ icon_state = "ipcmeat"
+ desc = "Gross robot meat."
+ filling_color = "#000000"
+ tastes = list("metal" = 1)
+
+/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
+ desc = "Tastes like chicken, that's... not what it is!"
+ icon = 'modular_citadel/icons/obj/foods.dmi'
+ icon_state = "mothmeat"
+ filling_color = "#BF896B"
+ tastes = list("insects" = 1)
+
+/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/avian
+ desc = "Tastes like chicken, that's because it is!"
+ icon = 'modular_citadel/icons/obj/foods.dmi'
+ icon_state = "birdmeat"
+ filling_color = "#BF896B"
+ tastes = list("chicken" = 1)
+
+/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal
+ desc = "Tastes sweet... reminds you vaguely of chicken."
+ filling_color = "#6B8E23"
+ tastes = list("brains" = 1, "meat" = 1)
diff --git a/modular_citadel/code/modules/mining/mine_items.dm b/modular_citadel/code/modules/mining/mine_items.dm
deleted file mode 100644
index d2cd1f2aa3..0000000000
--- a/modular_citadel/code/modules/mining/mine_items.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/machinery/computer/shuttle/mining
- req_access = list(ACCESS_MINING)
\ No newline at end of file
diff --git a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm
deleted file mode 100644
index bf811b777c..0000000000
--- a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm
+++ /dev/null
@@ -1,2083 +0,0 @@
-/datum/sprite_accessory
- var/extra = FALSE
- var/extra_color_src = MUTCOLORS2 //The color source for the extra overlay.
- var/extra2 = FALSE
- var/extra_icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- var/extra2_icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- var/extra2_color_src = MUTCOLORS3
- var/list/ckeys_allowed
-
-/datum/sprite_accessory/moth_wings/none
- name = "None"
- icon_state = "none"
-
-/***************** Alphabetical Order please ***************
-************* Keep it to Ears, Tails, Tails Animated *********/
-
-
-/datum/sprite_accessory/tails/lizard/none
- name = "None"
- icon_state = "None"
-
-/datum/sprite_accessory/tails_animated/lizard/none
- name = "None"
- icon_state = "None"
-
-
-/datum/sprite_accessory/tails/lizard/axolotl
- name = "Axolotl"
- icon_state = "axolotl"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/lizard/axolotl
- name = "Axolotl"
- icon_state = "axolotl"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/body_markings/guilmon
- name = "Guilmon"
- icon_state = "guilmon"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/tails/lizard/guilmon
- name = "Guilmon"
- icon_state = "guilmon"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/lizard/guilmon
- name = "Guilmon"
- icon_state = "guilmon"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-//christ this was a mistake, but it's here just in case someone wants to selectively fix
-/************* Lizard compatable snoots ***********
-/datum/sprite_accessory/snouts/bird
- name = "Beak"
- icon_state = "bird"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/bigbeak
- name = "Big Beak"
- icon_state = "bigbeak"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/bug
- name = "Bug"
- icon_state = "bug"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- extra2 = TRUE
- extra2_color_src = MUTCOLORS3
-
-/datum/sprite_accessory/snouts/elephant
- name = "Elephant"
- icon_state = "elephant"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
- extra = TRUE
- extra_color_src = MUTCOLORS3
-
-/datum/sprite_accessory/snouts/lcanid
- name = "Mammal, Long"
- icon_state = "lcanid"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/lcanidalt
- name = "Mammal, Long ALT"
- icon_state = "lcanidalt"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/scanid
- name = "Mammal, Short"
- icon_state = "scanid"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/scanidalt
- name = "Mammal, Short ALT"
- icon_state = "scanidalt"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/wolf
- name = "Mammal, Thick"
- icon_state = "wolf"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/wolfalt
- name = "Mammal, Thick ALT"
- icon_state = "wolfalt"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/redpanda
- name = "WahCoon"
- icon_state = "wah"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/rhino
- name = "Horn"
- icon_state = "rhino"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
- extra = TRUE
- extra = MUTCOLORS3
-
-/datum/sprite_accessory/snouts/rodent
- name = "Rodent"
- icon_state = "rodent"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/husky
- name = "Husky"
- icon_state = "husky"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/otie
- name = "Otie"
- icon_state = "otie"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/pede
- name = "Scolipede"
- icon_state = "pede"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/sergal
- name = "Sergal"
- icon_state = "sergal"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/snouts/shark
- name = "Shark"
- icon_state = "shark"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
-
-/datum/sprite_accessory/snouts/toucan
- name = "Toucan"
- icon_state = "toucan"
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
- color_src = MATRIXED
-*/
-
-/******************************************
-*************** Human Ears ****************
-*******************************************/
-
-/datum/sprite_accessory/ears/human/axolotl
- name = "Axolotl"
- icon_state = "axolotl"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
-
-/datum/sprite_accessory/ears/human/bear
- name = "Bear"
- icon_state = "bear"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/bigwolf
- name = "Big Wolf"
- icon_state = "bigwolf"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/bigwolfinner
- name = "Big Wolf (ALT)"
- icon_state = "bigwolfinner"
- hasinner = 1
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/bigwolfdark
- name = "Dark Big Wolf"
- icon_state = "bigwolfdark"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/bigwolfinnerdark
- name = "Dark Big Wolf (ALT)"
- icon_state = "bigwolfinnerdark"
- hasinner = 1
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/cow
- name = "Cow"
- icon_state = "cow"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/curled
- name = "Curled Horn"
- icon_state = "horn1"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MUTCOLORS3
-
-/datum/sprite_accessory/ears/human/eevee
- name = "Eevee"
- icon_state = "eevee"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/elephant
- name = "Elephant"
- icon_state = "elephant"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/elf
- name = "Elf"
- icon_state = "elf"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = SKINTONE
-
-/datum/sprite_accessory/ears/fennec
- name = "Fennec"
- icon_state = "fennec"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/fish
- name = "Fish"
- icon_state = "fish"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/fox
- name = "Fox"
- icon_state = "fox"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
-
-/datum/sprite_accessory/ears/human/jellyfish
- name = "Jellyfish"
- icon_state = "jellyfish"
- color_src = HAIR
-
-/datum/sprite_accessory/ears/lab
- name = "Dog, Floppy"
- icon_state = "lab"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
-
-/datum/sprite_accessory/ears/murid
- name = "Murid"
- icon_state = "murid"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/otie
- name = "Otusian"
- icon_state = "otie"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
-
-/datum/sprite_accessory/ears/human/pede
- name = "Scolipede"
- icon_state = "pede"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/rabbit
- name = "Rabbit"
- icon_state = "rabbit"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
-
-/datum/sprite_accessory/ears/human/sergal
- name = "Sergal"
- icon_state = "sergal"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/human/skunk
- name = "skunk"
- icon_state = "skunk"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/squirrel
- name = "Squirrel"
- icon_state = "squirrel"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/ears/wolf
- name = "Wolf"
- icon_state = "wolf"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
-
-
-
-/******************************************
-************** Human Tails ****************
-*******************************************/
-
-/datum/sprite_accessory/tails/human/ailurus
- name = "Red Panda"
- icon_state = "wah"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/ailurus
- name = "Red Panda"
- icon_state = "wah"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/axolotl
- name = "Axolotl"
- icon_state = "axolotl"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/axolotl
- name = "Axolotl"
- icon_state = "axolotl"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/bee
- name = "Bee"
- icon_state = "bee"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/bee
- name = "Bee"
- icon_state = "bee"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/cat
- name = "Cat"
- icon_state = "cat"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = HAIR
-
-/datum/sprite_accessory/tails_animated/human/cat
- name = "Cat"
- icon_state = "cat"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = HAIR
-
-/datum/sprite_accessory/tails/human/catbig
- name = "Cat, Big"
- icon_state = "catbig"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/catbig
- name = "Cat, Big"
- icon_state = "catbig"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/cow
- name = "Cow"
- icon_state = "cow"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/cow
- name = "Cow"
- icon_state = "cow"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/corvid
- name = "Corvid"
- icon_state = "crow"
-
-/datum/sprite_accessory/tails_animated/human/corvid
- name = "Corvid"
- icon_state = "crow"
-
-/datum/sprite_accessory/tails/human/eevee
- name = "Eevee"
- icon_state = "eevee"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/eevee
- name = "Eevee"
- icon_state = "eevee"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/fennec
- name = "Fennec"
- icon_state = "fennec"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/fennec
- name = "Fennec"
- icon_state = "fennec"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/fish
- name = "Fish"
- icon_state = "fish"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/fish
- name = "Fish"
- icon_state = "fish"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/fox
- name = "Fox"
- icon_state = "fox"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/fox
- name = "Fox"
- icon_state = "fox"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/horse
- name = "Horse"
- icon_state = "horse"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = HAIR
-
-/datum/sprite_accessory/tails_animated/human/horse
- name = "Horse"
- icon_state = "horse"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = HAIR
-
-/datum/sprite_accessory/tails/human/husky
- name = "Husky"
- icon_state = "husky"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/husky
- name = "Husky"
- icon_state = "husky"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/insect
- name = "Insect"
- icon_state = "insect"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails_animated/human/insect
- name = "insect"
- icon_state = "insect"
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/tails/human/kitsune
- name = "Kitsune"
- icon_state = "kitsune"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/kitsune
- name = "Kitsune"
- icon_state = "kitsune"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/murid
- name = "Murid"
- icon_state = "murid"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/murid
- name = "Murid"
- icon_state = "murid"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/otie
- name = "Otusian"
- icon_state = "otie"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/otie
- name = "Otusian"
- icon_state = "otie"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/orca
- name = "Orca"
- icon_state = "orca"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/orca
- name = "Orca"
- icon_state = "orca"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/pede
- name = "Scolipede"
- icon_state = "pede"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/pede
- name = "Scolipede"
- icon_state = "pede"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/rabbit
- name = "Rabbit"
- icon_state = "rabbit"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/rabbit
- name = "Rabbit"
- icon_state = "rabbit"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/sergal
- name = "Sergal"
- icon_state = "sergal"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/sergal
- name = "Sergal"
- icon_state = "sergal"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/skunk
- name = "skunk"
- icon_state = "skunk"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/skunk
- name = "skunk"
- icon_state = "skunk"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/shark
- name = "Shark"
- icon_state = "shark"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/shark
- name = "Shark"
- icon_state = "shark"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/datashark
- name = "datashark"
- icon_state = "datashark"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/datashark
- name = "datashark"
- icon_state = "datashark"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/straighttail
- name = "Straight Tail"
- icon_state = "straighttail"
-
-/datum/sprite_accessory/tails_animated/human/straighttail
- name = "Straight Tail"
- icon_state = "straighttail"
-
-/datum/sprite_accessory/tails/human/squirrel
- name = "Squirrel"
- icon_state = "squirrel"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/squirrel
- name = "Squirrel"
- icon_state = "squirrel"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/tentacle
- name = "Tentacle"
- icon_state = "tentacle"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/tentacle
- name = "Tentacle"
- icon_state = "tentacle"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/tiger
- name = "Tiger"
- icon_state = "tiger"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/tiger
- name = "Tiger"
- icon_state = "tiger"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails/human/wolf
- name = "Wolf"
- icon_state = "wolf"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/tails_animated/human/wolf
- name = "Wolf"
- icon_state = "wolf"
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/******************************************
-*********** Mammal Body Parts *************
-*******************************************/
-
-/datum/sprite_accessory/mam_ears
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
-
-/datum/sprite_accessory/mam_ears/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/mam_tails
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/mam_tails/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/mam_tails_animated
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_tails.dmi'
-
-/datum/sprite_accessory/mam_tails_animated/none
- name = "None"
- icon_state = "none"
- color_src = MATRIXED
-
-/datum/sprite_accessory/mam_snouts
- color_src = MATRIXED
- icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
-
-/datum/sprite_accessory/mam_snouts/none
- name = "None"
- icon_state = "none"
-
-
-/******************************************
-**************** Snouts *******************
-*******************************************/
-
-/datum/sprite_accessory/mam_snouts/bird
- name = "Beak"
- icon_state = "bird"
-
-/datum/sprite_accessory/mam_snouts/bigbeak
- name = "Big Beak"
- icon_state = "bigbeak"
-
-/datum/sprite_accessory/mam_snouts/bug
- name = "Bug"
- icon_state = "bug"
- color_src = MUTCOLORS
- extra2 = TRUE
- extra2_color_src = MUTCOLORS3
-
-/datum/sprite_accessory/mam_snouts/elephant
- name = "Elephant"
- icon_state = "elephant"
- extra = TRUE
- extra_color_src = MUTCOLORS3
-
-/datum/sprite_accessory/mam_snouts/lcanid
- name = "Mammal, Long"
- icon_state = "lcanid"
-
-/datum/sprite_accessory/mam_snouts/lcanidalt
- name = "Mammal, Long ALT"
- icon_state = "lcanidalt"
-
-/datum/sprite_accessory/mam_snouts/scanid
- name = "Mammal, Short"
- icon_state = "scanid"
-
-/datum/sprite_accessory/mam_snouts/scanidalt
- name = "Mammal, Short ALT"
- icon_state = "scanidalt"
-
-/datum/sprite_accessory/mam_snouts/wolf
- name = "Mammal, Thick"
- icon_state = "wolf"
-
-/datum/sprite_accessory/mam_snouts/wolfalt
- name = "Mammal, Thick ALT"
- icon_state = "wolfalt"
-
-/datum/sprite_accessory/mam_snouts/redpanda
- name = "WahCoon"
- icon_state = "wah"
-
-/datum/sprite_accessory/mam_snouts/redpandaalt
- name = "WahCoon ALT"
- icon_state = "wahalt"
-
-/datum/sprite_accessory/mam_snouts/rhino
- name = "Horn"
- icon_state = "rhino"
- extra = TRUE
- extra = MUTCOLORS3
-
-/datum/sprite_accessory/mam_snouts/rodent
- name = "Rodent"
- icon_state = "rodent"
-
-/datum/sprite_accessory/mam_snouts/husky
- name = "Husky"
- icon_state = "husky"
-
-/datum/sprite_accessory/mam_snouts/otie
- name = "Otie"
- icon_state = "otie"
-
-/datum/sprite_accessory/mam_snouts/pede
- name = "Scolipede"
- icon_state = "pede"
-
-/datum/sprite_accessory/mam_snouts/sergal
- name = "Sergal"
- icon_state = "sergal"
-
-/datum/sprite_accessory/mam_snouts/shark
- name = "Shark"
- icon_state = "shark"
-
-/datum/sprite_accessory/mam_snouts/toucan
- name = "Toucan"
- icon_state = "toucan"
-
-/datum/sprite_accessory/mam_snouts/sharp
- name = "Sharp"
- icon_state = "sharp"
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/mam_snouts/round
- name = "Round"
- icon_state = "round"
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/mam_snouts/sharplight
- name = "Sharp + Light"
- icon_state = "sharplight"
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/mam_snouts/roundlight
- name = "Round + Light"
- icon_state = "roundlight"
- color_src = MUTCOLORS
-
-
-/******************************************
-**************** Snouts *******************
-*************but higher up*****************/
-
-/datum/sprite_accessory/mam_snouts/fbird
- name = "Beak (Top)"
- icon_state = "fbird"
-
-/datum/sprite_accessory/mam_snouts/fbigbeak
- name = "Big Beak (Top)"
- icon_state = "fbigbeak"
-
-/datum/sprite_accessory/mam_snouts/fbug
- name = "Bug (Top)"
- icon_state = "fbug"
- color_src = MUTCOLORS
- extra2 = TRUE
- extra2_color_src = MUTCOLORS3
-
-/datum/sprite_accessory/mam_snouts/felephant
- name = "Elephant (Top)"
- icon_state = "felephant"
- extra = TRUE
- extra_color_src = MUTCOLORS3
-
-/datum/sprite_accessory/mam_snouts/flcanid
- name = "Mammal, Long (Top)"
- icon_state = "flcanid"
-
-/datum/sprite_accessory/mam_snouts/flcanidalt
- name = "Mammal, Long ALT (Top)"
- icon_state = "flcanidalt"
-
-/datum/sprite_accessory/mam_snouts/fscanid
- name = "Mammal, Short (Top)"
- icon_state = "fscanid"
-
-/datum/sprite_accessory/mam_snouts/fscanidalt
- name = "Mammal, Short ALT (Top)"
- icon_state = "fscanidalt"
-
-/datum/sprite_accessory/mam_snouts/fwolf
- name = "Mammal, Thick (Top)"
- icon_state = "fwolf"
-
-/datum/sprite_accessory/mam_snouts/fwolfalt
- name = "Mammal, Thick ALT (Top)"
- icon_state = "fwolfalt"
-
-/datum/sprite_accessory/mam_snouts/fredpanda
- name = "WahCoon (Top)"
- icon_state = "fwah"
-
-/datum/sprite_accessory/mam_snouts/frhino
- name = "Horn (Top)"
- icon_state = "frhino"
- extra = TRUE
- extra = MUTCOLORS3
-
-/datum/sprite_accessory/mam_snouts/frodent
- name = "Rodent (Top)"
- icon_state = "frodent"
-
-/datum/sprite_accessory/mam_snouts/fhusky
- name = "Husky (Top)"
- icon_state = "fhusky"
-
-/datum/sprite_accessory/mam_snouts/fotie
- name = "Otie (Top)"
- icon_state = "fotie"
-
-/datum/sprite_accessory/mam_snouts/fpede
- name = "Scolipede (Top)"
- icon_state = "fpede"
-
-/datum/sprite_accessory/mam_snouts/fsergal
- name = "Sergal (Top)"
- icon_state = "fsergal"
-
-/datum/sprite_accessory/mam_snouts/fshark
- name = "Shark (Top)"
- icon_state = "fshark"
-
-/datum/sprite_accessory/mam_snouts/ftoucan
- name = "Toucan (Top)"
- icon_state = "ftoucan"
-
-/datum/sprite_accessory/mam_snouts/fsharp
- name = "Sharp (Top)"
- icon_state = "fsharp"
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/mam_snouts/fround
- name = "Round (Top)"
- icon_state = "fround"
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/mam_snouts/fsharplight
- name = "Sharp + Light (Top)"
- icon_state = "fsharplight"
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/mam_snouts/froundlight
- name = "Round + Light (Top)"
- icon_state = "froundlight"
- color_src = MUTCOLORS
-
-/******************************************
-***************** Ears ********************
-*******************************************/
-
-/datum/sprite_accessory/mam_ears/axolotl
- name = "Axolotl"
- icon_state = "axolotl"
-
-/datum/sprite_accessory/mam_ears/bear
- name = "Bear"
- icon_state = "bear"
-
-/datum/sprite_accessory/mam_ears/bigwolf
- name = "Big Wolf"
- icon_state = "bigwolf"
-
-/datum/sprite_accessory/mam_ears/bigwolfinner
- name = "Big Wolf (ALT)"
- icon_state = "bigwolfinner"
- hasinner = 1
-
-/datum/sprite_accessory/mam_ears/bigwolfdark
- name = "Dark Big Wolf"
- icon_state = "bigwolfdark"
-
-/datum/sprite_accessory/mam_ears/bigwolfinnerdark
- name = "Dark Big Wolf (ALT)"
- icon_state = "bigwolfinnerdark"
- hasinner = 1
-
-/datum/sprite_accessory/mam_ears/cat
- name = "Cat"
- icon_state = "cat"
- hasinner = 1
- color_src = HAIR
-
-/datum/sprite_accessory/mam_ears/catbig
- name = "Cat, Big"
- icon_state = "catbig"
-
-/datum/sprite_accessory/mam_ears/cow
- name = "Cow"
- icon_state = "cow"
-
-/datum/sprite_accessory/mam_ears/curled
- name = "Curled Horn"
- icon_state = "horn1"
- color_src = MUTCOLORS3
-
-/datum/sprite_accessory/mam_ears/deer
- name = "Deer"
- icon_state = "deer"
- color_src = MUTCOLORS3
-
-/datum/sprite_accessory/mam_ears/eevee
- name = "Eevee"
- icon_state = "eevee"
-
-
-/datum/sprite_accessory/mam_ears/elf
- name = "Elf"
- icon_state = "elf"
- color_src = MUTCOLORS3
-
-
-/datum/sprite_accessory/mam_ears/elephant
- name = "Elephant"
- icon_state = "elephant"
-
-/datum/sprite_accessory/mam_ears/fennec
- name = "Fennec"
- icon_state = "fennec"
-
-/datum/sprite_accessory/mam_ears/fish
- name = "Fish"
- icon_state = "fish"
-
-/datum/sprite_accessory/mam_ears/fox
- name = "Fox"
- icon_state = "fox"
-
-/datum/sprite_accessory/mam_ears/husky
- name = "Husky"
- icon_state = "wolf"
-
-/datum/sprite_accessory/mam_ears/kangaroo
- name = "kangaroo"
- icon_state = "kangaroo"
-
-/datum/sprite_accessory/mam_ears/jellyfish
- name = "Jellyfish"
- icon_state = "jellyfish"
- color_src = HAIR
-
-/datum/sprite_accessory/mam_ears/lab
- name = "Dog, Long"
- icon_state = "lab"
-
-/datum/sprite_accessory/mam_ears/murid
- name = "Murid"
- icon_state = "murid"
-
-/datum/sprite_accessory/mam_ears/otie
- name = "Otusian"
- icon_state = "otie"
-
-/datum/sprite_accessory/mam_ears/squirrel
- name = "Squirrel"
- icon_state = "squirrel"
-
-/datum/sprite_accessory/mam_ears/pede
- name = "Scolipede"
- icon_state = "pede"
-
-/datum/sprite_accessory/mam_ears/rabbit
- name = "Rabbit"
- icon_state = "rabbit"
-
-/datum/sprite_accessory/mam_ears/sergal
- name = "Sergal"
- icon_state = "sergal"
-
-/datum/sprite_accessory/mam_ears/skunk
- name = "skunk"
- icon_state = "skunk"
-
-/datum/sprite_accessory/mam_ears/wolf
- name = "Wolf"
- icon_state = "wolf"
-
-/******************************************
-*********** Tails and Things **************
-*******************************************/
-
-/datum/sprite_accessory/mam_tails/ailurus
- name = "Red Panda"
- icon_state = "wah"
- extra = TRUE
-
-/datum/sprite_accessory/mam_tails_animated/ailurus
- name = "Red Panda"
- icon_state = "wah"
- extra = TRUE
-
-/datum/sprite_accessory/mam_tails/axolotl
- name = "Axolotl"
- icon_state = "axolotl"
-
-/datum/sprite_accessory/mam_tails_animated/axolotl
- name = "Axolotl"
- icon_state = "axolotl"
-
-/datum/sprite_accessory/mam_tails/bee
- name = "Bee"
- icon_state = "bee"
-
-/datum/sprite_accessory/mam_tails_animated/bee
- name = "Bee"
- icon_state = "bee"
-
-/datum/sprite_accessory/mam_tails/cat
- name = "Cat"
- icon_state = "cat"
- color_src = HAIR
-
-/datum/sprite_accessory/mam_tails_animated/cat
- name = "Cat"
- icon_state = "cat"
- color_src = HAIR
-
-/datum/sprite_accessory/mam_tails/catbig
- name = "Cat, Big"
- icon_state = "catbig"
-
-/datum/sprite_accessory/mam_tails_animated/catbig
- name = "Cat, Big"
- icon_state = "catbig"
-
-/datum/sprite_accessory/mam_tails/corvid
- name = "Corvid"
- icon_state = "crow"
-
-/datum/sprite_accessory/mam_tails_animated/corvid
- name = "Corvid"
- icon_state = "crow"
-
-/datum/sprite_accessory/mam_tail/cow
- name = "Cow"
- icon_state = "cow"
-
-/datum/sprite_accessory/mam_tails_animated/cow
- name = "Cow"
- icon_state = "cow"
-
-/datum/sprite_accessory/mam_tails/eevee
- name = "Eevee"
- icon_state = "eevee"
-
-/datum/sprite_accessory/mam_tails_animated/eevee
- name = "Eevee"
- icon_state = "eevee"
-
-/datum/sprite_accessory/mam_tails/fennec
- name = "Fennec"
- icon_state = "fennec"
-
-/datum/sprite_accessory/mam_tails_animated/fennec
- name = "Fennec"
- icon_state = "fennec"
-
-/datum/sprite_accessory/mam_tails/human/fish
- name = "Fish"
- icon_state = "fish"
-
-/datum/sprite_accessory/mam_tails_animated/human/fish
- name = "Fish"
- icon_state = "fish"
-
-/datum/sprite_accessory/mam_tails/fox
- name = "Fox"
- icon_state = "fox"
-
-/datum/sprite_accessory/mam_tails_animated/fox
- name = "Fox"
- icon_state = "fox"
-
-/datum/sprite_accessory/mam_tails/hawk
- name = "Hawk"
- icon_state = "hawk"
-
-/datum/sprite_accessory/mam_tails_animated/hawk
- name = "Hawk"
- icon_state = "hawk"
-
-/datum/sprite_accessory/mam_tails/horse
- name = "Horse"
- icon_state = "horse"
- color_src = HAIR
-
-/datum/sprite_accessory/mam_tails_animated/horse
- name = "Horse"
- icon_state = "Horse"
- color_src = HAIR
-
-/datum/sprite_accessory/mam_tails/husky
- name = "Husky"
- icon_state = "husky"
-
-/datum/sprite_accessory/mam_tails_animated/husky
- name = "Husky"
- icon_state = "husky"
-
-datum/sprite_accessory/mam_tails/insect
- name = "Insect"
- icon_state = "insect"
-
-/datum/sprite_accessory/mam_tails_animated/insect
- name = "Insect"
- icon_state = "insect"
-
-/datum/sprite_accessory/mam_tails/kangaroo
- name = "kangaroo"
- icon_state = "kangaroo"
-
-/datum/sprite_accessory/mam_tails_animated/kangaroo
- name = "kangaroo"
- icon_state = "kangaroo"
-
-/datum/sprite_accessory/mam_tails/kitsune
- name = "Kitsune"
- icon_state = "kitsune"
-
-/datum/sprite_accessory/mam_tails_animated/kitsune
- name = "Kitsune"
- icon_state = "kitsune"
-
-/datum/sprite_accessory/mam_tails/lab
- name = "Lab"
- icon_state = "lab"
-
-/datum/sprite_accessory/mam_tails_animated/lab
- name = "Lab"
- icon_state = "lab"
-
-/datum/sprite_accessory/mam_tails/murid
- name = "Murid"
- icon_state = "murid"
-
-/datum/sprite_accessory/mam_tails_animated/murid
- name = "Murid"
- icon_state = "murid"
-
-/datum/sprite_accessory/mam_tails/otie
- name = "Otusian"
- icon_state = "otie"
-
-/datum/sprite_accessory/mam_tails_animated/otie
- name = "Otusian"
- icon_state = "otie"
-
-/datum/sprite_accessory/mam_tails/orca
- name = "Orca"
- icon_state = "orca"
-
-/datum/sprite_accessory/mam_tails_animated/orca
- name = "Orca"
- icon_state = "orca"
-
-/datum/sprite_accessory/mam_tails/pede
- name = "Scolipede"
- icon_state = "pede"
-
-/datum/sprite_accessory/mam_tails_animated/pede
- name = "Scolipede"
- icon_state = "pede"
-
-/datum/sprite_accessory/mam_tails/rabbit
- name = "Rabbit"
- icon_state = "rabbit"
-
-/datum/sprite_accessory/mam_tails_animated/rabbit
- name = "Rabbit"
- icon_state = "rabbit"
-
-/datum/sprite_accessory/mam_tails/sergal
- name = "Sergal"
- icon_state = "sergal"
-
-/datum/sprite_accessory/mam_tails_animated/sergal
- name = "Sergal"
- icon_state = "sergal"
-
-/datum/sprite_accessory/mam_tails/skunk
- name = "Skunk"
- icon_state = "skunk"
-
-/datum/sprite_accessory/mam_tails_animated/skunk
- name = "Skunk"
- icon_state = "skunk"
-
-/datum/sprite_accessory/mam_tails/shark
- name = "Shark"
- icon_state = "shark"
-
-/datum/sprite_accessory/mam_tails_animated/shark
- name = "Shark"
- icon_state = "shark"
-
-/datum/sprite_accessory/mam_tails/shepherd
- name = "Shepherd"
- icon_state = "shepherd"
-
-/datum/sprite_accessory/mam_tails_animated/shepherd
- name = "Shepherd"
- icon_state = "shepherd"
-
-/datum/sprite_accessory/mam_tails/straighttail
- name = "Straight Tail"
- icon_state = "straighttail"
-
-/datum/sprite_accessory/mam_tails_animated/straighttail
- name = "Straight Tail"
- icon_state = "straighttail"
-
-/datum/sprite_accessory/mam_tails/squirrel
- name = "Squirrel"
- icon_state = "squirrel"
-
-/datum/sprite_accessory/mam_tails_animated/squirrel
- name = "Squirrel"
- icon_state = "squirrel"
-
-/datum/sprite_accessory/mam_tails/tentacle
- name = "Tentacle"
- icon_state = "tentacle"
-
-/datum/sprite_accessory/mam_tails_animated/tentacle
- name = "Tentacle"
- icon_state = "tentacle"
-
-/datum/sprite_accessory/mam_tails/tiger
- name = "Tiger"
- icon_state = "tiger"
-
-/datum/sprite_accessory/mam_tails_animated/tiger
- name = "Tiger"
- icon_state = "tiger"
-
-/datum/sprite_accessory/mam_tails/wolf
- name = "Wolf"
- icon_state = "wolf"
-
-/datum/sprite_accessory/mam_tails_animated/wolf
- name = "Wolf"
- icon_state = "wolf"
-
-/******************************************
-************ Body Markings ****************
-*******************************************/
-
-/datum/sprite_accessory/mam_body_markings
- extra = FALSE
- extra2 = FALSE
- color_src = MATRIXED
- gender_specific = 0
- icon = 'modular_citadel/icons/mob/mam_markings.dmi'
-
-/datum/sprite_accessory/mam_body_markings/none
- name = "None"
- icon_state = "none"
- ckeys_allowed = list("yousshouldnteverbeseeingthisyoumeme")
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/plain
- name = "Plain"
- icon_state = "plain"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/redpanda
- name = "Redpanda"
- icon_state = "redpanda"
-
-/datum/sprite_accessory/mam_body_markings/bee
- name = "Bee"
- icon_state = "bee"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/belly
- name = "Belly"
- icon_state = "belly"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/bellyslim
- name = "Bellyslim"
- icon_state = "bellyslim"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/corgi
- name = "Corgi"
- icon_state = "corgi"
-
-/datum/sprite_accessory/mam_body_markings/cow
- name = "Bovine"
- icon_state = "bovine"
-
-/datum/sprite_accessory/mam_body_markings/corvid
- name = "Corvid"
- icon_state = "corvid"
-
-/datum/sprite_accessory/mam_body_markings/dalmation
- name = "Dalmation"
- icon_state = "dalmation"
-
-/datum/sprite_accessory/mam_body_markings/deer
- name = "Deer"
- icon_state = "deer"
-
-/datum/sprite_accessory/mam_body_markings/dog
- name = "Dog"
- icon_state = "dog"
-
-/datum/sprite_accessory/mam_body_markings/eevee
- name = "Eevee"
- icon_state = "eevee"
-
-/datum/sprite_accessory/mam_body_markings/hippo
- name = "Hippo"
- icon_state = "hippo"
-
-/datum/sprite_accessory/mam_body_markings/fennec
- name = "Fennec"
- icon_state = "Fennec"
-
-/datum/sprite_accessory/mam_body_markings/fox
- name = "Fox"
- icon_state = "fox"
-
-/datum/sprite_accessory/mam_body_markings/frog
- name = "Frog"
- icon_state = "frog"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/goat
- name = "Goat"
- icon_state = "goat"
-
-/datum/sprite_accessory/mam_body_markings/handsfeet
- name = "Handsfeet"
- icon_state = "handsfeet"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/hawk
- name = "Hawk"
- icon_state = "hawk"
-
-/datum/sprite_accessory/mam_body_markings/husky
- name = "Husky"
- icon_state = "husky"
-
-/datum/sprite_accessory/mam_body_markings/hyena
- name = "Hyena"
- icon_state = "hyena"
-
-/datum/sprite_accessory/mam_body_markings/lab
- name = "Lab"
- icon_state = "lab"
-
-/datum/sprite_accessory/mam_body_markings/moth
- name = "Moth"
- icon_state = "moth"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/otie
- name = "Otie"
- icon_state = "otie"
-
-/datum/sprite_accessory/mam_body_markings/otter
- name = "Otter"
- icon_state = "otter"
-
-/datum/sprite_accessory/mam_body_markings/orca
- name = "Orca"
- icon_state = "orca"
-
-/datum/sprite_accessory/mam_body_markings/panther
- name = "Panther"
- icon_state = "panther"
-
-/datum/sprite_accessory/mam_body_markings/possum
- name = "Possum"
- icon_state = "possum"
-
-/datum/sprite_accessory/mam_body_markings/raccoon
- name = "Raccoon"
- icon_state = "raccoon"
-
-/datum/sprite_accessory/mam_body_markings/pede
- name = "Scolipede"
- icon_state = "scolipede"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/shark
- name = "Shark"
- icon_state = "shark"
-
-/datum/sprite_accessory/mam_body_markings/skunk
- name = "Skunk"
- icon_state = "skunk"
-
-/datum/sprite_accessory/mam_body_markings/sergal
- name = "Sergal"
- icon_state = "sergal"
-
-/datum/sprite_accessory/mam_body_markings/shepherd
- name = "Shepherd"
- icon_state = "shepherd"
-
-/datum/sprite_accessory/mam_body_markings/tajaran
- name = "Tajaran"
- icon_state = "tajaran"
-
-/datum/sprite_accessory/mam_body_markings/tiger
- name = "Tiger"
- icon_state = "tiger"
-
-/datum/sprite_accessory/mam_body_markings/turian
- name = "Turian"
- icon_state = "turian"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-/datum/sprite_accessory/mam_body_markings/wolf
- name = "Wolf"
- icon_state = "wolf"
-
-/datum/sprite_accessory/mam_body_markings/xeno
- name = "Xeno"
- icon_state = "xeno"
- icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
-
-
-/******************************************
-************ Taur Bodies ******************
-*******************************************/
-/datum/sprite_accessory/taur
- icon = 'modular_citadel/icons/mob/mam_taur.dmi'
- extra_icon = 'modular_citadel/icons/mob/mam_taur.dmi'
- extra = TRUE
- extra2_icon = 'modular_citadel/icons/mob/mam_taur.dmi'
- extra2 = TRUE
- center = TRUE
- dimension_x = 64
- var/taur_mode = NOT_TAURIC
- color_src = MATRIXED
-
-/datum/sprite_accessory/taur/none
- name = "None"
- icon_state = "None"
-
-/datum/sprite_accessory/taur/cow
- name = "Cow"
- icon_state = "cow"
- taur_mode = HOOF_TAURIC
-
-/datum/sprite_accessory/taur/deer
- name = "Deer"
- icon_state = "deer"
- taur_mode = HOOF_TAURIC
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/taur/drake
- name = "Drake"
- icon_state = "drake"
- taur_mode = PAW_TAURIC
-
-/datum/sprite_accessory/taur/drider
- name = "Drider"
- icon_state = "drider"
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/taur/eevee
- name = "Eevee"
- icon_state = "eevee"
- taur_mode = PAW_TAURIC
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/taur/fox
- name = "Fox"
- icon_state = "fox"
- taur_mode = PAW_TAURIC
-
-/datum/sprite_accessory/taur/husky
- name = "Husky"
- icon_state = "husky"
- taur_mode = PAW_TAURIC
-
-/datum/sprite_accessory/taur/horse
- name = "Horse"
- icon_state = "horse"
- taur_mode = HOOF_TAURIC
-
-/datum/sprite_accessory/taur/lab
- name = "Lab"
- icon_state = "lab"
- taur_mode = PAW_TAURIC
-
-/datum/sprite_accessory/taur/naga
- name = "Naga"
- icon_state = "naga"
- taur_mode = SNEK_TAURIC
-
-/datum/sprite_accessory/taur/otie
- name = "Otie"
- icon_state = "otie"
- taur_mode = PAW_TAURIC
-
-/datum/sprite_accessory/taur/pede
- name = "Scolipede"
- icon_state = "pede"
- taur_mode = PAW_TAURIC
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/taur/panther
- name = "Panther"
- icon_state = "panther"
- taur_mode = PAW_TAURIC
-
-/datum/sprite_accessory/taur/shepherd
- name = "Shepherd"
- icon_state = "shepherd"
- taur_mode = PAW_TAURIC
-
-/datum/sprite_accessory/taur/tentacle
- name = "Tentacle"
- icon_state = "tentacle"
- taur_mode = SNEK_TAURIC
- color_src = MUTCOLORS
-
-/datum/sprite_accessory/taur/tiger
- name = "Tiger"
- icon_state = "tiger"
- taur_mode = PAW_TAURIC
-
-/datum/sprite_accessory/taur/wolf
- name = "Wolf"
- icon_state = "wolf"
- taur_mode = PAW_TAURIC
-
-/******************************************
-*************** Ayyliums ******************
-*******************************************/
-
-//Xeno Dorsal Tubes
-/datum/sprite_accessory/xeno_dorsal
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
-
-/datum/sprite_accessory/xeno_dorsal/standard
- name = "Standard"
- icon_state = "standard"
-
-/datum/sprite_accessory/xeno_dorsal/royal
- name = "Royal"
- icon_state = "royal"
-
-/datum/sprite_accessory/xeno_dorsal/down
- name = "Dorsal Down"
- icon_state = "down"
-
-//Xeno Tail
-/datum/sprite_accessory/xeno_tail
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
-
-/datum/sprite_accessory/xeno_tail/none
- name = "None"
-
-/datum/sprite_accessory/xeno_tail/standard
- name = "Xenomorph Tail"
- icon_state = "xeno"
-
-//Xeno Caste Heads
-/datum/sprite_accessory/xeno_head
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
-
-/datum/sprite_accessory/xeno_head/standard
- name = "Standard"
- icon_state = "standard"
-
-/datum/sprite_accessory/xeno_head/royal
- name = "royal"
- icon_state = "royal"
-
-/datum/sprite_accessory/xeno_head/hollywood
- name = "hollywood"
- icon_state = "hollywood"
-
-/datum/sprite_accessory/xeno_head/warrior
- name = "warrior"
- icon_state = "warrior"
-
-// IPCs
-/datum/sprite_accessory/screen
- icon = 'modular_citadel/icons/mob/ipc_screens.dmi'
- color_src = null
-
-/datum/sprite_accessory/screen/blank
- name = "Blank"
- icon_state = "blank"
-
-/datum/sprite_accessory/screen/pink
- name = "Pink"
- icon_state = "pink"
-
-/datum/sprite_accessory/screen/green
- name = "Green"
- icon_state = "green"
-
-/datum/sprite_accessory/screen/red
- name = "Red"
- icon_state = "red"
-
-/datum/sprite_accessory/screen/blue
- name = "Blue"
- icon_state = "blue"
-
-/datum/sprite_accessory/screen/yellow
- name = "Yellow"
- icon_state = "yellow"
-
-/datum/sprite_accessory/screen/shower
- name = "Shower"
- icon_state = "shower"
-
-/datum/sprite_accessory/screen/nature
- name = "Nature"
- icon_state = "nature"
-
-/datum/sprite_accessory/screen/eight
- name = "Eight"
- icon_state = "eight"
-
-/datum/sprite_accessory/screen/goggles
- name = "Goggles"
- icon_state = "goggles"
-
-/datum/sprite_accessory/screen/heart
- name = "Heart"
- icon_state = "heart"
-
-/datum/sprite_accessory/screen/monoeye
- name = "Mono eye"
- icon_state = "monoeye"
-
-/datum/sprite_accessory/screen/breakout
- name = "Breakout"
- icon_state = "breakout"
-
-/datum/sprite_accessory/screen/purple
- name = "Purple"
- icon_state = "purple"
-
-/datum/sprite_accessory/screen/scroll
- name = "Scroll"
- icon_state = "scroll"
-
-/datum/sprite_accessory/screen/console
- name = "Console"
- icon_state = "console"
-
-/datum/sprite_accessory/screen/rgb
- name = "RGB"
- icon_state = "rgb"
-
-/datum/sprite_accessory/screen/golglider
- name = "Gol Glider"
- icon_state = "golglider"
-
-/datum/sprite_accessory/screen/rainbow
- name = "Rainbow"
- icon_state = "rainbow"
-
-/datum/sprite_accessory/screen/sunburst
- name = "Sunburst"
- icon_state = "sunburst"
-
-/datum/sprite_accessory/screen/static
- name = "Static"
- icon_state = "static"
-
-//Oracle Station sprites
-
-/datum/sprite_accessory/screen/bsod
- name = "BSOD"
- icon_state = "bsod"
-
-/datum/sprite_accessory/screen/redtext
- name = "Red Text"
- icon_state = "retext"
-
-/datum/sprite_accessory/screen/sinewave
- name = "Sine wave"
- icon_state = "sinewave"
-
-/datum/sprite_accessory/screen/squarewave
- name = "Square wave"
- icon_state = "squarwave"
-
-/datum/sprite_accessory/screen/ecgwave
- name = "ECG wave"
- icon_state = "ecgwave"
-
-/datum/sprite_accessory/screen/eyes
- name = "Eyes"
- icon_state = "eyes"
-
-/datum/sprite_accessory/screen/textdrop
- name = "Text drop"
- icon_state = "textdrop"
-
-/datum/sprite_accessory/screen/stars
- name = "Stars"
- icon_state = "stars"
-
-// IPC Antennas
-
-/datum/sprite_accessory/antenna
- icon = 'modular_citadel/icons/mob/ipc_antennas.dmi'
- color_src = MUTCOLORS2
-
-/datum/sprite_accessory/antenna/none
- name = "None"
- icon_state = "None"
-
-/datum/sprite_accessory/antenna/antennae
- name = "Angled Antennae"
- icon_state = "antennae"
-
-/datum/sprite_accessory/antenna/tvantennae
- name = "TV Antennae"
- icon_state = "tvantennae"
-
-/datum/sprite_accessory/antenna/cyberhead
- name = "Cyberhead"
- icon_state = "cyberhead"
-
-/datum/sprite_accessory/antenna/antlers
- name = "Antlers"
- icon_state = "antlers"
-
-/datum/sprite_accessory/antenna/crowned
- name = "Crowned"
- icon_state = "crowned"
-
-// *** Snooooow flaaaaake ***
-
-/datum/sprite_accessory/horns/guilmon
- name = "Guilmon"
- icon_state = "guilmon"
- icon = 'modular_citadel/icons/mob/mam_ears.dmi'
-
-/datum/sprite_accessory/snout/guilmon
- name = "Guilmon"
- icon_state = "guilmon"
- color_src = MATRIXED
-
-/datum/sprite_accessory/mam_tails/shark/datashark
- name = "DataShark"
- icon_state = "datashark"
- ckeys_allowed = list("rubyflamewing")
-
-/datum/sprite_accessory/mam_tails_animated/shark/datashark
- name = "DataShark"
- icon_state = "datashark"
-
-/datum/sprite_accessory/mam_body_markings/shark/datashark
- name = "DataShark"
- icon_state = "datashark"
- ckeys_allowed = list("rubyflamewing")
-
-//Sabresune
-/datum/sprite_accessory/mam_ears/sabresune
- name = "sabresune"
- icon_state = "sabresune"
- ckeys_allowed = list("poojawa")
- extra = TRUE
-
-/datum/sprite_accessory/mam_tails/sabresune
- name = "sabresune"
- icon_state = "sabresune"
- ckeys_allowed = list("poojawa")
-
-
-/datum/sprite_accessory/mam_tails_animated/sabresune
- name = "sabresune"
- icon_state = "sabresune"
-
-/datum/sprite_accessory/mam_body_markings/sabresune
- name = "Sabresune"
- icon_state = "sabresune"
- ckeys_allowed = list("poojawa")
-
-
-//Lunasune
-/datum/sprite_accessory/mam_ears/lunasune
- name = "lunasune"
- icon_state = "lunasune"
- ckeys_allowed = list("invader4352")
-
-/datum/sprite_accessory/mam_tails/lunasune
- name = "lunasune"
- icon_state = "lunasune"
- ckeys_allowed = list("invader4352")
-
-/datum/sprite_accessory/mam_tails_animated/lunasune
- name = "lunasune"
- icon_state = "lunasune"
-
-/*************** VIRGO PORTED HAIRS ****************************/
-#define VHAIR(_name, new_state) /datum/sprite_accessory/hair/##new_state/icon_state=#new_state;/datum/sprite_accessory/hair/##new_state/name = #_name + " (Virgo)"
-//VIRGO PORTED HAIRS
-VHAIR("Short Hair Rosa", hair_rosa_s)
-VHAIR("Short Hair 80s", hair_80s_s)
-VHAIR("Long Bedhead", hair_long_bedhead_s)
-VHAIR("Dave", hair_dave_s)
-VHAIR("Country", hair_country_s)
-VHAIR("Shy", hair_shy_s)
-VHAIR("Unshaven Mohawk", hair_unshaven_mohawk_s)
-VHAIR("Manbun", hair_manbun_s)
-VHAIR("Longer Bedhead", hair_longer_bedhead_s)
-VHAIR("Ponytail", hair_ponytail_s)
-VHAIR("Ziegler", hair_ziegler_s)
-VHAIR("Emo Fringe", hair_emofringe_s)
-VHAIR("Very Short Over Eye Alt", hair_veryshortovereyealternate_s)
-VHAIR("Shorthime", hair_shorthime_s)
-VHAIR("High Tight", hair_hightight_s)
-VHAIR("Thinning Front", hair_thinningfront_s)
-VHAIR("Big Afro", hair_bigafro_s)
-VHAIR("Afro", hair_afro_s)
-VHAIR("High Braid", hair_hbraid_s)
-VHAIR("Braid", hair_braid_s)
-VHAIR("Sargeant", hair_sargeant_s)
-VHAIR("Gelled", hair_gelled_s)
-VHAIR("Kagami", hair_kagami_s)
-VHAIR("ShortTail", hair_stail_s)
-VHAIR("Gentle", hair_gentle_s)
-VHAIR("Grande", hair_grande_s)
-VHAIR("Bobcurl", hair_bobcurl_s)
-VHAIR("Pompadeur", hair_pompadour_s)
-VHAIR("Plait", hair_plait_s)
-VHAIR("Long", hair_long_s)
-VHAIR("Rattail", hair_rattail_s)
-VHAIR("Tajspiky", hair_tajspiky_s)
-VHAIR("Messy", hair_messy_s)
-VHAIR("Bangs", hair_bangs_s)
-VHAIR("TBraid", hair_tbraid_s)
-VHAIR("Toriyama2", hair_toriyama2_s)
-VHAIR("CIA", hair_cia_s)
-VHAIR("Mulder", hair_mulder_s)
-VHAIR("Scully", hair_scully_s)
-VHAIR("Nitori", hair_nitori_s)
-VHAIR("Joestar", hair_joestar_s)
-VHAIR("Ponytail4", hair_ponytail4_s)
-VHAIR("Ponytail5", hair_ponytail5_s)
-VHAIR("Beehive2", hair_beehive2_s)
-VHAIR("Short Braid", hair_shortbraid_s)
-VHAIR("Reverse Mohawk", hair_reversemohawk_s)
-VHAIR("SHort Bangs", hair_shortbangs_s)
-VHAIR("Half Shaved", hair_halfshaved_s)
-VHAIR("Longer Alt 2", hair_longeralt2_s)
-VHAIR("Bun", hair_bun_s)
-VHAIR("Curly", hair_curly_s)
-VHAIR("Victory", hair_victory_s)
-VHAIR("Ponytail6", hair_ponytail6_s)
-VHAIR("Undercut3", hair_undercut3_s)
-VHAIR("Bobcut Alt", hair_bobcultalt_s)
-VHAIR("Fingerwave", hair_fingerwave_s)
-VHAIR("Oxton", hair_oxton_s)
-VHAIR("Poofy2", hair_poofy2_s)
-VHAIR("Fringe Tail", hair_fringetail_s)
-VHAIR("Bun3", hair_bun3_s)
-VHAIR("Wisp", hair_wisp_s)
-VHAIR("Undercut2", hair_undercut2_s)
-VHAIR("TBob", hair_tbob_s)
-VHAIR("Spiky Ponytail", hair_spikyponytail_s)
-VHAIR("Rowbun", hair_rowbun_s)
-VHAIR("Rowdualtail", hair_rowdualtail_s)
-VHAIR("Rowbraid", hair_rowbraid_s)
-VHAIR("Shaved Mohawk", hair_shavedmohawk_s)
-VHAIR("Topknot", hair_topknot_s)
-VHAIR("Ronin", hair_ronin_s)
-VHAIR("Bowlcut2", hair_bowlcut2_s)
-VHAIR("Thinning Rear", hair_thinningrear_s)
-VHAIR("Thinning", hair_thinning_s)
-VHAIR("Jade", hair_jade_s)
-VHAIR("Bedhead", hair_bedhead_s)
-VHAIR("Dreadlocks", hair_dreads_s)
-VHAIR("Very Long", hair_vlong_s)
-VHAIR("Jensen", hair_jensen_s)
-VHAIR("Halfbang", hair_halfbang_s)
-VHAIR("Kusangi", hair_kusangi_s)
-VHAIR("Ponytail", hair_ponytail_s)
-VHAIR("Ponytail3", hair_ponytail3_s)
-VHAIR("Halfbang Alt", hair_halfbang_alt_s)
-VHAIR("Bedhead V2", hair_bedheadv2_s)
-VHAIR("Long Fringe", hair_longfringe_s)
-VHAIR("Flair", hair_flair_s)
-VHAIR("Bedhead V3", hair_bedheadv3_s)
-VHAIR("Himecut", hair_himecut_s)
-VHAIR("Curls", hair_curls_s)
-VHAIR("Very Long Fringe", hair_vlongfringe_s)
-VHAIR("Longest", hair_longest_s)
-VHAIR("Father", hair_father_s)
-VHAIR("Emo Long", hair_emolong_s)
-VHAIR("Short Hair 3", hair_shorthair3_s)
-VHAIR("Double Bun", hair_doublebun_s)
-VHAIR("Sleeze", hair_sleeze_s)
-VHAIR("Twintail", hair_twintail_s)
-VHAIR("Emo 2", hair_emo2_s)
-VHAIR("Low Fade", hair_lowfade_s)
-VHAIR("Med Fade", hair_medfade_s)
-VHAIR("High Fade", hair_highfade_s)
-VHAIR("Bald Fade", hair_baldfade_s)
-VHAIR("No Fade", hair_nofade_s)
-VHAIR("Trim Flat", hair_trimflat_s)
-VHAIR("Shaved", hair_shaved_s)
-VHAIR("Trimmed", hair_trimmed_s)
-VHAIR("Tight Bun", hair_tightbun_s)
-VHAIR("Short Hair 4", hair_d_s)
-VHAIR("Short Hair 5", hair_e_s)
-VHAIR("Short Hair 6", hair_f_s)
-VHAIR("Skinhead", hair_skinhead_s)
-VHAIR("Afro2", hair_afro2_s)
-VHAIR("Bobcut", hair_bobcut_s)
-VHAIR("Emo", hair_emo_s)
-VHAIR("Long Over Eye", hair_longovereye_s)
-VHAIR("Feather", hair_feather_s)
-VHAIR("Hitop", hair_hitop_s)
-VHAIR("Short Over Eye", hair_shortoverye_s)
-VHAIR("Straight", hair_straight_s)
-VHAIR("Buzzcut", hair_buzzcut_s)
-VHAIR("Combover", hair_combover_s)
-VHAIR("Crewcut", hair_crewcut_s)
-VHAIR("Devillock", hair_devilock_s)
-VHAIR("Clean", hair_clean_s)
-VHAIR("Shaggy", hair_shaggy_s)
-VHAIR("Updo", hair_updo_s)
-VHAIR("Mohawk", hair_mohawk_s)
-VHAIR("Odango", hair_odango_s)
-VHAIR("Ombre", hair_ombre_s)
-VHAIR("Parted", hair_parted_s)
-VHAIR("Quiff", hair_quiff_s)
-VHAIR("Volaju", hair_volaju_s)
-VHAIR("Bun2", hair_bun2_s)
-VHAIR("Rows1", hair_rows1_s)
-VHAIR("Rows2", hair_rows2_s)
-VHAIR("Dandy Pompadour", hair_dandypompadour_s)
-VHAIR("Poofy", hair_poofy_s)
-VHAIR("Toriyama", hair_toriyama_s)
-VHAIR("Drillruru", hair_drillruru_s)
-VHAIR("Bowlcut", hair_bowlcut_s)
-VHAIR("Coffee House", hair_coffeehouse_s)
-VHAIR("Family Man", hair_thefamilyman_s)
-VHAIR("Shaved Part", hair_shavedpart_s)
-VHAIR("Modern", hair_modern_s)
-VHAIR("One Shoulder", hair_oneshoulder_s)
-VHAIR("Very Short Over Eye", hair_veryshortovereye_s)
-VHAIR("Unkept", hair_unkept_s)
-VHAIR("Wife", hair_wife_s)
-VHAIR("Nia", hair_nia_s)
-VHAIR("Undercut", hair_undercut_s)
-VHAIR("Bobcut Alt", hair_bobcutalt_s)
-VHAIR("Short Hair 4 alt", hair_shorthair4_s)
-VHAIR("Tressshoulder", hair_tressshoulder_s)
- //END
-#undef VHAIR
-
-#define VFACE(_name, new_state) /datum/sprite_accessory/facial_hair/##new_state/icon_state=#new_state;;/datum/sprite_accessory/facial_hair/##new_state/name= #_name + " (Virgo)"
-VFACE("Watson", facial_watson_s)
-VFACE("Chaplin", facial_chaplin_s)
-VFACE("Fullbeard", facial_fullbeard_s)
-VFACE("Vandyke", facial_vandyke_s)
-VFACE("Elvis", facial_elvis_s)
-VFACE("Abe", facial_abe_s)
-VFACE("Chin", facial_chin_s)
-VFACE("GT", facial_gt_s)
-VFACE("Hip", facial_hip_s)
-VFACE("Hogan", facial_hogan_s)
-VFACE("Selleck", facial_selleck_s)
-VFACE("Neckbeard", facial_neckbeard_s)
-VFACE("Longbeard", facial_longbeard_s)
-VFACE("Dwarf", facial_dwarf_s)
-VFACE("Sideburn", facial_sideburn_s)
-VFACE("Mutton", facial_mutton_s)
-VFACE("Moustache", facial_moustache_s)
-VFACE("Pencilstache", facial_pencilstache_s)
-VFACE("Goatee", facial_goatee_s)
-VFACE("Smallstache", facial_smallstache_s)
-VFACE("Volaju", facial_volaju_s)
-VFACE("3 O\'clock", facial_3oclock_s)
-VFACE("5 O\'clock", facial_5oclock_s)
-VFACE("7 O\'clock", facial_7oclock_s)
-VFACE("5 O\'clock Moustache", facial_5oclockmoustache_s)
-VFACE("7 O\'clock", facial_7oclockmoustache_s)
-VFACE("Walrus", facial_walrus_s)
-VFACE("Muttonmus", facial_muttonmus_s)
-VFACE("Wise", facial_wise_s)
-VFACE("Martial Artist", facial_martialartist_s)
-VFACE("Dorsalfnil", facial_dorsalfnil_s)
-VFACE("Hornadorns", facial_hornadorns_s)
-VFACE("Spike", facial_spike_s)
-VFACE("Chinhorns", facial_chinhorns_s)
-VFACE("Cropped Fullbeard", facial_croppedfullbeard_s)
-VFACE("Chinless Beard", facial_chinlessbeard_s)
-VFACE("Moonshiner", facial_moonshiner_s)
-VFACE("Tribearder", facial_tribearder_s)
-#undef VFACE
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human.dm b/modular_citadel/code/modules/mob/living/carbon/human/human.dm
index bb8d4a5f4a..e0d592827e 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/human.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/human.dm
@@ -1,12 +1,6 @@
/mob/living/carbon/human/species/mammal
race = /datum/species/mammal
-/mob/living/carbon/human/species/avian
- race = /datum/species/avian
-
-/mob/living/carbon/human/species/aquatic
- race = /datum/species/aquatic
-
/mob/living/carbon/human/species/insect
race = /datum/species/insect
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/life.dm b/modular_citadel/code/modules/mob/living/carbon/human/life.dm
deleted file mode 100644
index fbaa1b4b58..0000000000
--- a/modular_citadel/code/modules/mob/living/carbon/human/life.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/mob/living/carbon/human/Life(seconds, times_fired)
- //citadel code
- if(stat != DEAD)
- handle_arousal(times_fired)
- . = ..()
-
-/mob/living/carbon/human/calculate_affecting_pressure(pressure)
- if(ismob(loc))
- return ONE_ATMOSPHERE
- if(istype(loc, /obj/item/dogborg/sleeper))
- return ONE_ATMOSPHERE
- . = ..()
-
-/mob/living/carbon/human/update_health_hud(shown_health_amount)
- . = ..()
- if(!client || !hud_used)
- return
- if(hud_used.staminas)
- hud_used.staminas.icon_state = staminahudamount()
- if(hud_used.staminabuffer)
- hud_used.staminabuffer.icon_state = staminabufferhudamount()
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species.dm b/modular_citadel/code/modules/mob/living/carbon/human/species.dm
deleted file mode 100644
index 1c7456a8d8..0000000000
--- a/modular_citadel/code/modules/mob/living/carbon/human/species.dm
+++ /dev/null
@@ -1,166 +0,0 @@
-/datum/species
- var/should_draw_citadel = FALSE
-
-/datum/species/proc/alt_spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
- if(!istype(M))
- return TRUE
- CHECK_DNA_AND_SPECIES(M)
- CHECK_DNA_AND_SPECIES(H)
-
- if(!istype(M)) //sanity check for drones.
- return TRUE
- if(M.mind)
- attacker_style = M.mind.martial_art
- if((M != H) && M.a_intent != INTENT_HELP && H.check_shields(M, 0, M.name, attack_type = UNARMED_ATTACK))
- log_combat(M, H, "attempted to touch")
- H.visible_message("
[M] attempted to touch [H]! ")
- return TRUE
- switch(M.a_intent)
- if(INTENT_HELP)
- if(M == H)
- althelp(M, H, attacker_style)
- return TRUE
- return FALSE
- if(INTENT_DISARM)
- altdisarm(M, H, attacker_style)
- return TRUE
- return FALSE
-
-/datum/species/proc/althelp(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
- if(user == target && istype(user))
- if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
- to_chat(user, "
You're too exhausted for that. ")
- return
- if(!user.resting)
- to_chat(user, "
You can only force yourself up if you're on the ground. ")
- return
- user.visible_message("
[user] forces [p_them()]self up to [p_their()] feet! ", "
You force yourself up to your feet! ")
- user.resting = 0
- user.update_canmove()
- user.adjustStaminaLossBuffered(user.stambuffer) //Rewards good stamina management by making it easier to instantly get up from resting
- playsound(user, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
-
-/datum/species/proc/altdisarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
- if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
- to_chat(user, "
You're too exhausted. ")
- return FALSE
- if(target.check_block())
- target.visible_message("
[target] blocks [user]'s shoving attempt! ")
- return FALSE
- if(attacker_style && attacker_style.disarm_act(user,target))
- return TRUE
- if(user.resting)
- return FALSE
- else
- if(user == target)
- return
- user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
- user.adjustStaminaLossBuffered(4)
- playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
-
- if(target.w_uniform)
- target.w_uniform.add_fingerprint(user)
- SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected)
-
- if(!target.resting)
- target.adjustStaminaLoss(5)
-
-
- var/turf/target_oldturf = target.loc
- var/shove_dir = get_dir(user.loc, target_oldturf)
- var/turf/target_shove_turf = get_step(target.loc, shove_dir)
- var/mob/living/carbon/human/target_collateral_human
- var/obj/structure/table/target_table
- var/shove_blocked = FALSE //Used to check if a shove is blocked so that if it is knockdown logic can be applied
-
- //Thank you based whoneedsspace
- target_collateral_human = locate(/mob/living/carbon/human) in target_shove_turf.contents
- if(target_collateral_human)
- shove_blocked = TRUE
- else
- target.Move(target_shove_turf, shove_dir)
- if(get_turf(target) == target_oldturf)
- if(target_shove_turf.density)
- shove_blocked = TRUE
- else
- var/thoushallnotpass = FALSE
- for(var/obj/O in target_shove_turf)
- if(istype(O, /obj/structure/table))
- target_table = O
- else if(!O.CanPass(src, target_shove_turf))
- shove_blocked = TRUE
- thoushallnotpass = TRUE
- if(thoushallnotpass)
- target_table = null
-
- if(target.is_shove_knockdown_blocked())
- return
-
- if(shove_blocked || target_table)
- var/directional_blocked = FALSE
- if(shove_dir in GLOB.cardinals) //Directional checks to make sure that we're not shoving through a windoor or something like that
- var/target_turf = get_turf(target)
- for(var/obj/O in target_turf)
- if(O.flags_1 & ON_BORDER_1 && O.dir == shove_dir && O.density)
- directional_blocked = TRUE
- break
- if(target_turf != target_shove_turf) //Make sure that we don't run the exact same check twice on the same tile
- for(var/obj/O in target_shove_turf)
- if(O.flags_1 & ON_BORDER_1 && O.dir == turn(shove_dir, 180) && O.density)
- directional_blocked = TRUE
- break
- var/targetatrest = target.resting
- if(((!target_table && !target_collateral_human) || directional_blocked) && !targetatrest)
- target.Knockdown(SHOVE_KNOCKDOWN_SOLID)
- user.visible_message("
[user.name] shoves [target.name], knocking them down! ",
- "
You shove [target.name], knocking them down! ", null, COMBAT_MESSAGE_RANGE)
- log_combat(user, target, "shoved", "knocking them down")
- else if(target_table)
- if(!targetatrest)
- target.Knockdown(SHOVE_KNOCKDOWN_TABLE)
- user.visible_message("
[user.name] shoves [target.name] onto \the [target_table]! ",
- "
You shove [target.name] onto \the [target_table]! ", null, COMBAT_MESSAGE_RANGE)
- target.forceMove(target_shove_turf)
- log_combat(user, target, "shoved", "onto [target_table]")
- else if(target_collateral_human && !targetatrest)
- target.Knockdown(SHOVE_KNOCKDOWN_HUMAN)
- if(!target_collateral_human.resting)
- target_collateral_human.Knockdown(SHOVE_KNOCKDOWN_COLLATERAL)
- user.visible_message("
[user.name] shoves [target.name] into [target_collateral_human.name]! ",
- "
You shove [target.name] into [target_collateral_human.name]! ", null, COMBAT_MESSAGE_RANGE)
- log_combat(user, target, "shoved", "into [target_collateral_human.name]")
-
- else
- user.visible_message("
[user.name] shoves [target.name]! ",
- "
You shove [target.name]! ", null, COMBAT_MESSAGE_RANGE)
- var/target_held_item = target.get_active_held_item()
- var/knocked_item = FALSE
- if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types))
- target_held_item = null
- if(!target.has_movespeed_modifier(SHOVE_SLOWDOWN_ID))
- target.add_movespeed_modifier(SHOVE_SLOWDOWN_ID, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH)
- if(target_held_item)
- target.visible_message("
[target.name]'s grip on \the [target_held_item] loosens! ",
- "
Your grip on \the [target_held_item] loosens! ", null, COMBAT_MESSAGE_RANGE)
- addtimer(CALLBACK(target, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
- else if(target_held_item)
- target.dropItemToGround(target_held_item)
- knocked_item = TRUE
- target.visible_message("
[target.name] drops \the [target_held_item]!! ",
- "
You drop \the [target_held_item]!! ", null, COMBAT_MESSAGE_RANGE)
- var/append_message = ""
- if(target_held_item)
- if(knocked_item)
- append_message = "causing them to drop [target_held_item]"
- else
- append_message = "loosening their grip on [target_held_item]"
- log_combat(user, target, "shoved", append_message)
-
-
-////////////////////
-/////BODYPARTS/////
-////////////////////
-
-
-/obj/item/bodypart
- var/should_draw_citadel = FALSE
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
deleted file mode 100644
index 6b6349c0f3..0000000000
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ /dev/null
@@ -1,237 +0,0 @@
-/datum/species/mammal
- name = "Mammal"
- id = "mammal"
- default_color = "4B4B4B"
- should_draw_citadel = TRUE
- species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
- inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
- mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur", "legs")
- default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs")
- attack_verb = "claw"
- attack_sound = 'sound/weapons/slash.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal
- liked_food = MEAT | FRIED
- disliked_food = TOXIC
-
-//Curiosity killed the cat's wagging tail.
-/datum/species/mammal/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/mammal/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/mammal/can_wag_tail(mob/living/carbon/human/H)
- return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/mammal/is_wagging_tail(mob/living/carbon/human/H)
- return ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/mammal/start_wagging_tail(mob/living/carbon/human/H)
- if("mam_tail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_tail"
- mutant_bodyparts |= "mam_waggingtail"
- H.update_body()
-
-/datum/species/mammal/stop_wagging_tail(mob/living/carbon/human/H)
- if("mam_waggingtail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_waggingtail"
- mutant_bodyparts |= "mam_tail"
- H.update_body()
-
-
-/datum/species/mammal/qualifies_for_rank(rank, list/features)
- return TRUE
-
-
-//AVIAN//
-/datum/species/avian
- name = "Avian"
- id = "avian"
- say_mod = "chirps"
- default_color = "BCAC9B"
- should_draw_citadel = TRUE
- species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
- inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
- mutant_bodyparts = list("mam_snouts", "wings", "taur", "mam_tail", "mam_body_markings", "taur")
- default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Beak", "mam_body_markings" = "Hawk", "wings" = "None", "taur" = "None", "mam_tail" = "Hawk")
- attack_verb = "peck"
- attack_sound = 'sound/weapons/slash.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- liked_food = MEAT | FRUIT
- disliked_food = TOXIC
-
-/datum/species/avian/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/avian/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/avian/can_wag_tail(mob/living/carbon/human/H)
- return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/avian/is_wagging_tail(mob/living/carbon/human/H)
- return ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/avian/start_wagging_tail(mob/living/carbon/human/H)
- if("mam_tail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_tail"
- mutant_bodyparts |= "mam_waggingtail"
- H.update_body()
-
-/datum/species/avian/stop_wagging_tail(mob/living/carbon/human/H)
- if("mam_waggingtail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_waggingtail"
- mutant_bodyparts |= "mam_tail"
- H.update_body()
-
-/datum/species/avian/qualifies_for_rank(rank, list/features)
- return TRUE
-
-//AQUATIC//
-/datum/species/aquatic
- name = "Aquatic"
- id = "aquatic"
- default_color = "BCAC9B"
- should_draw_citadel = TRUE
- species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
- inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
- mutant_bodyparts = list("mam_tail", "mam_ears","mam_body_markings", "taur", "legs", "mam_snouts")
- default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "Shark", "mam_ears" = "None", "mam_body_markings" = "Shark", "mam_snouts" = "Round", "taur" = "None", "legs" = "Normal Legs")
- attack_verb = "bite"
- attack_sound = 'sound/weapons/bite.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- liked_food = MEAT
- disliked_food = TOXIC
- meat = /obj/item/reagent_containers/food/snacks/carpmeat/aquatic
-
-/datum/species/aquatic/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/aquatic/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/aquatic/can_wag_tail(mob/living/carbon/human/H)
- return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/aquatic/is_wagging_tail(mob/living/carbon/human/H)
- return ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/aquatic/start_wagging_tail(mob/living/carbon/human/H)
- if("mam_tail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_tail"
- mutant_bodyparts |= "mam_waggingtail"
- H.update_body()
-
-/datum/species/aquatic/stop_wagging_tail(mob/living/carbon/human/H)
- if("mam_waggingtail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_waggingtail"
- mutant_bodyparts |= "mam_tail"
- H.update_body()
-
-/datum/species/aquatic/qualifies_for_rank(rank, list/features)
- return TRUE
-
-//INSECT//
-/datum/species/insect
- name = "Insect"
- id = "insect"
- default_color = "BCAC9B"
- should_draw_citadel = TRUE
- species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
- inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
- mutant_bodyparts = list("mam_ears", "mam_body_markings", "mam_tail", "taur", "moth_wings", "mam_snouts")
- default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "Plain", "mam_snouts" = "Bug", "mam_body_markings" = "Moth", "taur" = "None")
- attack_verb = "flutter" //wat?
- attack_sound = 'sound/weapons/slash.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- liked_food = MEAT | FRUIT
- disliked_food = TOXIC
-
-/datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/insect/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/insect/can_wag_tail(mob/living/carbon/human/H)
- return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/insect/is_wagging_tail(mob/living/carbon/human/H)
- return ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/insect/start_wagging_tail(mob/living/carbon/human/H)
- if("mam_tail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_tail"
- mutant_bodyparts |= "mam_waggingtail"
- H.update_body()
-
-/datum/species/insect/stop_wagging_tail(mob/living/carbon/human/H)
- if("mam_waggingtail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_waggingtail"
- mutant_bodyparts |= "mam_tail"
- H.update_body()
-
-/datum/species/insect/qualifies_for_rank(rank, list/features)
- return TRUE
-
-//Alien//
-/datum/species/xeno
- // A cloning mistake, crossing human and xenomorph DNA
- name = "Xeno Hybrid"
- id = "xeno"
- say_mod = "hisses"
- default_color = "00FF00"
- should_draw_citadel = TRUE
- species_traits = list(MUTCOLORS,EYECOLOR,LIPS)
- inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
- mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs")
- default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade Legs")
- attack_verb = "slash"
- attack_sound = 'sound/weapons/slash.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
- skinned_type = /obj/item/stack/sheet/animalhide/xeno
- exotic_bloodtype = "L"
- damage_overlay_type = "xeno"
- liked_food = MEAT
-
-/datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
- if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
- species_traits += DIGITIGRADE
- if(DIGITIGRADE in species_traits)
- C.Digitigrade_Leg_Swap(FALSE)
- . = ..()
-
-/datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
- if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
- species_traits -= DIGITIGRADE
- if(DIGITIGRADE in species_traits)
- C.Digitigrade_Leg_Swap(TRUE)
- . = ..()
-
-//Praise the Omnissiah, A challange worthy of my skills - HS
-
-//EXOTIC//
-//These races will likely include lots of downsides and upsides. Keep them relatively balanced.//
-
-//misc
-/mob/living/carbon/human/dummy
- no_vore = TRUE
-
-/mob/living/carbon/human/vore
- devourable = TRUE
- digestable = TRUE
- feeding = TRUE
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
deleted file mode 100644
index efcbda5065..0000000000
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ /dev/null
@@ -1,245 +0,0 @@
-/datum/species/jelly/slime
- name = "Xenobiological Slimeperson"
-
-//##########SLIMEPEOPLE##########
-
-/datum/species/jelly/roundstartslime
- name = "Slimeperson"
- id = "slimeperson"
- limbs_id = "slime"
- default_color = "00FFFF"
- species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
- inherent_traits = list(TRAIT_TOXINLOVER)
- mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur")
- default_features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None")
- say_mod = "says"
- hair_color = "mutcolor"
- hair_alpha = 160 //a notch brighter so it blends better.
- coldmod = 3
- heatmod = 1
- burnmod = 1
-
-/datum/species/jelly/roundstartslime/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/jelly/roundstartslime/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/jelly/roundstartslime/can_wag_tail(mob/living/carbon/human/H)
- return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/jelly/roundstartslime/is_wagging_tail(mob/living/carbon/human/H)
- return ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/jelly/roundstartslime/start_wagging_tail(mob/living/carbon/human/H)
- if("mam_tail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_tail"
- mutant_bodyparts |= "mam_waggingtail"
- H.update_body()
-
-/datum/species/jelly/roundstartslime/stop_wagging_tail(mob/living/carbon/human/H)
- if("mam_waggingtail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_waggingtail"
- mutant_bodyparts |= "mam_tail"
- H.update_body()
-
-
-/datum/action/innate/slime_change
- name = "Alter Form"
- check_flags = AB_CHECK_CONSCIOUS
- button_icon_state = "alter_form" //placeholder
- icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi'
- background_icon_state = "bg_alien"
-
-/datum/action/innate/slime_change/Activate()
- var/mob/living/carbon/human/H = owner
- if(!isjellyperson(H))
- return
- else
- H.visible_message("
[owner] gains a look of \
- concentration while standing perfectly still.\
- Their body seems to shift and starts getting more goo-like. ",
- "
You focus intently on altering your body while \
- standing perfectly still... ")
- change_form()
-
-/datum/action/innate/slime_change/proc/change_form()
- var/mob/living/carbon/human/H = owner
- var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel")
- if(select_alteration == "Hair Style")
- if(H.gender == MALE)
- var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list
- if(new_style)
- H.facial_hair_style = new_style
- else
- H.facial_hair_style = "Shaved"
- //handle normal hair
- var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list
- if(new_style)
- H.hair_style = new_style
- H.update_hair()
- else if (select_alteration == "Genitals")
- var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel")
- switch(operation)
- if("add sexual organ")
- var/new_organ = input("Select sexual organ:", "Organ Manipulation") as null|anything in GLOB.genitals_list
- if(!new_organ)
- return
- H.give_genital(GLOB.genitals_list[new_organ])
-
- if("remove sexual organ")
- var/list/organs = list()
- for(var/obj/item/organ/genital/X in H.internal_organs)
- var/obj/item/organ/I = X
- organs["[I.name] ([I.type])"] = I
- var/obj/item/O = input("Select sexual organ:", "Organ Manipulation", null) as null|anything in organs
- var/obj/item/organ/genital/G = organs[O]
- if(!G)
- return
- G.forceMove(get_turf(H))
- qdel(G)
- H.update_genitals()
-
- else if (select_alteration == "Ears")
- var/list/snowflake_ears_list = list("Normal" = null)
- for(var/path in GLOB.mam_ears_list)
- var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path]
- if(istype(instance, /datum/sprite_accessory))
- var/datum/sprite_accessory/S = instance
- if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
- snowflake_ears_list[S.name] = path
- var/new_ears
- new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in snowflake_ears_list
- if(new_ears)
- H.dna.features["mam_ears"] = new_ears
- H.update_body()
-
- else if (select_alteration == "Snout")
- var/list/snowflake_snouts_list = list("Normal" = null)
- for(var/path in GLOB.mam_snouts_list)
- var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path]
- if(istype(instance, /datum/sprite_accessory))
- var/datum/sprite_accessory/S = instance
- if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
- snowflake_snouts_list[S.name] = path
- var/new_snout
- new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list
- if(new_snout)
- H.dna.features["mam_snouts"] = new_snout
- H.update_body()
-
- else if (select_alteration == "Markings")
- var/list/snowflake_markings_list = list()
- for(var/path in GLOB.mam_body_markings_list)
- var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
- if(istype(instance, /datum/sprite_accessory))
- var/datum/sprite_accessory/S = instance
- if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
- snowflake_markings_list[S.name] = path
- var/new_mam_body_markings
- new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list
- if(new_mam_body_markings)
- H.dna.features["mam_body_markings"] = new_mam_body_markings
- if(new_mam_body_markings == "None")
- H.dna.features["mam_body_markings"] = "Plain"
- for(var/X in H.bodyparts) //propagates the markings changes
- var/obj/item/bodypart/BP = X
- BP.update_limb(FALSE, H)
- H.update_body()
-
- else if (select_alteration == "Tail")
- var/list/snowflake_tails_list = list("Normal" = null)
- for(var/path in GLOB.mam_tails_list)
- var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path]
- if(istype(instance, /datum/sprite_accessory))
- var/datum/sprite_accessory/S = instance
- if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
- snowflake_tails_list[S.name] = path
- var/new_tail
- new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list
- if(new_tail)
- H.dna.features["mam_tail"] = new_tail
- if(new_tail != "None")
- H.dna.features["taur"] = "None"
- H.update_body()
-
- else if (select_alteration == "Taur body")
- var/list/snowflake_taur_list = list("Normal" = null)
- for(var/path in GLOB.taur_list)
- var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
- if(istype(instance, /datum/sprite_accessory))
- var/datum/sprite_accessory/S = instance
- if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
- snowflake_taur_list[S.name] = path
- var/new_taur
- new_taur = input(owner, "Choose your character's tauric body:", "Tauric Alteration") as null|anything in snowflake_taur_list
- if(new_taur)
- H.dna.features["taur"] = new_taur
- if(new_taur != "None")
- H.dna.features["mam_tail"] = "None"
- H.update_body()
-
- else if (select_alteration == "Penis")
- for(var/obj/item/organ/genital/penis/X in H.internal_organs)
- qdel(X)
- var/new_shape
- new_shape = input(owner, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list
- if(new_shape)
- H.dna.features["cock_shape"] = new_shape
- H.update_genitals()
- H.give_genital(/obj/item/organ/genital/testicles)
- H.give_genital(/obj/item/organ/genital/penis)
- H.apply_overlay()
-
-
- else if (select_alteration == "Vagina")
- for(var/obj/item/organ/genital/vagina/X in H.internal_organs)
- qdel(X)
- var/new_shape
- new_shape = input(owner, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list
- if(new_shape)
- H.dna.features["vag_shape"] = new_shape
- H.update_genitals()
- H.give_genital(/obj/item/organ/genital/womb)
- H.give_genital(/obj/item/organ/genital/vagina)
- H.apply_overlay()
-
- else if (select_alteration == "Penis Length")
- for(var/obj/item/organ/genital/penis/X in H.internal_organs)
- qdel(X)
- var/new_length
- new_length = input(owner, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Genital Alteration") as num|null
- if(new_length)
- H.dna.features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN)
- H.update_genitals()
- H.apply_overlay()
- H.give_genital(/obj/item/organ/genital/testicles)
- H.give_genital(/obj/item/organ/genital/penis)
-
- else if (select_alteration == "Breast Size")
- for(var/obj/item/organ/genital/breasts/X in H.internal_organs)
- qdel(X)
- var/new_size
- new_size = input(owner, "Breast Size", "Genital Alteration") as null|anything in GLOB.breasts_size_list
- if(new_size)
- H.dna.features["breasts_size"] = new_size
- H.update_genitals()
- H.apply_overlay()
- H.give_genital(/obj/item/organ/genital/breasts)
-
- else if (select_alteration == "Breast Shape")
- for(var/obj/item/organ/genital/breasts/X in H.internal_organs)
- qdel(X)
- var/new_shape
- new_shape = input(owner, "Breast Shape", "Genital Alteration") as null|anything in GLOB.breasts_shapes_list
- if(new_shape)
- H.dna.features["breasts_shape"] = new_shape
- H.update_genitals()
- H.apply_overlay()
- H.give_genital(/obj/item/organ/genital/breasts)
-
- else
- return
diff --git a/modular_citadel/code/modules/mob/living/silicon/ai/vox_sounds.dm b/modular_citadel/code/modules/mob/living/silicon/ai/vox_sounds.dm
new file mode 100644
index 0000000000..b1e112aac5
--- /dev/null
+++ b/modular_citadel/code/modules/mob/living/silicon/ai/vox_sounds.dm
@@ -0,0 +1,633 @@
+// List is required to compile the resources into the game when it loads.
+// Dynamically loading it has bad results with sounds overtaking each other, even with the wait variable.
+#ifdef AI_VOX
+
+GLOBAL_LIST_INIT(vox_sounds_male, list("," = 'modular_citadel/sound/vox/_comma.ogg',
+"." = 'modular_citadel/sound/vox/_period.ogg',
+"a" = 'modular_citadel/sound/vox/a.ogg',
+"accelerating" = 'modular_citadel/sound/vox/accelerating.ogg',
+"accelerator" = 'modular_citadel/sound/vox/accelerator.ogg',
+"accepted" = 'modular_citadel/sound/vox/accepted.ogg',
+"access" = 'modular_citadel/sound/vox/access.ogg',
+"acknowledge" = 'modular_citadel/sound/vox/acknowledge.ogg',
+"acknowledged" = 'modular_citadel/sound/vox/acknowledged.ogg',
+"acquired" = 'modular_citadel/sound/vox/acquired.ogg',
+"acquisition" = 'modular_citadel/sound/vox/acquisition.ogg',
+"across" = 'modular_citadel/sound/vox/across.ogg',
+"activate" = 'modular_citadel/sound/vox/activate.ogg',
+"activated" = 'modular_citadel/sound/vox/activated.ogg',
+"activity" = 'modular_citadel/sound/vox/activity.ogg',
+"adios" = 'modular_citadel/sound/vox/adios.ogg',
+"administration" = 'modular_citadel/sound/vox/administration.ogg',
+"advanced" = 'modular_citadel/sound/vox/advanced.ogg',
+"after" = 'modular_citadel/sound/vox/after.ogg',
+"agent" = 'modular_citadel/sound/vox/agent.ogg',
+"alarm" = 'modular_citadel/sound/vox/alarm.ogg',
+"alert" = 'modular_citadel/sound/vox/alert.ogg',
+"alien" = 'modular_citadel/sound/vox/alien.ogg',
+"aligned" = 'modular_citadel/sound/vox/aligned.ogg',
+"all" = 'modular_citadel/sound/vox/all.ogg',
+"alpha" = 'modular_citadel/sound/vox/alpha.ogg',
+"am" = 'modular_citadel/sound/vox/am.ogg',
+"amigo" = 'modular_citadel/sound/vox/amigo.ogg',
+"ammunition" = 'modular_citadel/sound/vox/ammunition.ogg',
+"an" = 'modular_citadel/sound/vox/an.ogg',
+"and" = 'modular_citadel/sound/vox/and.ogg',
+"announcement" = 'modular_citadel/sound/vox/announcement.ogg',
+"anomalous" = 'modular_citadel/sound/vox/anomalous.ogg',
+"antenna" = 'modular_citadel/sound/vox/antenna.ogg',
+"any" = 'modular_citadel/sound/vox/any.ogg',
+"apprehend" = 'modular_citadel/sound/vox/apprehend.ogg',
+"approach" = 'modular_citadel/sound/vox/approach.ogg',
+"are" = 'modular_citadel/sound/vox/are.ogg',
+"area" = 'modular_citadel/sound/vox/area.ogg',
+"arm" = 'modular_citadel/sound/vox/arm.ogg',
+"armed" = 'modular_citadel/sound/vox/armed.ogg',
+"armor" = 'modular_citadel/sound/vox/armor.ogg',
+"armory" = 'modular_citadel/sound/vox/armory.ogg',
+"arrest" = 'modular_citadel/sound/vox/arrest.ogg',
+"ass" = 'modular_citadel/sound/vox/ass.ogg',
+"at" = 'modular_citadel/sound/vox/at.ogg',
+"atomic" = 'modular_citadel/sound/vox/atomic.ogg',
+"attention" = 'modular_citadel/sound/vox/attention.ogg',
+"authorize" = 'modular_citadel/sound/vox/authorize.ogg',
+"authorized" = 'modular_citadel/sound/vox/authorized.ogg',
+"automatic" = 'modular_citadel/sound/vox/automatic.ogg',
+"away" = 'modular_citadel/sound/vox/away.ogg',
+"b" = 'modular_citadel/sound/vox/b.ogg',
+"back" = 'modular_citadel/sound/vox/back.ogg',
+"backman" = 'modular_citadel/sound/vox/backman.ogg',
+"bad" = 'modular_citadel/sound/vox/bad.ogg',
+"bag" = 'modular_citadel/sound/vox/bag.ogg',
+"bailey" = 'modular_citadel/sound/vox/bailey.ogg',
+"barracks" = 'modular_citadel/sound/vox/barracks.ogg',
+"base" = 'modular_citadel/sound/vox/base.ogg',
+"bay" = 'modular_citadel/sound/vox/bay.ogg',
+"be" = 'modular_citadel/sound/vox/be.ogg',
+"been" = 'modular_citadel/sound/vox/been.ogg',
+"before" = 'modular_citadel/sound/vox/before.ogg',
+"beyond" = 'modular_citadel/sound/vox/beyond.ogg',
+"biohazard" = 'modular_citadel/sound/vox/biohazard.ogg',
+"biological" = 'modular_citadel/sound/vox/biological.ogg',
+"birdwell" = 'modular_citadel/sound/vox/birdwell.ogg',
+"bizwarn" = 'modular_citadel/sound/vox/bizwarn.ogg',
+"black" = 'modular_citadel/sound/vox/black.ogg',
+"blast" = 'modular_citadel/sound/vox/blast.ogg',
+"blocked" = 'modular_citadel/sound/vox/blocked.ogg',
+"bloop" = 'modular_citadel/sound/vox/bloop.ogg',
+"blue" = 'modular_citadel/sound/vox/blue.ogg',
+"bottom" = 'modular_citadel/sound/vox/bottom.ogg',
+"bravo" = 'modular_citadel/sound/vox/bravo.ogg',
+"breach" = 'modular_citadel/sound/vox/breach.ogg',
+"breached" = 'modular_citadel/sound/vox/breached.ogg',
+"break" = 'modular_citadel/sound/vox/break.ogg',
+"bridge" = 'modular_citadel/sound/vox/bridge.ogg',
+"bust" = 'modular_citadel/sound/vox/bust.ogg',
+"but" = 'modular_citadel/sound/vox/but.ogg',
+"button" = 'modular_citadel/sound/vox/button.ogg',
+"buzwarn" = 'modular_citadel/sound/vox/buzwarn.ogg',
+"bypass" = 'modular_citadel/sound/vox/bypass.ogg',
+"c" = 'modular_citadel/sound/vox/c.ogg',
+"cable" = 'modular_citadel/sound/vox/cable.ogg',
+"call" = 'modular_citadel/sound/vox/call.ogg',
+"called" = 'modular_citadel/sound/vox/called.ogg',
+"canal" = 'modular_citadel/sound/vox/canal.ogg',
+"cap" = 'modular_citadel/sound/vox/cap.ogg',
+"captain" = 'modular_citadel/sound/vox/captain.ogg',
+"capture" = 'modular_citadel/sound/vox/capture.ogg',
+"captured" = 'modular_citadel/sound/vox/captured.ogg',
+"ceiling" = 'modular_citadel/sound/vox/ceiling.ogg',
+"celsius" = 'modular_citadel/sound/vox/celsius.ogg',
+"center" = 'modular_citadel/sound/vox/center.ogg',
+"centi" = 'modular_citadel/sound/vox/centi.ogg',
+"central" = 'modular_citadel/sound/vox/central.ogg',
+"chamber" = 'modular_citadel/sound/vox/chamber.ogg',
+"charlie" = 'modular_citadel/sound/vox/charlie.ogg',
+"check" = 'modular_citadel/sound/vox/check.ogg',
+"checkpoint" = 'modular_citadel/sound/vox/checkpoint.ogg',
+"chemical" = 'modular_citadel/sound/vox/chemical.ogg',
+"cleanup" = 'modular_citadel/sound/vox/cleanup.ogg',
+"clear" = 'modular_citadel/sound/vox/clear.ogg',
+"clearance" = 'modular_citadel/sound/vox/clearance.ogg',
+"close" = 'modular_citadel/sound/vox/close.ogg',
+"clown" = 'modular_citadel/sound/vox/clown.ogg',
+"code" = 'modular_citadel/sound/vox/code.ogg',
+"coded" = 'modular_citadel/sound/vox/coded.ogg',
+"collider" = 'modular_citadel/sound/vox/collider.ogg',
+"command" = 'modular_citadel/sound/vox/command.ogg',
+"communication" = 'modular_citadel/sound/vox/communication.ogg',
+"complex" = 'modular_citadel/sound/vox/complex.ogg',
+"computer" = 'modular_citadel/sound/vox/computer.ogg',
+"condition" = 'modular_citadel/sound/vox/condition.ogg',
+"containment" = 'modular_citadel/sound/vox/containment.ogg',
+"contamination" = 'modular_citadel/sound/vox/contamination.ogg',
+"control" = 'modular_citadel/sound/vox/control.ogg',
+"coolant" = 'modular_citadel/sound/vox/coolant.ogg',
+"coomer" = 'modular_citadel/sound/vox/coomer.ogg',
+"core" = 'modular_citadel/sound/vox/core.ogg',
+"correct" = 'modular_citadel/sound/vox/correct.ogg',
+"corridor" = 'modular_citadel/sound/vox/corridor.ogg',
+"crew" = 'modular_citadel/sound/vox/crew.ogg',
+"cross" = 'modular_citadel/sound/vox/cross.ogg',
+"cryogenic" = 'modular_citadel/sound/vox/cryogenic.ogg',
+"d" = 'modular_citadel/sound/vox/d.ogg',
+"dadeda" = 'modular_citadel/sound/vox/dadeda.ogg',
+"damage" = 'modular_citadel/sound/vox/damage.ogg',
+"damaged" = 'modular_citadel/sound/vox/damaged.ogg',
+"danger" = 'modular_citadel/sound/vox/danger.ogg',
+"day" = 'modular_citadel/sound/vox/day.ogg',
+"deactivated" = 'modular_citadel/sound/vox/deactivated.ogg',
+"decompression" = 'modular_citadel/sound/vox/decompression.ogg',
+"decontamination" = 'modular_citadel/sound/vox/decontamination.ogg',
+"deeoo" = 'modular_citadel/sound/vox/deeoo.ogg',
+"defense" = 'modular_citadel/sound/vox/defense.ogg',
+"degrees" = 'modular_citadel/sound/vox/degrees.ogg',
+"delta" = 'modular_citadel/sound/vox/delta.ogg',
+"denied" = 'modular_citadel/sound/vox/denied.ogg',
+"deploy" = 'modular_citadel/sound/vox/deploy.ogg',
+"deployed" = 'modular_citadel/sound/vox/deployed.ogg',
+"destroy" = 'modular_citadel/sound/vox/destroy.ogg',
+"destroyed" = 'modular_citadel/sound/vox/destroyed.ogg',
+"detain" = 'modular_citadel/sound/vox/detain.ogg',
+"detected" = 'modular_citadel/sound/vox/detected.ogg',
+"detonation" = 'modular_citadel/sound/vox/detonation.ogg',
+"device" = 'modular_citadel/sound/vox/device.ogg',
+"did" = 'modular_citadel/sound/vox/did.ogg',
+"die" = 'modular_citadel/sound/vox/die.ogg',
+"dimensional" = 'modular_citadel/sound/vox/dimensional.ogg',
+"dirt" = 'modular_citadel/sound/vox/dirt.ogg',
+"disengaged" = 'modular_citadel/sound/vox/disengaged.ogg',
+"dish" = 'modular_citadel/sound/vox/dish.ogg',
+"disposal" = 'modular_citadel/sound/vox/disposal.ogg',
+"distance" = 'modular_citadel/sound/vox/distance.ogg',
+"distortion" = 'modular_citadel/sound/vox/distortion.ogg',
+"do" = 'modular_citadel/sound/vox/do.ogg',
+"doctor" = 'modular_citadel/sound/vox/doctor.ogg',
+"doop" = 'modular_citadel/sound/vox/doop.ogg',
+"door" = 'modular_citadel/sound/vox/door.ogg',
+"down" = 'modular_citadel/sound/vox/down.ogg',
+"dual" = 'modular_citadel/sound/vox/dual.ogg',
+"duct" = 'modular_citadel/sound/vox/duct.ogg',
+"e" = 'modular_citadel/sound/vox/e.ogg',
+"east" = 'modular_citadel/sound/vox/east.ogg',
+"echo" = 'modular_citadel/sound/vox/echo.ogg',
+"ed" = 'modular_citadel/sound/vox/ed.ogg',
+"effect" = 'modular_citadel/sound/vox/effect.ogg',
+"egress" = 'modular_citadel/sound/vox/egress.ogg',
+"eight" = 'modular_citadel/sound/vox/eight.ogg',
+"eighteen" = 'modular_citadel/sound/vox/eighteen.ogg',
+"eighty" = 'modular_citadel/sound/vox/eighty.ogg',
+"electric" = 'modular_citadel/sound/vox/electric.ogg',
+"electromagnetic" = 'modular_citadel/sound/vox/electromagnetic.ogg',
+"elevator" = 'modular_citadel/sound/vox/elevator.ogg',
+"eleven" = 'modular_citadel/sound/vox/eleven.ogg',
+"eliminate" = 'modular_citadel/sound/vox/eliminate.ogg',
+"emergency" = 'modular_citadel/sound/vox/emergency.ogg',
+"enemy" = 'modular_citadel/sound/vox/enemy.ogg',
+"energy" = 'modular_citadel/sound/vox/energy.ogg',
+"engage" = 'modular_citadel/sound/vox/engage.ogg',
+"engaged" = 'modular_citadel/sound/vox/engaged.ogg',
+"engine" = 'modular_citadel/sound/vox/engine.ogg',
+"enter" = 'modular_citadel/sound/vox/enter.ogg',
+"entry" = 'modular_citadel/sound/vox/entry.ogg',
+"environment" = 'modular_citadel/sound/vox/environment.ogg',
+"error" = 'modular_citadel/sound/vox/error.ogg',
+"escape" = 'modular_citadel/sound/vox/escape.ogg',
+"evacuate" = 'modular_citadel/sound/vox/evacuate.ogg',
+"exchange" = 'modular_citadel/sound/vox/exchange.ogg',
+"exit" = 'modular_citadel/sound/vox/exit.ogg',
+"expect" = 'modular_citadel/sound/vox/expect.ogg',
+"experiment" = 'modular_citadel/sound/vox/experiment.ogg',
+"experimental" = 'modular_citadel/sound/vox/experimental.ogg',
+"explode" = 'modular_citadel/sound/vox/explode.ogg',
+"explosion" = 'modular_citadel/sound/vox/explosion.ogg',
+"exposure" = 'modular_citadel/sound/vox/exposure.ogg',
+"exterminate" = 'modular_citadel/sound/vox/exterminate.ogg',
+"extinguish" = 'modular_citadel/sound/vox/extinguish.ogg',
+"extinguisher" = 'modular_citadel/sound/vox/extinguisher.ogg',
+"extreme" = 'modular_citadel/sound/vox/extreme.ogg',
+"f" = 'modular_citadel/sound/vox/f.ogg',
+"face" = 'modular_citadel/sound/vox/face.ogg',
+"facility" = 'modular_citadel/sound/vox/facility.ogg',
+"fahrenheit" = 'modular_citadel/sound/vox/fahrenheit.ogg',
+"failed" = 'modular_citadel/sound/vox/failed.ogg',
+"failure" = 'modular_citadel/sound/vox/failure.ogg',
+"farthest" = 'modular_citadel/sound/vox/farthest.ogg',
+"fast" = 'modular_citadel/sound/vox/fast.ogg',
+"feet" = 'modular_citadel/sound/vox/feet.ogg',
+"field" = 'modular_citadel/sound/vox/field.ogg',
+"fifteen" = 'modular_citadel/sound/vox/fifteen.ogg',
+"fifth" = 'modular_citadel/sound/vox/fifth.ogg',
+"fifty" = 'modular_citadel/sound/vox/fifty.ogg',
+"final" = 'modular_citadel/sound/vox/final.ogg',
+"fine" = 'modular_citadel/sound/vox/fine.ogg',
+"fire" = 'modular_citadel/sound/vox/fire.ogg',
+"first" = 'modular_citadel/sound/vox/first.ogg',
+"five" = 'modular_citadel/sound/vox/five.ogg',
+"flag" = 'modular_citadel/sound/vox/flag.ogg',
+"flooding" = 'modular_citadel/sound/vox/flooding.ogg',
+"floor" = 'modular_citadel/sound/vox/floor.ogg',
+"fool" = 'modular_citadel/sound/vox/fool.ogg',
+"for" = 'modular_citadel/sound/vox/for.ogg',
+"forbidden" = 'modular_citadel/sound/vox/forbidden.ogg',
+"force" = 'modular_citadel/sound/vox/force.ogg',
+"forms" = 'modular_citadel/sound/vox/forms.ogg',
+"found" = 'modular_citadel/sound/vox/found.ogg',
+"four" = 'modular_citadel/sound/vox/four.ogg',
+"fourteen" = 'modular_citadel/sound/vox/fourteen.ogg',
+"fourth" = 'modular_citadel/sound/vox/fourth.ogg',
+"fourty" = 'modular_citadel/sound/vox/fourty.ogg',
+"foxtrot" = 'modular_citadel/sound/vox/foxtrot.ogg',
+"freeman" = 'modular_citadel/sound/vox/freeman.ogg',
+"freezer" = 'modular_citadel/sound/vox/freezer.ogg',
+"from" = 'modular_citadel/sound/vox/from.ogg',
+"front" = 'modular_citadel/sound/vox/front.ogg',
+"fuel" = 'modular_citadel/sound/vox/fuel.ogg',
+"g" = 'modular_citadel/sound/vox/g.ogg',
+"gay" = 'modular_citadel/sound/vox/gay.ogg',
+"get" = 'modular_citadel/sound/vox/get.ogg',
+"go" = 'modular_citadel/sound/vox/go.ogg',
+"going" = 'modular_citadel/sound/vox/going.ogg',
+"good" = 'modular_citadel/sound/vox/good.ogg',
+"goodbye" = 'modular_citadel/sound/vox/goodbye.ogg',
+"gordon" = 'modular_citadel/sound/vox/gordon.ogg',
+"got" = 'modular_citadel/sound/vox/got.ogg',
+"government" = 'modular_citadel/sound/vox/government.ogg',
+"granted" = 'modular_citadel/sound/vox/granted.ogg',
+"great" = 'modular_citadel/sound/vox/great.ogg',
+"green" = 'modular_citadel/sound/vox/green.ogg',
+"grenade" = 'modular_citadel/sound/vox/grenade.ogg',
+"guard" = 'modular_citadel/sound/vox/guard.ogg',
+"gulf" = 'modular_citadel/sound/vox/gulf.ogg',
+"gun" = 'modular_citadel/sound/vox/gun.ogg',
+"guthrie" = 'modular_citadel/sound/vox/guthrie.ogg',
+"handling" = 'modular_citadel/sound/vox/handling.ogg',
+"hangar" = 'modular_citadel/sound/vox/hangar.ogg',
+"has" = 'modular_citadel/sound/vox/has.ogg',
+"have" = 'modular_citadel/sound/vox/have.ogg',
+"hazard" = 'modular_citadel/sound/vox/hazard.ogg',
+"head" = 'modular_citadel/sound/vox/head.ogg',
+"health" = 'modular_citadel/sound/vox/health.ogg',
+"heat" = 'modular_citadel/sound/vox/heat.ogg',
+"helicopter" = 'modular_citadel/sound/vox/helicopter.ogg',
+"helium" = 'modular_citadel/sound/vox/helium.ogg',
+"hello" = 'modular_citadel/sound/vox/hello.ogg',
+"help" = 'modular_citadel/sound/vox/help.ogg',
+"here" = 'modular_citadel/sound/vox/here.ogg',
+"hide" = 'modular_citadel/sound/vox/hide.ogg',
+"high" = 'modular_citadel/sound/vox/high.ogg',
+"highest" = 'modular_citadel/sound/vox/highest.ogg',
+"hit" = 'modular_citadel/sound/vox/hit.ogg',
+"holds" = 'modular_citadel/sound/vox/holds.ogg',
+"hole" = 'modular_citadel/sound/vox/hole.ogg',
+"hostile" = 'modular_citadel/sound/vox/hostile.ogg',
+"hot" = 'modular_citadel/sound/vox/hot.ogg',
+"hotel" = 'modular_citadel/sound/vox/hotel.ogg',
+"hour" = 'modular_citadel/sound/vox/hour.ogg',
+"hours" = 'modular_citadel/sound/vox/hours.ogg',
+"hundred" = 'modular_citadel/sound/vox/hundred.ogg',
+"hydro" = 'modular_citadel/sound/vox/hydro.ogg',
+"i" = 'modular_citadel/sound/vox/i.ogg',
+"idiot" = 'modular_citadel/sound/vox/idiot.ogg',
+"illegal" = 'modular_citadel/sound/vox/illegal.ogg',
+"immediate" = 'modular_citadel/sound/vox/immediate.ogg',
+"immediately" = 'modular_citadel/sound/vox/immediately.ogg',
+"in" = 'modular_citadel/sound/vox/in.ogg',
+"inches" = 'modular_citadel/sound/vox/inches.ogg',
+"india" = 'modular_citadel/sound/vox/india.ogg',
+"ing" = 'modular_citadel/sound/vox/ing.ogg',
+"inoperative" = 'modular_citadel/sound/vox/inoperative.ogg',
+"inside" = 'modular_citadel/sound/vox/inside.ogg',
+"inspection" = 'modular_citadel/sound/vox/inspection.ogg',
+"inspector" = 'modular_citadel/sound/vox/inspector.ogg',
+"interchange" = 'modular_citadel/sound/vox/interchange.ogg',
+"intruder" = 'modular_citadel/sound/vox/intruder.ogg',
+"invallid" = 'modular_citadel/sound/vox/invallid.ogg',
+"invasion" = 'modular_citadel/sound/vox/invasion.ogg',
+"is" = 'modular_citadel/sound/vox/is.ogg',
+"it" = 'modular_citadel/sound/vox/it.ogg',
+"johnson" = 'modular_citadel/sound/vox/johnson.ogg',
+"juliet" = 'modular_citadel/sound/vox/juliet.ogg',
+"key" = 'modular_citadel/sound/vox/key.ogg',
+"kill" = 'modular_citadel/sound/vox/kill.ogg',
+"kilo" = 'modular_citadel/sound/vox/kilo.ogg',
+"kit" = 'modular_citadel/sound/vox/kit.ogg',
+"lab" = 'modular_citadel/sound/vox/lab.ogg',
+"lambda" = 'modular_citadel/sound/vox/lambda.ogg',
+"laser" = 'modular_citadel/sound/vox/laser.ogg',
+"last" = 'modular_citadel/sound/vox/last.ogg',
+"launch" = 'modular_citadel/sound/vox/launch.ogg',
+"leak" = 'modular_citadel/sound/vox/leak.ogg',
+"leave" = 'modular_citadel/sound/vox/leave.ogg',
+"left" = 'modular_citadel/sound/vox/left.ogg',
+"legal" = 'modular_citadel/sound/vox/legal.ogg',
+"level" = 'modular_citadel/sound/vox/level.ogg',
+"lever" = 'modular_citadel/sound/vox/lever.ogg',
+"lie" = 'modular_citadel/sound/vox/lie.ogg',
+"lieutenant" = 'modular_citadel/sound/vox/lieutenant.ogg',
+"life" = 'modular_citadel/sound/vox/life.ogg',
+"light" = 'modular_citadel/sound/vox/light.ogg',
+"lima" = 'modular_citadel/sound/vox/lima.ogg',
+"liquid" = 'modular_citadel/sound/vox/liquid.ogg',
+"loading" = 'modular_citadel/sound/vox/loading.ogg',
+"locate" = 'modular_citadel/sound/vox/locate.ogg',
+"located" = 'modular_citadel/sound/vox/located.ogg',
+"location" = 'modular_citadel/sound/vox/location.ogg',
+"lock" = 'modular_citadel/sound/vox/lock.ogg',
+"locked" = 'modular_citadel/sound/vox/locked.ogg',
+"locker" = 'modular_citadel/sound/vox/locker.ogg',
+"lockout" = 'modular_citadel/sound/vox/lockout.ogg',
+"lower" = 'modular_citadel/sound/vox/lower.ogg',
+"lowest" = 'modular_citadel/sound/vox/lowest.ogg',
+"magnetic" = 'modular_citadel/sound/vox/magnetic.ogg',
+"main" = 'modular_citadel/sound/vox/main.ogg',
+"maintenance" = 'modular_citadel/sound/vox/maintenance.ogg',
+"malfunction" = 'modular_citadel/sound/vox/malfunction.ogg',
+"man" = 'modular_citadel/sound/vox/man.ogg',
+"mass" = 'modular_citadel/sound/vox/mass.ogg',
+"materials" = 'modular_citadel/sound/vox/materials.ogg',
+"maximum" = 'modular_citadel/sound/vox/maximum.ogg',
+"may" = 'modular_citadel/sound/vox/may.ogg',
+"med" = 'modular_citadel/sound/vox/med.ogg',
+"medical" = 'modular_citadel/sound/vox/medical.ogg',
+"men" = 'modular_citadel/sound/vox/men.ogg',
+"mercy" = 'modular_citadel/sound/vox/mercy.ogg',
+"mesa" = 'modular_citadel/sound/vox/mesa.ogg',
+"message" = 'modular_citadel/sound/vox/message.ogg',
+"meter" = 'modular_citadel/sound/vox/meter.ogg',
+"micro" = 'modular_citadel/sound/vox/micro.ogg',
+"middle" = 'modular_citadel/sound/vox/middle.ogg',
+"mike" = 'modular_citadel/sound/vox/mike.ogg',
+"miles" = 'modular_citadel/sound/vox/miles.ogg',
+"military" = 'modular_citadel/sound/vox/military.ogg',
+"milli" = 'modular_citadel/sound/vox/milli.ogg',
+"million" = 'modular_citadel/sound/vox/million.ogg',
+"minefield" = 'modular_citadel/sound/vox/minefield.ogg',
+"minimum" = 'modular_citadel/sound/vox/minimum.ogg',
+"minutes" = 'modular_citadel/sound/vox/minutes.ogg',
+"mister" = 'modular_citadel/sound/vox/mister.ogg',
+"mode" = 'modular_citadel/sound/vox/mode.ogg',
+"motor" = 'modular_citadel/sound/vox/motor.ogg',
+"motorpool" = 'modular_citadel/sound/vox/motorpool.ogg',
+"move" = 'modular_citadel/sound/vox/move.ogg',
+"must" = 'modular_citadel/sound/vox/must.ogg',
+"nearest" = 'modular_citadel/sound/vox/nearest.ogg',
+"nice" = 'modular_citadel/sound/vox/nice.ogg',
+"nine" = 'modular_citadel/sound/vox/nine.ogg',
+"nineteen" = 'modular_citadel/sound/vox/nineteen.ogg',
+"ninety" = 'modular_citadel/sound/vox/ninety.ogg',
+"no" = 'modular_citadel/sound/vox/no.ogg',
+"nominal" = 'modular_citadel/sound/vox/nominal.ogg',
+"north" = 'modular_citadel/sound/vox/north.ogg',
+"not" = 'modular_citadel/sound/vox/not.ogg',
+"november" = 'modular_citadel/sound/vox/november.ogg',
+"now" = 'modular_citadel/sound/vox/now.ogg',
+"number" = 'modular_citadel/sound/vox/number.ogg',
+"objective" = 'modular_citadel/sound/vox/objective.ogg',
+"observation" = 'modular_citadel/sound/vox/observation.ogg',
+"of" = 'modular_citadel/sound/vox/of.ogg',
+"officer" = 'modular_citadel/sound/vox/officer.ogg',
+"ok" = 'modular_citadel/sound/vox/ok.ogg',
+"on" = 'modular_citadel/sound/vox/on.ogg',
+"one" = 'modular_citadel/sound/vox/one.ogg',
+"open" = 'modular_citadel/sound/vox/open.ogg',
+"operating" = 'modular_citadel/sound/vox/operating.ogg',
+"operations" = 'modular_citadel/sound/vox/operations.ogg',
+"operative" = 'modular_citadel/sound/vox/operative.ogg',
+"option" = 'modular_citadel/sound/vox/option.ogg',
+"order" = 'modular_citadel/sound/vox/order.ogg',
+"organic" = 'modular_citadel/sound/vox/organic.ogg',
+"oscar" = 'modular_citadel/sound/vox/oscar.ogg',
+"out" = 'modular_citadel/sound/vox/out.ogg',
+"outside" = 'modular_citadel/sound/vox/outside.ogg',
+"over" = 'modular_citadel/sound/vox/over.ogg',
+"overload" = 'modular_citadel/sound/vox/overload.ogg',
+"override" = 'modular_citadel/sound/vox/override.ogg',
+"pacify" = 'modular_citadel/sound/vox/pacify.ogg',
+"pain" = 'modular_citadel/sound/vox/pain.ogg',
+"pal" = 'modular_citadel/sound/vox/pal.ogg',
+"panel" = 'modular_citadel/sound/vox/panel.ogg',
+"percent" = 'modular_citadel/sound/vox/percent.ogg',
+"perimeter" = 'modular_citadel/sound/vox/perimeter.ogg',
+"permitted" = 'modular_citadel/sound/vox/permitted.ogg',
+"personnel" = 'modular_citadel/sound/vox/personnel.ogg',
+"pipe" = 'modular_citadel/sound/vox/pipe.ogg',
+"plant" = 'modular_citadel/sound/vox/plant.ogg',
+"platform" = 'modular_citadel/sound/vox/platform.ogg',
+"please" = 'modular_citadel/sound/vox/please.ogg',
+"point" = 'modular_citadel/sound/vox/point.ogg',
+"portal" = 'modular_citadel/sound/vox/portal.ogg',
+"power" = 'modular_citadel/sound/vox/power.ogg',
+"presence" = 'modular_citadel/sound/vox/presence.ogg',
+"press" = 'modular_citadel/sound/vox/press.ogg',
+"primary" = 'modular_citadel/sound/vox/primary.ogg',
+"proceed" = 'modular_citadel/sound/vox/proceed.ogg',
+"processing" = 'modular_citadel/sound/vox/processing.ogg',
+"progress" = 'modular_citadel/sound/vox/progress.ogg',
+"proper" = 'modular_citadel/sound/vox/proper.ogg',
+"propulsion" = 'modular_citadel/sound/vox/propulsion.ogg',
+"prosecute" = 'modular_citadel/sound/vox/prosecute.ogg',
+"protective" = 'modular_citadel/sound/vox/protective.ogg',
+"push" = 'modular_citadel/sound/vox/push.ogg',
+"quantum" = 'modular_citadel/sound/vox/quantum.ogg',
+"quebec" = 'modular_citadel/sound/vox/quebec.ogg',
+"question" = 'modular_citadel/sound/vox/question.ogg',
+"questioning" = 'modular_citadel/sound/vox/questioning.ogg',
+"quick" = 'modular_citadel/sound/vox/quick.ogg',
+"quit" = 'modular_citadel/sound/vox/quit.ogg',
+"radiation" = 'modular_citadel/sound/vox/radiation.ogg',
+"radioactive" = 'modular_citadel/sound/vox/radioactive.ogg',
+"rads" = 'modular_citadel/sound/vox/rads.ogg',
+"rapid" = 'modular_citadel/sound/vox/rapid.ogg',
+"reach" = 'modular_citadel/sound/vox/reach.ogg',
+"reached" = 'modular_citadel/sound/vox/reached.ogg',
+"reactor" = 'modular_citadel/sound/vox/reactor.ogg',
+"red" = 'modular_citadel/sound/vox/red.ogg',
+"relay" = 'modular_citadel/sound/vox/relay.ogg',
+"released" = 'modular_citadel/sound/vox/released.ogg',
+"remaining" = 'modular_citadel/sound/vox/remaining.ogg',
+"renegade" = 'modular_citadel/sound/vox/renegade.ogg',
+"repair" = 'modular_citadel/sound/vox/repair.ogg',
+"report" = 'modular_citadel/sound/vox/report.ogg',
+"reports" = 'modular_citadel/sound/vox/reports.ogg',
+"required" = 'modular_citadel/sound/vox/required.ogg',
+"research" = 'modular_citadel/sound/vox/research.ogg',
+"reset" = 'modular_citadel/sound/vox/reset.ogg',
+"resevoir" = 'modular_citadel/sound/vox/resevoir.ogg',
+"resistance" = 'modular_citadel/sound/vox/resistance.ogg',
+"returned" = 'modular_citadel/sound/vox/returned.ogg',
+"right" = 'modular_citadel/sound/vox/right.ogg',
+"rocket" = 'modular_citadel/sound/vox/rocket.ogg',
+"roger" = 'modular_citadel/sound/vox/roger.ogg',
+"romeo" = 'modular_citadel/sound/vox/romeo.ogg',
+"room" = 'modular_citadel/sound/vox/room.ogg',
+"round" = 'modular_citadel/sound/vox/round.ogg',
+"run" = 'modular_citadel/sound/vox/run.ogg',
+"safe" = 'modular_citadel/sound/vox/safe.ogg',
+"safety" = 'modular_citadel/sound/vox/safety.ogg',
+"sargeant" = 'modular_citadel/sound/vox/sargeant.ogg',
+"satellite" = 'modular_citadel/sound/vox/satellite.ogg',
+"save" = 'modular_citadel/sound/vox/save.ogg',
+"science" = 'modular_citadel/sound/vox/science.ogg',
+"scores" = 'modular_citadel/sound/vox/scores.ogg',
+"scream" = 'modular_citadel/sound/vox/scream.ogg',
+"screen" = 'modular_citadel/sound/vox/screen.ogg',
+"search" = 'modular_citadel/sound/vox/search.ogg',
+"second" = 'modular_citadel/sound/vox/second.ogg',
+"secondary" = 'modular_citadel/sound/vox/secondary.ogg',
+"seconds" = 'modular_citadel/sound/vox/seconds.ogg',
+"sector" = 'modular_citadel/sound/vox/sector.ogg',
+"secure" = 'modular_citadel/sound/vox/secure.ogg',
+"secured" = 'modular_citadel/sound/vox/secured.ogg',
+"security" = 'modular_citadel/sound/vox/security.ogg',
+"select" = 'modular_citadel/sound/vox/select.ogg',
+"selected" = 'modular_citadel/sound/vox/selected.ogg',
+"service" = 'modular_citadel/sound/vox/service.ogg',
+"seven" = 'modular_citadel/sound/vox/seven.ogg',
+"seventeen" = 'modular_citadel/sound/vox/seventeen.ogg',
+"seventy" = 'modular_citadel/sound/vox/seventy.ogg',
+"severe" = 'modular_citadel/sound/vox/severe.ogg',
+"sewage" = 'modular_citadel/sound/vox/sewage.ogg',
+"sewer" = 'modular_citadel/sound/vox/sewer.ogg',
+"shield" = 'modular_citadel/sound/vox/shield.ogg',
+"shipment" = 'modular_citadel/sound/vox/shipment.ogg',
+"shock" = 'modular_citadel/sound/vox/shock.ogg',
+"shoot" = 'modular_citadel/sound/vox/shoot.ogg',
+"shower" = 'modular_citadel/sound/vox/shower.ogg',
+"shut" = 'modular_citadel/sound/vox/shut.ogg',
+"side" = 'modular_citadel/sound/vox/side.ogg',
+"sierra" = 'modular_citadel/sound/vox/sierra.ogg',
+"sight" = 'modular_citadel/sound/vox/sight.ogg',
+"silo" = 'modular_citadel/sound/vox/silo.ogg',
+"six" = 'modular_citadel/sound/vox/six.ogg',
+"sixteen" = 'modular_citadel/sound/vox/sixteen.ogg',
+"sixty" = 'modular_citadel/sound/vox/sixty.ogg',
+"slime" = 'modular_citadel/sound/vox/slime.ogg',
+"slow" = 'modular_citadel/sound/vox/slow.ogg',
+"soldier" = 'modular_citadel/sound/vox/soldier.ogg',
+"some" = 'modular_citadel/sound/vox/some.ogg',
+"someone" = 'modular_citadel/sound/vox/someone.ogg',
+"something" = 'modular_citadel/sound/vox/something.ogg',
+"son" = 'modular_citadel/sound/vox/son.ogg',
+"sorry" = 'modular_citadel/sound/vox/sorry.ogg',
+"south" = 'modular_citadel/sound/vox/south.ogg',
+"squad" = 'modular_citadel/sound/vox/squad.ogg',
+"square" = 'modular_citadel/sound/vox/square.ogg',
+"stairway" = 'modular_citadel/sound/vox/stairway.ogg',
+"status" = 'modular_citadel/sound/vox/status.ogg',
+"sterile" = 'modular_citadel/sound/vox/sterile.ogg',
+"sterilization" = 'modular_citadel/sound/vox/sterilization.ogg',
+"stolen" = 'modular_citadel/sound/vox/stolen.ogg',
+"storage" = 'modular_citadel/sound/vox/storage.ogg',
+"sub" = 'modular_citadel/sound/vox/sub.ogg',
+"subsurface" = 'modular_citadel/sound/vox/subsurface.ogg',
+"sudden" = 'modular_citadel/sound/vox/sudden.ogg',
+"suit" = 'modular_citadel/sound/vox/suit.ogg',
+"superconducting" = 'modular_citadel/sound/vox/superconducting.ogg',
+"supercooled" = 'modular_citadel/sound/vox/supercooled.ogg',
+"supply" = 'modular_citadel/sound/vox/supply.ogg',
+"surface" = 'modular_citadel/sound/vox/surface.ogg',
+"surrender" = 'modular_citadel/sound/vox/surrender.ogg',
+"surround" = 'modular_citadel/sound/vox/surround.ogg',
+"surrounded" = 'modular_citadel/sound/vox/surrounded.ogg',
+"switch" = 'modular_citadel/sound/vox/switch.ogg',
+"system" = 'modular_citadel/sound/vox/system.ogg',
+"systems" = 'modular_citadel/sound/vox/systems.ogg',
+"tactical" = 'modular_citadel/sound/vox/tactical.ogg',
+"take" = 'modular_citadel/sound/vox/take.ogg',
+"talk" = 'modular_citadel/sound/vox/talk.ogg',
+"tango" = 'modular_citadel/sound/vox/tango.ogg',
+"tank" = 'modular_citadel/sound/vox/tank.ogg',
+"target" = 'modular_citadel/sound/vox/target.ogg',
+"team" = 'modular_citadel/sound/vox/team.ogg',
+"temperature" = 'modular_citadel/sound/vox/temperature.ogg',
+"temporal" = 'modular_citadel/sound/vox/temporal.ogg',
+"ten" = 'modular_citadel/sound/vox/ten.ogg',
+"terminal" = 'modular_citadel/sound/vox/terminal.ogg',
+"terminated" = 'modular_citadel/sound/vox/terminated.ogg',
+"termination" = 'modular_citadel/sound/vox/termination.ogg',
+"test" = 'modular_citadel/sound/vox/test.ogg',
+"that" = 'modular_citadel/sound/vox/that.ogg',
+"the" = 'modular_citadel/sound/vox/the.ogg',
+"then" = 'modular_citadel/sound/vox/then.ogg',
+"there" = 'modular_citadel/sound/vox/there.ogg',
+"third" = 'modular_citadel/sound/vox/third.ogg',
+"thirteen" = 'modular_citadel/sound/vox/thirteen.ogg',
+"thirty" = 'modular_citadel/sound/vox/thirty.ogg',
+"this" = 'modular_citadel/sound/vox/this.ogg',
+"those" = 'modular_citadel/sound/vox/those.ogg',
+"thousand" = 'modular_citadel/sound/vox/thousand.ogg',
+"threat" = 'modular_citadel/sound/vox/threat.ogg',
+"three" = 'modular_citadel/sound/vox/three.ogg',
+"through" = 'modular_citadel/sound/vox/through.ogg',
+"time" = 'modular_citadel/sound/vox/time.ogg',
+"to" = 'modular_citadel/sound/vox/to.ogg',
+"top" = 'modular_citadel/sound/vox/top.ogg',
+"topside" = 'modular_citadel/sound/vox/topside.ogg',
+"touch" = 'modular_citadel/sound/vox/touch.ogg',
+"towards" = 'modular_citadel/sound/vox/towards.ogg',
+"track" = 'modular_citadel/sound/vox/track.ogg',
+"train" = 'modular_citadel/sound/vox/train.ogg',
+"transportation" = 'modular_citadel/sound/vox/transportation.ogg',
+"truck" = 'modular_citadel/sound/vox/truck.ogg',
+"tunnel" = 'modular_citadel/sound/vox/tunnel.ogg',
+"turn" = 'modular_citadel/sound/vox/turn.ogg',
+"turret" = 'modular_citadel/sound/vox/turret.ogg',
+"twelve" = 'modular_citadel/sound/vox/twelve.ogg',
+"twenty" = 'modular_citadel/sound/vox/twenty.ogg',
+"two" = 'modular_citadel/sound/vox/two.ogg',
+"unauthorized" = 'modular_citadel/sound/vox/unauthorized.ogg',
+"under" = 'modular_citadel/sound/vox/under.ogg',
+"uniform" = 'modular_citadel/sound/vox/uniform.ogg',
+"unlocked" = 'modular_citadel/sound/vox/unlocked.ogg',
+"until" = 'modular_citadel/sound/vox/until.ogg',
+"up" = 'modular_citadel/sound/vox/up.ogg',
+"upper" = 'modular_citadel/sound/vox/upper.ogg',
+"uranium" = 'modular_citadel/sound/vox/uranium.ogg',
+"us" = 'modular_citadel/sound/vox/us.ogg',
+"usa" = 'modular_citadel/sound/vox/usa.ogg',
+"use" = 'modular_citadel/sound/vox/use.ogg',
+"used" = 'modular_citadel/sound/vox/used.ogg',
+"user" = 'modular_citadel/sound/vox/user.ogg',
+"vacate" = 'modular_citadel/sound/vox/vacate.ogg',
+"valid" = 'modular_citadel/sound/vox/valid.ogg',
+"vapor" = 'modular_citadel/sound/vox/vapor.ogg',
+"vent" = 'modular_citadel/sound/vox/vent.ogg',
+"ventillation" = 'modular_citadel/sound/vox/ventillation.ogg',
+"victor" = 'modular_citadel/sound/vox/victor.ogg',
+"violated" = 'modular_citadel/sound/vox/violated.ogg',
+"violation" = 'modular_citadel/sound/vox/violation.ogg',
+"voltage" = 'modular_citadel/sound/vox/voltage.ogg',
+"vox_login" = 'modular_citadel/sound/vox/vox_login.ogg',
+"walk" = 'modular_citadel/sound/vox/walk.ogg',
+"wall" = 'modular_citadel/sound/vox/wall.ogg',
+"want" = 'modular_citadel/sound/vox/want.ogg',
+"wanted" = 'modular_citadel/sound/vox/wanted.ogg',
+"warm" = 'modular_citadel/sound/vox/warm.ogg',
+"warn" = 'modular_citadel/sound/vox/warn.ogg',
+"warning" = 'modular_citadel/sound/vox/warning.ogg',
+"waste" = 'modular_citadel/sound/vox/waste.ogg',
+"water" = 'modular_citadel/sound/vox/water.ogg',
+"we" = 'modular_citadel/sound/vox/we.ogg',
+"weapon" = 'modular_citadel/sound/vox/weapon.ogg',
+"west" = 'modular_citadel/sound/vox/west.ogg',
+"whiskey" = 'modular_citadel/sound/vox/whiskey.ogg',
+"white" = 'modular_citadel/sound/vox/white.ogg',
+"wilco" = 'modular_citadel/sound/vox/wilco.ogg',
+"will" = 'modular_citadel/sound/vox/will.ogg',
+"with" = 'modular_citadel/sound/vox/with.ogg',
+"without" = 'modular_citadel/sound/vox/without.ogg',
+"woop" = 'modular_citadel/sound/vox/woop.ogg',
+"xeno" = 'modular_citadel/sound/vox/xeno.ogg',
+"yankee" = 'modular_citadel/sound/vox/yankee.ogg',
+"yards" = 'modular_citadel/sound/vox/yards.ogg',
+"year" = 'modular_citadel/sound/vox/year.ogg',
+"yellow" = 'modular_citadel/sound/vox/yellow.ogg',
+"yes" = 'modular_citadel/sound/vox/yes.ogg',
+"you" = 'modular_citadel/sound/vox/you.ogg',
+"your" = 'modular_citadel/sound/vox/your.ogg',
+"yourself" = 'modular_citadel/sound/vox/yourself.ogg',
+"zero" = 'modular_citadel/sound/vox/zero.ogg',
+"zone" = 'modular_citadel/sound/vox/zone.ogg',
+"zulu" = 'modular_citadel/sound/vox/zulu.ogg',))
+#endif
\ No newline at end of file
diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot.dm
index 66147a41e7..de98f9685c 100644
--- a/modular_citadel/code/modules/mob/living/silicon/robot/robot.dm
+++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot.dm
@@ -10,7 +10,7 @@ mob/living/silicon
/mob/living/silicon/robot/update_canmove()
..()
- if(client && stat != DEAD && dogborg == TRUE)
+ if(client && stat != DEAD && dogborg == FALSE)
if(resting)
cut_overlays()
icon_state = "[module.cyborg_base_icon]-rest"
@@ -18,6 +18,9 @@ mob/living/silicon
icon_state = "[module.cyborg_base_icon]"
update_icons()
+
+
+
/mob/living/silicon/robot/adjustStaminaLossBuffered(amount, updating_stamina = 1)
if(istype(cell))
cell.charge -= amount*5
diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm
index a0dbe3a02a..b16ac1d586 100644
--- a/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -61,7 +61,7 @@
/obj/item/robot_module/k9/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
- var/list/sechoundmodels = list("Default")
+ var/list/sechoundmodels = list("Default", "Dark", "Vale")
if(R.client && R.client.ckey in list("nezuli"))
sechoundmodels += "Alina"
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in sechoundmodels
@@ -70,11 +70,14 @@
switch(borg_icon)
if("Default")
cyborg_base_icon = "k9"
- moduleselect_icon = "k9"
if("Alina")
cyborg_base_icon = "alina-sec"
special_light_key = "alina"
sleeper_overlay = "alinasleeper"
+ if("Dark")
+ cyborg_base_icon = "k9dark"
+ if("Vale")
+ cyborg_base_icon = "valesec"
return ..()
/obj/item/robot_module/medihound
@@ -109,7 +112,7 @@
/obj/item/robot_module/medihound/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
- var/list/medhoundmodels = list("Default", "Dark")
+ var/list/medhoundmodels = list("Default", "Dark", "Vale")
if(R.client && R.client.ckey in list("nezuli"))
medhoundmodels += "Alina"
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in medhoundmodels
@@ -121,6 +124,9 @@
if("Dark")
cyborg_base_icon = "medihounddark"
sleeper_overlay = "mdsleeper"
+ if("Vale")
+ cyborg_base_icon = "valemed"
+ sleeper_overlay = "valemedsleeper"
if("Alina")
cyborg_base_icon = "alina-med"
special_light_key = "alina"
@@ -313,7 +319,7 @@
/obj/item/robot_module/butler/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
- var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Waitress", "Heavy", "Sleek", "Butler", "Tophat", "Kent", "Bro")
+ var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Waitress", "Heavy", "Sleek", "Butler", "Tophat", "Kent", "Bro", "DarkK9", "Vale", "ValeDark")
if(!borg_icon)
return FALSE
switch(borg_icon)
@@ -339,11 +345,32 @@
cyborg_base_icon = "heavyserv"
special_light_key = "heavyserv"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("DarkK9")
+ cyborg_base_icon = "k50"
+ special_light_key = "k50"
+ cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
+ has_snowflake_deadsprite = TRUE
+ dogborg = TRUE
+ cyborg_pixel_offset = -16
+ if("Vale")
+ cyborg_base_icon = "valeserv"
+ special_light_key = "valeserv"
+ cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
+ has_snowflake_deadsprite = TRUE
+ dogborg = TRUE
+ cyborg_pixel_offset = -16
+ if("ValeDark")
+ cyborg_base_icon = "valeservdark"
+ special_light_key = "valeservdark"
+ cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
+ has_snowflake_deadsprite = TRUE
+ dogborg = TRUE
+ cyborg_pixel_offset = -16
return ..()
/obj/item/robot_module/engineering/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
- var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer")
+ var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer", "Vale")
if(R.client && R.client.ckey in list("nezuli"))
engymodels += "Alina"
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in engymodels
@@ -386,6 +413,14 @@
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
+ if("Vale")
+ cyborg_base_icon = "valeeng"
+ can_be_pushed = FALSE
+ hat_offset = INFINITY
+ cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
+ has_snowflake_deadsprite = TRUE
+ dogborg = TRUE
+ cyborg_pixel_offset = -16
if("Alina")
cyborg_base_icon = "alina-eng"
special_light_key = "alina"
diff --git a/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm b/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm
deleted file mode 100644
index c3514719f6..0000000000
--- a/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm
+++ /dev/null
@@ -1,306 +0,0 @@
-//Sprites are trademarks of Gamefreak, Nintendo, The Pokemon Company, and Spike Chunsoft.
-#define ispokemon(A) (istype(A, /mob/living/simple_animal/pokemon))
-//POKEBALL
-/obj/item/pokeball
- name = "pokeball"
- icon = 'icons/obj/pokeball.dmi'
- icon_state = "pokeball"
- force = 0
- throwforce = 0
- var/success_chance = 25
- var/pokemon
-/obj/item/pokeball/great
- name = "great ball"
- icon_state = "pokeball_great"
- success_chance = 50
-/obj/item/pokeball/ultra
- icon_state = "pokeball_ultra"
- name = "ultra ball"
- success_chance = 75
-/obj/item/pokeball/master
- icon_state = "pokeball_master"
- name = "master ball"
- success_chance = 100
-/* //WIP
-/obj/item/pokeball/throw_impact(atom/hit_atom)
- if(ispokemon(hit_atom))
- var/mob/living/simple_animal/pokemon/pmon = hit_atom
- var/initial_success_chance = success_chance
- pmon.resize = 0.1
- pmon.color = "RED"
- pmon.canmove = 0
- sleep(15)
- if(pmon.pokeball == src)
- pmon.loc = src
- pokemon = pmon
-
- return 1
- if(pmon.pokeball && pmon.pokeball !=src)
- return ..()
- var/bonus_chance = ((pmon.maxHealth - pmon.health) / 2)
- if(bonus_chance > 100)
- bonus_chance = 100
- success_chance = (success_chance + bonus_chance)
- if(success_chance > 100)
- success_chance = 100
- if(success_chance < 0)//just in case
- success_chance = 0
- sleep(15)
- if(prob(success_chance))
- visible_message("
[src] shakes... ")
- else
- escape()
- sleep(15)
- if(prob(success_chance))
- visible_message("
[src] shakes... ")
- else
- escape()
- sleep(15)
- if(prob(success_chance))
- visible_message("
[src] shakes... ")
- else
- escape()
- else
- ..()
-/obj/item/pokeball/proc/capture(mob/living/simple_animal/pokemon/pmon, mob/living/user)
-
-/obj/item/pokeball/proc/escape(mob/living/simple_animal/pokemon/pmon, mob/living/user)
- if(!pokemon)
- return
- pmon.resize = 10
- pmon.color = null
- pmon.canmove = 1
- pmon.loc = src.loc
- if(pmon.pokeball != src)
- visible_message("
[pmon] breaks free from [src] ")
- PoolOrNew(/obj/effect/particle_effect/sparks, loc)
- playsound(src.loc, "sparks", 50, 1)
- qdel(src)
-
- else
-/obj/item/pokeball/proc/recall
-/obj/item/pokeball/proc/release
-*/
-/mob/living/simple_animal/pokemon
- name = "eevee"
- icon_state = "eevee"
- icon_living = "eevee"
- icon_dead = "eevee_d"
- desc = "Gotta catch 'em all!"
- icon = 'icons/mob/pokemon.dmi'
- var/pokeball
- pixel_x = -16
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5)
- ventcrawler = 2
- health = 100
- maxHealth = 100
- layer = 4
- response_help = "pets"
- wander = 1
- turns_per_move = 2
- pass_flags = PASSTABLE | PASSMOB
-
-/mob/living/simple_animal/pokemon/proc/simple_lay_down()
- set name = "Rest"
- set category = "IC"
-
- resting = !resting
- src << "
You are now [resting ? "resting" : "getting up"]. "
- update_canmove()
- update_icon()
-
-/mob/living/simple_animal/pokemon/proc/update_icon()
- if(lying || resting || sleeping)
- icon_state = "[icon_state]_rest"
- else
- icon_state = "[icon_living]"
-
-/mob/living/simple_animal/pokemon/New()
- ..()
- verbs += /mob/living/simple_animal/pokemon/proc/simple_lay_down
-
-/*
-/////TEMPLATE/////
-
-/mob/living/simple_animal/pokemon/
- name = ""
- icon_state = ""
- icon_living = ""
- icon_dead = ""
-*/
-
-/mob/living/simple_animal/pokemon/leg
- icon = 'icons/mob/legendary.dmi'
- pixel_x = -32
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 12)
- health = 200
- maxHealth = 200
-
-
-/mob/living/simple_animal/pokemon/leg/articuno
- name = "Articuno"
- icon_state = "articuno"
- icon_living = "articuno"
- icon_dead = "articuno_d"
- flying = 1
-
-/mob/living/simple_animal/pokemon/leg/rayquaza
- name = "Rayquaza"
- icon_state = "rayquaza"
- icon_living = "rayquaza"
- icon_dead = "rayquaza_d"
- flying = 1
-
-//ALPHABETICAL PLEASE
-
-/mob/living/simple_animal/pokemon/absol
- name = "absol"
- icon_state = "absol"
- icon_living = "absol"
- icon_dead = "absol_d"
- speak = list("Absol!", "Ab-Absol!")
-
-/mob/living/simple_animal/pokemon/aggron
- name = "aggron"
- icon_state = "aggron"
- icon_living = "aggron"
- icon_dead = "aggron_d"
-
-/mob/living/simple_animal/pokemon/ampharos
- name = "ampharos"
- icon_state = "ampharos"
- icon_living = "ampharos"
- icon_dead = "ampharos_d"
-
-/mob/living/simple_animal/pokemon/charmander
- name = "charmander"
- icon_state = "charmander"
- icon_living = "charmander"
- icon_dead = "charmander_d"
-
-/mob/living/simple_animal/pokemon/ditto
- name = "ditto"
- icon_state = "ditto"
- icon_living = "ditto"
- icon_dead = "ditto_d"
-
-/mob/living/simple_animal/pokemon/dratini/dragonair
- name = "dragonair"
- desc = "A Dragonair stores an enormous amount of energy inside its body. It is said to alter the weather around it by loosing energy from the crystals on its neck and tail."
- icon_state = "dragonair"
- icon_living = "dragonair"
- icon_dead = "dragonair_d"
-
-/mob/living/simple_animal/pokemon/dratini/dragonair/dragonite
- name = "dragonite"
- desc = "It can circle the globe in just 16 hours. It is a kindhearted Pokmon that leads lost and foundering ships in a storm to the safety of land."
- icon_state = "dragonite"
- icon_living = "dragonite"
- icon_dead = "dragonite_d"
-
-/mob/living/simple_animal/pokemon/dratini
- name = "dratini"
- desc = "A Dratini continually molts and sloughs off its old skin. It does so because the life energy within its body steadily builds to reach uncontrollable levels."
- icon_state = "dratini"
- icon_living = "dratini"
- icon_dead = "dratini_d"
-
-/mob/living/simple_animal/pokemon/eevee
- name = "eevee"
- desc = "Eevee has an unstable genetic makeup that suddenly mutates due to its environment. Radiation from various stones causes this Pokmon to evolve."
- icon_state = "eevee"
- icon_living = "eevee"
- icon_dead = "eevee_d"
- speak = list("Eevee!", "Ee-Eevee!")
- response_help = "pets"
- response_harm = "hits"
-
-/mob/living/simple_animal/pokemon/eevee/espeon
- name = "espeon"
- desc = "Espeon is extremely loyal to any trainer it considers to be worthy. It is said to have developed precognitive powers to protect its trainer from harm."
- icon_state = "espeon"
- icon_living = "espeon"
- icon_dead = "espeon_d"
-
-/mob/living/simple_animal/pokemon/flaaffy
- name = "flaaffy"
- icon_state = "flaaffy"
- icon_living = "flaaffy"
- icon_dead = "flaaffy_d"
-
-/mob/living/simple_animal/pokemon/eevee/flareon
- name = "flareon"
- desc = "Flareon's fluffy fur releases heat into the air so that its body does not get excessively hot. Its body temperature can rise to a maximum of 1,650 degrees F."
- icon_state = "flareon"
- icon_living = "flareon"
- icon_dead = "flareon_d"
- speak = list("Flare!", "Flareon!")
-
-/mob/living/simple_animal/pokemon/eevee/glaceon
- name = "glaceon"
- desc = "By controlling its body heat, it can freeze the atmosphere around it to make a diamond-dust flurry."
- icon_state = "glaceon"
- icon_living = "glaceon"
- icon_dead = "glaceon_d"
- speak = list("Glace!", "Glaceon!")
-
-/mob/living/simple_animal/pokemon/eevee/jolteon
- name = "jolteon"
- desc = "Its cells generate weak power that is amplified by its fur's static electricity to drop thunderbolts. The bristling fur is made of electrically charged needles."
- icon_state = "jolteon"
- icon_living = "jolteon"
- icon_dead = "jolteon_d"
- speak = list("Jolt!", "Jolteon!")
-
-/mob/living/simple_animal/pokemon/larvitar
- name = "larvitar"
- desc = "It is born deep underground. It can't emerge until it has entirely consumed the soil around it."
- icon_state = "larvitar"
- icon_living = "larvitar"
- icon_dead = "larvitar_d"
-
-/mob/living/simple_animal/pokemon/mareep
- name = "mareep"
- icon_state = "mareep"
- icon_living = "mareep"
- icon_dead = "mareep_d"
-
-/mob/living/simple_animal/pokemon/poochyena/mightyena
- name = "mightyena"
- icon_state = "mightyena"
- icon_living = "mightyena"
- icon_dead = "mightyena"
-
-/mob/living/simple_animal/pokemon/miltank
- name = "miltank"
- icon_state = "miltank"
- icon_living = "miltank"
- icon_dead = "miltank_d"
-
-/mob/living/simple_animal/pokemon/poochyena
- name = "poochyena"
- icon_state = "poochyena"
- icon_living = "poochyena"
- icon_dead = "poochyena_d"
-
-/mob/living/simple_animal/pokemon/eevee/sylveon
- name = "Sylveon"
- desc = "Sylveon, the Intertwining Pokmon. Sylveon affectionately wraps its ribbon-like feelers around its Trainer's arm as they walk together."
- icon_state = "sylveon"
- icon_living = "sylveon"
- icon_dead = "sylveon_d"
- speak = list("Sylveon!", "Syl!")
- response_help = "pets"
- response_harm = "hits"
-
-/mob/living/simple_animal/pokemon/eevee/umbreon
- name = "umbreon"
- icon_state = "umbreon"
- icon_dead = "umbreon_d"
- icon_living = "umbreon"
-
-/mob/living/simple_animal/pokemon/vulpix
- name = "vulpix"
- icon_state = "vulpix"
- icon_living = "vulpix"
- icon_dead = "vulpix_d"
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
index 499510b5d4..8af3176746 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
@@ -81,9 +81,19 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
SM.real_name = M.real_name
M.dna.transfer_identity(SM)
SM.updateappearance(mutcolor_update=1)
- var/mob/dead/observer/C = pick(candies)
- message_admins("Ghost candidate found! [C] key [C.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)")
- SM.key = C.key
+
+
+ candies = shuffle(candies)//Shake those ghosts up!
+ for(var/mob/dead/observer/C2 in candies)
+ if(C2.key && C2)
+ SM.key = C2.key
+ message_admins("Ghost candidate found! [C2] key [C2.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)")
+ log_game("FERMICHEM: [M] ckey: [M.key] is creating a clone, controlled by [C2]")
+ break
+ else
+ candies =- C2
+ if(!SM.mind) //Something went wrong, use alt mechanics
+ return ..()
SM.mind.enslave_mind_to_creator(M)
//If they're a zombie, they can try to negate it with this.
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
index 275c244a83..031b105468 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
@@ -6,58 +6,17 @@
id = "fermi"
taste_description = "affection and love!"
can_synth = FALSE
+ SplitChem = TRUE
//This should process fermichems to find out how pure they are and what effect to do.
/datum/reagent/fermi/on_mob_add(mob/living/carbon/M, amount)
. = ..()
- if(!M)
- return
- if(purity < 0)
- CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
- if (purity == 1 || DoNotSplit == TRUE)
- log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]")
- return
- else if (InverseChemVal > purity)//Turns all of a added reagent into the inverse chem
- M.reagents.remove_reagent(id, amount, FALSE)
- M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
- log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [InverseChem]")
- return
- else
- var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem
- M.reagents.remove_reagent(id, (impureVol), FALSE)
- M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
- log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]")
- log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [ImpureChem]")
- return
+
//When merging two fermichems, see above
/datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)//basically on_mob_add but for merging
. = ..()
- if(!ishuman(M))
- return
- if (purity < 0)
- CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
- if (purity == 1 || DoNotSplit == TRUE)
- log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [id] in themselves")
- return
- else if (InverseChemVal > purity)
- M.reagents.remove_reagent(id, amount, FALSE)
- M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
- for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
- if(R.name == "")
- R.name = name//Negative effects are hidden
- log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [InverseChem]")
- return
- else
- var/impureVol = amount * (1 - purity)
- M.reagents.remove_reagent(id, impureVol, FALSE)
- M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
- for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
- if(R.name == "")
- R.name = name//Negative effects are hidden
- log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]")
- log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [ImpureChem]")
- return
+
////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -372,6 +331,8 @@
//Consumes self on addition and shifts pH
/datum/reagent/fermi/acidic_buffer/on_new(datapH)
+ if(holder.has_reagent("stabilizing_agent"))
+ return ..()
data = datapH
if(LAZYLEN(holder.reagent_list) == 1)
return
@@ -392,6 +353,8 @@
can_synth = TRUE
/datum/reagent/fermi/basic_buffer/on_new(datapH)
+ if(holder.has_reagent("stabilizing_agent"))
+ return ..()
data = datapH
if(LAZYLEN(holder.reagent_list) == 1)
return
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index 078e1c8a71..367093ea6f 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -2,15 +2,15 @@
mix_sound = 'sound/effects/bubbles.ogg'
//Called for every reaction step
-/datum/chemical_reaction/fermi/proc/FermiCreate(holder)
+/datum/chemical_reaction/proc/FermiCreate(holder)
return
//Called when reaction STOP_PROCESSING
-/datum/chemical_reaction/fermi/proc/FermiFinish(datum/reagents/holder)
+/datum/chemical_reaction/proc/FermiFinish(datum/reagents/holder)
return
//Called when temperature is above a certain threshold, or if purity is too low.
-/datum/chemical_reaction/fermi/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE)
+/datum/chemical_reaction/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE)
if (Exploding == TRUE)
return
@@ -24,26 +24,32 @@
if (500 to 750)
for(var/turf/turf in range(1,T))
new /obj/effect/hotspot(turf)
+ volume*=1.1
if (751 to 1100)
for(var/turf/turf in range(2,T))
new /obj/effect/hotspot(turf)
+ volume*=1.2
if (1101 to 1500) //If you're crafty
for(var/turf/turf in range(3,T))
new /obj/effect/hotspot(turf)
+ volume*=1.3
if (1501 to 2500) //requested
for(var/turf/turf in range(4,T))
new /obj/effect/hotspot(turf)
+ volume*=1.4
if (2501 to 5000)
for(var/turf/turf in range(5,T))
new /obj/effect/hotspot(turf)
+ volume*=1.5
if (5001 to INFINITY)
for(var/turf/turf in range(6,T))
new /obj/effect/hotspot(turf)
+ volume*=1.6
message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot].")
@@ -66,7 +72,7 @@
if (pH > 10) //if alkaline, small explosion.
var/datum/effect_system/reagents_explosion/e = new()
- e.set_up(round((volume/30)*(pH-9)), T, 0, 0)
+ e.set_up(round((volume/28)*(pH-9)), T, 0, 0)
e.start()
if(!ImpureTot == 0) //If impure, v.small emp (0.6 or less)
@@ -101,10 +107,10 @@
PurityMin = 0.4 //The minimum purity something has to be above, otherwise it explodes.
/datum/chemical_reaction/fermi/eigenstate/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does.
- if(!locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list)
+ var/datum/reagent/fermi/eigenstate/E = locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list
+ if(!E)
return
var/turf/open/location = get_turf(my_atom)
- var/datum/reagent/fermi/eigenstate/E = locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list
if(location)
E.location_created = location
E.data.["location_created"] = location
@@ -137,12 +143,16 @@
/datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma!
var/turf/T = get_turf(my_atom)
- var/mob/living/simple_animal/slime/S = new(T,"green")
- S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
- S.name = "Living teratoma"
- S.real_name = "Living teratoma"
- S.rabid = 1//Make them an angery boi
- S.color = "#810010"
+ var/amount_to_spawn = round((volume/100), 1)
+ if(amount_to_spawn <= 0)
+ amount_to_spawn = 1
+ for(var/i in 1 to amount_to_spawn)
+ var/mob/living/simple_animal/slime/S = new(T,"green")
+ S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
+ S.name = "Living teratoma"
+ S.real_name = "Living teratoma"
+ S.rabid = 1//Make them an angery boi
+ S.color = "#810010"
my_atom.reagents.clear_reagents()
var/list/seen = viewers(8, get_turf(my_atom))
for(var/mob/M in seen)
@@ -353,11 +363,15 @@
PurityMin = 0.5
/datum/chemical_reaction/fermi/hatmium/FermiExplode(src, var/atom/my_atom, volume, temp, pH)
- var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom))
- hat.animate_atom_living()
+ var/amount_to_spawn = round((volume/100), 1)
+ if(amount_to_spawn <= 0)
+ amount_to_spawn = 1
+ for(var/i in 1 to amount_to_spawn)
+ var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom))
+ hat.animate_atom_living()
var/list/seen = viewers(8, get_turf(my_atom))
for(var/mob/M in seen)
- to_chat(M, "
The makes an off sounding pop, as a hat suddenly climbs out of the beaker! ")
+ to_chat(M, "
The [my_atom] makes an off sounding pop, as a hat suddenly climbs out of it! ")
my_atom.reagents.clear_reagents()
/datum/chemical_reaction/fermi/furranium
@@ -382,6 +396,9 @@
FermiChem = TRUE
PurityMin = 0.3
+/datum/chemical_reaction/fermi/furranium/organic
+ required_reagents = list("aphro" = 0.1, "catnip" = 0.1, "silver" = 0.2, "salglu_solution" = 0.1)
+
//FOR INSTANT REACTIONS - DO NOT MULTIPLY LIMIT BY 10.
//There's a weird rounding error or something ugh.
diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dm
deleted file mode 100644
index c0ddaceaf7..0000000000
--- a/modular_citadel/code/modules/research/techweb/all_nodes.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/datum/techweb_node/bluespace_basic/New()
- . = ..()
- design_ids += "xenobio_monkeys"
-
-/datum/techweb_node/practical_bluespace/New()
- . = ..()
- design_ids += "xenobio_slimebasic"
-
-/datum/techweb_node/adv_bluespace/New()
- . = ..()
- design_ids += "xenobio_slimeadv"
-
-/datum/techweb_node/ballistic_weapons/New()
- . = ..()
- design_ids += "mag_oldsmg_rubber"
-
-/datum/techweb_node/computer_board_gaming
- id = "computer_board_gaming"
- display_name = "Games and Toys"
- description = "For the slackers on the station."
- prereq_ids = list("comptech")
- design_ids = list("arcade_battle", "arcade_orion", "arcade_minesweeper", "slotmachine", "autoylathe")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
- export_price = 5000
-
-/datum/techweb_node/ballistic_weapons
- design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic", "mag_oldsmg_tx")
-
-/datum/techweb_node/advanced_illegl_ballistics
- id = "advanced_illegal_ballistics"
- display_name = "Advanced Illegal Ballistics"
- description = "Advanced Ballistic for Illegal weaponds."
- design_ids = list("10mm","10mmap","10mminc","10mmhp","pistolm9mm","m45","bolt_clip")
- prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space.
- export_price = 7000
diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm
deleted file mode 100644
index d968cfdcc7..0000000000
--- a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/datum/techweb_node/bluespace_basic/New()
- . = ..()
- design_ids += "xenobio_monkeys"
-
-/datum/techweb_node/practical_bluespace/New()
- . = ..()
- design_ids += "xenobio_slimebasic"
-
-/datum/techweb_node/adv_bluespace/New()
- . = ..()
- design_ids += "xenobio_slimeadv"
-
-/datum/techweb_node/ballistic_weapons/New()
- . = ..()
- design_ids += "mag_oldsmg_rubber"
-
-/datum/techweb_node/computer_board_gaming
- id = "computer_board_gaming"
- display_name = "Games and Toys"
- description = "For the slackers on the station."
- prereq_ids = list("comptech")
- design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
- export_price = 5000
-
-/datum/techweb_node/advanced_illegl_ballistics
- id = "advanced_illegal_ballistics"
- display_name = "Advanced Illegal Ballistics
- description = "Advanced Ballistic for Illegal weaponds."
- design_ids = list("10mm","10mmap","10mminc","10mmhp","9mm","point_45","bolt_clip")
- prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space.
- export_price = 7000
diff --git a/modular_citadel/icons/firstaid.dmi b/modular_citadel/icons/firstaid.dmi
index e7ac378222..8c603c8762 100644
Binary files a/modular_citadel/icons/firstaid.dmi and b/modular_citadel/icons/firstaid.dmi differ
diff --git a/modular_citadel/icons/misc/misc.dmi b/modular_citadel/icons/misc/misc.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/misc/misc.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/citadel/glasses.dmi b/modular_citadel/icons/mob/citadel/glasses.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/mob/citadel/glasses.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/citadel/head.dmi b/modular_citadel/icons/mob/citadel/head.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/mob/citadel/head.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/citadel/masks.dmi b/modular_citadel/icons/mob/citadel/masks.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/mob/citadel/masks.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/citadel/shoes.dmi b/modular_citadel/icons/mob/citadel/shoes.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/mob/citadel/shoes.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/citadel_refs/widerobot_vr.dmi b/modular_citadel/icons/mob/citadel_refs/widerobot_vr.dmi
index fa7285ae4c..7fbb26f1af 100644
Binary files a/modular_citadel/icons/mob/citadel_refs/widerobot_vr.dmi and b/modular_citadel/icons/mob/citadel_refs/widerobot_vr.dmi differ
diff --git a/modular_citadel/icons/mob/digishoes.dmi b/modular_citadel/icons/mob/digishoes.dmi
index a499db6262..b4e27d0b5d 100644
Binary files a/modular_citadel/icons/mob/digishoes.dmi and b/modular_citadel/icons/mob/digishoes.dmi differ
diff --git a/modular_citadel/icons/mob/mam_ears.dmi b/modular_citadel/icons/mob/mam_ears.dmi
index 569667a82d..a23716562e 100644
Binary files a/modular_citadel/icons/mob/mam_ears.dmi and b/modular_citadel/icons/mob/mam_ears.dmi differ
diff --git a/modular_citadel/icons/mob/mam_markings.dmi b/modular_citadel/icons/mob/mam_markings.dmi
index 8327be6eaf..dce56de556 100644
Binary files a/modular_citadel/icons/mob/mam_markings.dmi and b/modular_citadel/icons/mob/mam_markings.dmi differ
diff --git a/modular_citadel/icons/mob/markings_notmammals.dmi b/modular_citadel/icons/mob/markings_notmammals.dmi
index 59b10e93aa..d9577698d1 100644
Binary files a/modular_citadel/icons/mob/markings_notmammals.dmi and b/modular_citadel/icons/mob/markings_notmammals.dmi differ
diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi
index 1e12d2bf1a..8c0856429b 100644
Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ
diff --git a/modular_citadel/icons/mob/werenerd.dmi b/modular_citadel/icons/mob/werenerd.dmi
deleted file mode 100644
index 706d4248f8..0000000000
Binary files a/modular_citadel/icons/mob/werenerd.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/werenerdleap.dmi b/modular_citadel/icons/mob/werenerdleap.dmi
deleted file mode 100644
index eb5339733b..0000000000
Binary files a/modular_citadel/icons/mob/werenerdleap.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/widerobot.dmi b/modular_citadel/icons/mob/widerobot.dmi
index c730467e1d..19dd8dba86 100644
Binary files a/modular_citadel/icons/mob/widerobot.dmi and b/modular_citadel/icons/mob/widerobot.dmi differ
diff --git a/modular_citadel/icons/obj/structures.dmi b/modular_citadel/icons/obj/structures.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/obj/structures.dmi and /dev/null differ
diff --git a/modular_citadel/icons/obj/tools.dmi b/modular_citadel/icons/obj/tools.dmi
index 5d5a0d8abd..7b99880799 100644
Binary files a/modular_citadel/icons/obj/tools.dmi and b/modular_citadel/icons/obj/tools.dmi differ
diff --git a/modular_citadel/sound/vox/_comma.ogg b/modular_citadel/sound/vox/_comma.ogg
new file mode 100644
index 0000000000..55ee3102a0
Binary files /dev/null and b/modular_citadel/sound/vox/_comma.ogg differ
diff --git a/modular_citadel/sound/vox/_period.ogg b/modular_citadel/sound/vox/_period.ogg
new file mode 100644
index 0000000000..dfb816d006
Binary files /dev/null and b/modular_citadel/sound/vox/_period.ogg differ
diff --git a/modular_citadel/sound/vox/a.ogg b/modular_citadel/sound/vox/a.ogg
new file mode 100644
index 0000000000..ad3a851290
Binary files /dev/null and b/modular_citadel/sound/vox/a.ogg differ
diff --git a/modular_citadel/sound/vox/accelerating.ogg b/modular_citadel/sound/vox/accelerating.ogg
new file mode 100644
index 0000000000..d6426aa798
Binary files /dev/null and b/modular_citadel/sound/vox/accelerating.ogg differ
diff --git a/modular_citadel/sound/vox/accelerator.ogg b/modular_citadel/sound/vox/accelerator.ogg
new file mode 100644
index 0000000000..6e8e1f10e8
Binary files /dev/null and b/modular_citadel/sound/vox/accelerator.ogg differ
diff --git a/modular_citadel/sound/vox/accepted.ogg b/modular_citadel/sound/vox/accepted.ogg
new file mode 100644
index 0000000000..f6c411f8c5
Binary files /dev/null and b/modular_citadel/sound/vox/accepted.ogg differ
diff --git a/modular_citadel/sound/vox/access.ogg b/modular_citadel/sound/vox/access.ogg
new file mode 100644
index 0000000000..ae8390e516
Binary files /dev/null and b/modular_citadel/sound/vox/access.ogg differ
diff --git a/modular_citadel/sound/vox/acknowledge.ogg b/modular_citadel/sound/vox/acknowledge.ogg
new file mode 100644
index 0000000000..da3143b729
Binary files /dev/null and b/modular_citadel/sound/vox/acknowledge.ogg differ
diff --git a/modular_citadel/sound/vox/acknowledged.ogg b/modular_citadel/sound/vox/acknowledged.ogg
new file mode 100644
index 0000000000..b4b89eaa52
Binary files /dev/null and b/modular_citadel/sound/vox/acknowledged.ogg differ
diff --git a/modular_citadel/sound/vox/acquired.ogg b/modular_citadel/sound/vox/acquired.ogg
new file mode 100644
index 0000000000..ba4595a908
Binary files /dev/null and b/modular_citadel/sound/vox/acquired.ogg differ
diff --git a/modular_citadel/sound/vox/acquisition.ogg b/modular_citadel/sound/vox/acquisition.ogg
new file mode 100644
index 0000000000..fcdf6a9832
Binary files /dev/null and b/modular_citadel/sound/vox/acquisition.ogg differ
diff --git a/modular_citadel/sound/vox/across.ogg b/modular_citadel/sound/vox/across.ogg
new file mode 100644
index 0000000000..d026b3dba9
Binary files /dev/null and b/modular_citadel/sound/vox/across.ogg differ
diff --git a/modular_citadel/sound/vox/activate.ogg b/modular_citadel/sound/vox/activate.ogg
new file mode 100644
index 0000000000..5611c456a7
Binary files /dev/null and b/modular_citadel/sound/vox/activate.ogg differ
diff --git a/modular_citadel/sound/vox/activated.ogg b/modular_citadel/sound/vox/activated.ogg
new file mode 100644
index 0000000000..e3fafca3b2
Binary files /dev/null and b/modular_citadel/sound/vox/activated.ogg differ
diff --git a/modular_citadel/sound/vox/activity.ogg b/modular_citadel/sound/vox/activity.ogg
new file mode 100644
index 0000000000..66535b485d
Binary files /dev/null and b/modular_citadel/sound/vox/activity.ogg differ
diff --git a/modular_citadel/sound/vox/adios.ogg b/modular_citadel/sound/vox/adios.ogg
new file mode 100644
index 0000000000..1eedd5468b
Binary files /dev/null and b/modular_citadel/sound/vox/adios.ogg differ
diff --git a/modular_citadel/sound/vox/administration.ogg b/modular_citadel/sound/vox/administration.ogg
new file mode 100644
index 0000000000..44f8b3e8d8
Binary files /dev/null and b/modular_citadel/sound/vox/administration.ogg differ
diff --git a/modular_citadel/sound/vox/advanced.ogg b/modular_citadel/sound/vox/advanced.ogg
new file mode 100644
index 0000000000..df110dd8db
Binary files /dev/null and b/modular_citadel/sound/vox/advanced.ogg differ
diff --git a/modular_citadel/sound/vox/after.ogg b/modular_citadel/sound/vox/after.ogg
new file mode 100644
index 0000000000..8c0857f99c
Binary files /dev/null and b/modular_citadel/sound/vox/after.ogg differ
diff --git a/modular_citadel/sound/vox/agent.ogg b/modular_citadel/sound/vox/agent.ogg
new file mode 100644
index 0000000000..eae99227bc
Binary files /dev/null and b/modular_citadel/sound/vox/agent.ogg differ
diff --git a/modular_citadel/sound/vox/alarm.ogg b/modular_citadel/sound/vox/alarm.ogg
new file mode 100644
index 0000000000..54bcc0b980
Binary files /dev/null and b/modular_citadel/sound/vox/alarm.ogg differ
diff --git a/modular_citadel/sound/vox/alert.ogg b/modular_citadel/sound/vox/alert.ogg
new file mode 100644
index 0000000000..08620fa58c
Binary files /dev/null and b/modular_citadel/sound/vox/alert.ogg differ
diff --git a/modular_citadel/sound/vox/alien.ogg b/modular_citadel/sound/vox/alien.ogg
new file mode 100644
index 0000000000..cb3c3d7787
Binary files /dev/null and b/modular_citadel/sound/vox/alien.ogg differ
diff --git a/modular_citadel/sound/vox/aligned.ogg b/modular_citadel/sound/vox/aligned.ogg
new file mode 100644
index 0000000000..f561a1ec2f
Binary files /dev/null and b/modular_citadel/sound/vox/aligned.ogg differ
diff --git a/modular_citadel/sound/vox/all.ogg b/modular_citadel/sound/vox/all.ogg
new file mode 100644
index 0000000000..48d05f1007
Binary files /dev/null and b/modular_citadel/sound/vox/all.ogg differ
diff --git a/modular_citadel/sound/vox/alpha.ogg b/modular_citadel/sound/vox/alpha.ogg
new file mode 100644
index 0000000000..b80828c408
Binary files /dev/null and b/modular_citadel/sound/vox/alpha.ogg differ
diff --git a/modular_citadel/sound/vox/am.ogg b/modular_citadel/sound/vox/am.ogg
new file mode 100644
index 0000000000..9d4289758e
Binary files /dev/null and b/modular_citadel/sound/vox/am.ogg differ
diff --git a/modular_citadel/sound/vox/amigo.ogg b/modular_citadel/sound/vox/amigo.ogg
new file mode 100644
index 0000000000..6992689553
Binary files /dev/null and b/modular_citadel/sound/vox/amigo.ogg differ
diff --git a/modular_citadel/sound/vox/ammunition.ogg b/modular_citadel/sound/vox/ammunition.ogg
new file mode 100644
index 0000000000..108fb2dc83
Binary files /dev/null and b/modular_citadel/sound/vox/ammunition.ogg differ
diff --git a/modular_citadel/sound/vox/an.ogg b/modular_citadel/sound/vox/an.ogg
new file mode 100644
index 0000000000..53382c68a0
Binary files /dev/null and b/modular_citadel/sound/vox/an.ogg differ
diff --git a/modular_citadel/sound/vox/and.ogg b/modular_citadel/sound/vox/and.ogg
new file mode 100644
index 0000000000..b9b4de26bf
Binary files /dev/null and b/modular_citadel/sound/vox/and.ogg differ
diff --git a/modular_citadel/sound/vox/announcement.ogg b/modular_citadel/sound/vox/announcement.ogg
new file mode 100644
index 0000000000..ba16d76c18
Binary files /dev/null and b/modular_citadel/sound/vox/announcement.ogg differ
diff --git a/modular_citadel/sound/vox/anomalous.ogg b/modular_citadel/sound/vox/anomalous.ogg
new file mode 100644
index 0000000000..a331afd06e
Binary files /dev/null and b/modular_citadel/sound/vox/anomalous.ogg differ
diff --git a/modular_citadel/sound/vox/antenna.ogg b/modular_citadel/sound/vox/antenna.ogg
new file mode 100644
index 0000000000..547e64786a
Binary files /dev/null and b/modular_citadel/sound/vox/antenna.ogg differ
diff --git a/modular_citadel/sound/vox/any.ogg b/modular_citadel/sound/vox/any.ogg
new file mode 100644
index 0000000000..49d578758b
Binary files /dev/null and b/modular_citadel/sound/vox/any.ogg differ
diff --git a/modular_citadel/sound/vox/apprehend.ogg b/modular_citadel/sound/vox/apprehend.ogg
new file mode 100644
index 0000000000..de0fc4d664
Binary files /dev/null and b/modular_citadel/sound/vox/apprehend.ogg differ
diff --git a/modular_citadel/sound/vox/approach.ogg b/modular_citadel/sound/vox/approach.ogg
new file mode 100644
index 0000000000..3135bb7fc4
Binary files /dev/null and b/modular_citadel/sound/vox/approach.ogg differ
diff --git a/modular_citadel/sound/vox/are.ogg b/modular_citadel/sound/vox/are.ogg
new file mode 100644
index 0000000000..b3e68aa8a6
Binary files /dev/null and b/modular_citadel/sound/vox/are.ogg differ
diff --git a/modular_citadel/sound/vox/area.ogg b/modular_citadel/sound/vox/area.ogg
new file mode 100644
index 0000000000..1408fedf4c
Binary files /dev/null and b/modular_citadel/sound/vox/area.ogg differ
diff --git a/modular_citadel/sound/vox/arm.ogg b/modular_citadel/sound/vox/arm.ogg
new file mode 100644
index 0000000000..e078c567b5
Binary files /dev/null and b/modular_citadel/sound/vox/arm.ogg differ
diff --git a/modular_citadel/sound/vox/armed.ogg b/modular_citadel/sound/vox/armed.ogg
new file mode 100644
index 0000000000..2b1d092658
Binary files /dev/null and b/modular_citadel/sound/vox/armed.ogg differ
diff --git a/modular_citadel/sound/vox/armor.ogg b/modular_citadel/sound/vox/armor.ogg
new file mode 100644
index 0000000000..70217b55a4
Binary files /dev/null and b/modular_citadel/sound/vox/armor.ogg differ
diff --git a/modular_citadel/sound/vox/armory.ogg b/modular_citadel/sound/vox/armory.ogg
new file mode 100644
index 0000000000..22835188f8
Binary files /dev/null and b/modular_citadel/sound/vox/armory.ogg differ
diff --git a/modular_citadel/sound/vox/arrest.ogg b/modular_citadel/sound/vox/arrest.ogg
new file mode 100644
index 0000000000..bfef18601f
Binary files /dev/null and b/modular_citadel/sound/vox/arrest.ogg differ
diff --git a/modular_citadel/sound/vox/ass.ogg b/modular_citadel/sound/vox/ass.ogg
new file mode 100644
index 0000000000..6bf9c01e62
Binary files /dev/null and b/modular_citadel/sound/vox/ass.ogg differ
diff --git a/modular_citadel/sound/vox/at.ogg b/modular_citadel/sound/vox/at.ogg
new file mode 100644
index 0000000000..5146ab9afb
Binary files /dev/null and b/modular_citadel/sound/vox/at.ogg differ
diff --git a/modular_citadel/sound/vox/atomic.ogg b/modular_citadel/sound/vox/atomic.ogg
new file mode 100644
index 0000000000..b8b1e1cec7
Binary files /dev/null and b/modular_citadel/sound/vox/atomic.ogg differ
diff --git a/modular_citadel/sound/vox/attention.ogg b/modular_citadel/sound/vox/attention.ogg
new file mode 100644
index 0000000000..ca5073e6c4
Binary files /dev/null and b/modular_citadel/sound/vox/attention.ogg differ
diff --git a/modular_citadel/sound/vox/authorize.ogg b/modular_citadel/sound/vox/authorize.ogg
new file mode 100644
index 0000000000..7ef68781ef
Binary files /dev/null and b/modular_citadel/sound/vox/authorize.ogg differ
diff --git a/modular_citadel/sound/vox/authorized.ogg b/modular_citadel/sound/vox/authorized.ogg
new file mode 100644
index 0000000000..5142ceba8d
Binary files /dev/null and b/modular_citadel/sound/vox/authorized.ogg differ
diff --git a/modular_citadel/sound/vox/automatic.ogg b/modular_citadel/sound/vox/automatic.ogg
new file mode 100644
index 0000000000..48d09f2304
Binary files /dev/null and b/modular_citadel/sound/vox/automatic.ogg differ
diff --git a/modular_citadel/sound/vox/away.ogg b/modular_citadel/sound/vox/away.ogg
new file mode 100644
index 0000000000..3e99af620e
Binary files /dev/null and b/modular_citadel/sound/vox/away.ogg differ
diff --git a/modular_citadel/sound/vox/b.ogg b/modular_citadel/sound/vox/b.ogg
new file mode 100644
index 0000000000..00b64030d6
Binary files /dev/null and b/modular_citadel/sound/vox/b.ogg differ
diff --git a/modular_citadel/sound/vox/back.ogg b/modular_citadel/sound/vox/back.ogg
new file mode 100644
index 0000000000..a8ca34ef52
Binary files /dev/null and b/modular_citadel/sound/vox/back.ogg differ
diff --git a/modular_citadel/sound/vox/backman.ogg b/modular_citadel/sound/vox/backman.ogg
new file mode 100644
index 0000000000..e0e6351f57
Binary files /dev/null and b/modular_citadel/sound/vox/backman.ogg differ
diff --git a/modular_citadel/sound/vox/bad.ogg b/modular_citadel/sound/vox/bad.ogg
new file mode 100644
index 0000000000..2dd38058a2
Binary files /dev/null and b/modular_citadel/sound/vox/bad.ogg differ
diff --git a/modular_citadel/sound/vox/bag.ogg b/modular_citadel/sound/vox/bag.ogg
new file mode 100644
index 0000000000..6daa1ab172
Binary files /dev/null and b/modular_citadel/sound/vox/bag.ogg differ
diff --git a/modular_citadel/sound/vox/bailey.ogg b/modular_citadel/sound/vox/bailey.ogg
new file mode 100644
index 0000000000..b912fe5801
Binary files /dev/null and b/modular_citadel/sound/vox/bailey.ogg differ
diff --git a/modular_citadel/sound/vox/barracks.ogg b/modular_citadel/sound/vox/barracks.ogg
new file mode 100644
index 0000000000..5e13a42773
Binary files /dev/null and b/modular_citadel/sound/vox/barracks.ogg differ
diff --git a/modular_citadel/sound/vox/base.ogg b/modular_citadel/sound/vox/base.ogg
new file mode 100644
index 0000000000..17d60fbc02
Binary files /dev/null and b/modular_citadel/sound/vox/base.ogg differ
diff --git a/modular_citadel/sound/vox/bay.ogg b/modular_citadel/sound/vox/bay.ogg
new file mode 100644
index 0000000000..7ac9991c69
Binary files /dev/null and b/modular_citadel/sound/vox/bay.ogg differ
diff --git a/modular_citadel/sound/vox/be.ogg b/modular_citadel/sound/vox/be.ogg
new file mode 100644
index 0000000000..01865aba54
Binary files /dev/null and b/modular_citadel/sound/vox/be.ogg differ
diff --git a/modular_citadel/sound/vox/been.ogg b/modular_citadel/sound/vox/been.ogg
new file mode 100644
index 0000000000..cf9e92a032
Binary files /dev/null and b/modular_citadel/sound/vox/been.ogg differ
diff --git a/modular_citadel/sound/vox/before.ogg b/modular_citadel/sound/vox/before.ogg
new file mode 100644
index 0000000000..fc16e8fef4
Binary files /dev/null and b/modular_citadel/sound/vox/before.ogg differ
diff --git a/modular_citadel/sound/vox/beyond.ogg b/modular_citadel/sound/vox/beyond.ogg
new file mode 100644
index 0000000000..e25982e700
Binary files /dev/null and b/modular_citadel/sound/vox/beyond.ogg differ
diff --git a/modular_citadel/sound/vox/biohazard.ogg b/modular_citadel/sound/vox/biohazard.ogg
new file mode 100644
index 0000000000..12d20ff2f3
Binary files /dev/null and b/modular_citadel/sound/vox/biohazard.ogg differ
diff --git a/modular_citadel/sound/vox/biological.ogg b/modular_citadel/sound/vox/biological.ogg
new file mode 100644
index 0000000000..538c2c4604
Binary files /dev/null and b/modular_citadel/sound/vox/biological.ogg differ
diff --git a/modular_citadel/sound/vox/birdwell.ogg b/modular_citadel/sound/vox/birdwell.ogg
new file mode 100644
index 0000000000..d3735d2531
Binary files /dev/null and b/modular_citadel/sound/vox/birdwell.ogg differ
diff --git a/modular_citadel/sound/vox/bizwarn.ogg b/modular_citadel/sound/vox/bizwarn.ogg
new file mode 100644
index 0000000000..1f875c644e
Binary files /dev/null and b/modular_citadel/sound/vox/bizwarn.ogg differ
diff --git a/modular_citadel/sound/vox/black.ogg b/modular_citadel/sound/vox/black.ogg
new file mode 100644
index 0000000000..28e5d48afe
Binary files /dev/null and b/modular_citadel/sound/vox/black.ogg differ
diff --git a/modular_citadel/sound/vox/blast.ogg b/modular_citadel/sound/vox/blast.ogg
new file mode 100644
index 0000000000..84a28e1fc8
Binary files /dev/null and b/modular_citadel/sound/vox/blast.ogg differ
diff --git a/modular_citadel/sound/vox/blocked.ogg b/modular_citadel/sound/vox/blocked.ogg
new file mode 100644
index 0000000000..f6efacfda1
Binary files /dev/null and b/modular_citadel/sound/vox/blocked.ogg differ
diff --git a/modular_citadel/sound/vox/bloop.ogg b/modular_citadel/sound/vox/bloop.ogg
new file mode 100644
index 0000000000..ada6ed636e
Binary files /dev/null and b/modular_citadel/sound/vox/bloop.ogg differ
diff --git a/modular_citadel/sound/vox/blue.ogg b/modular_citadel/sound/vox/blue.ogg
new file mode 100644
index 0000000000..a336a61968
Binary files /dev/null and b/modular_citadel/sound/vox/blue.ogg differ
diff --git a/modular_citadel/sound/vox/bottom.ogg b/modular_citadel/sound/vox/bottom.ogg
new file mode 100644
index 0000000000..b81c30477c
Binary files /dev/null and b/modular_citadel/sound/vox/bottom.ogg differ
diff --git a/modular_citadel/sound/vox/bravo.ogg b/modular_citadel/sound/vox/bravo.ogg
new file mode 100644
index 0000000000..df47058d5c
Binary files /dev/null and b/modular_citadel/sound/vox/bravo.ogg differ
diff --git a/modular_citadel/sound/vox/breach.ogg b/modular_citadel/sound/vox/breach.ogg
new file mode 100644
index 0000000000..3a4bae3f0d
Binary files /dev/null and b/modular_citadel/sound/vox/breach.ogg differ
diff --git a/modular_citadel/sound/vox/breached.ogg b/modular_citadel/sound/vox/breached.ogg
new file mode 100644
index 0000000000..0823bfc0d9
Binary files /dev/null and b/modular_citadel/sound/vox/breached.ogg differ
diff --git a/modular_citadel/sound/vox/break.ogg b/modular_citadel/sound/vox/break.ogg
new file mode 100644
index 0000000000..1bebe2b940
Binary files /dev/null and b/modular_citadel/sound/vox/break.ogg differ
diff --git a/modular_citadel/sound/vox/bridge.ogg b/modular_citadel/sound/vox/bridge.ogg
new file mode 100644
index 0000000000..8de8159b1e
Binary files /dev/null and b/modular_citadel/sound/vox/bridge.ogg differ
diff --git a/modular_citadel/sound/vox/bust.ogg b/modular_citadel/sound/vox/bust.ogg
new file mode 100644
index 0000000000..67622a5e4a
Binary files /dev/null and b/modular_citadel/sound/vox/bust.ogg differ
diff --git a/modular_citadel/sound/vox/but.ogg b/modular_citadel/sound/vox/but.ogg
new file mode 100644
index 0000000000..3c4d7172ef
Binary files /dev/null and b/modular_citadel/sound/vox/but.ogg differ
diff --git a/modular_citadel/sound/vox/button.ogg b/modular_citadel/sound/vox/button.ogg
new file mode 100644
index 0000000000..74639090f8
Binary files /dev/null and b/modular_citadel/sound/vox/button.ogg differ
diff --git a/modular_citadel/sound/vox/buzwarn.ogg b/modular_citadel/sound/vox/buzwarn.ogg
new file mode 100644
index 0000000000..34595dfe9b
Binary files /dev/null and b/modular_citadel/sound/vox/buzwarn.ogg differ
diff --git a/modular_citadel/sound/vox/bypass.ogg b/modular_citadel/sound/vox/bypass.ogg
new file mode 100644
index 0000000000..649fb0ca72
Binary files /dev/null and b/modular_citadel/sound/vox/bypass.ogg differ
diff --git a/modular_citadel/sound/vox/c.ogg b/modular_citadel/sound/vox/c.ogg
new file mode 100644
index 0000000000..99fc8eeb61
Binary files /dev/null and b/modular_citadel/sound/vox/c.ogg differ
diff --git a/modular_citadel/sound/vox/cable.ogg b/modular_citadel/sound/vox/cable.ogg
new file mode 100644
index 0000000000..8a03fec7a3
Binary files /dev/null and b/modular_citadel/sound/vox/cable.ogg differ
diff --git a/modular_citadel/sound/vox/call.ogg b/modular_citadel/sound/vox/call.ogg
new file mode 100644
index 0000000000..1cd702986d
Binary files /dev/null and b/modular_citadel/sound/vox/call.ogg differ
diff --git a/modular_citadel/sound/vox/called.ogg b/modular_citadel/sound/vox/called.ogg
new file mode 100644
index 0000000000..96c87be172
Binary files /dev/null and b/modular_citadel/sound/vox/called.ogg differ
diff --git a/modular_citadel/sound/vox/canal.ogg b/modular_citadel/sound/vox/canal.ogg
new file mode 100644
index 0000000000..0d4e92deb4
Binary files /dev/null and b/modular_citadel/sound/vox/canal.ogg differ
diff --git a/modular_citadel/sound/vox/cap.ogg b/modular_citadel/sound/vox/cap.ogg
new file mode 100644
index 0000000000..c229e6f5b1
Binary files /dev/null and b/modular_citadel/sound/vox/cap.ogg differ
diff --git a/modular_citadel/sound/vox/captain.ogg b/modular_citadel/sound/vox/captain.ogg
new file mode 100644
index 0000000000..69d2521e68
Binary files /dev/null and b/modular_citadel/sound/vox/captain.ogg differ
diff --git a/modular_citadel/sound/vox/capture.ogg b/modular_citadel/sound/vox/capture.ogg
new file mode 100644
index 0000000000..18eab2035b
Binary files /dev/null and b/modular_citadel/sound/vox/capture.ogg differ
diff --git a/modular_citadel/sound/vox/captured.ogg b/modular_citadel/sound/vox/captured.ogg
new file mode 100644
index 0000000000..fd6b652809
Binary files /dev/null and b/modular_citadel/sound/vox/captured.ogg differ
diff --git a/modular_citadel/sound/vox/ceiling.ogg b/modular_citadel/sound/vox/ceiling.ogg
new file mode 100644
index 0000000000..2f8d7eca0a
Binary files /dev/null and b/modular_citadel/sound/vox/ceiling.ogg differ
diff --git a/modular_citadel/sound/vox/celsius.ogg b/modular_citadel/sound/vox/celsius.ogg
new file mode 100644
index 0000000000..abb728c5c3
Binary files /dev/null and b/modular_citadel/sound/vox/celsius.ogg differ
diff --git a/modular_citadel/sound/vox/center.ogg b/modular_citadel/sound/vox/center.ogg
new file mode 100644
index 0000000000..1936e9190d
Binary files /dev/null and b/modular_citadel/sound/vox/center.ogg differ
diff --git a/modular_citadel/sound/vox/centi.ogg b/modular_citadel/sound/vox/centi.ogg
new file mode 100644
index 0000000000..63f9ce0aed
Binary files /dev/null and b/modular_citadel/sound/vox/centi.ogg differ
diff --git a/modular_citadel/sound/vox/central.ogg b/modular_citadel/sound/vox/central.ogg
new file mode 100644
index 0000000000..a805204243
Binary files /dev/null and b/modular_citadel/sound/vox/central.ogg differ
diff --git a/modular_citadel/sound/vox/chamber.ogg b/modular_citadel/sound/vox/chamber.ogg
new file mode 100644
index 0000000000..e3c77e927f
Binary files /dev/null and b/modular_citadel/sound/vox/chamber.ogg differ
diff --git a/modular_citadel/sound/vox/charlie.ogg b/modular_citadel/sound/vox/charlie.ogg
new file mode 100644
index 0000000000..bdadd74ca0
Binary files /dev/null and b/modular_citadel/sound/vox/charlie.ogg differ
diff --git a/modular_citadel/sound/vox/check.ogg b/modular_citadel/sound/vox/check.ogg
new file mode 100644
index 0000000000..f4a2a95de7
Binary files /dev/null and b/modular_citadel/sound/vox/check.ogg differ
diff --git a/modular_citadel/sound/vox/checkpoint.ogg b/modular_citadel/sound/vox/checkpoint.ogg
new file mode 100644
index 0000000000..aca98b09fa
Binary files /dev/null and b/modular_citadel/sound/vox/checkpoint.ogg differ
diff --git a/modular_citadel/sound/vox/chemical.ogg b/modular_citadel/sound/vox/chemical.ogg
new file mode 100644
index 0000000000..f7eae25c99
Binary files /dev/null and b/modular_citadel/sound/vox/chemical.ogg differ
diff --git a/modular_citadel/sound/vox/cleanup.ogg b/modular_citadel/sound/vox/cleanup.ogg
new file mode 100644
index 0000000000..2118f130cb
Binary files /dev/null and b/modular_citadel/sound/vox/cleanup.ogg differ
diff --git a/modular_citadel/sound/vox/clear.ogg b/modular_citadel/sound/vox/clear.ogg
new file mode 100644
index 0000000000..1b97835f0f
Binary files /dev/null and b/modular_citadel/sound/vox/clear.ogg differ
diff --git a/modular_citadel/sound/vox/clearance.ogg b/modular_citadel/sound/vox/clearance.ogg
new file mode 100644
index 0000000000..d2b641df40
Binary files /dev/null and b/modular_citadel/sound/vox/clearance.ogg differ
diff --git a/modular_citadel/sound/vox/close.ogg b/modular_citadel/sound/vox/close.ogg
new file mode 100644
index 0000000000..15e9fd315c
Binary files /dev/null and b/modular_citadel/sound/vox/close.ogg differ
diff --git a/modular_citadel/sound/vox/clown.ogg b/modular_citadel/sound/vox/clown.ogg
new file mode 100644
index 0000000000..e72f9703fd
Binary files /dev/null and b/modular_citadel/sound/vox/clown.ogg differ
diff --git a/modular_citadel/sound/vox/code.ogg b/modular_citadel/sound/vox/code.ogg
new file mode 100644
index 0000000000..cee2e4c036
Binary files /dev/null and b/modular_citadel/sound/vox/code.ogg differ
diff --git a/modular_citadel/sound/vox/coded.ogg b/modular_citadel/sound/vox/coded.ogg
new file mode 100644
index 0000000000..d4435296ae
Binary files /dev/null and b/modular_citadel/sound/vox/coded.ogg differ
diff --git a/modular_citadel/sound/vox/collider.ogg b/modular_citadel/sound/vox/collider.ogg
new file mode 100644
index 0000000000..a29bda0d17
Binary files /dev/null and b/modular_citadel/sound/vox/collider.ogg differ
diff --git a/modular_citadel/sound/vox/comma.ogg b/modular_citadel/sound/vox/comma.ogg
new file mode 100644
index 0000000000..a94221d0ed
Binary files /dev/null and b/modular_citadel/sound/vox/comma.ogg differ
diff --git a/modular_citadel/sound/vox/command.ogg b/modular_citadel/sound/vox/command.ogg
new file mode 100644
index 0000000000..cf6c32f736
Binary files /dev/null and b/modular_citadel/sound/vox/command.ogg differ
diff --git a/modular_citadel/sound/vox/communication.ogg b/modular_citadel/sound/vox/communication.ogg
new file mode 100644
index 0000000000..67ec74b30d
Binary files /dev/null and b/modular_citadel/sound/vox/communication.ogg differ
diff --git a/modular_citadel/sound/vox/complex.ogg b/modular_citadel/sound/vox/complex.ogg
new file mode 100644
index 0000000000..66dad5b30a
Binary files /dev/null and b/modular_citadel/sound/vox/complex.ogg differ
diff --git a/modular_citadel/sound/vox/computer.ogg b/modular_citadel/sound/vox/computer.ogg
new file mode 100644
index 0000000000..849cf4e96c
Binary files /dev/null and b/modular_citadel/sound/vox/computer.ogg differ
diff --git a/modular_citadel/sound/vox/condition.ogg b/modular_citadel/sound/vox/condition.ogg
new file mode 100644
index 0000000000..b16ea99736
Binary files /dev/null and b/modular_citadel/sound/vox/condition.ogg differ
diff --git a/modular_citadel/sound/vox/containment.ogg b/modular_citadel/sound/vox/containment.ogg
new file mode 100644
index 0000000000..0a1424a8c0
Binary files /dev/null and b/modular_citadel/sound/vox/containment.ogg differ
diff --git a/modular_citadel/sound/vox/contamination.ogg b/modular_citadel/sound/vox/contamination.ogg
new file mode 100644
index 0000000000..0d60c1c351
Binary files /dev/null and b/modular_citadel/sound/vox/contamination.ogg differ
diff --git a/modular_citadel/sound/vox/control.ogg b/modular_citadel/sound/vox/control.ogg
new file mode 100644
index 0000000000..7e4fae7220
Binary files /dev/null and b/modular_citadel/sound/vox/control.ogg differ
diff --git a/modular_citadel/sound/vox/coolant.ogg b/modular_citadel/sound/vox/coolant.ogg
new file mode 100644
index 0000000000..ca51223548
Binary files /dev/null and b/modular_citadel/sound/vox/coolant.ogg differ
diff --git a/modular_citadel/sound/vox/coomer.ogg b/modular_citadel/sound/vox/coomer.ogg
new file mode 100644
index 0000000000..eb684a6ab7
Binary files /dev/null and b/modular_citadel/sound/vox/coomer.ogg differ
diff --git a/modular_citadel/sound/vox/core.ogg b/modular_citadel/sound/vox/core.ogg
new file mode 100644
index 0000000000..6170255986
Binary files /dev/null and b/modular_citadel/sound/vox/core.ogg differ
diff --git a/modular_citadel/sound/vox/correct.ogg b/modular_citadel/sound/vox/correct.ogg
new file mode 100644
index 0000000000..99ca3efccc
Binary files /dev/null and b/modular_citadel/sound/vox/correct.ogg differ
diff --git a/modular_citadel/sound/vox/corridor.ogg b/modular_citadel/sound/vox/corridor.ogg
new file mode 100644
index 0000000000..e3ddeb39cc
Binary files /dev/null and b/modular_citadel/sound/vox/corridor.ogg differ
diff --git a/modular_citadel/sound/vox/crew.ogg b/modular_citadel/sound/vox/crew.ogg
new file mode 100644
index 0000000000..b63ce31874
Binary files /dev/null and b/modular_citadel/sound/vox/crew.ogg differ
diff --git a/modular_citadel/sound/vox/cross.ogg b/modular_citadel/sound/vox/cross.ogg
new file mode 100644
index 0000000000..ffd9f4161d
Binary files /dev/null and b/modular_citadel/sound/vox/cross.ogg differ
diff --git a/modular_citadel/sound/vox/cryogenic.ogg b/modular_citadel/sound/vox/cryogenic.ogg
new file mode 100644
index 0000000000..def31fe7c0
Binary files /dev/null and b/modular_citadel/sound/vox/cryogenic.ogg differ
diff --git a/modular_citadel/sound/vox/d.ogg b/modular_citadel/sound/vox/d.ogg
new file mode 100644
index 0000000000..08b85fc9eb
Binary files /dev/null and b/modular_citadel/sound/vox/d.ogg differ
diff --git a/modular_citadel/sound/vox/dadeda.ogg b/modular_citadel/sound/vox/dadeda.ogg
new file mode 100644
index 0000000000..9fd19f577c
Binary files /dev/null and b/modular_citadel/sound/vox/dadeda.ogg differ
diff --git a/modular_citadel/sound/vox/damage.ogg b/modular_citadel/sound/vox/damage.ogg
new file mode 100644
index 0000000000..d45cb0b532
Binary files /dev/null and b/modular_citadel/sound/vox/damage.ogg differ
diff --git a/modular_citadel/sound/vox/damaged.ogg b/modular_citadel/sound/vox/damaged.ogg
new file mode 100644
index 0000000000..cec2617cd2
Binary files /dev/null and b/modular_citadel/sound/vox/damaged.ogg differ
diff --git a/modular_citadel/sound/vox/danger.ogg b/modular_citadel/sound/vox/danger.ogg
new file mode 100644
index 0000000000..50bce6a5a5
Binary files /dev/null and b/modular_citadel/sound/vox/danger.ogg differ
diff --git a/modular_citadel/sound/vox/day.ogg b/modular_citadel/sound/vox/day.ogg
new file mode 100644
index 0000000000..c11c1b696c
Binary files /dev/null and b/modular_citadel/sound/vox/day.ogg differ
diff --git a/modular_citadel/sound/vox/deactivated.ogg b/modular_citadel/sound/vox/deactivated.ogg
new file mode 100644
index 0000000000..2c700cf4a7
Binary files /dev/null and b/modular_citadel/sound/vox/deactivated.ogg differ
diff --git a/modular_citadel/sound/vox/decompression.ogg b/modular_citadel/sound/vox/decompression.ogg
new file mode 100644
index 0000000000..39ba52f36a
Binary files /dev/null and b/modular_citadel/sound/vox/decompression.ogg differ
diff --git a/modular_citadel/sound/vox/decontamination.ogg b/modular_citadel/sound/vox/decontamination.ogg
new file mode 100644
index 0000000000..2115ec8aa4
Binary files /dev/null and b/modular_citadel/sound/vox/decontamination.ogg differ
diff --git a/modular_citadel/sound/vox/deeoo.ogg b/modular_citadel/sound/vox/deeoo.ogg
new file mode 100644
index 0000000000..22197de5e6
Binary files /dev/null and b/modular_citadel/sound/vox/deeoo.ogg differ
diff --git a/modular_citadel/sound/vox/defense.ogg b/modular_citadel/sound/vox/defense.ogg
new file mode 100644
index 0000000000..dc00256e0f
Binary files /dev/null and b/modular_citadel/sound/vox/defense.ogg differ
diff --git a/modular_citadel/sound/vox/degrees.ogg b/modular_citadel/sound/vox/degrees.ogg
new file mode 100644
index 0000000000..eb640ca08c
Binary files /dev/null and b/modular_citadel/sound/vox/degrees.ogg differ
diff --git a/modular_citadel/sound/vox/delta.ogg b/modular_citadel/sound/vox/delta.ogg
new file mode 100644
index 0000000000..93cbe2bdb6
Binary files /dev/null and b/modular_citadel/sound/vox/delta.ogg differ
diff --git a/modular_citadel/sound/vox/denied.ogg b/modular_citadel/sound/vox/denied.ogg
new file mode 100644
index 0000000000..8ef3366dbc
Binary files /dev/null and b/modular_citadel/sound/vox/denied.ogg differ
diff --git a/modular_citadel/sound/vox/deploy.ogg b/modular_citadel/sound/vox/deploy.ogg
new file mode 100644
index 0000000000..71bd4c4d7d
Binary files /dev/null and b/modular_citadel/sound/vox/deploy.ogg differ
diff --git a/modular_citadel/sound/vox/deployed.ogg b/modular_citadel/sound/vox/deployed.ogg
new file mode 100644
index 0000000000..d21fa814ba
Binary files /dev/null and b/modular_citadel/sound/vox/deployed.ogg differ
diff --git a/modular_citadel/sound/vox/destroy.ogg b/modular_citadel/sound/vox/destroy.ogg
new file mode 100644
index 0000000000..954d474a07
Binary files /dev/null and b/modular_citadel/sound/vox/destroy.ogg differ
diff --git a/modular_citadel/sound/vox/destroyed.ogg b/modular_citadel/sound/vox/destroyed.ogg
new file mode 100644
index 0000000000..cf5f20bf84
Binary files /dev/null and b/modular_citadel/sound/vox/destroyed.ogg differ
diff --git a/modular_citadel/sound/vox/detain.ogg b/modular_citadel/sound/vox/detain.ogg
new file mode 100644
index 0000000000..98a6d34c2f
Binary files /dev/null and b/modular_citadel/sound/vox/detain.ogg differ
diff --git a/modular_citadel/sound/vox/detected.ogg b/modular_citadel/sound/vox/detected.ogg
new file mode 100644
index 0000000000..80704064a4
Binary files /dev/null and b/modular_citadel/sound/vox/detected.ogg differ
diff --git a/modular_citadel/sound/vox/detonation.ogg b/modular_citadel/sound/vox/detonation.ogg
new file mode 100644
index 0000000000..a6c64c331c
Binary files /dev/null and b/modular_citadel/sound/vox/detonation.ogg differ
diff --git a/modular_citadel/sound/vox/device.ogg b/modular_citadel/sound/vox/device.ogg
new file mode 100644
index 0000000000..3f1b4905df
Binary files /dev/null and b/modular_citadel/sound/vox/device.ogg differ
diff --git a/modular_citadel/sound/vox/did.ogg b/modular_citadel/sound/vox/did.ogg
new file mode 100644
index 0000000000..966e8a3a13
Binary files /dev/null and b/modular_citadel/sound/vox/did.ogg differ
diff --git a/modular_citadel/sound/vox/die.ogg b/modular_citadel/sound/vox/die.ogg
new file mode 100644
index 0000000000..b2f99b4152
Binary files /dev/null and b/modular_citadel/sound/vox/die.ogg differ
diff --git a/modular_citadel/sound/vox/dimensional.ogg b/modular_citadel/sound/vox/dimensional.ogg
new file mode 100644
index 0000000000..a4ed638db0
Binary files /dev/null and b/modular_citadel/sound/vox/dimensional.ogg differ
diff --git a/modular_citadel/sound/vox/dirt.ogg b/modular_citadel/sound/vox/dirt.ogg
new file mode 100644
index 0000000000..b175b93205
Binary files /dev/null and b/modular_citadel/sound/vox/dirt.ogg differ
diff --git a/modular_citadel/sound/vox/disengaged.ogg b/modular_citadel/sound/vox/disengaged.ogg
new file mode 100644
index 0000000000..eb75ab975b
Binary files /dev/null and b/modular_citadel/sound/vox/disengaged.ogg differ
diff --git a/modular_citadel/sound/vox/dish.ogg b/modular_citadel/sound/vox/dish.ogg
new file mode 100644
index 0000000000..3b0f1f58ce
Binary files /dev/null and b/modular_citadel/sound/vox/dish.ogg differ
diff --git a/modular_citadel/sound/vox/disposal.ogg b/modular_citadel/sound/vox/disposal.ogg
new file mode 100644
index 0000000000..1a4c1f8bd1
Binary files /dev/null and b/modular_citadel/sound/vox/disposal.ogg differ
diff --git a/modular_citadel/sound/vox/distance.ogg b/modular_citadel/sound/vox/distance.ogg
new file mode 100644
index 0000000000..8bcec9ac7c
Binary files /dev/null and b/modular_citadel/sound/vox/distance.ogg differ
diff --git a/modular_citadel/sound/vox/distortion.ogg b/modular_citadel/sound/vox/distortion.ogg
new file mode 100644
index 0000000000..7ee3a5f560
Binary files /dev/null and b/modular_citadel/sound/vox/distortion.ogg differ
diff --git a/modular_citadel/sound/vox/do.ogg b/modular_citadel/sound/vox/do.ogg
new file mode 100644
index 0000000000..7202691b87
Binary files /dev/null and b/modular_citadel/sound/vox/do.ogg differ
diff --git a/modular_citadel/sound/vox/doctor.ogg b/modular_citadel/sound/vox/doctor.ogg
new file mode 100644
index 0000000000..adbbfab77a
Binary files /dev/null and b/modular_citadel/sound/vox/doctor.ogg differ
diff --git a/modular_citadel/sound/vox/doop.ogg b/modular_citadel/sound/vox/doop.ogg
new file mode 100644
index 0000000000..b497a8594d
Binary files /dev/null and b/modular_citadel/sound/vox/doop.ogg differ
diff --git a/modular_citadel/sound/vox/door.ogg b/modular_citadel/sound/vox/door.ogg
new file mode 100644
index 0000000000..db389b4eb9
Binary files /dev/null and b/modular_citadel/sound/vox/door.ogg differ
diff --git a/modular_citadel/sound/vox/down.ogg b/modular_citadel/sound/vox/down.ogg
new file mode 100644
index 0000000000..e16b0249dd
Binary files /dev/null and b/modular_citadel/sound/vox/down.ogg differ
diff --git a/modular_citadel/sound/vox/dual.ogg b/modular_citadel/sound/vox/dual.ogg
new file mode 100644
index 0000000000..d8833faf9b
Binary files /dev/null and b/modular_citadel/sound/vox/dual.ogg differ
diff --git a/modular_citadel/sound/vox/duct.ogg b/modular_citadel/sound/vox/duct.ogg
new file mode 100644
index 0000000000..23379f6cc2
Binary files /dev/null and b/modular_citadel/sound/vox/duct.ogg differ
diff --git a/modular_citadel/sound/vox/e.ogg b/modular_citadel/sound/vox/e.ogg
new file mode 100644
index 0000000000..105ea13ef2
Binary files /dev/null and b/modular_citadel/sound/vox/e.ogg differ
diff --git a/modular_citadel/sound/vox/east.ogg b/modular_citadel/sound/vox/east.ogg
new file mode 100644
index 0000000000..9e69856edb
Binary files /dev/null and b/modular_citadel/sound/vox/east.ogg differ
diff --git a/modular_citadel/sound/vox/echo.ogg b/modular_citadel/sound/vox/echo.ogg
new file mode 100644
index 0000000000..3ee16750a4
Binary files /dev/null and b/modular_citadel/sound/vox/echo.ogg differ
diff --git a/modular_citadel/sound/vox/ed.ogg b/modular_citadel/sound/vox/ed.ogg
new file mode 100644
index 0000000000..094bd4f3ba
Binary files /dev/null and b/modular_citadel/sound/vox/ed.ogg differ
diff --git a/modular_citadel/sound/vox/effect.ogg b/modular_citadel/sound/vox/effect.ogg
new file mode 100644
index 0000000000..01a77a1bba
Binary files /dev/null and b/modular_citadel/sound/vox/effect.ogg differ
diff --git a/modular_citadel/sound/vox/egress.ogg b/modular_citadel/sound/vox/egress.ogg
new file mode 100644
index 0000000000..6da62c754a
Binary files /dev/null and b/modular_citadel/sound/vox/egress.ogg differ
diff --git a/modular_citadel/sound/vox/eight.ogg b/modular_citadel/sound/vox/eight.ogg
new file mode 100644
index 0000000000..7c64ba326b
Binary files /dev/null and b/modular_citadel/sound/vox/eight.ogg differ
diff --git a/modular_citadel/sound/vox/eighteen.ogg b/modular_citadel/sound/vox/eighteen.ogg
new file mode 100644
index 0000000000..73330bfaa2
Binary files /dev/null and b/modular_citadel/sound/vox/eighteen.ogg differ
diff --git a/modular_citadel/sound/vox/eighty.ogg b/modular_citadel/sound/vox/eighty.ogg
new file mode 100644
index 0000000000..c190b69e02
Binary files /dev/null and b/modular_citadel/sound/vox/eighty.ogg differ
diff --git a/modular_citadel/sound/vox/electric.ogg b/modular_citadel/sound/vox/electric.ogg
new file mode 100644
index 0000000000..7d7154b350
Binary files /dev/null and b/modular_citadel/sound/vox/electric.ogg differ
diff --git a/modular_citadel/sound/vox/electromagnetic.ogg b/modular_citadel/sound/vox/electromagnetic.ogg
new file mode 100644
index 0000000000..160725e8c0
Binary files /dev/null and b/modular_citadel/sound/vox/electromagnetic.ogg differ
diff --git a/modular_citadel/sound/vox/elevator.ogg b/modular_citadel/sound/vox/elevator.ogg
new file mode 100644
index 0000000000..bcafc3ce3f
Binary files /dev/null and b/modular_citadel/sound/vox/elevator.ogg differ
diff --git a/modular_citadel/sound/vox/eleven.ogg b/modular_citadel/sound/vox/eleven.ogg
new file mode 100644
index 0000000000..6607692e1d
Binary files /dev/null and b/modular_citadel/sound/vox/eleven.ogg differ
diff --git a/modular_citadel/sound/vox/eliminate.ogg b/modular_citadel/sound/vox/eliminate.ogg
new file mode 100644
index 0000000000..2e81f5eb6c
Binary files /dev/null and b/modular_citadel/sound/vox/eliminate.ogg differ
diff --git a/modular_citadel/sound/vox/emergency.ogg b/modular_citadel/sound/vox/emergency.ogg
new file mode 100644
index 0000000000..5d2e068944
Binary files /dev/null and b/modular_citadel/sound/vox/emergency.ogg differ
diff --git a/modular_citadel/sound/vox/enemy.ogg b/modular_citadel/sound/vox/enemy.ogg
new file mode 100644
index 0000000000..ecee923235
Binary files /dev/null and b/modular_citadel/sound/vox/enemy.ogg differ
diff --git a/modular_citadel/sound/vox/energy.ogg b/modular_citadel/sound/vox/energy.ogg
new file mode 100644
index 0000000000..82d07e95dd
Binary files /dev/null and b/modular_citadel/sound/vox/energy.ogg differ
diff --git a/modular_citadel/sound/vox/engage.ogg b/modular_citadel/sound/vox/engage.ogg
new file mode 100644
index 0000000000..7e1cf2e625
Binary files /dev/null and b/modular_citadel/sound/vox/engage.ogg differ
diff --git a/modular_citadel/sound/vox/engaged.ogg b/modular_citadel/sound/vox/engaged.ogg
new file mode 100644
index 0000000000..0e8196b026
Binary files /dev/null and b/modular_citadel/sound/vox/engaged.ogg differ
diff --git a/modular_citadel/sound/vox/engine.ogg b/modular_citadel/sound/vox/engine.ogg
new file mode 100644
index 0000000000..0ed1b4bd80
Binary files /dev/null and b/modular_citadel/sound/vox/engine.ogg differ
diff --git a/modular_citadel/sound/vox/enter.ogg b/modular_citadel/sound/vox/enter.ogg
new file mode 100644
index 0000000000..d7392eeada
Binary files /dev/null and b/modular_citadel/sound/vox/enter.ogg differ
diff --git a/modular_citadel/sound/vox/entry.ogg b/modular_citadel/sound/vox/entry.ogg
new file mode 100644
index 0000000000..1ef6b14442
Binary files /dev/null and b/modular_citadel/sound/vox/entry.ogg differ
diff --git a/modular_citadel/sound/vox/environment.ogg b/modular_citadel/sound/vox/environment.ogg
new file mode 100644
index 0000000000..d05ba3106a
Binary files /dev/null and b/modular_citadel/sound/vox/environment.ogg differ
diff --git a/modular_citadel/sound/vox/error.ogg b/modular_citadel/sound/vox/error.ogg
new file mode 100644
index 0000000000..237191732a
Binary files /dev/null and b/modular_citadel/sound/vox/error.ogg differ
diff --git a/modular_citadel/sound/vox/escape.ogg b/modular_citadel/sound/vox/escape.ogg
new file mode 100644
index 0000000000..15e1181ac6
Binary files /dev/null and b/modular_citadel/sound/vox/escape.ogg differ
diff --git a/modular_citadel/sound/vox/evacuate.ogg b/modular_citadel/sound/vox/evacuate.ogg
new file mode 100644
index 0000000000..d0d755f1ba
Binary files /dev/null and b/modular_citadel/sound/vox/evacuate.ogg differ
diff --git a/modular_citadel/sound/vox/exchange.ogg b/modular_citadel/sound/vox/exchange.ogg
new file mode 100644
index 0000000000..d69eac774a
Binary files /dev/null and b/modular_citadel/sound/vox/exchange.ogg differ
diff --git a/modular_citadel/sound/vox/exit.ogg b/modular_citadel/sound/vox/exit.ogg
new file mode 100644
index 0000000000..a201b6b76b
Binary files /dev/null and b/modular_citadel/sound/vox/exit.ogg differ
diff --git a/modular_citadel/sound/vox/expect.ogg b/modular_citadel/sound/vox/expect.ogg
new file mode 100644
index 0000000000..95e559fdd3
Binary files /dev/null and b/modular_citadel/sound/vox/expect.ogg differ
diff --git a/modular_citadel/sound/vox/experiment.ogg b/modular_citadel/sound/vox/experiment.ogg
new file mode 100644
index 0000000000..34ef253e69
Binary files /dev/null and b/modular_citadel/sound/vox/experiment.ogg differ
diff --git a/modular_citadel/sound/vox/experimental.ogg b/modular_citadel/sound/vox/experimental.ogg
new file mode 100644
index 0000000000..6635998222
Binary files /dev/null and b/modular_citadel/sound/vox/experimental.ogg differ
diff --git a/modular_citadel/sound/vox/explode.ogg b/modular_citadel/sound/vox/explode.ogg
new file mode 100644
index 0000000000..16b38926e4
Binary files /dev/null and b/modular_citadel/sound/vox/explode.ogg differ
diff --git a/modular_citadel/sound/vox/explosion.ogg b/modular_citadel/sound/vox/explosion.ogg
new file mode 100644
index 0000000000..ede66453bd
Binary files /dev/null and b/modular_citadel/sound/vox/explosion.ogg differ
diff --git a/modular_citadel/sound/vox/exposure.ogg b/modular_citadel/sound/vox/exposure.ogg
new file mode 100644
index 0000000000..d2f66ca1ba
Binary files /dev/null and b/modular_citadel/sound/vox/exposure.ogg differ
diff --git a/modular_citadel/sound/vox/exterminate.ogg b/modular_citadel/sound/vox/exterminate.ogg
new file mode 100644
index 0000000000..34be77f8e2
Binary files /dev/null and b/modular_citadel/sound/vox/exterminate.ogg differ
diff --git a/modular_citadel/sound/vox/extinguish.ogg b/modular_citadel/sound/vox/extinguish.ogg
new file mode 100644
index 0000000000..c003ff4547
Binary files /dev/null and b/modular_citadel/sound/vox/extinguish.ogg differ
diff --git a/modular_citadel/sound/vox/extinguisher.ogg b/modular_citadel/sound/vox/extinguisher.ogg
new file mode 100644
index 0000000000..d23b898014
Binary files /dev/null and b/modular_citadel/sound/vox/extinguisher.ogg differ
diff --git a/modular_citadel/sound/vox/extreme.ogg b/modular_citadel/sound/vox/extreme.ogg
new file mode 100644
index 0000000000..c3f5a2d9f0
Binary files /dev/null and b/modular_citadel/sound/vox/extreme.ogg differ
diff --git a/modular_citadel/sound/vox/f.ogg b/modular_citadel/sound/vox/f.ogg
new file mode 100644
index 0000000000..344734986f
Binary files /dev/null and b/modular_citadel/sound/vox/f.ogg differ
diff --git a/modular_citadel/sound/vox/face.ogg b/modular_citadel/sound/vox/face.ogg
new file mode 100644
index 0000000000..acdd8722ef
Binary files /dev/null and b/modular_citadel/sound/vox/face.ogg differ
diff --git a/modular_citadel/sound/vox/facility.ogg b/modular_citadel/sound/vox/facility.ogg
new file mode 100644
index 0000000000..43649febb0
Binary files /dev/null and b/modular_citadel/sound/vox/facility.ogg differ
diff --git a/modular_citadel/sound/vox/fahrenheit.ogg b/modular_citadel/sound/vox/fahrenheit.ogg
new file mode 100644
index 0000000000..4730726ea4
Binary files /dev/null and b/modular_citadel/sound/vox/fahrenheit.ogg differ
diff --git a/modular_citadel/sound/vox/failed.ogg b/modular_citadel/sound/vox/failed.ogg
new file mode 100644
index 0000000000..f801962345
Binary files /dev/null and b/modular_citadel/sound/vox/failed.ogg differ
diff --git a/modular_citadel/sound/vox/failure.ogg b/modular_citadel/sound/vox/failure.ogg
new file mode 100644
index 0000000000..e9b5808f27
Binary files /dev/null and b/modular_citadel/sound/vox/failure.ogg differ
diff --git a/modular_citadel/sound/vox/farthest.ogg b/modular_citadel/sound/vox/farthest.ogg
new file mode 100644
index 0000000000..3d18f669b1
Binary files /dev/null and b/modular_citadel/sound/vox/farthest.ogg differ
diff --git a/modular_citadel/sound/vox/fast.ogg b/modular_citadel/sound/vox/fast.ogg
new file mode 100644
index 0000000000..dbf82c32a4
Binary files /dev/null and b/modular_citadel/sound/vox/fast.ogg differ
diff --git a/modular_citadel/sound/vox/feet.ogg b/modular_citadel/sound/vox/feet.ogg
new file mode 100644
index 0000000000..eba093e73d
Binary files /dev/null and b/modular_citadel/sound/vox/feet.ogg differ
diff --git a/modular_citadel/sound/vox/field.ogg b/modular_citadel/sound/vox/field.ogg
new file mode 100644
index 0000000000..bba79e6ddd
Binary files /dev/null and b/modular_citadel/sound/vox/field.ogg differ
diff --git a/modular_citadel/sound/vox/fifteen.ogg b/modular_citadel/sound/vox/fifteen.ogg
new file mode 100644
index 0000000000..60eca844ae
Binary files /dev/null and b/modular_citadel/sound/vox/fifteen.ogg differ
diff --git a/modular_citadel/sound/vox/fifth.ogg b/modular_citadel/sound/vox/fifth.ogg
new file mode 100644
index 0000000000..d6a76567d2
Binary files /dev/null and b/modular_citadel/sound/vox/fifth.ogg differ
diff --git a/modular_citadel/sound/vox/fifty.ogg b/modular_citadel/sound/vox/fifty.ogg
new file mode 100644
index 0000000000..30fd60072b
Binary files /dev/null and b/modular_citadel/sound/vox/fifty.ogg differ
diff --git a/modular_citadel/sound/vox/final.ogg b/modular_citadel/sound/vox/final.ogg
new file mode 100644
index 0000000000..d06bef9fc2
Binary files /dev/null and b/modular_citadel/sound/vox/final.ogg differ
diff --git a/modular_citadel/sound/vox/fine.ogg b/modular_citadel/sound/vox/fine.ogg
new file mode 100644
index 0000000000..3445a9ea54
Binary files /dev/null and b/modular_citadel/sound/vox/fine.ogg differ
diff --git a/modular_citadel/sound/vox/fire.ogg b/modular_citadel/sound/vox/fire.ogg
new file mode 100644
index 0000000000..094043b953
Binary files /dev/null and b/modular_citadel/sound/vox/fire.ogg differ
diff --git a/modular_citadel/sound/vox/first.ogg b/modular_citadel/sound/vox/first.ogg
new file mode 100644
index 0000000000..84977e4eb7
Binary files /dev/null and b/modular_citadel/sound/vox/first.ogg differ
diff --git a/modular_citadel/sound/vox/five.ogg b/modular_citadel/sound/vox/five.ogg
new file mode 100644
index 0000000000..0a28539c34
Binary files /dev/null and b/modular_citadel/sound/vox/five.ogg differ
diff --git a/modular_citadel/sound/vox/flag.ogg b/modular_citadel/sound/vox/flag.ogg
new file mode 100644
index 0000000000..0d13587d60
Binary files /dev/null and b/modular_citadel/sound/vox/flag.ogg differ
diff --git a/modular_citadel/sound/vox/flooding.ogg b/modular_citadel/sound/vox/flooding.ogg
new file mode 100644
index 0000000000..c32bf475f5
Binary files /dev/null and b/modular_citadel/sound/vox/flooding.ogg differ
diff --git a/modular_citadel/sound/vox/floor.ogg b/modular_citadel/sound/vox/floor.ogg
new file mode 100644
index 0000000000..14d4a84131
Binary files /dev/null and b/modular_citadel/sound/vox/floor.ogg differ
diff --git a/modular_citadel/sound/vox/fool.ogg b/modular_citadel/sound/vox/fool.ogg
new file mode 100644
index 0000000000..965251cc4a
Binary files /dev/null and b/modular_citadel/sound/vox/fool.ogg differ
diff --git a/modular_citadel/sound/vox/for.ogg b/modular_citadel/sound/vox/for.ogg
new file mode 100644
index 0000000000..b69a8f4b6c
Binary files /dev/null and b/modular_citadel/sound/vox/for.ogg differ
diff --git a/modular_citadel/sound/vox/forbidden.ogg b/modular_citadel/sound/vox/forbidden.ogg
new file mode 100644
index 0000000000..23daae8496
Binary files /dev/null and b/modular_citadel/sound/vox/forbidden.ogg differ
diff --git a/modular_citadel/sound/vox/force.ogg b/modular_citadel/sound/vox/force.ogg
new file mode 100644
index 0000000000..ff4cb84c3a
Binary files /dev/null and b/modular_citadel/sound/vox/force.ogg differ
diff --git a/modular_citadel/sound/vox/forms.ogg b/modular_citadel/sound/vox/forms.ogg
new file mode 100644
index 0000000000..7ef1862bb6
Binary files /dev/null and b/modular_citadel/sound/vox/forms.ogg differ
diff --git a/modular_citadel/sound/vox/found.ogg b/modular_citadel/sound/vox/found.ogg
new file mode 100644
index 0000000000..660a2f8520
Binary files /dev/null and b/modular_citadel/sound/vox/found.ogg differ
diff --git a/modular_citadel/sound/vox/four.ogg b/modular_citadel/sound/vox/four.ogg
new file mode 100644
index 0000000000..df8adfcd31
Binary files /dev/null and b/modular_citadel/sound/vox/four.ogg differ
diff --git a/modular_citadel/sound/vox/fourteen.ogg b/modular_citadel/sound/vox/fourteen.ogg
new file mode 100644
index 0000000000..21b61a0fd5
Binary files /dev/null and b/modular_citadel/sound/vox/fourteen.ogg differ
diff --git a/modular_citadel/sound/vox/fourth.ogg b/modular_citadel/sound/vox/fourth.ogg
new file mode 100644
index 0000000000..986102ea54
Binary files /dev/null and b/modular_citadel/sound/vox/fourth.ogg differ
diff --git a/modular_citadel/sound/vox/fourty.ogg b/modular_citadel/sound/vox/fourty.ogg
new file mode 100644
index 0000000000..b0edb0a7c7
Binary files /dev/null and b/modular_citadel/sound/vox/fourty.ogg differ
diff --git a/modular_citadel/sound/vox/foxtrot.ogg b/modular_citadel/sound/vox/foxtrot.ogg
new file mode 100644
index 0000000000..3be534fd22
Binary files /dev/null and b/modular_citadel/sound/vox/foxtrot.ogg differ
diff --git a/modular_citadel/sound/vox/freeman.ogg b/modular_citadel/sound/vox/freeman.ogg
new file mode 100644
index 0000000000..b2bc590942
Binary files /dev/null and b/modular_citadel/sound/vox/freeman.ogg differ
diff --git a/modular_citadel/sound/vox/freezer.ogg b/modular_citadel/sound/vox/freezer.ogg
new file mode 100644
index 0000000000..6bb30ad953
Binary files /dev/null and b/modular_citadel/sound/vox/freezer.ogg differ
diff --git a/modular_citadel/sound/vox/from.ogg b/modular_citadel/sound/vox/from.ogg
new file mode 100644
index 0000000000..535de03d14
Binary files /dev/null and b/modular_citadel/sound/vox/from.ogg differ
diff --git a/modular_citadel/sound/vox/front.ogg b/modular_citadel/sound/vox/front.ogg
new file mode 100644
index 0000000000..f1755a788b
Binary files /dev/null and b/modular_citadel/sound/vox/front.ogg differ
diff --git a/modular_citadel/sound/vox/fuel.ogg b/modular_citadel/sound/vox/fuel.ogg
new file mode 100644
index 0000000000..53d7889314
Binary files /dev/null and b/modular_citadel/sound/vox/fuel.ogg differ
diff --git a/modular_citadel/sound/vox/g.ogg b/modular_citadel/sound/vox/g.ogg
new file mode 100644
index 0000000000..a3702ca3e5
Binary files /dev/null and b/modular_citadel/sound/vox/g.ogg differ
diff --git a/modular_citadel/sound/vox/gay.ogg b/modular_citadel/sound/vox/gay.ogg
new file mode 100644
index 0000000000..a70d05716b
Binary files /dev/null and b/modular_citadel/sound/vox/gay.ogg differ
diff --git a/modular_citadel/sound/vox/get.ogg b/modular_citadel/sound/vox/get.ogg
new file mode 100644
index 0000000000..b5c0d47cd5
Binary files /dev/null and b/modular_citadel/sound/vox/get.ogg differ
diff --git a/modular_citadel/sound/vox/go.ogg b/modular_citadel/sound/vox/go.ogg
new file mode 100644
index 0000000000..f7dcb56f8e
Binary files /dev/null and b/modular_citadel/sound/vox/go.ogg differ
diff --git a/modular_citadel/sound/vox/going.ogg b/modular_citadel/sound/vox/going.ogg
new file mode 100644
index 0000000000..3ff4fe5427
Binary files /dev/null and b/modular_citadel/sound/vox/going.ogg differ
diff --git a/modular_citadel/sound/vox/good.ogg b/modular_citadel/sound/vox/good.ogg
new file mode 100644
index 0000000000..c8115bb5fb
Binary files /dev/null and b/modular_citadel/sound/vox/good.ogg differ
diff --git a/modular_citadel/sound/vox/goodbye.ogg b/modular_citadel/sound/vox/goodbye.ogg
new file mode 100644
index 0000000000..e793ba2fa6
Binary files /dev/null and b/modular_citadel/sound/vox/goodbye.ogg differ
diff --git a/modular_citadel/sound/vox/gordon.ogg b/modular_citadel/sound/vox/gordon.ogg
new file mode 100644
index 0000000000..5d5ab4ddba
Binary files /dev/null and b/modular_citadel/sound/vox/gordon.ogg differ
diff --git a/modular_citadel/sound/vox/got.ogg b/modular_citadel/sound/vox/got.ogg
new file mode 100644
index 0000000000..3d712c9fc4
Binary files /dev/null and b/modular_citadel/sound/vox/got.ogg differ
diff --git a/modular_citadel/sound/vox/government.ogg b/modular_citadel/sound/vox/government.ogg
new file mode 100644
index 0000000000..830b59bac2
Binary files /dev/null and b/modular_citadel/sound/vox/government.ogg differ
diff --git a/modular_citadel/sound/vox/granted.ogg b/modular_citadel/sound/vox/granted.ogg
new file mode 100644
index 0000000000..4dae196cf6
Binary files /dev/null and b/modular_citadel/sound/vox/granted.ogg differ
diff --git a/modular_citadel/sound/vox/great.ogg b/modular_citadel/sound/vox/great.ogg
new file mode 100644
index 0000000000..d820a56179
Binary files /dev/null and b/modular_citadel/sound/vox/great.ogg differ
diff --git a/modular_citadel/sound/vox/green.ogg b/modular_citadel/sound/vox/green.ogg
new file mode 100644
index 0000000000..05f6e6b0fa
Binary files /dev/null and b/modular_citadel/sound/vox/green.ogg differ
diff --git a/modular_citadel/sound/vox/grenade.ogg b/modular_citadel/sound/vox/grenade.ogg
new file mode 100644
index 0000000000..971a5d515b
Binary files /dev/null and b/modular_citadel/sound/vox/grenade.ogg differ
diff --git a/modular_citadel/sound/vox/guard.ogg b/modular_citadel/sound/vox/guard.ogg
new file mode 100644
index 0000000000..795ba08486
Binary files /dev/null and b/modular_citadel/sound/vox/guard.ogg differ
diff --git a/modular_citadel/sound/vox/gulf.ogg b/modular_citadel/sound/vox/gulf.ogg
new file mode 100644
index 0000000000..87cc1f953d
Binary files /dev/null and b/modular_citadel/sound/vox/gulf.ogg differ
diff --git a/modular_citadel/sound/vox/gun.ogg b/modular_citadel/sound/vox/gun.ogg
new file mode 100644
index 0000000000..472620ea76
Binary files /dev/null and b/modular_citadel/sound/vox/gun.ogg differ
diff --git a/modular_citadel/sound/vox/guthrie.ogg b/modular_citadel/sound/vox/guthrie.ogg
new file mode 100644
index 0000000000..b87c5f6cb1
Binary files /dev/null and b/modular_citadel/sound/vox/guthrie.ogg differ
diff --git a/modular_citadel/sound/vox/handling.ogg b/modular_citadel/sound/vox/handling.ogg
new file mode 100644
index 0000000000..be05e82d75
Binary files /dev/null and b/modular_citadel/sound/vox/handling.ogg differ
diff --git a/modular_citadel/sound/vox/hangar.ogg b/modular_citadel/sound/vox/hangar.ogg
new file mode 100644
index 0000000000..d6fe4084ae
Binary files /dev/null and b/modular_citadel/sound/vox/hangar.ogg differ
diff --git a/modular_citadel/sound/vox/has.ogg b/modular_citadel/sound/vox/has.ogg
new file mode 100644
index 0000000000..055cb0dc15
Binary files /dev/null and b/modular_citadel/sound/vox/has.ogg differ
diff --git a/modular_citadel/sound/vox/have.ogg b/modular_citadel/sound/vox/have.ogg
new file mode 100644
index 0000000000..c514165582
Binary files /dev/null and b/modular_citadel/sound/vox/have.ogg differ
diff --git a/modular_citadel/sound/vox/hazard.ogg b/modular_citadel/sound/vox/hazard.ogg
new file mode 100644
index 0000000000..032b1fb251
Binary files /dev/null and b/modular_citadel/sound/vox/hazard.ogg differ
diff --git a/modular_citadel/sound/vox/head.ogg b/modular_citadel/sound/vox/head.ogg
new file mode 100644
index 0000000000..e4902fcc6f
Binary files /dev/null and b/modular_citadel/sound/vox/head.ogg differ
diff --git a/modular_citadel/sound/vox/health.ogg b/modular_citadel/sound/vox/health.ogg
new file mode 100644
index 0000000000..c11ad1bcf2
Binary files /dev/null and b/modular_citadel/sound/vox/health.ogg differ
diff --git a/modular_citadel/sound/vox/heat.ogg b/modular_citadel/sound/vox/heat.ogg
new file mode 100644
index 0000000000..a6c0752ab8
Binary files /dev/null and b/modular_citadel/sound/vox/heat.ogg differ
diff --git a/modular_citadel/sound/vox/helicopter.ogg b/modular_citadel/sound/vox/helicopter.ogg
new file mode 100644
index 0000000000..6bfe6466b2
Binary files /dev/null and b/modular_citadel/sound/vox/helicopter.ogg differ
diff --git a/modular_citadel/sound/vox/helium.ogg b/modular_citadel/sound/vox/helium.ogg
new file mode 100644
index 0000000000..4a5c8326a5
Binary files /dev/null and b/modular_citadel/sound/vox/helium.ogg differ
diff --git a/modular_citadel/sound/vox/hello.ogg b/modular_citadel/sound/vox/hello.ogg
new file mode 100644
index 0000000000..622e4669ef
Binary files /dev/null and b/modular_citadel/sound/vox/hello.ogg differ
diff --git a/modular_citadel/sound/vox/help.ogg b/modular_citadel/sound/vox/help.ogg
new file mode 100644
index 0000000000..038438d63b
Binary files /dev/null and b/modular_citadel/sound/vox/help.ogg differ
diff --git a/modular_citadel/sound/vox/here.ogg b/modular_citadel/sound/vox/here.ogg
new file mode 100644
index 0000000000..ef69f1b282
Binary files /dev/null and b/modular_citadel/sound/vox/here.ogg differ
diff --git a/modular_citadel/sound/vox/hide.ogg b/modular_citadel/sound/vox/hide.ogg
new file mode 100644
index 0000000000..aa329d1f72
Binary files /dev/null and b/modular_citadel/sound/vox/hide.ogg differ
diff --git a/modular_citadel/sound/vox/high.ogg b/modular_citadel/sound/vox/high.ogg
new file mode 100644
index 0000000000..c20e382388
Binary files /dev/null and b/modular_citadel/sound/vox/high.ogg differ
diff --git a/modular_citadel/sound/vox/highest.ogg b/modular_citadel/sound/vox/highest.ogg
new file mode 100644
index 0000000000..d64bfd528c
Binary files /dev/null and b/modular_citadel/sound/vox/highest.ogg differ
diff --git a/modular_citadel/sound/vox/hit.ogg b/modular_citadel/sound/vox/hit.ogg
new file mode 100644
index 0000000000..bfe3cd0501
Binary files /dev/null and b/modular_citadel/sound/vox/hit.ogg differ
diff --git a/modular_citadel/sound/vox/holds.ogg b/modular_citadel/sound/vox/holds.ogg
new file mode 100644
index 0000000000..41b88d990e
Binary files /dev/null and b/modular_citadel/sound/vox/holds.ogg differ
diff --git a/modular_citadel/sound/vox/hole.ogg b/modular_citadel/sound/vox/hole.ogg
new file mode 100644
index 0000000000..a5dea701c8
Binary files /dev/null and b/modular_citadel/sound/vox/hole.ogg differ
diff --git a/modular_citadel/sound/vox/hostile.ogg b/modular_citadel/sound/vox/hostile.ogg
new file mode 100644
index 0000000000..7b8e495c87
Binary files /dev/null and b/modular_citadel/sound/vox/hostile.ogg differ
diff --git a/modular_citadel/sound/vox/hot.ogg b/modular_citadel/sound/vox/hot.ogg
new file mode 100644
index 0000000000..508f643856
Binary files /dev/null and b/modular_citadel/sound/vox/hot.ogg differ
diff --git a/modular_citadel/sound/vox/hotel.ogg b/modular_citadel/sound/vox/hotel.ogg
new file mode 100644
index 0000000000..5a5b66cdbf
Binary files /dev/null and b/modular_citadel/sound/vox/hotel.ogg differ
diff --git a/modular_citadel/sound/vox/hour.ogg b/modular_citadel/sound/vox/hour.ogg
new file mode 100644
index 0000000000..39f0fd0917
Binary files /dev/null and b/modular_citadel/sound/vox/hour.ogg differ
diff --git a/modular_citadel/sound/vox/hours.ogg b/modular_citadel/sound/vox/hours.ogg
new file mode 100644
index 0000000000..691b7a643b
Binary files /dev/null and b/modular_citadel/sound/vox/hours.ogg differ
diff --git a/modular_citadel/sound/vox/hundred.ogg b/modular_citadel/sound/vox/hundred.ogg
new file mode 100644
index 0000000000..3a254a137a
Binary files /dev/null and b/modular_citadel/sound/vox/hundred.ogg differ
diff --git a/modular_citadel/sound/vox/hydro.ogg b/modular_citadel/sound/vox/hydro.ogg
new file mode 100644
index 0000000000..47c9ad5d01
Binary files /dev/null and b/modular_citadel/sound/vox/hydro.ogg differ
diff --git a/modular_citadel/sound/vox/i.ogg b/modular_citadel/sound/vox/i.ogg
new file mode 100644
index 0000000000..1c4ce81b7a
Binary files /dev/null and b/modular_citadel/sound/vox/i.ogg differ
diff --git a/modular_citadel/sound/vox/idiot.ogg b/modular_citadel/sound/vox/idiot.ogg
new file mode 100644
index 0000000000..66e058effc
Binary files /dev/null and b/modular_citadel/sound/vox/idiot.ogg differ
diff --git a/modular_citadel/sound/vox/illegal.ogg b/modular_citadel/sound/vox/illegal.ogg
new file mode 100644
index 0000000000..e1f22738bd
Binary files /dev/null and b/modular_citadel/sound/vox/illegal.ogg differ
diff --git a/modular_citadel/sound/vox/immediate.ogg b/modular_citadel/sound/vox/immediate.ogg
new file mode 100644
index 0000000000..3e551dfa57
Binary files /dev/null and b/modular_citadel/sound/vox/immediate.ogg differ
diff --git a/modular_citadel/sound/vox/immediately.ogg b/modular_citadel/sound/vox/immediately.ogg
new file mode 100644
index 0000000000..0ca780ddac
Binary files /dev/null and b/modular_citadel/sound/vox/immediately.ogg differ
diff --git a/modular_citadel/sound/vox/in.ogg b/modular_citadel/sound/vox/in.ogg
new file mode 100644
index 0000000000..e0b20f4795
Binary files /dev/null and b/modular_citadel/sound/vox/in.ogg differ
diff --git a/modular_citadel/sound/vox/inches.ogg b/modular_citadel/sound/vox/inches.ogg
new file mode 100644
index 0000000000..058f8e9131
Binary files /dev/null and b/modular_citadel/sound/vox/inches.ogg differ
diff --git a/modular_citadel/sound/vox/india.ogg b/modular_citadel/sound/vox/india.ogg
new file mode 100644
index 0000000000..1eefc45266
Binary files /dev/null and b/modular_citadel/sound/vox/india.ogg differ
diff --git a/modular_citadel/sound/vox/ing.ogg b/modular_citadel/sound/vox/ing.ogg
new file mode 100644
index 0000000000..d8c5c72fc9
Binary files /dev/null and b/modular_citadel/sound/vox/ing.ogg differ
diff --git a/modular_citadel/sound/vox/inoperative.ogg b/modular_citadel/sound/vox/inoperative.ogg
new file mode 100644
index 0000000000..01f13af948
Binary files /dev/null and b/modular_citadel/sound/vox/inoperative.ogg differ
diff --git a/modular_citadel/sound/vox/inside.ogg b/modular_citadel/sound/vox/inside.ogg
new file mode 100644
index 0000000000..778f4539ed
Binary files /dev/null and b/modular_citadel/sound/vox/inside.ogg differ
diff --git a/modular_citadel/sound/vox/inspection.ogg b/modular_citadel/sound/vox/inspection.ogg
new file mode 100644
index 0000000000..60a2b3e788
Binary files /dev/null and b/modular_citadel/sound/vox/inspection.ogg differ
diff --git a/modular_citadel/sound/vox/inspector.ogg b/modular_citadel/sound/vox/inspector.ogg
new file mode 100644
index 0000000000..177651d631
Binary files /dev/null and b/modular_citadel/sound/vox/inspector.ogg differ
diff --git a/modular_citadel/sound/vox/interchange.ogg b/modular_citadel/sound/vox/interchange.ogg
new file mode 100644
index 0000000000..6c4230d2d1
Binary files /dev/null and b/modular_citadel/sound/vox/interchange.ogg differ
diff --git a/modular_citadel/sound/vox/intruder.ogg b/modular_citadel/sound/vox/intruder.ogg
new file mode 100644
index 0000000000..db4810966f
Binary files /dev/null and b/modular_citadel/sound/vox/intruder.ogg differ
diff --git a/modular_citadel/sound/vox/invallid.ogg b/modular_citadel/sound/vox/invallid.ogg
new file mode 100644
index 0000000000..b2e5628fa5
Binary files /dev/null and b/modular_citadel/sound/vox/invallid.ogg differ
diff --git a/modular_citadel/sound/vox/invasion.ogg b/modular_citadel/sound/vox/invasion.ogg
new file mode 100644
index 0000000000..8e9a41fc10
Binary files /dev/null and b/modular_citadel/sound/vox/invasion.ogg differ
diff --git a/modular_citadel/sound/vox/is.ogg b/modular_citadel/sound/vox/is.ogg
new file mode 100644
index 0000000000..db3ca1dc81
Binary files /dev/null and b/modular_citadel/sound/vox/is.ogg differ
diff --git a/modular_citadel/sound/vox/it.ogg b/modular_citadel/sound/vox/it.ogg
new file mode 100644
index 0000000000..c0d3de3992
Binary files /dev/null and b/modular_citadel/sound/vox/it.ogg differ
diff --git a/modular_citadel/sound/vox/johnson.ogg b/modular_citadel/sound/vox/johnson.ogg
new file mode 100644
index 0000000000..ea74d8a61f
Binary files /dev/null and b/modular_citadel/sound/vox/johnson.ogg differ
diff --git a/modular_citadel/sound/vox/juliet.ogg b/modular_citadel/sound/vox/juliet.ogg
new file mode 100644
index 0000000000..c9a61b63ab
Binary files /dev/null and b/modular_citadel/sound/vox/juliet.ogg differ
diff --git a/modular_citadel/sound/vox/key.ogg b/modular_citadel/sound/vox/key.ogg
new file mode 100644
index 0000000000..b761d5c1f9
Binary files /dev/null and b/modular_citadel/sound/vox/key.ogg differ
diff --git a/modular_citadel/sound/vox/kill.ogg b/modular_citadel/sound/vox/kill.ogg
new file mode 100644
index 0000000000..00db499476
Binary files /dev/null and b/modular_citadel/sound/vox/kill.ogg differ
diff --git a/modular_citadel/sound/vox/kilo.ogg b/modular_citadel/sound/vox/kilo.ogg
new file mode 100644
index 0000000000..7786c4fc7c
Binary files /dev/null and b/modular_citadel/sound/vox/kilo.ogg differ
diff --git a/modular_citadel/sound/vox/kit.ogg b/modular_citadel/sound/vox/kit.ogg
new file mode 100644
index 0000000000..15bbe46087
Binary files /dev/null and b/modular_citadel/sound/vox/kit.ogg differ
diff --git a/modular_citadel/sound/vox/lab.ogg b/modular_citadel/sound/vox/lab.ogg
new file mode 100644
index 0000000000..2031fdd255
Binary files /dev/null and b/modular_citadel/sound/vox/lab.ogg differ
diff --git a/modular_citadel/sound/vox/lambda.ogg b/modular_citadel/sound/vox/lambda.ogg
new file mode 100644
index 0000000000..f933c45376
Binary files /dev/null and b/modular_citadel/sound/vox/lambda.ogg differ
diff --git a/modular_citadel/sound/vox/laser.ogg b/modular_citadel/sound/vox/laser.ogg
new file mode 100644
index 0000000000..04b5ec4341
Binary files /dev/null and b/modular_citadel/sound/vox/laser.ogg differ
diff --git a/modular_citadel/sound/vox/last.ogg b/modular_citadel/sound/vox/last.ogg
new file mode 100644
index 0000000000..9ce61ac234
Binary files /dev/null and b/modular_citadel/sound/vox/last.ogg differ
diff --git a/modular_citadel/sound/vox/launch.ogg b/modular_citadel/sound/vox/launch.ogg
new file mode 100644
index 0000000000..c8e3b0820e
Binary files /dev/null and b/modular_citadel/sound/vox/launch.ogg differ
diff --git a/modular_citadel/sound/vox/leak.ogg b/modular_citadel/sound/vox/leak.ogg
new file mode 100644
index 0000000000..3154ac53c3
Binary files /dev/null and b/modular_citadel/sound/vox/leak.ogg differ
diff --git a/modular_citadel/sound/vox/leave.ogg b/modular_citadel/sound/vox/leave.ogg
new file mode 100644
index 0000000000..cec4a6befd
Binary files /dev/null and b/modular_citadel/sound/vox/leave.ogg differ
diff --git a/modular_citadel/sound/vox/left.ogg b/modular_citadel/sound/vox/left.ogg
new file mode 100644
index 0000000000..c6f32829ad
Binary files /dev/null and b/modular_citadel/sound/vox/left.ogg differ
diff --git a/modular_citadel/sound/vox/legal.ogg b/modular_citadel/sound/vox/legal.ogg
new file mode 100644
index 0000000000..c8f5163bd1
Binary files /dev/null and b/modular_citadel/sound/vox/legal.ogg differ
diff --git a/modular_citadel/sound/vox/level.ogg b/modular_citadel/sound/vox/level.ogg
new file mode 100644
index 0000000000..4d898a5ef7
Binary files /dev/null and b/modular_citadel/sound/vox/level.ogg differ
diff --git a/modular_citadel/sound/vox/lever.ogg b/modular_citadel/sound/vox/lever.ogg
new file mode 100644
index 0000000000..28c8c33e76
Binary files /dev/null and b/modular_citadel/sound/vox/lever.ogg differ
diff --git a/modular_citadel/sound/vox/lie.ogg b/modular_citadel/sound/vox/lie.ogg
new file mode 100644
index 0000000000..1516dc0072
Binary files /dev/null and b/modular_citadel/sound/vox/lie.ogg differ
diff --git a/modular_citadel/sound/vox/lieutenant.ogg b/modular_citadel/sound/vox/lieutenant.ogg
new file mode 100644
index 0000000000..1393b36008
Binary files /dev/null and b/modular_citadel/sound/vox/lieutenant.ogg differ
diff --git a/modular_citadel/sound/vox/life.ogg b/modular_citadel/sound/vox/life.ogg
new file mode 100644
index 0000000000..0d03320ce2
Binary files /dev/null and b/modular_citadel/sound/vox/life.ogg differ
diff --git a/modular_citadel/sound/vox/light.ogg b/modular_citadel/sound/vox/light.ogg
new file mode 100644
index 0000000000..c4e8a9fc78
Binary files /dev/null and b/modular_citadel/sound/vox/light.ogg differ
diff --git a/modular_citadel/sound/vox/lima.ogg b/modular_citadel/sound/vox/lima.ogg
new file mode 100644
index 0000000000..84e26666cf
Binary files /dev/null and b/modular_citadel/sound/vox/lima.ogg differ
diff --git a/modular_citadel/sound/vox/liquid.ogg b/modular_citadel/sound/vox/liquid.ogg
new file mode 100644
index 0000000000..b942e3cf6c
Binary files /dev/null and b/modular_citadel/sound/vox/liquid.ogg differ
diff --git a/modular_citadel/sound/vox/loading.ogg b/modular_citadel/sound/vox/loading.ogg
new file mode 100644
index 0000000000..2dfefd952e
Binary files /dev/null and b/modular_citadel/sound/vox/loading.ogg differ
diff --git a/modular_citadel/sound/vox/locate.ogg b/modular_citadel/sound/vox/locate.ogg
new file mode 100644
index 0000000000..2ea19ec257
Binary files /dev/null and b/modular_citadel/sound/vox/locate.ogg differ
diff --git a/modular_citadel/sound/vox/located.ogg b/modular_citadel/sound/vox/located.ogg
new file mode 100644
index 0000000000..cd161b556b
Binary files /dev/null and b/modular_citadel/sound/vox/located.ogg differ
diff --git a/modular_citadel/sound/vox/location.ogg b/modular_citadel/sound/vox/location.ogg
new file mode 100644
index 0000000000..966c9ae3f6
Binary files /dev/null and b/modular_citadel/sound/vox/location.ogg differ
diff --git a/modular_citadel/sound/vox/lock.ogg b/modular_citadel/sound/vox/lock.ogg
new file mode 100644
index 0000000000..c4c89992db
Binary files /dev/null and b/modular_citadel/sound/vox/lock.ogg differ
diff --git a/modular_citadel/sound/vox/locked.ogg b/modular_citadel/sound/vox/locked.ogg
new file mode 100644
index 0000000000..d1a05ba323
Binary files /dev/null and b/modular_citadel/sound/vox/locked.ogg differ
diff --git a/modular_citadel/sound/vox/locker.ogg b/modular_citadel/sound/vox/locker.ogg
new file mode 100644
index 0000000000..2c5c9ccb4b
Binary files /dev/null and b/modular_citadel/sound/vox/locker.ogg differ
diff --git a/modular_citadel/sound/vox/lockout.ogg b/modular_citadel/sound/vox/lockout.ogg
new file mode 100644
index 0000000000..36748ecb71
Binary files /dev/null and b/modular_citadel/sound/vox/lockout.ogg differ
diff --git a/modular_citadel/sound/vox/lower.ogg b/modular_citadel/sound/vox/lower.ogg
new file mode 100644
index 0000000000..a3a6a3ae9d
Binary files /dev/null and b/modular_citadel/sound/vox/lower.ogg differ
diff --git a/modular_citadel/sound/vox/lowest.ogg b/modular_citadel/sound/vox/lowest.ogg
new file mode 100644
index 0000000000..787fa2a961
Binary files /dev/null and b/modular_citadel/sound/vox/lowest.ogg differ
diff --git a/modular_citadel/sound/vox/magnetic.ogg b/modular_citadel/sound/vox/magnetic.ogg
new file mode 100644
index 0000000000..1211ab1cfd
Binary files /dev/null and b/modular_citadel/sound/vox/magnetic.ogg differ
diff --git a/modular_citadel/sound/vox/main.ogg b/modular_citadel/sound/vox/main.ogg
new file mode 100644
index 0000000000..a1e49b2c16
Binary files /dev/null and b/modular_citadel/sound/vox/main.ogg differ
diff --git a/modular_citadel/sound/vox/maintenance.ogg b/modular_citadel/sound/vox/maintenance.ogg
new file mode 100644
index 0000000000..691fea8b60
Binary files /dev/null and b/modular_citadel/sound/vox/maintenance.ogg differ
diff --git a/modular_citadel/sound/vox/malfunction.ogg b/modular_citadel/sound/vox/malfunction.ogg
new file mode 100644
index 0000000000..5e0d416d4f
Binary files /dev/null and b/modular_citadel/sound/vox/malfunction.ogg differ
diff --git a/modular_citadel/sound/vox/man.ogg b/modular_citadel/sound/vox/man.ogg
new file mode 100644
index 0000000000..10ca95640a
Binary files /dev/null and b/modular_citadel/sound/vox/man.ogg differ
diff --git a/modular_citadel/sound/vox/mass.ogg b/modular_citadel/sound/vox/mass.ogg
new file mode 100644
index 0000000000..6b785f5e8b
Binary files /dev/null and b/modular_citadel/sound/vox/mass.ogg differ
diff --git a/modular_citadel/sound/vox/materials.ogg b/modular_citadel/sound/vox/materials.ogg
new file mode 100644
index 0000000000..0321e579f7
Binary files /dev/null and b/modular_citadel/sound/vox/materials.ogg differ
diff --git a/modular_citadel/sound/vox/maximum.ogg b/modular_citadel/sound/vox/maximum.ogg
new file mode 100644
index 0000000000..ef566342a7
Binary files /dev/null and b/modular_citadel/sound/vox/maximum.ogg differ
diff --git a/modular_citadel/sound/vox/may.ogg b/modular_citadel/sound/vox/may.ogg
new file mode 100644
index 0000000000..2f9fa02cf0
Binary files /dev/null and b/modular_citadel/sound/vox/may.ogg differ
diff --git a/modular_citadel/sound/vox/med.ogg b/modular_citadel/sound/vox/med.ogg
new file mode 100644
index 0000000000..280a12362f
Binary files /dev/null and b/modular_citadel/sound/vox/med.ogg differ
diff --git a/modular_citadel/sound/vox/medical.ogg b/modular_citadel/sound/vox/medical.ogg
new file mode 100644
index 0000000000..3a293f31b2
Binary files /dev/null and b/modular_citadel/sound/vox/medical.ogg differ
diff --git a/modular_citadel/sound/vox/men.ogg b/modular_citadel/sound/vox/men.ogg
new file mode 100644
index 0000000000..a9e92245f1
Binary files /dev/null and b/modular_citadel/sound/vox/men.ogg differ
diff --git a/modular_citadel/sound/vox/mercy.ogg b/modular_citadel/sound/vox/mercy.ogg
new file mode 100644
index 0000000000..2de89bc70a
Binary files /dev/null and b/modular_citadel/sound/vox/mercy.ogg differ
diff --git a/modular_citadel/sound/vox/mesa.ogg b/modular_citadel/sound/vox/mesa.ogg
new file mode 100644
index 0000000000..649d3671ba
Binary files /dev/null and b/modular_citadel/sound/vox/mesa.ogg differ
diff --git a/modular_citadel/sound/vox/message.ogg b/modular_citadel/sound/vox/message.ogg
new file mode 100644
index 0000000000..1454e3df9e
Binary files /dev/null and b/modular_citadel/sound/vox/message.ogg differ
diff --git a/modular_citadel/sound/vox/meter.ogg b/modular_citadel/sound/vox/meter.ogg
new file mode 100644
index 0000000000..7afc6fb3d1
Binary files /dev/null and b/modular_citadel/sound/vox/meter.ogg differ
diff --git a/modular_citadel/sound/vox/micro.ogg b/modular_citadel/sound/vox/micro.ogg
new file mode 100644
index 0000000000..38d59ed2de
Binary files /dev/null and b/modular_citadel/sound/vox/micro.ogg differ
diff --git a/modular_citadel/sound/vox/middle.ogg b/modular_citadel/sound/vox/middle.ogg
new file mode 100644
index 0000000000..ef33287eff
Binary files /dev/null and b/modular_citadel/sound/vox/middle.ogg differ
diff --git a/modular_citadel/sound/vox/mike.ogg b/modular_citadel/sound/vox/mike.ogg
new file mode 100644
index 0000000000..27d4fdeb9e
Binary files /dev/null and b/modular_citadel/sound/vox/mike.ogg differ
diff --git a/modular_citadel/sound/vox/miles.ogg b/modular_citadel/sound/vox/miles.ogg
new file mode 100644
index 0000000000..fbf06913e2
Binary files /dev/null and b/modular_citadel/sound/vox/miles.ogg differ
diff --git a/modular_citadel/sound/vox/military.ogg b/modular_citadel/sound/vox/military.ogg
new file mode 100644
index 0000000000..8273851291
Binary files /dev/null and b/modular_citadel/sound/vox/military.ogg differ
diff --git a/modular_citadel/sound/vox/milli.ogg b/modular_citadel/sound/vox/milli.ogg
new file mode 100644
index 0000000000..806bccebab
Binary files /dev/null and b/modular_citadel/sound/vox/milli.ogg differ
diff --git a/modular_citadel/sound/vox/million.ogg b/modular_citadel/sound/vox/million.ogg
new file mode 100644
index 0000000000..e4c10a2d86
Binary files /dev/null and b/modular_citadel/sound/vox/million.ogg differ
diff --git a/modular_citadel/sound/vox/minefield.ogg b/modular_citadel/sound/vox/minefield.ogg
new file mode 100644
index 0000000000..b437449d1d
Binary files /dev/null and b/modular_citadel/sound/vox/minefield.ogg differ
diff --git a/modular_citadel/sound/vox/minimum.ogg b/modular_citadel/sound/vox/minimum.ogg
new file mode 100644
index 0000000000..a15483bde6
Binary files /dev/null and b/modular_citadel/sound/vox/minimum.ogg differ
diff --git a/modular_citadel/sound/vox/minutes.ogg b/modular_citadel/sound/vox/minutes.ogg
new file mode 100644
index 0000000000..2b7bf579ea
Binary files /dev/null and b/modular_citadel/sound/vox/minutes.ogg differ
diff --git a/modular_citadel/sound/vox/mister.ogg b/modular_citadel/sound/vox/mister.ogg
new file mode 100644
index 0000000000..bc5409bbed
Binary files /dev/null and b/modular_citadel/sound/vox/mister.ogg differ
diff --git a/modular_citadel/sound/vox/mode.ogg b/modular_citadel/sound/vox/mode.ogg
new file mode 100644
index 0000000000..04d6684bde
Binary files /dev/null and b/modular_citadel/sound/vox/mode.ogg differ
diff --git a/modular_citadel/sound/vox/motor.ogg b/modular_citadel/sound/vox/motor.ogg
new file mode 100644
index 0000000000..5a3084201a
Binary files /dev/null and b/modular_citadel/sound/vox/motor.ogg differ
diff --git a/modular_citadel/sound/vox/motorpool.ogg b/modular_citadel/sound/vox/motorpool.ogg
new file mode 100644
index 0000000000..a29772d545
Binary files /dev/null and b/modular_citadel/sound/vox/motorpool.ogg differ
diff --git a/modular_citadel/sound/vox/move.ogg b/modular_citadel/sound/vox/move.ogg
new file mode 100644
index 0000000000..cc6344813f
Binary files /dev/null and b/modular_citadel/sound/vox/move.ogg differ
diff --git a/modular_citadel/sound/vox/must.ogg b/modular_citadel/sound/vox/must.ogg
new file mode 100644
index 0000000000..d52d2c85e0
Binary files /dev/null and b/modular_citadel/sound/vox/must.ogg differ
diff --git a/modular_citadel/sound/vox/nearest.ogg b/modular_citadel/sound/vox/nearest.ogg
new file mode 100644
index 0000000000..fdf34564ad
Binary files /dev/null and b/modular_citadel/sound/vox/nearest.ogg differ
diff --git a/modular_citadel/sound/vox/nice.ogg b/modular_citadel/sound/vox/nice.ogg
new file mode 100644
index 0000000000..102f0eaf87
Binary files /dev/null and b/modular_citadel/sound/vox/nice.ogg differ
diff --git a/modular_citadel/sound/vox/nine.ogg b/modular_citadel/sound/vox/nine.ogg
new file mode 100644
index 0000000000..1d4fd45add
Binary files /dev/null and b/modular_citadel/sound/vox/nine.ogg differ
diff --git a/modular_citadel/sound/vox/nineteen.ogg b/modular_citadel/sound/vox/nineteen.ogg
new file mode 100644
index 0000000000..907ecc6e92
Binary files /dev/null and b/modular_citadel/sound/vox/nineteen.ogg differ
diff --git a/modular_citadel/sound/vox/ninety.ogg b/modular_citadel/sound/vox/ninety.ogg
new file mode 100644
index 0000000000..0f1c3c4fb5
Binary files /dev/null and b/modular_citadel/sound/vox/ninety.ogg differ
diff --git a/modular_citadel/sound/vox/no.ogg b/modular_citadel/sound/vox/no.ogg
new file mode 100644
index 0000000000..85d8497891
Binary files /dev/null and b/modular_citadel/sound/vox/no.ogg differ
diff --git a/modular_citadel/sound/vox/nominal.ogg b/modular_citadel/sound/vox/nominal.ogg
new file mode 100644
index 0000000000..45da127f1b
Binary files /dev/null and b/modular_citadel/sound/vox/nominal.ogg differ
diff --git a/modular_citadel/sound/vox/north.ogg b/modular_citadel/sound/vox/north.ogg
new file mode 100644
index 0000000000..03eb6f88d2
Binary files /dev/null and b/modular_citadel/sound/vox/north.ogg differ
diff --git a/modular_citadel/sound/vox/not.ogg b/modular_citadel/sound/vox/not.ogg
new file mode 100644
index 0000000000..bc691af375
Binary files /dev/null and b/modular_citadel/sound/vox/not.ogg differ
diff --git a/modular_citadel/sound/vox/november.ogg b/modular_citadel/sound/vox/november.ogg
new file mode 100644
index 0000000000..4819c132dc
Binary files /dev/null and b/modular_citadel/sound/vox/november.ogg differ
diff --git a/modular_citadel/sound/vox/now.ogg b/modular_citadel/sound/vox/now.ogg
new file mode 100644
index 0000000000..0e26869bac
Binary files /dev/null and b/modular_citadel/sound/vox/now.ogg differ
diff --git a/modular_citadel/sound/vox/number.ogg b/modular_citadel/sound/vox/number.ogg
new file mode 100644
index 0000000000..c139db7d17
Binary files /dev/null and b/modular_citadel/sound/vox/number.ogg differ
diff --git a/modular_citadel/sound/vox/objective.ogg b/modular_citadel/sound/vox/objective.ogg
new file mode 100644
index 0000000000..2496f83ccf
Binary files /dev/null and b/modular_citadel/sound/vox/objective.ogg differ
diff --git a/modular_citadel/sound/vox/observation.ogg b/modular_citadel/sound/vox/observation.ogg
new file mode 100644
index 0000000000..af04410915
Binary files /dev/null and b/modular_citadel/sound/vox/observation.ogg differ
diff --git a/modular_citadel/sound/vox/of.ogg b/modular_citadel/sound/vox/of.ogg
new file mode 100644
index 0000000000..ee71e1a46e
Binary files /dev/null and b/modular_citadel/sound/vox/of.ogg differ
diff --git a/modular_citadel/sound/vox/officer.ogg b/modular_citadel/sound/vox/officer.ogg
new file mode 100644
index 0000000000..c9f94915e6
Binary files /dev/null and b/modular_citadel/sound/vox/officer.ogg differ
diff --git a/modular_citadel/sound/vox/ok.ogg b/modular_citadel/sound/vox/ok.ogg
new file mode 100644
index 0000000000..cf58af4d13
Binary files /dev/null and b/modular_citadel/sound/vox/ok.ogg differ
diff --git a/modular_citadel/sound/vox/on.ogg b/modular_citadel/sound/vox/on.ogg
new file mode 100644
index 0000000000..3c59c6abd8
Binary files /dev/null and b/modular_citadel/sound/vox/on.ogg differ
diff --git a/modular_citadel/sound/vox/one.ogg b/modular_citadel/sound/vox/one.ogg
new file mode 100644
index 0000000000..377f270179
Binary files /dev/null and b/modular_citadel/sound/vox/one.ogg differ
diff --git a/modular_citadel/sound/vox/open.ogg b/modular_citadel/sound/vox/open.ogg
new file mode 100644
index 0000000000..81c11de72f
Binary files /dev/null and b/modular_citadel/sound/vox/open.ogg differ
diff --git a/modular_citadel/sound/vox/operating.ogg b/modular_citadel/sound/vox/operating.ogg
new file mode 100644
index 0000000000..cd2de79d79
Binary files /dev/null and b/modular_citadel/sound/vox/operating.ogg differ
diff --git a/modular_citadel/sound/vox/operations.ogg b/modular_citadel/sound/vox/operations.ogg
new file mode 100644
index 0000000000..9323d95f46
Binary files /dev/null and b/modular_citadel/sound/vox/operations.ogg differ
diff --git a/modular_citadel/sound/vox/operative.ogg b/modular_citadel/sound/vox/operative.ogg
new file mode 100644
index 0000000000..ba9c7d0cf4
Binary files /dev/null and b/modular_citadel/sound/vox/operative.ogg differ
diff --git a/modular_citadel/sound/vox/option.ogg b/modular_citadel/sound/vox/option.ogg
new file mode 100644
index 0000000000..c404be5556
Binary files /dev/null and b/modular_citadel/sound/vox/option.ogg differ
diff --git a/modular_citadel/sound/vox/order.ogg b/modular_citadel/sound/vox/order.ogg
new file mode 100644
index 0000000000..2961f353ed
Binary files /dev/null and b/modular_citadel/sound/vox/order.ogg differ
diff --git a/modular_citadel/sound/vox/organic.ogg b/modular_citadel/sound/vox/organic.ogg
new file mode 100644
index 0000000000..6195be46b4
Binary files /dev/null and b/modular_citadel/sound/vox/organic.ogg differ
diff --git a/modular_citadel/sound/vox/oscar.ogg b/modular_citadel/sound/vox/oscar.ogg
new file mode 100644
index 0000000000..5f43814f5e
Binary files /dev/null and b/modular_citadel/sound/vox/oscar.ogg differ
diff --git a/modular_citadel/sound/vox/out.ogg b/modular_citadel/sound/vox/out.ogg
new file mode 100644
index 0000000000..3a64ae9751
Binary files /dev/null and b/modular_citadel/sound/vox/out.ogg differ
diff --git a/modular_citadel/sound/vox/outside.ogg b/modular_citadel/sound/vox/outside.ogg
new file mode 100644
index 0000000000..a6417b9f97
Binary files /dev/null and b/modular_citadel/sound/vox/outside.ogg differ
diff --git a/modular_citadel/sound/vox/over.ogg b/modular_citadel/sound/vox/over.ogg
new file mode 100644
index 0000000000..193bbd797b
Binary files /dev/null and b/modular_citadel/sound/vox/over.ogg differ
diff --git a/modular_citadel/sound/vox/overload.ogg b/modular_citadel/sound/vox/overload.ogg
new file mode 100644
index 0000000000..d90e52e97d
Binary files /dev/null and b/modular_citadel/sound/vox/overload.ogg differ
diff --git a/modular_citadel/sound/vox/override.ogg b/modular_citadel/sound/vox/override.ogg
new file mode 100644
index 0000000000..f2efb63799
Binary files /dev/null and b/modular_citadel/sound/vox/override.ogg differ
diff --git a/modular_citadel/sound/vox/pacify.ogg b/modular_citadel/sound/vox/pacify.ogg
new file mode 100644
index 0000000000..232865ebe2
Binary files /dev/null and b/modular_citadel/sound/vox/pacify.ogg differ
diff --git a/modular_citadel/sound/vox/pain.ogg b/modular_citadel/sound/vox/pain.ogg
new file mode 100644
index 0000000000..88e8813158
Binary files /dev/null and b/modular_citadel/sound/vox/pain.ogg differ
diff --git a/modular_citadel/sound/vox/pal.ogg b/modular_citadel/sound/vox/pal.ogg
new file mode 100644
index 0000000000..185a15a6ac
Binary files /dev/null and b/modular_citadel/sound/vox/pal.ogg differ
diff --git a/modular_citadel/sound/vox/panel.ogg b/modular_citadel/sound/vox/panel.ogg
new file mode 100644
index 0000000000..e200e9ddd9
Binary files /dev/null and b/modular_citadel/sound/vox/panel.ogg differ
diff --git a/modular_citadel/sound/vox/percent.ogg b/modular_citadel/sound/vox/percent.ogg
new file mode 100644
index 0000000000..43c04572ba
Binary files /dev/null and b/modular_citadel/sound/vox/percent.ogg differ
diff --git a/modular_citadel/sound/vox/perimeter.ogg b/modular_citadel/sound/vox/perimeter.ogg
new file mode 100644
index 0000000000..7bd3f039ef
Binary files /dev/null and b/modular_citadel/sound/vox/perimeter.ogg differ
diff --git a/modular_citadel/sound/vox/period.ogg b/modular_citadel/sound/vox/period.ogg
new file mode 100644
index 0000000000..e333dc159b
Binary files /dev/null and b/modular_citadel/sound/vox/period.ogg differ
diff --git a/modular_citadel/sound/vox/permitted.ogg b/modular_citadel/sound/vox/permitted.ogg
new file mode 100644
index 0000000000..832fec7c24
Binary files /dev/null and b/modular_citadel/sound/vox/permitted.ogg differ
diff --git a/modular_citadel/sound/vox/personnel.ogg b/modular_citadel/sound/vox/personnel.ogg
new file mode 100644
index 0000000000..f499fb9f1d
Binary files /dev/null and b/modular_citadel/sound/vox/personnel.ogg differ
diff --git a/modular_citadel/sound/vox/pipe.ogg b/modular_citadel/sound/vox/pipe.ogg
new file mode 100644
index 0000000000..63ab07e4cb
Binary files /dev/null and b/modular_citadel/sound/vox/pipe.ogg differ
diff --git a/modular_citadel/sound/vox/plant.ogg b/modular_citadel/sound/vox/plant.ogg
new file mode 100644
index 0000000000..d82d73900d
Binary files /dev/null and b/modular_citadel/sound/vox/plant.ogg differ
diff --git a/modular_citadel/sound/vox/platform.ogg b/modular_citadel/sound/vox/platform.ogg
new file mode 100644
index 0000000000..cf9eb6ce53
Binary files /dev/null and b/modular_citadel/sound/vox/platform.ogg differ
diff --git a/modular_citadel/sound/vox/please.ogg b/modular_citadel/sound/vox/please.ogg
new file mode 100644
index 0000000000..cc21919798
Binary files /dev/null and b/modular_citadel/sound/vox/please.ogg differ
diff --git a/modular_citadel/sound/vox/point.ogg b/modular_citadel/sound/vox/point.ogg
new file mode 100644
index 0000000000..29925c714c
Binary files /dev/null and b/modular_citadel/sound/vox/point.ogg differ
diff --git a/modular_citadel/sound/vox/portal.ogg b/modular_citadel/sound/vox/portal.ogg
new file mode 100644
index 0000000000..4492842d97
Binary files /dev/null and b/modular_citadel/sound/vox/portal.ogg differ
diff --git a/modular_citadel/sound/vox/power.ogg b/modular_citadel/sound/vox/power.ogg
new file mode 100644
index 0000000000..109dde7b19
Binary files /dev/null and b/modular_citadel/sound/vox/power.ogg differ
diff --git a/modular_citadel/sound/vox/presence.ogg b/modular_citadel/sound/vox/presence.ogg
new file mode 100644
index 0000000000..fc929ee991
Binary files /dev/null and b/modular_citadel/sound/vox/presence.ogg differ
diff --git a/modular_citadel/sound/vox/press.ogg b/modular_citadel/sound/vox/press.ogg
new file mode 100644
index 0000000000..704c907141
Binary files /dev/null and b/modular_citadel/sound/vox/press.ogg differ
diff --git a/modular_citadel/sound/vox/primary.ogg b/modular_citadel/sound/vox/primary.ogg
new file mode 100644
index 0000000000..6f667e6a57
Binary files /dev/null and b/modular_citadel/sound/vox/primary.ogg differ
diff --git a/modular_citadel/sound/vox/proceed.ogg b/modular_citadel/sound/vox/proceed.ogg
new file mode 100644
index 0000000000..86df9fcf25
Binary files /dev/null and b/modular_citadel/sound/vox/proceed.ogg differ
diff --git a/modular_citadel/sound/vox/processing.ogg b/modular_citadel/sound/vox/processing.ogg
new file mode 100644
index 0000000000..f5aae3574c
Binary files /dev/null and b/modular_citadel/sound/vox/processing.ogg differ
diff --git a/modular_citadel/sound/vox/progress.ogg b/modular_citadel/sound/vox/progress.ogg
new file mode 100644
index 0000000000..c07c102a97
Binary files /dev/null and b/modular_citadel/sound/vox/progress.ogg differ
diff --git a/modular_citadel/sound/vox/proper.ogg b/modular_citadel/sound/vox/proper.ogg
new file mode 100644
index 0000000000..0dbfbaf599
Binary files /dev/null and b/modular_citadel/sound/vox/proper.ogg differ
diff --git a/modular_citadel/sound/vox/propulsion.ogg b/modular_citadel/sound/vox/propulsion.ogg
new file mode 100644
index 0000000000..8a4a77274a
Binary files /dev/null and b/modular_citadel/sound/vox/propulsion.ogg differ
diff --git a/modular_citadel/sound/vox/prosecute.ogg b/modular_citadel/sound/vox/prosecute.ogg
new file mode 100644
index 0000000000..c0895c54ef
Binary files /dev/null and b/modular_citadel/sound/vox/prosecute.ogg differ
diff --git a/modular_citadel/sound/vox/protective.ogg b/modular_citadel/sound/vox/protective.ogg
new file mode 100644
index 0000000000..67c1f1195b
Binary files /dev/null and b/modular_citadel/sound/vox/protective.ogg differ
diff --git a/modular_citadel/sound/vox/push.ogg b/modular_citadel/sound/vox/push.ogg
new file mode 100644
index 0000000000..2d9cfca1f7
Binary files /dev/null and b/modular_citadel/sound/vox/push.ogg differ
diff --git a/modular_citadel/sound/vox/quantum.ogg b/modular_citadel/sound/vox/quantum.ogg
new file mode 100644
index 0000000000..5082f84e7d
Binary files /dev/null and b/modular_citadel/sound/vox/quantum.ogg differ
diff --git a/modular_citadel/sound/vox/quebec.ogg b/modular_citadel/sound/vox/quebec.ogg
new file mode 100644
index 0000000000..59e84cd4a3
Binary files /dev/null and b/modular_citadel/sound/vox/quebec.ogg differ
diff --git a/modular_citadel/sound/vox/question.ogg b/modular_citadel/sound/vox/question.ogg
new file mode 100644
index 0000000000..197f11ca9a
Binary files /dev/null and b/modular_citadel/sound/vox/question.ogg differ
diff --git a/modular_citadel/sound/vox/questioning.ogg b/modular_citadel/sound/vox/questioning.ogg
new file mode 100644
index 0000000000..ba0436cf32
Binary files /dev/null and b/modular_citadel/sound/vox/questioning.ogg differ
diff --git a/modular_citadel/sound/vox/quick.ogg b/modular_citadel/sound/vox/quick.ogg
new file mode 100644
index 0000000000..19d4e91261
Binary files /dev/null and b/modular_citadel/sound/vox/quick.ogg differ
diff --git a/modular_citadel/sound/vox/quit.ogg b/modular_citadel/sound/vox/quit.ogg
new file mode 100644
index 0000000000..7ab07efa87
Binary files /dev/null and b/modular_citadel/sound/vox/quit.ogg differ
diff --git a/modular_citadel/sound/vox/radiation.ogg b/modular_citadel/sound/vox/radiation.ogg
new file mode 100644
index 0000000000..8d8fbdc001
Binary files /dev/null and b/modular_citadel/sound/vox/radiation.ogg differ
diff --git a/modular_citadel/sound/vox/radioactive.ogg b/modular_citadel/sound/vox/radioactive.ogg
new file mode 100644
index 0000000000..f5751882d4
Binary files /dev/null and b/modular_citadel/sound/vox/radioactive.ogg differ
diff --git a/modular_citadel/sound/vox/rads.ogg b/modular_citadel/sound/vox/rads.ogg
new file mode 100644
index 0000000000..e42722dd62
Binary files /dev/null and b/modular_citadel/sound/vox/rads.ogg differ
diff --git a/modular_citadel/sound/vox/rapid.ogg b/modular_citadel/sound/vox/rapid.ogg
new file mode 100644
index 0000000000..c803204bc8
Binary files /dev/null and b/modular_citadel/sound/vox/rapid.ogg differ
diff --git a/modular_citadel/sound/vox/reach.ogg b/modular_citadel/sound/vox/reach.ogg
new file mode 100644
index 0000000000..ab1a02e9ee
Binary files /dev/null and b/modular_citadel/sound/vox/reach.ogg differ
diff --git a/modular_citadel/sound/vox/reached.ogg b/modular_citadel/sound/vox/reached.ogg
new file mode 100644
index 0000000000..eddba60eed
Binary files /dev/null and b/modular_citadel/sound/vox/reached.ogg differ
diff --git a/modular_citadel/sound/vox/reactor.ogg b/modular_citadel/sound/vox/reactor.ogg
new file mode 100644
index 0000000000..75ea481a37
Binary files /dev/null and b/modular_citadel/sound/vox/reactor.ogg differ
diff --git a/modular_citadel/sound/vox/red.ogg b/modular_citadel/sound/vox/red.ogg
new file mode 100644
index 0000000000..97f2513772
Binary files /dev/null and b/modular_citadel/sound/vox/red.ogg differ
diff --git a/modular_citadel/sound/vox/relay.ogg b/modular_citadel/sound/vox/relay.ogg
new file mode 100644
index 0000000000..edc904c3f4
Binary files /dev/null and b/modular_citadel/sound/vox/relay.ogg differ
diff --git a/modular_citadel/sound/vox/released.ogg b/modular_citadel/sound/vox/released.ogg
new file mode 100644
index 0000000000..b86a39af72
Binary files /dev/null and b/modular_citadel/sound/vox/released.ogg differ
diff --git a/modular_citadel/sound/vox/remaining.ogg b/modular_citadel/sound/vox/remaining.ogg
new file mode 100644
index 0000000000..3ca55d3373
Binary files /dev/null and b/modular_citadel/sound/vox/remaining.ogg differ
diff --git a/modular_citadel/sound/vox/renegade.ogg b/modular_citadel/sound/vox/renegade.ogg
new file mode 100644
index 0000000000..6a4a3f3d50
Binary files /dev/null and b/modular_citadel/sound/vox/renegade.ogg differ
diff --git a/modular_citadel/sound/vox/repair.ogg b/modular_citadel/sound/vox/repair.ogg
new file mode 100644
index 0000000000..9435fe2ade
Binary files /dev/null and b/modular_citadel/sound/vox/repair.ogg differ
diff --git a/modular_citadel/sound/vox/report.ogg b/modular_citadel/sound/vox/report.ogg
new file mode 100644
index 0000000000..873ad6cbfe
Binary files /dev/null and b/modular_citadel/sound/vox/report.ogg differ
diff --git a/modular_citadel/sound/vox/reports.ogg b/modular_citadel/sound/vox/reports.ogg
new file mode 100644
index 0000000000..2fbf3151d0
Binary files /dev/null and b/modular_citadel/sound/vox/reports.ogg differ
diff --git a/modular_citadel/sound/vox/required.ogg b/modular_citadel/sound/vox/required.ogg
new file mode 100644
index 0000000000..902071124c
Binary files /dev/null and b/modular_citadel/sound/vox/required.ogg differ
diff --git a/modular_citadel/sound/vox/research.ogg b/modular_citadel/sound/vox/research.ogg
new file mode 100644
index 0000000000..c75b2ad2d0
Binary files /dev/null and b/modular_citadel/sound/vox/research.ogg differ
diff --git a/modular_citadel/sound/vox/reset.ogg b/modular_citadel/sound/vox/reset.ogg
new file mode 100644
index 0000000000..9864b79a54
Binary files /dev/null and b/modular_citadel/sound/vox/reset.ogg differ
diff --git a/modular_citadel/sound/vox/resevoir.ogg b/modular_citadel/sound/vox/resevoir.ogg
new file mode 100644
index 0000000000..30364c6400
Binary files /dev/null and b/modular_citadel/sound/vox/resevoir.ogg differ
diff --git a/modular_citadel/sound/vox/resistance.ogg b/modular_citadel/sound/vox/resistance.ogg
new file mode 100644
index 0000000000..dfbe6c512d
Binary files /dev/null and b/modular_citadel/sound/vox/resistance.ogg differ
diff --git a/modular_citadel/sound/vox/returned.ogg b/modular_citadel/sound/vox/returned.ogg
new file mode 100644
index 0000000000..0119402e24
Binary files /dev/null and b/modular_citadel/sound/vox/returned.ogg differ
diff --git a/modular_citadel/sound/vox/right.ogg b/modular_citadel/sound/vox/right.ogg
new file mode 100644
index 0000000000..b46b8cb135
Binary files /dev/null and b/modular_citadel/sound/vox/right.ogg differ
diff --git a/modular_citadel/sound/vox/rocket.ogg b/modular_citadel/sound/vox/rocket.ogg
new file mode 100644
index 0000000000..bfb2d3b0ed
Binary files /dev/null and b/modular_citadel/sound/vox/rocket.ogg differ
diff --git a/modular_citadel/sound/vox/roger.ogg b/modular_citadel/sound/vox/roger.ogg
new file mode 100644
index 0000000000..b249613c56
Binary files /dev/null and b/modular_citadel/sound/vox/roger.ogg differ
diff --git a/modular_citadel/sound/vox/romeo.ogg b/modular_citadel/sound/vox/romeo.ogg
new file mode 100644
index 0000000000..4c0b2356e3
Binary files /dev/null and b/modular_citadel/sound/vox/romeo.ogg differ
diff --git a/modular_citadel/sound/vox/room.ogg b/modular_citadel/sound/vox/room.ogg
new file mode 100644
index 0000000000..5151e39d46
Binary files /dev/null and b/modular_citadel/sound/vox/room.ogg differ
diff --git a/modular_citadel/sound/vox/round.ogg b/modular_citadel/sound/vox/round.ogg
new file mode 100644
index 0000000000..685f42d223
Binary files /dev/null and b/modular_citadel/sound/vox/round.ogg differ
diff --git a/modular_citadel/sound/vox/run.ogg b/modular_citadel/sound/vox/run.ogg
new file mode 100644
index 0000000000..9d6012cf3b
Binary files /dev/null and b/modular_citadel/sound/vox/run.ogg differ
diff --git a/modular_citadel/sound/vox/safe.ogg b/modular_citadel/sound/vox/safe.ogg
new file mode 100644
index 0000000000..d7a16d66b4
Binary files /dev/null and b/modular_citadel/sound/vox/safe.ogg differ
diff --git a/modular_citadel/sound/vox/safety.ogg b/modular_citadel/sound/vox/safety.ogg
new file mode 100644
index 0000000000..68ad663df4
Binary files /dev/null and b/modular_citadel/sound/vox/safety.ogg differ
diff --git a/modular_citadel/sound/vox/sargeant.ogg b/modular_citadel/sound/vox/sargeant.ogg
new file mode 100644
index 0000000000..1ab4150c9c
Binary files /dev/null and b/modular_citadel/sound/vox/sargeant.ogg differ
diff --git a/modular_citadel/sound/vox/satellite.ogg b/modular_citadel/sound/vox/satellite.ogg
new file mode 100644
index 0000000000..c07895ab77
Binary files /dev/null and b/modular_citadel/sound/vox/satellite.ogg differ
diff --git a/modular_citadel/sound/vox/save.ogg b/modular_citadel/sound/vox/save.ogg
new file mode 100644
index 0000000000..8a53055d62
Binary files /dev/null and b/modular_citadel/sound/vox/save.ogg differ
diff --git a/modular_citadel/sound/vox/science.ogg b/modular_citadel/sound/vox/science.ogg
new file mode 100644
index 0000000000..6e2e748cbb
Binary files /dev/null and b/modular_citadel/sound/vox/science.ogg differ
diff --git a/modular_citadel/sound/vox/scores.ogg b/modular_citadel/sound/vox/scores.ogg
new file mode 100644
index 0000000000..3328f38dc7
Binary files /dev/null and b/modular_citadel/sound/vox/scores.ogg differ
diff --git a/modular_citadel/sound/vox/scream.ogg b/modular_citadel/sound/vox/scream.ogg
new file mode 100644
index 0000000000..c795ca95ba
Binary files /dev/null and b/modular_citadel/sound/vox/scream.ogg differ
diff --git a/modular_citadel/sound/vox/screen.ogg b/modular_citadel/sound/vox/screen.ogg
new file mode 100644
index 0000000000..514cc3f71a
Binary files /dev/null and b/modular_citadel/sound/vox/screen.ogg differ
diff --git a/modular_citadel/sound/vox/search.ogg b/modular_citadel/sound/vox/search.ogg
new file mode 100644
index 0000000000..638710b721
Binary files /dev/null and b/modular_citadel/sound/vox/search.ogg differ
diff --git a/modular_citadel/sound/vox/second.ogg b/modular_citadel/sound/vox/second.ogg
new file mode 100644
index 0000000000..fc4dc806ca
Binary files /dev/null and b/modular_citadel/sound/vox/second.ogg differ
diff --git a/modular_citadel/sound/vox/secondary.ogg b/modular_citadel/sound/vox/secondary.ogg
new file mode 100644
index 0000000000..3cffa3dbe9
Binary files /dev/null and b/modular_citadel/sound/vox/secondary.ogg differ
diff --git a/modular_citadel/sound/vox/seconds.ogg b/modular_citadel/sound/vox/seconds.ogg
new file mode 100644
index 0000000000..98d08be46c
Binary files /dev/null and b/modular_citadel/sound/vox/seconds.ogg differ
diff --git a/modular_citadel/sound/vox/sector.ogg b/modular_citadel/sound/vox/sector.ogg
new file mode 100644
index 0000000000..ae2d733b87
Binary files /dev/null and b/modular_citadel/sound/vox/sector.ogg differ
diff --git a/modular_citadel/sound/vox/secure.ogg b/modular_citadel/sound/vox/secure.ogg
new file mode 100644
index 0000000000..c860e376dd
Binary files /dev/null and b/modular_citadel/sound/vox/secure.ogg differ
diff --git a/modular_citadel/sound/vox/secured.ogg b/modular_citadel/sound/vox/secured.ogg
new file mode 100644
index 0000000000..3134b679fa
Binary files /dev/null and b/modular_citadel/sound/vox/secured.ogg differ
diff --git a/modular_citadel/sound/vox/security.ogg b/modular_citadel/sound/vox/security.ogg
new file mode 100644
index 0000000000..40f6bc61af
Binary files /dev/null and b/modular_citadel/sound/vox/security.ogg differ
diff --git a/modular_citadel/sound/vox/select.ogg b/modular_citadel/sound/vox/select.ogg
new file mode 100644
index 0000000000..ef04570d32
Binary files /dev/null and b/modular_citadel/sound/vox/select.ogg differ
diff --git a/modular_citadel/sound/vox/selected.ogg b/modular_citadel/sound/vox/selected.ogg
new file mode 100644
index 0000000000..23891f5189
Binary files /dev/null and b/modular_citadel/sound/vox/selected.ogg differ
diff --git a/modular_citadel/sound/vox/service.ogg b/modular_citadel/sound/vox/service.ogg
new file mode 100644
index 0000000000..90294bd34b
Binary files /dev/null and b/modular_citadel/sound/vox/service.ogg differ
diff --git a/modular_citadel/sound/vox/seven.ogg b/modular_citadel/sound/vox/seven.ogg
new file mode 100644
index 0000000000..a0b2de4119
Binary files /dev/null and b/modular_citadel/sound/vox/seven.ogg differ
diff --git a/modular_citadel/sound/vox/seventeen.ogg b/modular_citadel/sound/vox/seventeen.ogg
new file mode 100644
index 0000000000..f23a0b0572
Binary files /dev/null and b/modular_citadel/sound/vox/seventeen.ogg differ
diff --git a/modular_citadel/sound/vox/seventy.ogg b/modular_citadel/sound/vox/seventy.ogg
new file mode 100644
index 0000000000..54f6cd6aef
Binary files /dev/null and b/modular_citadel/sound/vox/seventy.ogg differ
diff --git a/modular_citadel/sound/vox/severe.ogg b/modular_citadel/sound/vox/severe.ogg
new file mode 100644
index 0000000000..9a0cf3784e
Binary files /dev/null and b/modular_citadel/sound/vox/severe.ogg differ
diff --git a/modular_citadel/sound/vox/sewage.ogg b/modular_citadel/sound/vox/sewage.ogg
new file mode 100644
index 0000000000..44fb0d7fd5
Binary files /dev/null and b/modular_citadel/sound/vox/sewage.ogg differ
diff --git a/modular_citadel/sound/vox/sewer.ogg b/modular_citadel/sound/vox/sewer.ogg
new file mode 100644
index 0000000000..10516d86de
Binary files /dev/null and b/modular_citadel/sound/vox/sewer.ogg differ
diff --git a/modular_citadel/sound/vox/shield.ogg b/modular_citadel/sound/vox/shield.ogg
new file mode 100644
index 0000000000..c190383867
Binary files /dev/null and b/modular_citadel/sound/vox/shield.ogg differ
diff --git a/modular_citadel/sound/vox/shipment.ogg b/modular_citadel/sound/vox/shipment.ogg
new file mode 100644
index 0000000000..9677d3db98
Binary files /dev/null and b/modular_citadel/sound/vox/shipment.ogg differ
diff --git a/modular_citadel/sound/vox/shock.ogg b/modular_citadel/sound/vox/shock.ogg
new file mode 100644
index 0000000000..1c44bcca33
Binary files /dev/null and b/modular_citadel/sound/vox/shock.ogg differ
diff --git a/modular_citadel/sound/vox/shoot.ogg b/modular_citadel/sound/vox/shoot.ogg
new file mode 100644
index 0000000000..978a4aaa35
Binary files /dev/null and b/modular_citadel/sound/vox/shoot.ogg differ
diff --git a/modular_citadel/sound/vox/shower.ogg b/modular_citadel/sound/vox/shower.ogg
new file mode 100644
index 0000000000..d131987f13
Binary files /dev/null and b/modular_citadel/sound/vox/shower.ogg differ
diff --git a/modular_citadel/sound/vox/shut.ogg b/modular_citadel/sound/vox/shut.ogg
new file mode 100644
index 0000000000..ceba400b93
Binary files /dev/null and b/modular_citadel/sound/vox/shut.ogg differ
diff --git a/modular_citadel/sound/vox/side.ogg b/modular_citadel/sound/vox/side.ogg
new file mode 100644
index 0000000000..dbc3a7c9ff
Binary files /dev/null and b/modular_citadel/sound/vox/side.ogg differ
diff --git a/modular_citadel/sound/vox/sierra.ogg b/modular_citadel/sound/vox/sierra.ogg
new file mode 100644
index 0000000000..5c33745f28
Binary files /dev/null and b/modular_citadel/sound/vox/sierra.ogg differ
diff --git a/modular_citadel/sound/vox/sight.ogg b/modular_citadel/sound/vox/sight.ogg
new file mode 100644
index 0000000000..027c356b8d
Binary files /dev/null and b/modular_citadel/sound/vox/sight.ogg differ
diff --git a/modular_citadel/sound/vox/silo.ogg b/modular_citadel/sound/vox/silo.ogg
new file mode 100644
index 0000000000..3e0801f8ba
Binary files /dev/null and b/modular_citadel/sound/vox/silo.ogg differ
diff --git a/modular_citadel/sound/vox/six.ogg b/modular_citadel/sound/vox/six.ogg
new file mode 100644
index 0000000000..3544814963
Binary files /dev/null and b/modular_citadel/sound/vox/six.ogg differ
diff --git a/modular_citadel/sound/vox/sixteen.ogg b/modular_citadel/sound/vox/sixteen.ogg
new file mode 100644
index 0000000000..8c1159e147
Binary files /dev/null and b/modular_citadel/sound/vox/sixteen.ogg differ
diff --git a/modular_citadel/sound/vox/sixty.ogg b/modular_citadel/sound/vox/sixty.ogg
new file mode 100644
index 0000000000..bdf47b25b8
Binary files /dev/null and b/modular_citadel/sound/vox/sixty.ogg differ
diff --git a/modular_citadel/sound/vox/slime.ogg b/modular_citadel/sound/vox/slime.ogg
new file mode 100644
index 0000000000..0a6c1254e8
Binary files /dev/null and b/modular_citadel/sound/vox/slime.ogg differ
diff --git a/modular_citadel/sound/vox/slow.ogg b/modular_citadel/sound/vox/slow.ogg
new file mode 100644
index 0000000000..7639f9c7c2
Binary files /dev/null and b/modular_citadel/sound/vox/slow.ogg differ
diff --git a/modular_citadel/sound/vox/soldier.ogg b/modular_citadel/sound/vox/soldier.ogg
new file mode 100644
index 0000000000..3eb10ff590
Binary files /dev/null and b/modular_citadel/sound/vox/soldier.ogg differ
diff --git a/modular_citadel/sound/vox/some.ogg b/modular_citadel/sound/vox/some.ogg
new file mode 100644
index 0000000000..bcb5bbbbd3
Binary files /dev/null and b/modular_citadel/sound/vox/some.ogg differ
diff --git a/modular_citadel/sound/vox/someone.ogg b/modular_citadel/sound/vox/someone.ogg
new file mode 100644
index 0000000000..420a58e925
Binary files /dev/null and b/modular_citadel/sound/vox/someone.ogg differ
diff --git a/modular_citadel/sound/vox/something.ogg b/modular_citadel/sound/vox/something.ogg
new file mode 100644
index 0000000000..e3d26ede65
Binary files /dev/null and b/modular_citadel/sound/vox/something.ogg differ
diff --git a/modular_citadel/sound/vox/son.ogg b/modular_citadel/sound/vox/son.ogg
new file mode 100644
index 0000000000..843536c84a
Binary files /dev/null and b/modular_citadel/sound/vox/son.ogg differ
diff --git a/modular_citadel/sound/vox/sorry.ogg b/modular_citadel/sound/vox/sorry.ogg
new file mode 100644
index 0000000000..c125765112
Binary files /dev/null and b/modular_citadel/sound/vox/sorry.ogg differ
diff --git a/modular_citadel/sound/vox/south.ogg b/modular_citadel/sound/vox/south.ogg
new file mode 100644
index 0000000000..d32f048772
Binary files /dev/null and b/modular_citadel/sound/vox/south.ogg differ
diff --git a/modular_citadel/sound/vox/squad.ogg b/modular_citadel/sound/vox/squad.ogg
new file mode 100644
index 0000000000..582f6459af
Binary files /dev/null and b/modular_citadel/sound/vox/squad.ogg differ
diff --git a/modular_citadel/sound/vox/square.ogg b/modular_citadel/sound/vox/square.ogg
new file mode 100644
index 0000000000..a9beddd3c9
Binary files /dev/null and b/modular_citadel/sound/vox/square.ogg differ
diff --git a/modular_citadel/sound/vox/stairway.ogg b/modular_citadel/sound/vox/stairway.ogg
new file mode 100644
index 0000000000..31b0042edd
Binary files /dev/null and b/modular_citadel/sound/vox/stairway.ogg differ
diff --git a/modular_citadel/sound/vox/status.ogg b/modular_citadel/sound/vox/status.ogg
new file mode 100644
index 0000000000..611088f19a
Binary files /dev/null and b/modular_citadel/sound/vox/status.ogg differ
diff --git a/modular_citadel/sound/vox/sterile.ogg b/modular_citadel/sound/vox/sterile.ogg
new file mode 100644
index 0000000000..4e4d9fad22
Binary files /dev/null and b/modular_citadel/sound/vox/sterile.ogg differ
diff --git a/modular_citadel/sound/vox/sterilization.ogg b/modular_citadel/sound/vox/sterilization.ogg
new file mode 100644
index 0000000000..fec2104d0b
Binary files /dev/null and b/modular_citadel/sound/vox/sterilization.ogg differ
diff --git a/modular_citadel/sound/vox/stolen.ogg b/modular_citadel/sound/vox/stolen.ogg
new file mode 100644
index 0000000000..7e8c624bdf
Binary files /dev/null and b/modular_citadel/sound/vox/stolen.ogg differ
diff --git a/modular_citadel/sound/vox/storage.ogg b/modular_citadel/sound/vox/storage.ogg
new file mode 100644
index 0000000000..e47ef4e09f
Binary files /dev/null and b/modular_citadel/sound/vox/storage.ogg differ
diff --git a/modular_citadel/sound/vox/sub.ogg b/modular_citadel/sound/vox/sub.ogg
new file mode 100644
index 0000000000..ca9a621ad1
Binary files /dev/null and b/modular_citadel/sound/vox/sub.ogg differ
diff --git a/modular_citadel/sound/vox/subsurface.ogg b/modular_citadel/sound/vox/subsurface.ogg
new file mode 100644
index 0000000000..08c98d50f5
Binary files /dev/null and b/modular_citadel/sound/vox/subsurface.ogg differ
diff --git a/modular_citadel/sound/vox/sudden.ogg b/modular_citadel/sound/vox/sudden.ogg
new file mode 100644
index 0000000000..7140e0f874
Binary files /dev/null and b/modular_citadel/sound/vox/sudden.ogg differ
diff --git a/modular_citadel/sound/vox/suit.ogg b/modular_citadel/sound/vox/suit.ogg
new file mode 100644
index 0000000000..c636d5f278
Binary files /dev/null and b/modular_citadel/sound/vox/suit.ogg differ
diff --git a/modular_citadel/sound/vox/superconducting.ogg b/modular_citadel/sound/vox/superconducting.ogg
new file mode 100644
index 0000000000..244bda01c6
Binary files /dev/null and b/modular_citadel/sound/vox/superconducting.ogg differ
diff --git a/modular_citadel/sound/vox/supercooled.ogg b/modular_citadel/sound/vox/supercooled.ogg
new file mode 100644
index 0000000000..c758cdf7f8
Binary files /dev/null and b/modular_citadel/sound/vox/supercooled.ogg differ
diff --git a/modular_citadel/sound/vox/supply.ogg b/modular_citadel/sound/vox/supply.ogg
new file mode 100644
index 0000000000..13341124b3
Binary files /dev/null and b/modular_citadel/sound/vox/supply.ogg differ
diff --git a/modular_citadel/sound/vox/surface.ogg b/modular_citadel/sound/vox/surface.ogg
new file mode 100644
index 0000000000..f498cfd6bd
Binary files /dev/null and b/modular_citadel/sound/vox/surface.ogg differ
diff --git a/modular_citadel/sound/vox/surrender.ogg b/modular_citadel/sound/vox/surrender.ogg
new file mode 100644
index 0000000000..ba1864d38f
Binary files /dev/null and b/modular_citadel/sound/vox/surrender.ogg differ
diff --git a/modular_citadel/sound/vox/surround.ogg b/modular_citadel/sound/vox/surround.ogg
new file mode 100644
index 0000000000..7a3ab9a69a
Binary files /dev/null and b/modular_citadel/sound/vox/surround.ogg differ
diff --git a/modular_citadel/sound/vox/surrounded.ogg b/modular_citadel/sound/vox/surrounded.ogg
new file mode 100644
index 0000000000..464ae912f4
Binary files /dev/null and b/modular_citadel/sound/vox/surrounded.ogg differ
diff --git a/modular_citadel/sound/vox/switch.ogg b/modular_citadel/sound/vox/switch.ogg
new file mode 100644
index 0000000000..d007893d35
Binary files /dev/null and b/modular_citadel/sound/vox/switch.ogg differ
diff --git a/modular_citadel/sound/vox/system.ogg b/modular_citadel/sound/vox/system.ogg
new file mode 100644
index 0000000000..fb459b927f
Binary files /dev/null and b/modular_citadel/sound/vox/system.ogg differ
diff --git a/modular_citadel/sound/vox/systems.ogg b/modular_citadel/sound/vox/systems.ogg
new file mode 100644
index 0000000000..37072c97f4
Binary files /dev/null and b/modular_citadel/sound/vox/systems.ogg differ
diff --git a/modular_citadel/sound/vox/tactical.ogg b/modular_citadel/sound/vox/tactical.ogg
new file mode 100644
index 0000000000..ae294b916b
Binary files /dev/null and b/modular_citadel/sound/vox/tactical.ogg differ
diff --git a/modular_citadel/sound/vox/take.ogg b/modular_citadel/sound/vox/take.ogg
new file mode 100644
index 0000000000..83409da4a3
Binary files /dev/null and b/modular_citadel/sound/vox/take.ogg differ
diff --git a/modular_citadel/sound/vox/talk.ogg b/modular_citadel/sound/vox/talk.ogg
new file mode 100644
index 0000000000..043385c389
Binary files /dev/null and b/modular_citadel/sound/vox/talk.ogg differ
diff --git a/modular_citadel/sound/vox/tango.ogg b/modular_citadel/sound/vox/tango.ogg
new file mode 100644
index 0000000000..f852cb0df3
Binary files /dev/null and b/modular_citadel/sound/vox/tango.ogg differ
diff --git a/modular_citadel/sound/vox/tank.ogg b/modular_citadel/sound/vox/tank.ogg
new file mode 100644
index 0000000000..df09c12f98
Binary files /dev/null and b/modular_citadel/sound/vox/tank.ogg differ
diff --git a/modular_citadel/sound/vox/target.ogg b/modular_citadel/sound/vox/target.ogg
new file mode 100644
index 0000000000..0601cac45b
Binary files /dev/null and b/modular_citadel/sound/vox/target.ogg differ
diff --git a/modular_citadel/sound/vox/team.ogg b/modular_citadel/sound/vox/team.ogg
new file mode 100644
index 0000000000..4fc1a7f198
Binary files /dev/null and b/modular_citadel/sound/vox/team.ogg differ
diff --git a/modular_citadel/sound/vox/temperature.ogg b/modular_citadel/sound/vox/temperature.ogg
new file mode 100644
index 0000000000..d7b92a0cdc
Binary files /dev/null and b/modular_citadel/sound/vox/temperature.ogg differ
diff --git a/modular_citadel/sound/vox/temporal.ogg b/modular_citadel/sound/vox/temporal.ogg
new file mode 100644
index 0000000000..c2f9aedb48
Binary files /dev/null and b/modular_citadel/sound/vox/temporal.ogg differ
diff --git a/modular_citadel/sound/vox/ten.ogg b/modular_citadel/sound/vox/ten.ogg
new file mode 100644
index 0000000000..704d38c1ae
Binary files /dev/null and b/modular_citadel/sound/vox/ten.ogg differ
diff --git a/modular_citadel/sound/vox/terminal.ogg b/modular_citadel/sound/vox/terminal.ogg
new file mode 100644
index 0000000000..f756e03064
Binary files /dev/null and b/modular_citadel/sound/vox/terminal.ogg differ
diff --git a/modular_citadel/sound/vox/terminated.ogg b/modular_citadel/sound/vox/terminated.ogg
new file mode 100644
index 0000000000..52d35451b0
Binary files /dev/null and b/modular_citadel/sound/vox/terminated.ogg differ
diff --git a/modular_citadel/sound/vox/termination.ogg b/modular_citadel/sound/vox/termination.ogg
new file mode 100644
index 0000000000..aec4df5b01
Binary files /dev/null and b/modular_citadel/sound/vox/termination.ogg differ
diff --git a/modular_citadel/sound/vox/test.ogg b/modular_citadel/sound/vox/test.ogg
new file mode 100644
index 0000000000..df3ab175c6
Binary files /dev/null and b/modular_citadel/sound/vox/test.ogg differ
diff --git a/modular_citadel/sound/vox/that.ogg b/modular_citadel/sound/vox/that.ogg
new file mode 100644
index 0000000000..442dc3d264
Binary files /dev/null and b/modular_citadel/sound/vox/that.ogg differ
diff --git a/modular_citadel/sound/vox/the.ogg b/modular_citadel/sound/vox/the.ogg
new file mode 100644
index 0000000000..71caecef1f
Binary files /dev/null and b/modular_citadel/sound/vox/the.ogg differ
diff --git a/modular_citadel/sound/vox/then.ogg b/modular_citadel/sound/vox/then.ogg
new file mode 100644
index 0000000000..916d9276af
Binary files /dev/null and b/modular_citadel/sound/vox/then.ogg differ
diff --git a/modular_citadel/sound/vox/there.ogg b/modular_citadel/sound/vox/there.ogg
new file mode 100644
index 0000000000..c3536a2f72
Binary files /dev/null and b/modular_citadel/sound/vox/there.ogg differ
diff --git a/modular_citadel/sound/vox/third.ogg b/modular_citadel/sound/vox/third.ogg
new file mode 100644
index 0000000000..ba1125fe5b
Binary files /dev/null and b/modular_citadel/sound/vox/third.ogg differ
diff --git a/modular_citadel/sound/vox/thirteen.ogg b/modular_citadel/sound/vox/thirteen.ogg
new file mode 100644
index 0000000000..b3585a2d3b
Binary files /dev/null and b/modular_citadel/sound/vox/thirteen.ogg differ
diff --git a/modular_citadel/sound/vox/thirty.ogg b/modular_citadel/sound/vox/thirty.ogg
new file mode 100644
index 0000000000..cac0402265
Binary files /dev/null and b/modular_citadel/sound/vox/thirty.ogg differ
diff --git a/modular_citadel/sound/vox/this.ogg b/modular_citadel/sound/vox/this.ogg
new file mode 100644
index 0000000000..e7acd16108
Binary files /dev/null and b/modular_citadel/sound/vox/this.ogg differ
diff --git a/modular_citadel/sound/vox/those.ogg b/modular_citadel/sound/vox/those.ogg
new file mode 100644
index 0000000000..149a806b23
Binary files /dev/null and b/modular_citadel/sound/vox/those.ogg differ
diff --git a/modular_citadel/sound/vox/thousand.ogg b/modular_citadel/sound/vox/thousand.ogg
new file mode 100644
index 0000000000..fd5d46bf9b
Binary files /dev/null and b/modular_citadel/sound/vox/thousand.ogg differ
diff --git a/modular_citadel/sound/vox/threat.ogg b/modular_citadel/sound/vox/threat.ogg
new file mode 100644
index 0000000000..d4aa8d1d13
Binary files /dev/null and b/modular_citadel/sound/vox/threat.ogg differ
diff --git a/modular_citadel/sound/vox/three.ogg b/modular_citadel/sound/vox/three.ogg
new file mode 100644
index 0000000000..72bab5ff6b
Binary files /dev/null and b/modular_citadel/sound/vox/three.ogg differ
diff --git a/modular_citadel/sound/vox/through.ogg b/modular_citadel/sound/vox/through.ogg
new file mode 100644
index 0000000000..9f527f38c7
Binary files /dev/null and b/modular_citadel/sound/vox/through.ogg differ
diff --git a/modular_citadel/sound/vox/time.ogg b/modular_citadel/sound/vox/time.ogg
new file mode 100644
index 0000000000..ff32baa603
Binary files /dev/null and b/modular_citadel/sound/vox/time.ogg differ
diff --git a/modular_citadel/sound/vox/to.ogg b/modular_citadel/sound/vox/to.ogg
new file mode 100644
index 0000000000..9e7f76c84d
Binary files /dev/null and b/modular_citadel/sound/vox/to.ogg differ
diff --git a/modular_citadel/sound/vox/top.ogg b/modular_citadel/sound/vox/top.ogg
new file mode 100644
index 0000000000..bc6b0bce22
Binary files /dev/null and b/modular_citadel/sound/vox/top.ogg differ
diff --git a/modular_citadel/sound/vox/topside.ogg b/modular_citadel/sound/vox/topside.ogg
new file mode 100644
index 0000000000..34dfaf4405
Binary files /dev/null and b/modular_citadel/sound/vox/topside.ogg differ
diff --git a/modular_citadel/sound/vox/touch.ogg b/modular_citadel/sound/vox/touch.ogg
new file mode 100644
index 0000000000..fe34a1b083
Binary files /dev/null and b/modular_citadel/sound/vox/touch.ogg differ
diff --git a/modular_citadel/sound/vox/towards.ogg b/modular_citadel/sound/vox/towards.ogg
new file mode 100644
index 0000000000..edb2bf04d1
Binary files /dev/null and b/modular_citadel/sound/vox/towards.ogg differ
diff --git a/modular_citadel/sound/vox/track.ogg b/modular_citadel/sound/vox/track.ogg
new file mode 100644
index 0000000000..447d1f6982
Binary files /dev/null and b/modular_citadel/sound/vox/track.ogg differ
diff --git a/modular_citadel/sound/vox/train.ogg b/modular_citadel/sound/vox/train.ogg
new file mode 100644
index 0000000000..e4b78fe638
Binary files /dev/null and b/modular_citadel/sound/vox/train.ogg differ
diff --git a/modular_citadel/sound/vox/transportation.ogg b/modular_citadel/sound/vox/transportation.ogg
new file mode 100644
index 0000000000..78d2122ccb
Binary files /dev/null and b/modular_citadel/sound/vox/transportation.ogg differ
diff --git a/modular_citadel/sound/vox/truck.ogg b/modular_citadel/sound/vox/truck.ogg
new file mode 100644
index 0000000000..5822f17d83
Binary files /dev/null and b/modular_citadel/sound/vox/truck.ogg differ
diff --git a/modular_citadel/sound/vox/tunnel.ogg b/modular_citadel/sound/vox/tunnel.ogg
new file mode 100644
index 0000000000..3264b41496
Binary files /dev/null and b/modular_citadel/sound/vox/tunnel.ogg differ
diff --git a/modular_citadel/sound/vox/turn.ogg b/modular_citadel/sound/vox/turn.ogg
new file mode 100644
index 0000000000..5a8a32cbd4
Binary files /dev/null and b/modular_citadel/sound/vox/turn.ogg differ
diff --git a/modular_citadel/sound/vox/turret.ogg b/modular_citadel/sound/vox/turret.ogg
new file mode 100644
index 0000000000..96d5bf6da9
Binary files /dev/null and b/modular_citadel/sound/vox/turret.ogg differ
diff --git a/modular_citadel/sound/vox/twelve.ogg b/modular_citadel/sound/vox/twelve.ogg
new file mode 100644
index 0000000000..2e45cf797d
Binary files /dev/null and b/modular_citadel/sound/vox/twelve.ogg differ
diff --git a/modular_citadel/sound/vox/twenty.ogg b/modular_citadel/sound/vox/twenty.ogg
new file mode 100644
index 0000000000..c54922a384
Binary files /dev/null and b/modular_citadel/sound/vox/twenty.ogg differ
diff --git a/modular_citadel/sound/vox/two.ogg b/modular_citadel/sound/vox/two.ogg
new file mode 100644
index 0000000000..e1abe93d97
Binary files /dev/null and b/modular_citadel/sound/vox/two.ogg differ
diff --git a/modular_citadel/sound/vox/unauthorized.ogg b/modular_citadel/sound/vox/unauthorized.ogg
new file mode 100644
index 0000000000..2238e09696
Binary files /dev/null and b/modular_citadel/sound/vox/unauthorized.ogg differ
diff --git a/modular_citadel/sound/vox/under.ogg b/modular_citadel/sound/vox/under.ogg
new file mode 100644
index 0000000000..8445ce571a
Binary files /dev/null and b/modular_citadel/sound/vox/under.ogg differ
diff --git a/modular_citadel/sound/vox/uniform.ogg b/modular_citadel/sound/vox/uniform.ogg
new file mode 100644
index 0000000000..6d3029ed7f
Binary files /dev/null and b/modular_citadel/sound/vox/uniform.ogg differ
diff --git a/modular_citadel/sound/vox/unlocked.ogg b/modular_citadel/sound/vox/unlocked.ogg
new file mode 100644
index 0000000000..1f66ba7003
Binary files /dev/null and b/modular_citadel/sound/vox/unlocked.ogg differ
diff --git a/modular_citadel/sound/vox/until.ogg b/modular_citadel/sound/vox/until.ogg
new file mode 100644
index 0000000000..00e1417aaa
Binary files /dev/null and b/modular_citadel/sound/vox/until.ogg differ
diff --git a/modular_citadel/sound/vox/up.ogg b/modular_citadel/sound/vox/up.ogg
new file mode 100644
index 0000000000..31d9dd13cc
Binary files /dev/null and b/modular_citadel/sound/vox/up.ogg differ
diff --git a/modular_citadel/sound/vox/upper.ogg b/modular_citadel/sound/vox/upper.ogg
new file mode 100644
index 0000000000..c26d7450ed
Binary files /dev/null and b/modular_citadel/sound/vox/upper.ogg differ
diff --git a/modular_citadel/sound/vox/uranium.ogg b/modular_citadel/sound/vox/uranium.ogg
new file mode 100644
index 0000000000..8eeed7b34e
Binary files /dev/null and b/modular_citadel/sound/vox/uranium.ogg differ
diff --git a/modular_citadel/sound/vox/us.ogg b/modular_citadel/sound/vox/us.ogg
new file mode 100644
index 0000000000..1d0cc90667
Binary files /dev/null and b/modular_citadel/sound/vox/us.ogg differ
diff --git a/modular_citadel/sound/vox/usa.ogg b/modular_citadel/sound/vox/usa.ogg
new file mode 100644
index 0000000000..2a057059f7
Binary files /dev/null and b/modular_citadel/sound/vox/usa.ogg differ
diff --git a/modular_citadel/sound/vox/use.ogg b/modular_citadel/sound/vox/use.ogg
new file mode 100644
index 0000000000..6fdb0d2f51
Binary files /dev/null and b/modular_citadel/sound/vox/use.ogg differ
diff --git a/modular_citadel/sound/vox/used.ogg b/modular_citadel/sound/vox/used.ogg
new file mode 100644
index 0000000000..126ab4cce3
Binary files /dev/null and b/modular_citadel/sound/vox/used.ogg differ
diff --git a/modular_citadel/sound/vox/user.ogg b/modular_citadel/sound/vox/user.ogg
new file mode 100644
index 0000000000..fa99d50a09
Binary files /dev/null and b/modular_citadel/sound/vox/user.ogg differ
diff --git a/modular_citadel/sound/vox/vacate.ogg b/modular_citadel/sound/vox/vacate.ogg
new file mode 100644
index 0000000000..1eadec9832
Binary files /dev/null and b/modular_citadel/sound/vox/vacate.ogg differ
diff --git a/modular_citadel/sound/vox/valid.ogg b/modular_citadel/sound/vox/valid.ogg
new file mode 100644
index 0000000000..5ec3b93b3b
Binary files /dev/null and b/modular_citadel/sound/vox/valid.ogg differ
diff --git a/modular_citadel/sound/vox/vapor.ogg b/modular_citadel/sound/vox/vapor.ogg
new file mode 100644
index 0000000000..9ceb555e77
Binary files /dev/null and b/modular_citadel/sound/vox/vapor.ogg differ
diff --git a/modular_citadel/sound/vox/vent.ogg b/modular_citadel/sound/vox/vent.ogg
new file mode 100644
index 0000000000..47f37d441f
Binary files /dev/null and b/modular_citadel/sound/vox/vent.ogg differ
diff --git a/modular_citadel/sound/vox/ventillation.ogg b/modular_citadel/sound/vox/ventillation.ogg
new file mode 100644
index 0000000000..a8e9928e7c
Binary files /dev/null and b/modular_citadel/sound/vox/ventillation.ogg differ
diff --git a/modular_citadel/sound/vox/victor.ogg b/modular_citadel/sound/vox/victor.ogg
new file mode 100644
index 0000000000..686b6fd7cd
Binary files /dev/null and b/modular_citadel/sound/vox/victor.ogg differ
diff --git a/modular_citadel/sound/vox/violated.ogg b/modular_citadel/sound/vox/violated.ogg
new file mode 100644
index 0000000000..01ebe6a2de
Binary files /dev/null and b/modular_citadel/sound/vox/violated.ogg differ
diff --git a/modular_citadel/sound/vox/violation.ogg b/modular_citadel/sound/vox/violation.ogg
new file mode 100644
index 0000000000..2d9e1b6fbe
Binary files /dev/null and b/modular_citadel/sound/vox/violation.ogg differ
diff --git a/modular_citadel/sound/vox/voltage.ogg b/modular_citadel/sound/vox/voltage.ogg
new file mode 100644
index 0000000000..64417b2556
Binary files /dev/null and b/modular_citadel/sound/vox/voltage.ogg differ
diff --git a/modular_citadel/sound/vox/vox_login.ogg b/modular_citadel/sound/vox/vox_login.ogg
new file mode 100644
index 0000000000..5c406191a2
Binary files /dev/null and b/modular_citadel/sound/vox/vox_login.ogg differ
diff --git a/modular_citadel/sound/vox/walk.ogg b/modular_citadel/sound/vox/walk.ogg
new file mode 100644
index 0000000000..6d4cebd36c
Binary files /dev/null and b/modular_citadel/sound/vox/walk.ogg differ
diff --git a/modular_citadel/sound/vox/wall.ogg b/modular_citadel/sound/vox/wall.ogg
new file mode 100644
index 0000000000..8f34bb6fdd
Binary files /dev/null and b/modular_citadel/sound/vox/wall.ogg differ
diff --git a/modular_citadel/sound/vox/want.ogg b/modular_citadel/sound/vox/want.ogg
new file mode 100644
index 0000000000..b307dbfdc6
Binary files /dev/null and b/modular_citadel/sound/vox/want.ogg differ
diff --git a/modular_citadel/sound/vox/wanted.ogg b/modular_citadel/sound/vox/wanted.ogg
new file mode 100644
index 0000000000..a783e64ee2
Binary files /dev/null and b/modular_citadel/sound/vox/wanted.ogg differ
diff --git a/modular_citadel/sound/vox/warm.ogg b/modular_citadel/sound/vox/warm.ogg
new file mode 100644
index 0000000000..00fbe521b1
Binary files /dev/null and b/modular_citadel/sound/vox/warm.ogg differ
diff --git a/modular_citadel/sound/vox/warn.ogg b/modular_citadel/sound/vox/warn.ogg
new file mode 100644
index 0000000000..931ae208c6
Binary files /dev/null and b/modular_citadel/sound/vox/warn.ogg differ
diff --git a/modular_citadel/sound/vox/warning.ogg b/modular_citadel/sound/vox/warning.ogg
new file mode 100644
index 0000000000..e237c5e0ae
Binary files /dev/null and b/modular_citadel/sound/vox/warning.ogg differ
diff --git a/modular_citadel/sound/vox/waste.ogg b/modular_citadel/sound/vox/waste.ogg
new file mode 100644
index 0000000000..7152c80fc8
Binary files /dev/null and b/modular_citadel/sound/vox/waste.ogg differ
diff --git a/modular_citadel/sound/vox/water.ogg b/modular_citadel/sound/vox/water.ogg
new file mode 100644
index 0000000000..fdced84c63
Binary files /dev/null and b/modular_citadel/sound/vox/water.ogg differ
diff --git a/modular_citadel/sound/vox/we.ogg b/modular_citadel/sound/vox/we.ogg
new file mode 100644
index 0000000000..f31d0c34d3
Binary files /dev/null and b/modular_citadel/sound/vox/we.ogg differ
diff --git a/modular_citadel/sound/vox/weapon.ogg b/modular_citadel/sound/vox/weapon.ogg
new file mode 100644
index 0000000000..fcf4b8bf07
Binary files /dev/null and b/modular_citadel/sound/vox/weapon.ogg differ
diff --git a/modular_citadel/sound/vox/west.ogg b/modular_citadel/sound/vox/west.ogg
new file mode 100644
index 0000000000..35eb23ac27
Binary files /dev/null and b/modular_citadel/sound/vox/west.ogg differ
diff --git a/modular_citadel/sound/vox/whiskey.ogg b/modular_citadel/sound/vox/whiskey.ogg
new file mode 100644
index 0000000000..53102ef546
Binary files /dev/null and b/modular_citadel/sound/vox/whiskey.ogg differ
diff --git a/modular_citadel/sound/vox/white.ogg b/modular_citadel/sound/vox/white.ogg
new file mode 100644
index 0000000000..b9c2c6e8fb
Binary files /dev/null and b/modular_citadel/sound/vox/white.ogg differ
diff --git a/modular_citadel/sound/vox/wilco.ogg b/modular_citadel/sound/vox/wilco.ogg
new file mode 100644
index 0000000000..08f1b38f60
Binary files /dev/null and b/modular_citadel/sound/vox/wilco.ogg differ
diff --git a/modular_citadel/sound/vox/will.ogg b/modular_citadel/sound/vox/will.ogg
new file mode 100644
index 0000000000..8b11eec8d5
Binary files /dev/null and b/modular_citadel/sound/vox/will.ogg differ
diff --git a/modular_citadel/sound/vox/with.ogg b/modular_citadel/sound/vox/with.ogg
new file mode 100644
index 0000000000..100131ddfd
Binary files /dev/null and b/modular_citadel/sound/vox/with.ogg differ
diff --git a/modular_citadel/sound/vox/without.ogg b/modular_citadel/sound/vox/without.ogg
new file mode 100644
index 0000000000..5e6b99206f
Binary files /dev/null and b/modular_citadel/sound/vox/without.ogg differ
diff --git a/modular_citadel/sound/vox/woop.ogg b/modular_citadel/sound/vox/woop.ogg
new file mode 100644
index 0000000000..c29a975858
Binary files /dev/null and b/modular_citadel/sound/vox/woop.ogg differ
diff --git a/modular_citadel/sound/vox/xeno.ogg b/modular_citadel/sound/vox/xeno.ogg
new file mode 100644
index 0000000000..9230e650c7
Binary files /dev/null and b/modular_citadel/sound/vox/xeno.ogg differ
diff --git a/modular_citadel/sound/vox/yankee.ogg b/modular_citadel/sound/vox/yankee.ogg
new file mode 100644
index 0000000000..ea5578d28f
Binary files /dev/null and b/modular_citadel/sound/vox/yankee.ogg differ
diff --git a/modular_citadel/sound/vox/yards.ogg b/modular_citadel/sound/vox/yards.ogg
new file mode 100644
index 0000000000..7b911ad4bd
Binary files /dev/null and b/modular_citadel/sound/vox/yards.ogg differ
diff --git a/modular_citadel/sound/vox/year.ogg b/modular_citadel/sound/vox/year.ogg
new file mode 100644
index 0000000000..7cd1065af1
Binary files /dev/null and b/modular_citadel/sound/vox/year.ogg differ
diff --git a/modular_citadel/sound/vox/yellow.ogg b/modular_citadel/sound/vox/yellow.ogg
new file mode 100644
index 0000000000..87668cd45f
Binary files /dev/null and b/modular_citadel/sound/vox/yellow.ogg differ
diff --git a/modular_citadel/sound/vox/yes.ogg b/modular_citadel/sound/vox/yes.ogg
new file mode 100644
index 0000000000..24be399de3
Binary files /dev/null and b/modular_citadel/sound/vox/yes.ogg differ
diff --git a/modular_citadel/sound/vox/you.ogg b/modular_citadel/sound/vox/you.ogg
new file mode 100644
index 0000000000..4a30e5c721
Binary files /dev/null and b/modular_citadel/sound/vox/you.ogg differ
diff --git a/modular_citadel/sound/vox/your.ogg b/modular_citadel/sound/vox/your.ogg
new file mode 100644
index 0000000000..12d49c3ded
Binary files /dev/null and b/modular_citadel/sound/vox/your.ogg differ
diff --git a/modular_citadel/sound/vox/yourself.ogg b/modular_citadel/sound/vox/yourself.ogg
new file mode 100644
index 0000000000..03a0af6531
Binary files /dev/null and b/modular_citadel/sound/vox/yourself.ogg differ
diff --git a/modular_citadel/sound/vox/zero.ogg b/modular_citadel/sound/vox/zero.ogg
new file mode 100644
index 0000000000..e14f91344c
Binary files /dev/null and b/modular_citadel/sound/vox/zero.ogg differ
diff --git a/modular_citadel/sound/vox/zone.ogg b/modular_citadel/sound/vox/zone.ogg
new file mode 100644
index 0000000000..3c8834c8f4
Binary files /dev/null and b/modular_citadel/sound/vox/zone.ogg differ
diff --git a/modular_citadel/sound/vox/zulu.ogg b/modular_citadel/sound/vox/zulu.ogg
new file mode 100644
index 0000000000..739cdd2187
Binary files /dev/null and b/modular_citadel/sound/vox/zulu.ogg differ
diff --git a/sound/FermiChem/SoundSources.txt b/sound/FermiChem/SoundSources.txt
index bd45f866f5..1420814d4a 100644
--- a/sound/FermiChem/SoundSources.txt
+++ b/sound/FermiChem/SoundSources.txt
@@ -6,5 +6,6 @@ heatacid.ogg - from https://freesound.org/people/klankbeeld/sounds/233697/
from bubbles2.ogg
from fuse.ogg
bufferadd.ogg- https://freesound.org/people/toiletrolltube/sounds/181483/
+heatdamn.ogg - from https://freesound.org/people/klankbeeld/sounds/233697/
Work is licensed under the Creative Commons and Attribution License.
\ No newline at end of file
diff --git a/sound/FermiChem/heatdam.ogg b/sound/FermiChem/heatdam.ogg
new file mode 100644
index 0000000000..ab8492e966
Binary files /dev/null and b/sound/FermiChem/heatdam.ogg differ
diff --git a/sound/weapons/gatling.ogg b/sound/weapons/gatling.ogg
new file mode 100644
index 0000000000..0f8045560d
Binary files /dev/null and b/sound/weapons/gatling.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 4cd910ea0f..4cd38679fe 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -550,6 +550,11 @@
#include "code\game\gamemodes\devil\game_mode.dm"
#include "code\game\gamemodes\devil\objectives.dm"
#include "code\game\gamemodes\devil\devil agent\devil_agent.dm"
+#include "code\game\gamemodes\dynamic\dynamic.dm"
+#include "code\game\gamemodes\dynamic\dynamic_rulesets.dm"
+#include "code\game\gamemodes\dynamic\dynamic_rulesets_latejoin.dm"
+#include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm"
+#include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
@@ -652,6 +657,9 @@
#include "code\game\machinery\computer\arcade\minesweeper.dm"
#include "code\game\machinery\computer\arcade\misc_arcade.dm"
#include "code\game\machinery\computer\arcade\orion_trail.dm"
+#include "code\game\machinery\computer\prisoner\_prisoner.dm"
+#include "code\game\machinery\computer\prisoner\gulag_teleporter.dm"
+#include "code\game\machinery\computer\prisoner\management.dm"
#include "code\game\machinery\doors\airlock.dm"
#include "code\game\machinery\doors\airlock_electronics.dm"
#include "code\game\machinery\doors\airlock_types.dm"
@@ -1789,17 +1797,39 @@
#include "code\modules\jobs\access.dm"
#include "code\modules\jobs\job_exp.dm"
#include "code\modules\jobs\jobs.dm"
+#include "code\modules\jobs\job_types\_job.dm"
+#include "code\modules\jobs\job_types\ai.dm"
#include "code\modules\jobs\job_types\assistant.dm"
+#include "code\modules\jobs\job_types\atmospheric_technician.dm"
+#include "code\modules\jobs\job_types\bartender.dm"
+#include "code\modules\jobs\job_types\botanist.dm"
#include "code\modules\jobs\job_types\captain.dm"
-#include "code\modules\jobs\job_types\cargo_service.dm"
-#include "code\modules\jobs\job_types\civilian.dm"
-#include "code\modules\jobs\job_types\civilian_chaplain.dm"
-#include "code\modules\jobs\job_types\engineering.dm"
-#include "code\modules\jobs\job_types\job.dm"
-#include "code\modules\jobs\job_types\medical.dm"
-#include "code\modules\jobs\job_types\science.dm"
-#include "code\modules\jobs\job_types\security.dm"
-#include "code\modules\jobs\job_types\silicon.dm"
+#include "code\modules\jobs\job_types\cargo_technician.dm"
+#include "code\modules\jobs\job_types\chaplain.dm"
+#include "code\modules\jobs\job_types\chemist.dm"
+#include "code\modules\jobs\job_types\chief_engineer.dm"
+#include "code\modules\jobs\job_types\chief_medical_officer.dm"
+#include "code\modules\jobs\job_types\clown.dm"
+#include "code\modules\jobs\job_types\cook.dm"
+#include "code\modules\jobs\job_types\curator.dm"
+#include "code\modules\jobs\job_types\cyborg.dm"
+#include "code\modules\jobs\job_types\detective.dm"
+#include "code\modules\jobs\job_types\geneticist.dm"
+#include "code\modules\jobs\job_types\head_of_personnel.dm"
+#include "code\modules\jobs\job_types\head_of_security.dm"
+#include "code\modules\jobs\job_types\janitor.dm"
+#include "code\modules\jobs\job_types\lawyer.dm"
+#include "code\modules\jobs\job_types\medical_doctor.dm"
+#include "code\modules\jobs\job_types\mime.dm"
+#include "code\modules\jobs\job_types\quartermaster.dm"
+#include "code\modules\jobs\job_types\research_director.dm"
+#include "code\modules\jobs\job_types\roboticist.dm"
+#include "code\modules\jobs\job_types\scientist.dm"
+#include "code\modules\jobs\job_types\security_officer.dm"
+#include "code\modules\jobs\job_types\shaft_miner.dm"
+#include "code\modules\jobs\job_types\station_engineer.dm"
+#include "code\modules\jobs\job_types\virologist.dm"
+#include "code\modules\jobs\job_types\warden.dm"
#include "code\modules\jobs\map_changes\map_changes.dm"
#include "code\modules\keybindings\bindings_admin.dm"
#include "code\modules\keybindings\bindings_atom.dm"
@@ -1910,15 +1940,17 @@
#include "code\modules\mob\dead\new_player\poll.dm"
#include "code\modules\mob\dead\new_player\preferences_setup.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\_sprite_accessories.dm"
+#include "code\modules\mob\dead\new_player\sprite_accessories\alienpeople.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\body_markings.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\caps.dm"
+#include "code\modules\mob\dead\new_player\sprite_accessories\Citadel_Snowflake.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\ears.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\frills.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\hair_face.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\hair_head.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\horns.dm"
-#include "code\modules\mob\dead\new_player\sprite_accessories\legs.dm"
-#include "code\modules\mob\dead\new_player\sprite_accessories\moth_wings.dm"
+#include "code\modules\mob\dead\new_player\sprite_accessories\ipc_synths.dm"
+#include "code\modules\mob\dead\new_player\sprite_accessories\legs_and_taurs.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\pines.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\snouts.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\socks.dm"
@@ -2025,15 +2057,17 @@
#include "code\modules\mob\living\carbon\human\species_types\abductors.dm"
#include "code\modules\mob\living\carbon\human\species_types\android.dm"
#include "code\modules\mob\living\carbon\human\species_types\angel.dm"
+#include "code\modules\mob\living\carbon\human\species_types\bugmen.dm"
#include "code\modules\mob\living\carbon\human\species_types\corporate.dm"
#include "code\modules\mob\living\carbon\human\species_types\dullahan.dm"
#include "code\modules\mob\living\carbon\human\species_types\felinid.dm"
#include "code\modules\mob\living\carbon\human\species_types\flypeople.dm"
+#include "code\modules\mob\living\carbon\human\species_types\furrypeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\golems.dm"
#include "code\modules\mob\living\carbon\human\species_types\humans.dm"
+#include "code\modules\mob\living\carbon\human\species_types\ipc.dm"
#include "code\modules\mob\living\carbon\human\species_types\jellypeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\lizardpeople.dm"
-#include "code\modules\mob\living\carbon\human\species_types\mothmen.dm"
#include "code\modules\mob\living\carbon\human\species_types\mushpeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\plasmamen.dm"
#include "code\modules\mob\living\carbon\human\species_types\podpeople.dm"
@@ -2287,6 +2321,10 @@
#include "code\modules\NTNet\network.dm"
#include "code\modules\NTNet\relays.dm"
#include "code\modules\NTNet\services\_service.dm"
+#include "code\modules\oracle_ui\assets.dm"
+#include "code\modules\oracle_ui\hookup_procs.dm"
+#include "code\modules\oracle_ui\oracle_ui.dm"
+#include "code\modules\oracle_ui\themed.dm"
#include "code\modules\paperwork\clipboard.dm"
#include "code\modules\paperwork\contract.dm"
#include "code\modules\paperwork\filingcabinet.dm"
@@ -2421,6 +2459,7 @@
#include "code\modules\projectiles\guns\energy\kinetic_accelerator.dm"
#include "code\modules\projectiles\guns\energy\laser.dm"
#include "code\modules\projectiles\guns\energy\megabuster.dm"
+#include "code\modules\projectiles\guns\energy\minigun.dm"
#include "code\modules\projectiles\guns\energy\mounted.dm"
#include "code\modules\projectiles\guns\energy\plasma_cit.dm"
#include "code\modules\projectiles\guns\energy\pulse.dm"
@@ -2710,6 +2749,7 @@
#include "code\modules\surgery\cavity_implant.dm"
#include "code\modules\surgery\core_removal.dm"
#include "code\modules\surgery\dental_implant.dm"
+#include "code\modules\surgery\embalming.dm"
#include "code\modules\surgery\eye_surgery.dm"
#include "code\modules\surgery\helpers.dm"
#include "code\modules\surgery\implant_removal.dm"
@@ -2731,9 +2771,13 @@
#include "code\modules\surgery\advanced\pacification.dm"
#include "code\modules\surgery\advanced\reconstruction.dm"
#include "code\modules\surgery\advanced\revival.dm"
+#include "code\modules\surgery\advanced\toxichealing.dm"
#include "code\modules\surgery\advanced\viral_bonding.dm"
#include "code\modules\surgery\advanced\bioware\bioware.dm"
#include "code\modules\surgery\advanced\bioware\bioware_surgery.dm"
+#include "code\modules\surgery\advanced\bioware\experimental_dissection.dm"
+#include "code\modules\surgery\advanced\bioware\ligament_hook.dm"
+#include "code\modules\surgery\advanced\bioware\ligament_reinforcement.dm"
#include "code\modules\surgery\advanced\bioware\nerve_grounding.dm"
#include "code\modules\surgery\advanced\bioware\nerve_splicing.dm"
#include "code\modules\surgery\advanced\bioware\vein_threading.dm"
@@ -2900,7 +2944,6 @@
#include "modular_citadel\code\game\objects\items\boombox.dm"
#include "modular_citadel\code\game\objects\items\holy_weapons.dm"
#include "modular_citadel\code\game\objects\items\honk.dm"
-#include "modular_citadel\code\game\objects\items\meat.dm"
#include "modular_citadel\code\game\objects\items\stunsword.dm"
#include "modular_citadel\code\game\objects\items\vending_items.dm"
#include "modular_citadel\code\game\objects\items\circuitboards\machine_circuitboards.dm"
@@ -2909,12 +2952,9 @@
#include "modular_citadel\code\game\objects\items\devices\radio\headset.dm"
#include "modular_citadel\code\game\objects\items\devices\radio\shockcollar.dm"
#include "modular_citadel\code\game\objects\items\melee\eutactic_blades.dm"
-#include "modular_citadel\code\game\objects\items\melee\misc.dm"
-#include "modular_citadel\code\game\objects\items\robot\robot_upgrades.dm"
#include "modular_citadel\code\game\objects\items\storage\firstaid.dm"
#include "modular_citadel\code\game\objects\structures\tables_racks.dm"
#include "modular_citadel\code\game\objects\structures\beds_chairs\chair.dm"
-#include "modular_citadel\code\game\objects\structures\beds_chairs\sofa.dm"
#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\fitness.dm"
#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\wardrobe.dm"
#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\secure\citadel_lockers.dm"
@@ -2997,7 +3037,6 @@
#include "modular_citadel\code\modules\mining\mining_ruins.dm"
#include "modular_citadel\code\modules\mob\cit_emotes.dm"
#include "modular_citadel\code\modules\mob\mob.dm"
-#include "modular_citadel\code\modules\mob\dead\new_player\sprite_accessories.dm"
#include "modular_citadel\code\modules\mob\living\damage_procs.dm"
#include "modular_citadel\code\modules\mob\living\living.dm"
#include "modular_citadel\code\modules\mob\living\carbon\carbon.dm"
@@ -3007,11 +3046,7 @@
#include "modular_citadel\code\modules\mob\living\carbon\human\human.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\human_movement.dm"
-#include "modular_citadel\code\modules\mob\living\carbon\human\life.dm"
-#include "modular_citadel\code\modules\mob\living\carbon\human\species.dm"
-#include "modular_citadel\code\modules\mob\living\carbon\human\species_types\furrypeople.dm"
-#include "modular_citadel\code\modules\mob\living\carbon\human\species_types\ipc.dm"
-#include "modular_citadel\code\modules\mob\living\carbon\human\species_types\jellypeople.dm"
+#include "modular_citadel\code\modules\mob\living\silicon\ai\vox_sounds.dm"
#include "modular_citadel\code\modules\mob\living\silicon\robot\dogborg_equipment.dm"
#include "modular_citadel\code\modules\mob\living\silicon\robot\robot.dm"
#include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm"
diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css
index 256b53c106..c73fc2adfa 100644
--- a/tgui/assets/tgui.css
+++ b/tgui/assets/tgui.css
@@ -1 +1 @@
-@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"}
\ No newline at end of file
+@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPgo=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjMzIj4KICA8cGF0aCBkPSJtIDkzLjUzNzY3NywwIGMgLTE4LjExMzEyNSwwIC0zNC4yMjAxMzMsMy4xMTE2NCAtNDguMzIzNDg0LDkuMzM0MzcgLTEzLjk2NTA5Miw2LjIyMTY3IC0yNC42MTI0NDIsMTUuMDcxMTQgLTMxLjk0MDY1MSwyNi41NDcxIC03LjE4OTkzOTgsMTEuMzM3ODkgLTEwLjMwMTIyNjYsMjQuNzQ5MTEgLTEwLjMwMTIyNjYsNDAuMjM0NzggMCwxMC42NDY2MiAyLjcyNTAwMjYsMjAuNDY0NjUgOC4xNzUxMTE2LDI5LjQ1MjU4IDUuNjE1Mjc3LDguOTg2ODYgMTQuMDM4Mjc3LDE3LjM1MjA0IDI1LjI2ODgyMSwyNS4wOTQzNiAxMS4yMzA1NDQsNy42MDUzMSAyNi41MDc0MjEsMTUuNDE4MzUgNDUuODMwNTE0LDIzLjQzNzgyIDE5Ljk4Mzc0OCw4LjI5NTU3IDM0Ljg0ODg0OCwxNS41NTQ3MSA0NC41OTI5OTgsMjEuNzc2MzggOS43NDQxNCw2LjIyMjczIDE2Ljc2MTcsMTIuODU4NSAyMS4wNTU3MiwxOS45MDk1MSA0LjI5NDA0LDcuMDUyMDggNi40NDE5MywxNS43NjQwOCA2LjQ0MTkzLDI2LjEzNDU5IDAsMTYuMTc3MDIgLTUuMjAxOTYsMjguNDgyMjIgLTE1LjYwNjczLDM2LjkxNjgyIC0xMC4yMzk2LDguNDM0NyAtMjUuMDIyMDMsMTIuNjUyMyAtNDQuMzQ1MTY5LDEyLjY1MjMgLTE0LjAzODE3MSwwIC0yNS41MTUyNDcsLTEuNjU5NCAtMzQuNDMzNjE4LC00Ljk3NzcgLTguOTE4MzcsLTMuNDU2NiAtMTYuMTg1NTcyLC04LjcxMTMgLTIxLjgwMDgzOSwtMTUuNzYzMyAtNS42MTUyNzcsLTcuMDUyMSAtMTAuMDc0Nzk1LC0xNi42NjA4OCAtMTMuMzc3ODk5LC0yOC44MjgxMiBsIC0yNC43NzMxNjI2MjkzOTQ1LDAgMCw1Ni44MjYzMiBDIDMzLjg1Njc2OSwyODYuMDc2MDEgNjMuNzQ5MDQsMjg5Ljc0MjAxIDg5LjY3ODM4MywyODkuNzQyMDEgYyAxNi4wMjAwMjcsMCAzMC43MTk3ODcsLTEuMzgyNyA0NC4wOTczMzcsLTQuMTQ3OSAxMy41NDI3MiwtMi45MDQzIDI1LjEwNDEsLTcuNDY3NiAzNC42ODMwOSwtMTMuNjg5MyA5Ljc0NDEzLC02LjM1OTcgMTcuMzQwNDIsLTE0LjUxOTUgMjIuNzkwNTIsLTI0LjQ3NDggNS40NTAxLC0xMC4wOTMzMiA4LjE3NTExLC0yMi4zOTk1OSA4LjE3NTExLC0zNi45MTY4MiAwLC0xMi45OTc2NCAtMy4zMDIxLC0yNC4zMzUzOSAtOS45MDgyOSwtMzQuMDE0NiAtNi40NDEwNSwtOS44MTcyNSAtMTUuNTI1NDUsLTE4LjUyNzA3IC0yNy4yNTE0NiwtMjYuMTMxMzMgLTExLjU2MDg1LC03LjYwNDI3IC0yNy45MTA4MywtMTUuODMxNDIgLTQ5LjA1MDY2LC0yNC42ODAyMiAtMTcuNTA2NDQsLTcuMTkwMTIgLTMwLjcxOTY2OCwtMTMuNjg5NDggLTM5LjYzODAzOCwtMTkuNDk3MDEgLTguOTE4MzcxLC01LjgwNzUyIC0xOC42MDc0NzQsLTEyLjQzNDA5IC0yNC4wOTY1MjQsLTE4Ljg3NDE3IC01LjQyNjA0MywtNi4zNjYxNiAtOS42NTg4MjYsLTE1LjA3MDAzIC05LjY1ODgyNiwtMjQuODg3MjkgMCwtOS4yNjQwMSAyLjA3NTQxNCwtMTcuMjEzNDUgNi4yMjM0NTQsLTIzLjg1MDMzIDExLjA5ODI5OCwtMTQuMzk3NDggNDEuMjg2NjM4LC0xLjc5NTA3IDQ1LjA3NTYwOSwyNC4zNDc2MiA0LjgzOTM5Miw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ3MjkgMTIuMDI5NTE1LDI4LjQxNTYgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTQuNDc4MjUsLTUuOTI0NDggLTkuOTU0ODgsLTEwLjYzMjIyIC0xNS45MDgzNywtMTQuMzc0MTEgMS42NDA1NSwwLjQ3OTA1IDMuMTkwMzksMS4wMjM3NiA0LjYzODY1LDEuNjQwMjQgNi40OTg2MSwyLjYyNjA3IDEyLjE2NzkzLDcuMzI3NDcgMTcuMDA3MywxNC4xMDM0NSA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNSwxNi4yNDU2NyAxMi4wMjk1MiwyOC40MTM5NyAwLDAgOC40ODEyOCwtMC4xMjg5NCA4LjQ4OTc4LC0wLjAwMiAwLjQxNzc2LDYuNDE0OTQgLTEuNzUzMzksOS40NTI4NiAtNC4xMjM0MiwxMi41NjEwNCAtMi40MTc0LDMuMTY5NzggLTUuMTQ0ODYsNi43ODk3MyAtNC4wMDI3OCwxMy4wMDI5IDEuNTA3ODYsOC4yMDMxOCAxMC4xODM1NCwxMC41OTY0MiAxNC42MjE5NCw5LjMxMTU0IC0zLjMxODQyLC0wLjQ5OTExIC01LjMxODU1LC0xLjc0OTQ4IC01LjMxODU1LC0xLjc0OTQ4IDAsMCAxLjg3NjQ2LDAuOTk4NjggNS42NTExNywtMS4zNTk4MSAtMy4yNzY5NSwwLjk1NTcxIC0xMC43MDUyOSwtMC43OTczOCAtMTEuODAxMjUsLTYuNzYzMTMgLTAuOTU3NTIsLTUuMjA4NjEgMC45NDY1NCwtNy4yOTUxNCAzLjQwMTEzLC0xMC41MTQ4MiAyLjQ1NDYyLC0zLjIxOTY4IDUuMjg0MjYsLTYuOTU4MzEgNC42ODQzLC0xNC40ODgyNCBsIDAuMDAzLDAuMDAyIDguOTI2NzYsMCAwLC01NS45OTk2NyBjIC0xNS4wNzEyNSwtMy44NzE2OCAtMjcuNjUzMTQsLTYuMzYwNDIgLTM3Ljc0NjcxLC03LjQ2NTg2IC05Ljk1NTMxLC0xLjEwNzU1IC0yMC4xODgyMywtMS42NTk4MSAtMzAuNjk2NjEzLC0xLjY1OTgxIHogbSA3MC4zMjE2MDMsMTcuMzA4OTMgMC4yMzgwNSw0MC4zMDQ5IGMgMS4zMTgwOCwxLjIyNjY2IDIuNDM5NjUsMi4yNzgxNSAzLjM0MDgxLDMuMTA2MDIgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzQsMTYuMjQ1NjYgMTIuMDI5NTEsMjguNDEzOTcgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTYuNjc3MzEsLTQuNTkzODEgLTE5LjgzNjQzLC0xMC40NzMwOSAtMzYuMTQwNzEsLTE1LjgyNTIyIHogbSAtMjguMTIwNDksNS42MDU1MSA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM3LC02LjQ2Njk3IC0xMy44NDY3OCwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA1LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIDE1LjIyMTk1LDI0LjAwODQ4IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgsLTYuNDY2OTcgLTEzLjg0Njc5LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDQsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gLTk5LjExMzg0LDIuMjA3NjQgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzODIsLTYuNDY2OTcgLTEzLjg0Njc4MiwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NTQyLDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"}
\ No newline at end of file
diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js
index 3599ece4f4..02e6e9aa58 100644
--- a/tgui/assets/tgui.js
+++ b/tgui/assets/tgui.js
@@ -6,16 +6,16 @@ try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n},_=function(t)
return t.docFrag.appendChild(e.render())}),this.renderedFragments=this.fragments.slice(),this.fragmentsToRender=[],this.rendered=!0,this.docFrag}function Ze(t){var e,n,a=this;this.updating||(this.updating=!0,this.keypath&&(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),this.fragmentsToCreate.length?(n={template:this.template.f||[],root:this.root,pElement:this.pElement,owner:this},this.fragmentsToCreate.forEach(function(t){var e;n.context=a.keypath.join(t),n.index=t,e=new rg(n),a.fragmentsToRender.push(a.fragments[t]=e)}),this.fragmentsToCreate.length=0):en(this,t)&&(this.bubble(),this.rendered&&bs.addView(this)),this.value=t,this.updating=!1)}function tn(t,e,n){if(e===Bu&&t.indexRefs&&t.indexRefs[0]){var a=t.indexRefs[0];(n&&"i"===a.t||!n&&"k"===a.t)&&(n||(t.length=0,t.fragmentsToUnrender=t.fragments.slice(0),t.fragmentsToUnrender.forEach(function(t){return t.unbind()}))),a.t=n?"k":"i"}t.currentSubtype=e}function en(t,e){var n={template:t.template.f||[],root:t.root,pElement:t.parentFragment.pElement,owner:t};if(t.hasContext=!0,t.subtype)switch(t.subtype){case Fu:return t.hasContext=!1,sn(t,e,!1,n);case Iu:return t.hasContext=!1,sn(t,e,!0,n);case Vu:return on(t,n);case qu:return rn(t,e,n);case Bu:if(u(e))return tn(t,t.subtype,!0),an(t,e,n)}return t.ordered=!!o(e),t.ordered?(tn(t,Bu,!1),nn(t,e,n)):u(e)||"function"==typeof e?t.template.i?(tn(t,Bu,!0),an(t,e,n)):(tn(t,Vu,!1),on(t,n)):(tn(t,Fu,!1),t.hasContext=!1,sn(t,e,!1,n))}function nn(t,e,n){var a,r,i;if(r=e.length,r===t.length)return!1;if(r
t.length)for(a=t.length;r>a;a+=1)n.context=t.keypath.join(a),n.index=a,i=new rg(n),t.fragmentsToRender.push(t.fragments[a]=i);return t.length=r,!0}function an(t,e,n){var a,r,i,o,s,p;for(i=t.hasKey||(t.hasKey={}),r=t.fragments.length;r--;)o=t.fragments[r],o.key in e||(s=!0,o.unbind(),t.fragmentsToUnrender.push(o),t.fragments.splice(r,1),i[o.key]=!1);for(r=t.fragments.length;r--;)o=t.fragments[r],o.index!==r&&(o.index=r,(p=o.registeredIndexRefs)&&p.forEach(cn));r=t.fragments.length;for(a in e)i[a]||(s=!0,n.context=t.keypath.join(a),n.key=a,n.index=r++,o=new rg(n),t.fragmentsToRender.push(o),t.fragments.push(o),i[a]=!0);return t.length=t.fragments.length,s}function rn(t,e,n){return e?on(t,n):pn(t)}function on(t,e){var n;return t.length?void 0:(e.context=t.keypath,e.index=0,n=new rg(e),t.fragmentsToRender.push(t.fragments[0]=n),t.length=1,!0)}function sn(t,e,n,a){var r,i,s,p,c;if(i=o(e)&&0===e.length,s=!1,!o(e)&&u(e)){s=!0;for(c in e){s=!1;break}}return r=n?i||s||!e:e&&!i&&!s,r?t.length?t.length>1?(t.fragmentsToUnrender=t.fragments.splice(1),t.fragmentsToUnrender.forEach(K),!0):void 0:(a.index=0,p=new rg(a),t.fragmentsToRender.push(t.fragments[0]=p),t.length=1,!0):pn(t)}function pn(t){return t.length?(t.fragmentsToUnrender=t.fragments.splice(0,t.fragments.length).filter(un),t.fragmentsToUnrender.forEach(K),t.length=t.fragmentsToRender.length=0,!0):void 0}function un(t){return t.rendered}function cn(t){t.rebind("","")}function ln(t){var e,n,a;for(e="",n=0,a=this.length,n=0;a>n;n+=1)e+=this.fragments[n].toString(t);return e}function dn(){var t=this;this.fragments.forEach(K),this.fragmentsToRender.forEach(function(e){return N(t.fragments,e)}),this.fragmentsToRender=[],_c.call(this),this.length=0,this.unbound=!0}function fn(t){this.fragments.forEach(t?hn:mn),this.renderedFragments=[],this.rendered=!1}function hn(t){t.unrender(!0)}function mn(t){t.unrender(!1)}function gn(){var t,e,n,a,r,i,o;for(n=this.renderedFragments;t=this.fragmentsToUnrender.pop();)t.unrender(!0),n.splice(n.indexOf(t),1);for(;t=this.fragmentsToRender.shift();)t.render();for(this.rendered&&(r=this.parentFragment.getNode()),o=this.fragments.length,i=0;o>i;i+=1)t=this.fragments[i],e=n.indexOf(t,i),e!==i?(this.docFrag.appendChild(t.detach()),-1!==e&&n.splice(e,1),n.splice(i,0,t)):this.docFrag.childNodes.length&&(a=t.firstNode(),r.insertBefore(this.docFrag,a));this.rendered&&this.docFrag.childNodes.length&&(a=this.parentFragment.findNextNode(this),r.insertBefore(this.docFrag,a)),this.renderedFragments=this.fragments.slice()}function vn(){var t,e;if(this.docFrag){for(t=this.nodes.length,e=0;t>e;e+=1)this.docFrag.appendChild(this.nodes[e]);return this.docFrag}}function bn(t){var e,n,a,r;for(n=this.nodes.length,e=0;n>e;e+=1)if(a=this.nodes[e],1===a.nodeType){if(lo(a,t))return a;if(r=a.querySelector(t))return r}return null}function yn(t,e){var n,a,r,i,o,s;for(a=this.nodes.length,n=0;a>n;n+=1)if(r=this.nodes[n],1===r.nodeType&&(lo(r,t)&&e.push(r),i=r.querySelectorAll(t)))for(o=i.length,s=0;o>s;s+=1)e.push(i[s])}function _n(){return this.rendered&&this.nodes[0]?this.nodes[0]:this.parentFragment.findNextNode(this)}function xn(t){return gl[t]||(gl[t]=co(t))}function wn(t){var e,n,a;t&&"select"===t.name&&t.binding&&(e=F(t.node.options).filter(kn),t.getAttribute("multiple")?a=e.map(function(t){return t.value}):(n=e[0])&&(a=n.value),void 0!==a&&t.binding.setValue(a),t.bubble())}function kn(t){return t.selected}function Sn(){if(this.rendered)throw Error("Attempted to render an item that was already rendered");return this.docFrag=document.createDocumentFragment(),this.nodes=vl(this.value,this.parentFragment.getNode(),this.docFrag),bl(this.pElement),this.rendered=!0,this.docFrag}function En(t){var e;(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),t!==this.value&&(this.value=t,this.parentFragment.bubble(),this.rendered&&bs.addView(this))}function Cn(){return void 0!=this.value?we(""+this.value):""}function Pn(t){this.rendered&&t&&(this.nodes.forEach(e),this.rendered=!1)}function An(){var t,e;if(this.rendered){for(;this.nodes&&this.nodes.length;)t=this.nodes.pop(),t.parentNode.removeChild(t);e=this.parentFragment.getNode(),this.nodes=vl(this.value,e,this.docFrag),e.insertBefore(this.docFrag,this.parentFragment.findNextNode(this)),bl(this.pElement)}}function On(){var t,e=this.node;return e?((t=e.parentNode)&&t.removeChild(e),e):void 0}function Tn(){return null}function Rn(){return this.node}function Mn(t){return this.attributes&&this.attributes[t]?this.attributes[t].value:void 0}function Ln(){var t=this.useProperty||!this.rendered?this.fragment.getValue():""+this.fragment;s(t,this.value)||("id"===this.name&&this.value&&delete this.root.nodes[this.value],this.value=t,"value"===this.name&&this.node&&(this.node._ractive.value=t),this.rendered&&bs.addView(this))}function jn(t){var e=t.fragment.items;if(1===e.length)return e[0].type===Su?e[0]:void 0}function Dn(t){return this.type=Tu,this.element=t.element,this.root=t.root,zl(this,t.name),this.isBoolean=rc.test(this.name),t.value&&"string"!=typeof t.value?(this.parentFragment=this.element.parentFragment,this.fragment=new rg({template:t.value,root:this.root,owner:this}),this.value=this.fragment.getValue(),this.interpolator=Wl(this),this.isBindable=!!this.interpolator&&!this.interpolator.isStatic,void(this.ready=!0)):void(this.value=this.isBoolean?!0:t.value||"")}function Nn(t,e){this.fragment&&this.fragment.rebind(t,e)}function Fn(t){var e;this.node=t,t.namespaceURI&&t.namespaceURI!==no.html||(e=Yl[this.name]||this.name,void 0!==t[e]&&(this.propertyName=e),(this.isBoolean||this.isTwoway)&&(this.useProperty=!0),"value"===e&&(t._ractive.value=this.value)),this.rendered=!0,this.update()}function In(){var t=this,e=t.name,n=t.namespacePrefix,a=t.value,r=t.interpolator,i=t.fragment;if(("value"!==e||"select"!==this.element.name&&"textarea"!==this.element.name)&&("value"!==e||void 0===this.element.getAttribute("contenteditable"))){if("name"===e&&"input"===this.element.name&&r)return"name={{"+(r.keypath.str||r.ref)+"}}";if(this.isBoolean)return a?e:"";if(i){if(1===i.items.length&&null==i.items[0].value)return"";a=""+i}return n&&(e=n+":"+e),a?e+'="'+Bn(a)+'"':e}}function Bn(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'")}function Vn(){this.fragment&&this.fragment.unbind(),"id"===this.name&&delete this.root.nodes[this.value]}function qn(){var t,e,n,a,r=this.value;if(!this.locked)for(this.node._ractive.value=r,t=this.node.options,a=t.length;a--;)if(e=t[a],n=e._ractive?e._ractive.value:e.value,n==r){e.selected=!0;break}}function Un(){var t,e,n,a,r=this.value;for(i(r)||(r=[r]),t=this.node.options,e=t.length;e--;)n=t[e],a=n._ractive?n._ractive.value:n.value,n.selected=M(r,a)}function Gn(){var t=this,e=t.node,n=t.value;e.checked=n==e._ractive.value}function zn(){var t,e,n,a,r=this.node;if(t=r.checked,r.value=this.element.getAttribute("value"),r.checked=this.element.getAttribute("value")===this.element.getAttribute("name"),t&&!r.checked&&this.element.binding&&(n=this.element.binding.siblings,a=n.length)){for(;a--;){if(e=n[a],!e.element.node)return;if(e.element.node.checked)return bs.addRactive(e.root),e.handleChange()}this.root.viewmodel.set(e.keypath,void 0)}}function Wn(){var t,e,n=this,a=n.element,r=n.node,o=n.value,s=a.binding;if(t=a.getAttribute("value"),i(o)){for(e=o.length;e--;)if(t==o[e])return void(s.isChecked=r.checked=!0);s.isChecked=r.checked=!1}else s.isChecked=r.checked=o==t}function Hn(){this.node.className=n(this.value)}function Kn(){var t=this,e=t.node,n=t.value;this.root.nodes[n]=e,e.id=n}function Qn(){var t,e;t=this.node,e=this.value,void 0===e&&(e=""),t.style.setAttribute("cssText",e)}function Yn(){var t=this.value;void 0===t&&(t=""),this.locked||(this.node.innerHTML=t)}function $n(){var t=this,e=t.node,n=t.value;e._ractive.value=n,this.locked||(e.value=void 0==n?"":n)}function Jn(){this.locked||(this.node[this.propertyName]=this.value)}function Xn(){var t=this,e=t.node,n=t.namespace,a=t.name,r=t.value,i=t.fragment;n?e.setAttributeNS(n,a,""+(i||r)):this.isBoolean?r?e.setAttribute(a,""):e.removeAttribute(a):null==r?e.removeAttribute(a):e.setAttribute(a,""+(i||r))}function Zn(){var t,e,n=this,a=n.name,r=n.element,i=n.node;"id"===a?e=rd:"value"===a?"select"===r.name&&"value"===a?e=r.getAttribute("multiple")?Zl:Xl:"textarea"===r.name?e=sd:null!=r.getAttribute("contenteditable")?e=od:"input"===r.name&&(t=r.getAttribute("type"),e="file"===t?ko:"radio"===t&&r.binding&&"name"===r.binding.name?ed:sd):this.isTwoway&&"name"===a?"radio"===i.type?e=td:"checkbox"===i.type&&(e=nd):"style"===a&&i.style.setAttribute?e=id:"class"!==a||i.namespaceURI&&i.namespaceURI!==no.html?this.useProperty&&(e=pd):e=ad,e||(e=ud),this.update=e,this.update()}function ta(t,e){var n=e?"svg":"div";return dd.innerHTML="<"+n+" "+t+">"+n+">",F(dd.childNodes[0].attributes)}function ea(t,e){for(var n=t.length;n--;)if(t[n].name===e.name)return!1;return!0}function na(t){for(;t=t.parent;)if("form"===t.name)return t}function aa(){this._ractive.binding.handleChange()}function ra(){var t;xd.call(this),t=this._ractive.root.viewmodel.get(this._ractive.binding.keypath),this.value=void 0==t?"":t}function ia(){var t=this._ractive.binding,e=this;t._timeout&&clearTimeout(t._timeout),t._timeout=setTimeout(function(){t.rendered&&xd.call(e),t._timeout=void 0},t.element.lazy)}function oa(t,e,n){var a=t+e+n;return Cd[a]||(Cd[a]=[])}function sa(t){return t.isChecked}function pa(t){return t.element.getAttribute("value")}function ua(t){var e,n,a,r,i,o=t.attributes;return t.binding&&(t.binding.teardown(),t.binding=null),(t.getAttribute("contenteditable")||o.contenteditable&&ca(o.contenteditable))&&ca(o.value)?n=Sd:"input"===t.name?(e=t.getAttribute("type"),"radio"===e||"checkbox"===e?(a=ca(o.name),r=ca(o.checked),a&&r&&m("A radio input can have two-way binding on its name attribute, or its checked attribute - not both",{ractive:t.root}),a?n="radio"===e?Td:Md:r&&(n="radio"===e?Ad:jd)):"file"===e&&ca(o.value)?n=Vd:ca(o.value)&&(n="number"===e||"range"===e?qd:wd)):"select"===t.name&&ca(o.value)?n=t.getAttribute("multiple")?Id:Nd:"textarea"===t.name&&ca(o.value)&&(n=wd),n&&(i=new n(t))&&i.keypath?i:void 0}function ca(t){return t&&t.isBindable}function la(){var t=this.getAction();t&&!this.hasListener?this.listen():!t&&this.hasListener&&this.unrender()}function da(t){zs(this.root,this.getAction(),{event:t})}function fa(){return(""+this.action).trim()}function ha(t,e,n){var a,r,i,o=this;this.element=t,this.root=t.root,this.parentFragment=t.parentFragment,this.name=e,-1!==e.indexOf("*")&&(l('Only component proxy-events may contain "*" wildcards, <%s on-%s="..."/> is not valid',t.name,e),this.invalid=!0),n.m?(r=n.a.r,this.method=n.m,this.keypaths=[],this.fn=Mc(n.a.s,r.length),this.parentFragment=t.parentFragment,i=this.root,this.refResolvers=[],r.forEach(function(t,e){var n=void 0;(n=Kd.exec(t))?o.keypaths[e]={eventObject:!0,refinements:n[1]?n[1].split("."):[]}:o.refResolvers.push(Rc(o,t,function(t){return o.resolve(e,t)}))}),this.fire=ma):(a=n.n||n,"string"!=typeof a&&(a=new rg({template:a,root:this.root,owner:this})),this.action=a,n.d?(this.dynamicParams=new rg({template:n.d,root:this.root,owner:this.element}),this.fire=va):n.a&&(this.params=n.a,this.fire=ga))}function ma(t){var e,n,a;if(e=this.root,"function"!=typeof e[this.method])throw Error('Attempted to call a non-existent method ("'+this.method+'")');n=this.keypaths.map(function(n){var a,r,i;if(void 0!==n){if(n.eventObject){if(a=t,r=n.refinements.length)for(i=0;r>i;i+=1)a=a[n.refinements[i]]}else a=e.viewmodel.get(n);return a}}),Gs.enqueue(e,t),a=this.fn.apply(null,n),e[this.method].apply(e,a),Gs.dequeue(e)}function ga(t){zs(this.root,this.getAction(),{event:t,args:this.params})}function va(t){var e=this.dynamicParams.getArgsList();"string"==typeof e&&(e=e.substr(1,e.length-2)),zs(this.root,this.getAction(),{event:t,args:e})}function ba(t){var e,n,a,r={};e=this._ractive,n=e.events[t.type],(a=Oc(n.element.parentFragment))&&(r=Oc.resolve(a)),n.fire({node:this,original:t,index:r,keypath:e.keypath.str,context:e.root.viewmodel.get(e.keypath)})}function ya(){var t,e=this.name;if(!this.invalid){if(t=v("events",this.root,e))this.custom=t(this.node,_a(e));else{if(!("on"+e in this.node||window&&"on"+e in window||Zi))return void(Jd[e]||g(Io(e,"event"),{node:this.node}));this.node.addEventListener(e,Qd,!1)}this.hasListener=!0}}function _a(t){return $d[t]||($d[t]=function(e){var n=e.node._ractive;e.index=n.index,e.keypath=n.keypath.str,e.context=n.root.viewmodel.get(n.keypath),n.events[t].fire(e)}),$d[t]}function xa(t,e){function n(n){n&&n.rebind(t,e)}var a;return this.method?(a=this.element.parentFragment,void this.refResolvers.forEach(n)):("string"!=typeof this.action&&n(this.action),void(this.dynamicParams&&n(this.dynamicParams)))}function wa(){this.node=this.element.node,this.node._ractive.events[this.name]=this,(this.method||this.getAction())&&this.listen()}function ka(t,e){this.keypaths[t]=e}function Sa(){return this.method?void this.refResolvers.forEach(K):("string"!=typeof this.action&&this.action.unbind(),void(this.dynamicParams&&this.dynamicParams.unbind()))}function Ea(){this.custom?this.custom.teardown():this.node.removeEventListener(this.name,Qd,!1),this.hasListener=!1}function Ca(){var t=this;this.dirty||(this.dirty=!0,bs.scheduleTask(function(){Pa(t),t.dirty=!1})),this.parentFragment.bubble()}function Pa(t){var e,n,a,r,i;e=t.node,e&&(r=F(e.options),n=t.getAttribute("value"),a=t.getAttribute("multiple"),void 0!==n?(r.forEach(function(t){var e,r;e=t._ractive?t._ractive.value:t.value,r=a?Aa(n,e):n==e,r&&(i=!0),t.selected=r}),i||(r[0]&&(r[0].selected=!0),t.binding&&t.binding.forceUpdate())):t.binding&&t.binding.forceUpdate())}function Aa(t,e){for(var n=t.length;n--;)if(t[n]==e)return!0}function Oa(t,e){t.select=Ra(t.parent),t.select&&(t.select.options.push(t),e.a||(e.a={}),void 0!==e.a.value||e.a.hasOwnProperty("disabled")||(e.a.value=e.f),"selected"in e.a&&void 0!==t.select.getAttribute("value")&&delete e.a.selected)}function Ta(t){t.select&&N(t.select.options,t)}function Ra(t){if(t)do if("select"===t.name)return t;while(t=t.parent)}function Ma(t){var e,n,a,r,i,o,s;this.type=Pu,e=this.parentFragment=t.parentFragment,n=this.template=t.template,this.parent=t.pElement||e.pElement,this.root=a=e.root,this.index=t.index,this.key=t.key,this.name=Gl(n.e),"option"===this.name&&Oa(this,n),"select"===this.name&&(this.options=[],this.bubble=Ca),"form"===this.name&&(this.formBindings=[]),s=ql(this,n),this.attributes=hd(this,n.a),this.conditionalAttributes=vd(this,n.m),n.f&&(this.fragment=new rg({template:n.f,root:a,owner:this,pElement:this,cssIds:null})),o=a.twoway,s.twoway===!1?o=!1:s.twoway===!0&&(o=!0),this.twoway=o,this.lazy=s.lazy,o&&(r=Ud(this,n.a))&&(this.binding=r,i=this.root._twowayBindings[r.keypath.str]||(this.root._twowayBindings[r.keypath.str]=[]),i.push(r)),n.v&&(this.eventHandlers=of(this,n.v)),n.o&&(this.decorator=new lf(this,n.o)),this.intro=n.t0||n.t1,this.outro=n.t0||n.t2}function La(t,e){function n(n){n.rebind(t,e)}var a,r,i,o;if(this.attributes&&this.attributes.forEach(n),this.conditionalAttributes&&this.conditionalAttributes.forEach(n),this.eventHandlers&&this.eventHandlers.forEach(n),this.decorator&&n(this.decorator),this.fragment&&n(this.fragment),i=this.liveQueries)for(o=this.root,a=i.length;a--;)i[a]._makeDirty();this.node&&(r=this.node._ractive)&&w(r,"keypath",t,e)}function ja(t){var e;(t.attributes.width||t.attributes.height)&&t.node.addEventListener("load",e=function(){var n=t.getAttribute("width"),a=t.getAttribute("height");void 0!==n&&t.node.setAttribute("width",n),void 0!==a&&t.node.setAttribute("height",a),t.node.removeEventListener("load",e,!1)},!1)}function Da(t){t.node.addEventListener("reset",Fa,!1)}function Na(t){t.node.removeEventListener("reset",Fa,!1)}function Fa(){var t=this._ractive.proxy;bs.start(),t.formBindings.forEach(Ia),bs.end()}function Ia(t){t.root.viewmodel.set(t.keypath,t.resetValue)}function Ba(t,e,n){var a,r,i;this.element=t,this.root=a=t.root,this.isIntro=n,r=e.n||e,("string"==typeof r||(i=new rg({template:r,root:a,owner:t}),r=""+i,i.unbind(),""!==r))&&(this.name=r,e.a?this.params=e.a:e.d&&(i=new rg({template:e.d,root:a,owner:t}),this.params=i.getArgsList(),i.unbind()),this._fn=v("transitions",a,r),this._fn||g(Io(r,"transition"),{ractive:this.root}))}function Va(t){return t}function qa(){qf.hidden=document[Ff]}function Ua(){qf.hidden=!0}function Ga(){qf.hidden=!1}function za(){var t,e,n,a=this;return t=this.node=this.element.node,e=t.getAttribute("style"),this.complete=function(r){n||(!r&&a.isIntro&&Wa(t,e),t._ractive.transition=null,a._manager.remove(a),n=!0)},this._fn?void this._fn.apply(this.root,[this].concat(this.params)):void this.complete()}function Wa(t,e){e?t.setAttribute("style",e):(t.getAttribute("style"),t.removeAttribute("style"))}function Ha(){var t,e,n,a=this,r=this.root;return t=Ka(this),e=this.node=co(this.name,t),this.parentFragment.cssIds&&this.node.setAttribute("data-ractive-css",this.parentFragment.cssIds.map(function(t){return"{"+t+"}"}).join(" ")),Eo(this.node,"_ractive",{value:{proxy:this,keypath:cs(this.parentFragment),events:So(null),root:r}}),this.attributes.forEach(function(t){return t.render(e)}),this.conditionalAttributes.forEach(function(t){return t.render(e)}),this.fragment&&("script"===this.name?(this.bubble=Xf,this.node.text=this.fragment.toString(!1),this.fragment.unrender=ko):"style"===this.name?(this.bubble=Jf,this.bubble(),this.fragment.unrender=ko):this.binding&&this.getAttribute("contenteditable")?this.fragment.unrender=ko:this.node.appendChild(this.fragment.render())),this.binding&&(this.binding.render(),this.node._ractive.binding=this.binding),this.eventHandlers&&this.eventHandlers.forEach(function(t){return t.render()}),"option"===this.name&&Qa(this),"img"===this.name?ja(this):"form"===this.name?Da(this):"input"===this.name||"textarea"===this.name?this.node.defaultValue=this.node.value:"option"===this.name&&(this.node.defaultSelected=this.node.selected),this.decorator&&this.decorator.fn&&bs.scheduleTask(function(){a.decorator.torndown||a.decorator.init()},!0),r.transitionsEnabled&&this.intro&&(n=new Zf(this,this.intro,!0),bs.registerTransition(n),bs.scheduleTask(function(){return n.start()},!0),this.transition=n),this.node.autofocus&&bs.scheduleTask(function(){return a.node.focus()},!0),Ya(this),this.node}function Ka(t){var e,n,a;return e=(n=t.getAttribute("xmlns"))?n:"svg"===t.name?no.svg:(a=t.parent)?"foreignObject"===a.name?no.html:a.node.namespaceURI:t.root.el.namespaceURI}function Qa(t){var e,n,a;if(t.select&&(n=t.select.getAttribute("value"),void 0!==n))if(e=t.getAttribute("value"),t.select.node.multiple&&i(n)){for(a=n.length;a--;)if(e==n[a]){t.node.selected=!0;break}}else t.node.selected=e==n}function Ya(t){var e,n,a,r,i;e=t.root;do for(n=e._liveQueries,a=n.length;a--;)r=n[a],i=n["_"+r],i._test(t)&&(t.liveQueries||(t.liveQueries=[])).push(i);while(e=e.parent)}function $a(t){var e,n,a;if(e=t.getAttribute("value"),void 0===e||!t.select)return!1;if(n=t.select.getAttribute("value"),n==e)return!0;if(t.select.getAttribute("multiple")&&i(n))for(a=n.length;a--;)if(n[a]==e)return!0}function Ja(t){var e,n,a,r;return e=t.attributes,n=e.type,a=e.value,r=e.name,n&&"radio"===n.value&&a&&r.interpolator&&a.value===r.interpolator.value?!0:void 0}function Xa(t){var e=""+t;return e?" "+e:""}function Za(){this.fragment&&this.fragment.unbind(),this.binding&&this.binding.unbind(),this.eventHandlers&&this.eventHandlers.forEach(K),"option"===this.name&&Ta(this),this.attributes.forEach(K),this.conditionalAttributes.forEach(K)}function tr(t){var e,n,a;(a=this.transition)&&a.complete(),"option"===this.name?this.detach():t&&bs.detachWhenReady(this),this.fragment&&this.fragment.unrender(!1),(e=this.binding)&&(this.binding.unrender(),this.node._ractive.binding=null,n=this.root._twowayBindings[e.keypath.str],n.splice(n.indexOf(e),1)),this.eventHandlers&&this.eventHandlers.forEach(Q),this.decorator&&bs.registerDecorator(this.decorator),this.root.transitionsEnabled&&this.outro&&(a=new Zf(this,this.outro,!1),bs.registerTransition(a),bs.scheduleTask(function(){return a.start()})),this.liveQueries&&er(this),"form"===this.name&&Na(this)}function er(t){var e,n,a;for(a=t.liveQueries.length;a--;)e=t.liveQueries[a],n=e.selector,e._remove(t.node)}function nr(t,e){var n=sh.exec(e)[0];return null===t||n.length%s}}) cannot contain nested inline partials",e,{ractive:t});var s=a?i:ir(i,e);s.partials[e]=r=o.t}return a&&(r._fn=a),r.v?r.t:r}}function ir(t,e){return t.partials.hasOwnProperty(e)?t:or(t.constructor,e)}function or(t,e){return t?t.partials.hasOwnProperty(e)?t:or(t._Parent,e):void 0}function sr(t,e){if(e){if(e.template&&e.template.p&&e.template.p[t])return e.template.p[t];if(e.parentFragment&&e.parentFragment.owner)return sr(t,e.parentFragment.owner)}}function pr(t,e){var n,a=b("components",t,e);if(a&&(n=a.components[e],!n._Parent)){var r=n.bind(a);if(r.isOwner=a.components.hasOwnProperty(e),n=r(),!n)return void m(Fo,e,"component","component",{ractive:t});"string"==typeof n&&(n=pr(t,n)),n._fn=r,a.components[e]=n}return n}function ur(){var t=this.instance.fragment.detach();return yh.fire(this.instance),t}function cr(t){return this.instance.fragment.find(t)}function lr(t,e){return this.instance.fragment.findAll(t,e)}function dr(t,e){e._test(this,!0),this.instance.fragment&&this.instance.fragment.findAllComponents(t,e)}function fr(t){return t&&t!==this.name?this.instance.fragment?this.instance.fragment.findComponent(t):null:this.instance}function hr(){return this.parentFragment.findNextNode(this)}function mr(){return this.rendered?this.instance.fragment.firstNode():null}function gr(t,e,n){function a(t){var n,a;t.value=e,t.updating||(a=t.ractive,n=t.keypath,t.updating=!0,bs.start(a),a.viewmodel.mark(n),bs.end(),t.updating=!1)}var r,i,o,s,p,u;if(r=t.obj,i=t.prop,n&&!n.configurable){if("length"===i)return;throw Error('Cannot use magic mode with property "'+i+'" - object is not configurable')}n&&(o=n.get,s=n.set),p=o||function(){return e},u=function(t){s&&s(t),e=o?o():t,u._ractiveWrappers.forEach(a)},u._ractiveWrappers=[t],Object.defineProperty(r,i,{get:p,set:u,enumerable:!0,configurable:!0})}function vr(t,e){var n,a,r,i;if(this.adaptors)for(n=this.adaptors.length,a=0;n>a;a+=1)if(r=this.adaptors[a],r.filter(e,t,this.ractive))return i=this.wrapped[t]=r.wrap(this.ractive,e,t,yr(t)),void(i.value=e)}function br(t,e){var n,a={};if(!e)return t;e+=".";for(n in t)t.hasOwnProperty(n)&&(a[e+n]=t[n]);return a}function yr(t){var e;return Gh[t]||(e=t?t+".":"",Gh[t]=function(n,a){var r;return"string"==typeof n?(r={},r[e+n]=a,r):"object"==typeof n?e?br(n,t):n:void 0}),Gh[t]}function _r(t){var e,n,a=[$o];for(e=t.length;e--;)for(n=t[e].parent;n&&!n.isRoot;)-1===t.indexOf(n)&&R(a,n),n=n.parent;return a}function xr(t,e,n){var a;kr(t,e),n||(a=e.wildcardMatches(),a.forEach(function(n){wr(t,n,e)}))}function wr(t,e,n){var a,r,i;e=e.str||e,a=t.depsMap.patternObservers,r=a&&a[e],r&&r.forEach(function(e){i=n.join(e.lastKey),kr(t,i),wr(t,e,i)})}function kr(t,e){t.patternObservers.forEach(function(t){t.regex.test(e.str)&&t.update(e)})}function Sr(){function t(t){var a=t.key;t.viewmodel===o?(o.clearCache(a.str),t.invalidate(),n.push(a),e(a)):t.viewmodel.mark(a)}function e(n){var a,r;o.noCascade.hasOwnProperty(n.str)||((r=o.deps.computed[n.str])&&r.forEach(t),(a=o.depsMap.computed[n.str])&&a.forEach(e))}var n,a,r,i=this,o=this,s={};return n=this.changes,n.length?(n.slice().forEach(e),a=zh(n),a.forEach(function(e){var a;-1===n.indexOf(e)&&(a=o.deps.computed[e.str])&&a.forEach(t)}),this.changes=[],this.patternObservers.length&&(a.forEach(function(t){return Wh(i,t,!0)}),n.forEach(function(t){return Wh(i,t)})),this.deps.observers&&(a.forEach(function(t){return Er(i,null,t,"observers")}),Pr(this,n,"observers")),this.deps["default"]&&(r=[],a.forEach(function(t){return Er(i,r,t,"default")}),r.length&&Cr(this,r,n),Pr(this,n,"default")),n.forEach(function(t){s[t.str]=i.get(t)}),this.implicitChanges={},this.noCascade={},s):void 0}function Er(t,e,n,a){var r,i;(r=Ar(t,n,a))&&(i=t.get(n),r.forEach(function(t){e&&t.refineValue?e.push(t):t.setValue(i)}))}function Cr(t,e,n){e.forEach(function(e){for(var a=!1,r=0,i=n.length,o=[];i>r;){var s=n[r];if(s===e.keypath){a=!0;break}s.slice(0,e.keypath.length)===e.keypath&&o.push(s),r++}a&&e.setValue(t.get(e.keypath)),o.length&&e.refineValue(o)})}function Pr(t,e,n){function a(t){t.forEach(r),t.forEach(i)}function r(e){var a=Ar(t,e,n);a&&s.push({keypath:e,deps:a})}function i(e){var r;(r=t.depsMap[n][e.str])&&a(r)}function o(e){var n=t.get(e.keypath);e.deps.forEach(function(t){return t.setValue(n)})}var s=[];a(e),s.forEach(o)}function Ar(t,e,n){var a=t.deps[n];return a?a[e.str]:null}function Or(){this.captureGroups.push([])}function Tr(t,e){var n,a;if(e||(a=this.wrapped[t])&&a.teardown()!==!1&&(this.wrapped[t]=null),this.cache[t]=void 0,n=this.cacheMap[t])for(;n.length;)this.clearCache(n.pop())}function Rr(t,e){var n=e.firstKey;return!(n in t.data||n in t.computations||n in t.mappings)}function Mr(t,e){var n=new Xh(t,e);return this.ready&&n.init(this),this.computations[t.str]=n}function Lr(t,e){var n,a,r,i,o,s=this.cache,p=t.str;if(e=e||nm,e.capture&&(i=D(this.captureGroups))&&(~i.indexOf(t)||i.push(t)),Mo.call(this.mappings,t.firstKey))return this.mappings[t.firstKey].get(t,e);if(t.isSpecial)return t.value;if(void 0===s[p]?((a=this.computations[p])&&!a.bypass?(n=a.get(),this.adapt(p,n)):(r=this.wrapped[p])?n=r.value:t.isRoot?(this.adapt("",this.data),n=this.data):n=jr(this,t),s[p]=n):n=s[p],!e.noUnwrap&&(r=this.wrapped[p])&&(n=r.get()),t.isRoot&&e.fullRootGet)for(o in this.mappings)n[o]=this.mappings[o].getValue();return n===tm?void 0:n}function jr(t,e){var n,a,r,i;return n=t.get(e.parent),(i=t.wrapped[e.parent.str])&&(n=i.get()),null!==n&&void 0!==n?((a=t.cacheMap[e.parent.str])?-1===a.indexOf(e.str)&&a.push(e.str):t.cacheMap[e.parent.str]=[e.str],"object"!=typeof n||e.lastKey in n?(r=n[e.lastKey],t.adapt(e.str,r,!1),t.cache[e.str]=r,r):t.cache[e.str]=tm):void 0}function Dr(){var t;for(t in this.computations)this.computations[t].init(this)}function Nr(t,e){var n=this.mappings[t.str]=new im(t,e);return n.initViewmodel(this),n}function Fr(t,e){var n,a=t.str;e&&(e.implicit&&(this.implicitChanges[a]=!0),e.noCascade&&(this.noCascade[a]=!0)),(n=this.computations[a])&&n.invalidate(),-1===this.changes.indexOf(t)&&this.changes.push(t);var r=e?e.keepExistingWrapper:!1;this.clearCache(a,r),this.ready&&this.onchange()}function Ir(t,e,n,a){var r,i,o,s;if(this.mark(t),a&&a.compare){o=Vr(a.compare);try{r=e.map(o),i=n.map(o)}catch(p){m('merge(): "%s" comparison failed. Falling back to identity checking',t),r=e,i=n}}else r=e,i=n;s=sm(r,i),this.smartUpdate(t,n,s,e.length!==n.length)}function Br(t){return JSON.stringify(t)}function Vr(t){if(t===!0)return Br;if("string"==typeof t)return um[t]||(um[t]=function(e){return e[t]}),um[t];if("function"==typeof t)return t;throw Error("The `compare` option must be a function, or a string representing an identifying field (or `true` to use JSON.stringify)")}function qr(t,e){var n,a,r,i=void 0===arguments[2]?"default":arguments[2];e.isStatic||((n=this.mappings[t.firstKey])?n.register(t,e,i):(a=this.deps[i]||(this.deps[i]={}),r=a[t.str]||(a[t.str]=[]),r.push(e),this.depsMap[i]||(this.depsMap[i]={}),t.isRoot||Ur(this,t,i)))}function Ur(t,e,n){for(var a,r,i;!e.isRoot;)a=t.depsMap[n],r=a[e.parent.str]||(a[e.parent.str]=[]),i=e.str,void 0===r["_"+i]&&(r["_"+i]=0,r.push(e)),r["_"+i]+=1,e=e.parent}function Gr(){return this.captureGroups.pop()}function zr(t){this.data=t,this.clearCache("")}function Wr(t,e){var n,a,r,i,o=void 0===arguments[2]?{}:arguments[2];if(!o.noMapping&&(n=this.mappings[t.firstKey]))return n.set(t,e);if(a=this.computations[t.str]){if(a.setting)return;a.set(e),e=a.get()}s(this.cache[t.str],e)||(r=this.wrapped[t.str],r&&r.reset&&(i=r.reset(e)!==!1,i&&(e=r.get())),a||i||Hr(this,t,e),o.silent?this.clearCache(t.str):this.mark(t))}function Hr(t,e,n){var a,r,i,o;i=function(){a.set?a.set(e.lastKey,n):(r=a.get(),o())},o=function(){r||(r=Fh(e.lastKey),t.set(e.parent,r,{silent:!0})),r[e.lastKey]=n},a=t.wrapped[e.parent.str],a?i():(r=t.get(e.parent),(a=t.wrapped[e.parent.str])?i():o())}function Kr(t,e,n){var a,r,i,o=this;if(r=n.length,n.forEach(function(e,n){-1===e&&o.mark(t.join(n),gm)}),this.set(t,e,{silent:!0}),(a=this.deps["default"][t.str])&&a.filter(Qr).forEach(function(t){return t.shuffle(n,e)}),r!==e.length){for(this.mark(t.join("length"),mm),i=n.touchedFrom;ii;i+=1)this.mark(t.join(i),gm)}}function Qr(t){return"function"==typeof t.shuffle}function Yr(){var t,e=this;for(Object.keys(this.cache).forEach(function(t){return e.clearCache(t)});t=this.unresolvedImplicitDependencies.pop();)t.teardown()}function $r(t,e){var n,a,r,i=void 0===arguments[2]?"default":arguments[2];if(!e.isStatic){if(n=this.mappings[t.firstKey])return n.unregister(t,e,i);if(a=this.deps[i][t.str],r=a.indexOf(e),-1===r)throw Error("Attempted to remove a dependant that was no longer registered! This should not happen. If you are seeing this bug in development please raise an issue at https://github.com/RactiveJS/Ractive/issues - thanks");a.splice(r,1),t.isRoot||Jr(this,t,i)}}function Jr(t,e,n){for(var a,r;!e.isRoot;)a=t.depsMap[n],r=a[e.parent.str],r["_"+e.str]-=1,r["_"+e.str]||(N(r,e),r["_"+e.str]=void 0),e=e.parent}function Xr(t){this.hook=new is(t),this.inProcess={},this.queue={}}function Zr(t,e){return t[e._guid]||(t[e._guid]=[])}function ti(t,e){var n=Zr(t.queue,e);for(t.hook.fire(e);n.length;)ti(t,n.shift());delete t.queue[e._guid]}function ei(t,e){var n,a={};for(n in e)a[n]=ni(t,n,e[n]);return a}function ni(t,e,n){var a,r;return"function"==typeof n&&(a=ri(n,t)),"string"==typeof n&&(a=ai(t,n)),"object"==typeof n&&("string"==typeof n.get?a=ai(t,n.get):"function"==typeof n.get?a=ri(n.get,t):l("`%s` computation must have a `get()` method",e),
"function"==typeof n.set&&(r=ri(n.set,t))),{getter:a,setter:r}}function ai(t,e){var n,a,r;return n="return ("+e.replace(km,function(t,e){return a=!0,'__ractive.get("'+e+'")'})+");",a&&(n="var __ractive = this; "+n),r=Function(n),a?r.bind(t):r}function ri(t,e){return/this/.test(""+t)?t.bind(e):t}function ii(e){var n,r,i=void 0===arguments[1]?{}:arguments[1],o=void 0===arguments[2]?{}:arguments[2];if(Mg.DEBUG&&Ro(),pi(e,o),Eo(e,"data",{get:ui}),Sm.fire(e,i),Am.forEach(function(t){e[t]=a(So(e.constructor[t]||null),i[t])}),r=new _m({adapt:oi(e,e.adapt,i),data:Wp.init(e.constructor,e,i),computed:wm(e,a(So(e.constructor.prototype.computed),i.computed)),mappings:o.mappings,ractive:e,onchange:function(){return bs.addRactive(e)}}),e.viewmodel=r,r.init(),uu.init(e.constructor,e,i),Em.fire(e),Cm.begin(e),e.template){var s=void 0;(o.cssIds||e.cssId)&&(s=o.cssIds?o.cssIds.slice():[],e.cssId&&s.push(e.cssId)),e.fragment=new rg({template:e.template,root:e,owner:e,cssIds:s})}if(Cm.end(e),n=t(e.el)){var p=e.render(n,e.append);Mg.DEBUG_PROMISES&&p["catch"](function(t){throw g("Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\n Ractive.DEBUG_PROMISES = false;"),m("An error happened during rendering",{ractive:e}),t.stack&&d(t.stack),t})}}function oi(t,e,n){function a(e){return"string"==typeof e&&(e=v("adaptors",t,e),e||l(Io(e,"adaptor"))),e}var r,i,o;if(e=e.map(a),r=j(n.adapt).map(a),r=si(e,r),i="magic"in n?n.magic:t.magic,o="modifyArrays"in n?n.modifyArrays:t.modifyArrays,i){if(!eo)throw Error("Getters and setters (magic mode) are not supported in this browser");o&&r.push(qh),r.push(Vh)}return o&&r.push(Dh),r}function si(t,e){for(var n=t.slice(),a=e.length;a--;)~n.indexOf(e[a])||n.push(e[a]);return n}function pi(t,e){t._guid="r-"+Pm++,t._subs=So(null),t._config={},t._twowayBindings=So(null),t._animations=[],t.nodes={},t._liveQueries=[],t._liveComponentQueries=[],t._boundFunctions=[],t._observers=[],e.component?(t.parent=e.parent,t.container=e.container||null,t.root=t.parent.root,t.component=e.component,e.component.instance=t,t._inlinePartials=e.inlinePartials):(t.root=t,t.parent=t.container=null)}function ui(){throw Error("Using `ractive.data` is no longer supported - you must use the `ractive.get()` API instead")}function ci(t,e,n){this.parentFragment=t.parentFragment,this.callback=n,this.fragment=new rg({template:e,root:t.root,owner:this}),this.update()}function li(t,e,n){var a;return e.r?a=Rc(t,e.r,n):e.x?a=new Dc(t,t.parentFragment,e.x,n):e.rx&&(a=new Bc(t,e.rx,n)),a}function di(t){return 1===t.length&&t[0].t===Su}function fi(t,e){var n;for(n in e)e.hasOwnProperty(n)&&hi(t.instance,t.root,n,e[n])}function hi(t,e,n,a){"string"!=typeof a&&l("Components currently only support simple events - you cannot include arguments. Sorry!"),t.on(n,function(){var t,n;return arguments.length&&arguments[0]&&arguments[0].node&&(t=Array.prototype.shift.call(arguments)),n=Array.prototype.slice.call(arguments),zs(e,a,{event:t,args:n}),!1})}function mi(t,e){var n,a;if(!e)throw Error('Component "'+this.name+'" not found');n=this.parentFragment=t.parentFragment,a=n.root,this.root=a,this.type=Ru,this.name=t.template.e,this.index=t.index,this.indexRefBindings={},this.yielders={},this.resolvers=[],Rm(this,e,t.template.a,t.template.f,t.template.p),Mm(this,t.template.v),(t.template.t0||t.template.t1||t.template.t2||t.template.o)&&m('The "intro", "outro" and "decorator" directives have no effect on components',{ractive:this.instance}),Lm(this)}function gi(t,e){function n(n){n.rebind(t,e)}var a;this.resolvers.forEach(n);for(var r in this.yielders)this.yielders[r][0]&&n(this.yielders[r][0]);(a=this.root._liveComponentQueries["_"+this.name])&&a._makeDirty()}function vi(){var t=this.instance;return t.render(this.parentFragment.getNode()),this.rendered=!0,t.fragment.detach()}function bi(){return""+this.instance.fragment}function yi(){var t=this.instance;this.resolvers.forEach(K),_i(this),t._observers.forEach(Y),t.fragment.unbind(),t.viewmodel.teardown(),t.fragment.rendered&&t.el.__ractive_instances__&&N(t.el.__ractive_instances__,t),Bm.fire(t)}function _i(t){var e,n;e=t.root;do(n=e._liveComponentQueries["_"+t.name])&&n._remove(t);while(e=e.parent)}function xi(t){this.shouldDestroy=t,this.instance.unrender()}function wi(t){var e=this;this.owner=t.owner,this.parent=this.owner.parentFragment,this.root=t.root,this.pElement=t.pElement,this.context=t.context,this.index=t.index,this.key=t.key,this.registeredIndexRefs=[],this.cssIds="cssIds"in t?t.cssIds:this.parent?this.parent.cssIds:null,this.items=t.template.map(function(n,a){return ki({parentFragment:e,pElement:t.pElement,template:n,index:a})}),this.value=this.argsList=null,this.dirtyArgs=this.dirtyValue=!0,this.bound=!0}function ki(t){if("string"==typeof t.template)return new yc(t);switch(t.template.t){case Mu:return new Hm(t);case Su:return new Wc(t);case Cu:return new ll(t);case Eu:return new Ol(t);case Pu:var e=void 0;return(e=vh(t.parentFragment.root,t.template.e))?new Um(t,e):new ih(t);case Au:return new gh(t);case Ou:return new zm(t);case Lu:return new Qm(t);default:throw Error("Something very strange happened. Please file an issue at https://github.com/ractivejs/ractive/issues. Thanks!")}}function Si(t,e){(!this.owner||this.owner.hasContext)&&w(this,"context",t,e),this.items.forEach(function(n){n.rebind&&n.rebind(t,e)})}function Ei(){var t;return 1===this.items.length?t=this.items[0].render():(t=document.createDocumentFragment(),this.items.forEach(function(e){t.appendChild(e.render())})),this.rendered=!0,t}function Ci(t){return this.items?this.items.map(t?Ai:Pi).join(""):""}function Pi(t){return""+t}function Ai(t){return t.toString(!0)}function Oi(){this.bound&&(this.items.forEach(Ti),this.bound=!1)}function Ti(t){t.unbind&&t.unbind()}function Ri(t){if(!this.rendered)throw Error("Attempted to unrender a fragment that was not rendered");this.items.forEach(function(e){return e.unrender(t)}),this.rendered=!1}function Mi(t){var e,n,a,r,i;if(t=t||{},"object"!=typeof t)throw Error("The reset method takes either no arguments, or an object containing new data");for((n=this.viewmodel.wrapped[""])&&n.reset?n.reset(t)===!1&&this.viewmodel.reset(t):this.viewmodel.reset(t),a=uu.reset(this),r=a.length;r--;)if(og.indexOf(a[r])>-1){i=!0;break}if(i){var o=void 0;this.viewmodel.mark($o),(o=this.component)&&(o.shouldDestroy=!0),this.unrender(),o&&(o.shouldDestroy=!1),this.fragment.template!==this.template&&(this.fragment.unbind(),this.fragment=new rg({template:this.template,root:this,owner:this})),e=this.render(this.el,this.anchor)}else e=bs.start(this,!0),this.viewmodel.mark($o),bs.end();return sg.fire(this,t),e}function Li(t){var e,n;Jp.init(null,this,{template:t}),e=this.transitionsEnabled,this.transitionsEnabled=!1,(n=this.component)&&(n.shouldDestroy=!0),this.unrender(),n&&(n.shouldDestroy=!1),this.fragment.unbind(),this.fragment=new rg({template:this.template,root:this,owner:this}),this.render(this.el,this.anchor),this.transitionsEnabled=e}function ji(t,e){var n,a;if(a=bs.start(this,!0),u(t)){n=t;for(t in n)n.hasOwnProperty(t)&&(e=n[t],Di(this,t,e))}else Di(this,t,e);return bs.end(),a}function Di(t,e,n){e=S(P(e)),e.isPattern?E(t,e).forEach(function(e){t.viewmodel.set(e,n)}):t.viewmodel.set(e,n)}function Ni(t,e){return Jo(this,t,void 0===e?-1:-e)}function Fi(){var t;return this.fragment.unbind(),this.viewmodel.teardown(),this._observers.forEach(Y),this.fragment.rendered&&this.el.__ractive_instances__&&N(this.el.__ractive_instances__,this),this.shouldDestroy=!0,t=this.fragment.rendered?this.unrender():us.resolve(),vg.fire(this),this._boundFunctions.forEach(Ii),t}function Ii(t){delete t.fn[t.prop]}function Bi(t){var e=this;if("string"!=typeof t)throw new TypeError(No);var n=void 0;return/\*/.test(t)?(n={},E(this,S(P(t))).forEach(function(t){n[t.str]=!e.viewmodel.get(t)}),this.set(n)):this.set(t,!this.get(t))}function Vi(){return this.fragment.toString(!0)}function qi(){var t,e;if(!this.fragment.rendered)return m("ractive.unrender() was called on a Ractive instance that was not rendered"),us.resolve();for(t=bs.start(this,!0),e=!this.component||this.component.shouldDestroy||this.shouldDestroy;this._animations[0];)this._animations[0].stop();return this.fragment.unrender(e),N(this.el.__ractive_instances__,this),xg.fire(this),bs.end(),t}function Ui(t){var e;return t=S(t)||$o,e=bs.start(this,!0),this.viewmodel.mark(t),bs.end(),Sg.fire(this,t),e}function Gi(t,e){var n,a,r;if("string"!=typeof t||e){r=[];for(a in this._twowayBindings)(!t||S(a).equalsOrStartsWith(t))&&r.push.apply(r,this._twowayBindings[a])}else r=this._twowayBindings[t];return n=zi(this,r),this.set(n)}function zi(t,e){var n={},a=[];return e.forEach(function(t){var e,r;if(!t.radioName||t.element.node.checked){if(t.checkboxName)return void(a[t.keypath.str]||t.changed()||(a.push(t.keypath),a[t.keypath.str]=t));e=t.attribute.value,r=t.getValue(),L(e,r)||s(e,r)||(n[t.keypath.str]=r)}}),a.length&&a.forEach(function(t){var e,r,i;e=a[t.str],r=e.attribute.value,i=e.getValue(),L(r,i)||(n[t.str]=i)}),n}function Wi(t,e){return"function"==typeof e&&/_super/.test(t)}function Hi(t){for(var e={};t;)Ki(t,e),Yi(t,e),t=t._Parent!==Mg?t._Parent:!1;return e}function Ki(t,e){ru.forEach(function(n){Qi(n.useDefaults?t.prototype:t,e,n.name)})}function Qi(t,e,n){var a,r=Object.keys(t[n]);r.length&&((a=e[n])||(a=e[n]={}),r.filter(function(t){return!(t in a)}).forEach(function(e){return a[e]=t[n][e]}))}function Yi(t,e){Object.keys(t.prototype).forEach(function(n){if("computed"!==n){var a=t.prototype[n];if(n in e){if("function"==typeof e[n]&&"function"==typeof a&&e[n]._method){var r=void 0,i=a._method;i&&(a=a._method),r=Pg(e[n]._method,a),i&&(r._method=r),e[n]=r}}else e[n]=a._method?a._method:a}})}function $i(){for(var t=arguments.length,e=Array(t),n=0;t>n;n++)e[n]=arguments[n];return e.length?e.reduce(Ji,this):Ji(this)}function Ji(t){var e,n,r=void 0===arguments[1]?{}:arguments[1];return r.prototype instanceof Mg&&(r=Ag(r)),e=function(t){return this instanceof e?void Om(this,t):new e(t)},n=So(t.prototype),n.constructor=e,Co(e,{defaults:{value:n},extend:{value:$i,writable:!0,configurable:!0},_Parent:{value:t}}),uu.extend(t,n,r),Wp.extend(t,n,r),r.computed&&(n.computed=a(So(t.prototype.computed),r.computed)),e.prototype=n,e}var Xi,Zi,to,eo,no,ao,ro,io=3,oo={el:void 0,append:!1,template:{v:io,t:[]},preserveWhitespace:!1,sanitize:!1,stripComments:!0,delimiters:["{{","}}"],tripleDelimiters:["{{{","}}}"],interpolate:!1,data:{},computed:{},magic:!1,modifyArrays:!0,adapt:[],isolated:!1,twoway:!0,lazy:!1,noIntro:!1,transitionsEnabled:!0,complete:void 0,css:null,noCssTransform:!1},so=oo,po={linear:function(t){return t},easeIn:function(t){return Math.pow(t,3)},easeOut:function(t){return Math.pow(t-1,3)+1},easeInOut:function(t){return(t/=.5)<1?.5*Math.pow(t,3):.5*(Math.pow(t-2,3)+2)}};Xi="object"==typeof document,Zi="undefined"!=typeof navigator&&/jsDom/.test(navigator.appName),to="undefined"!=typeof console&&"function"==typeof console.warn&&"function"==typeof console.warn.apply;try{Object.defineProperty({},"test",{value:0}),eo=!0}catch(uo){eo=!1}no={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},ao="undefined"==typeof document?!1:document&&document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"),ro=["o","ms","moz","webkit"];var co,lo,fo,ho,mo,go,vo,bo,yo;if(co=ao?function(t,e){return e&&e!==no.html?document.createElementNS(e,t):document.createElement(t)}:function(t,e){if(e&&e!==no.html)throw"This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you're trying to render SVG in an older browser. See http://docs.ractivejs.org/latest/svg-and-older-browsers for more information";return document.createElement(t)},Xi){for(fo=co("div"),ho=["matches","matchesSelector"],yo=function(t){return function(e,n){return e[t](n)}},vo=ho.length;vo--&&!lo;)if(mo=ho[vo],fo[mo])lo=yo(mo);else for(bo=ro.length;bo--;)if(go=ro[vo]+mo.substr(0,1).toUpperCase()+mo.substring(1),fo[go]){lo=yo(go);break}lo||(lo=function(t,e){var n,a,r;for(a=t.parentNode,a||(fo.innerHTML="",a=fo,t=t.cloneNode(),fo.appendChild(t)),n=a.querySelectorAll(e),r=n.length;r--;)if(n[r]===t)return!0;return!1})}else lo=null;var _o,xo,wo,ko=function(){};"undefined"==typeof window?wo=null:(_o=window,xo=_o.document,wo={},xo||(wo=null),Date.now||(Date.now=function(){return+new Date}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}),Object.keys||(Object.keys=function(){var t=Object.prototype.hasOwnProperty,e=!{toString:null}.propertyIsEnumerable("toString"),n=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],a=n.length;return function(r){if("object"!=typeof r&&"function"!=typeof r||null===r)throw new TypeError("Object.keys called on non-object");var i=[];for(var o in r)t.call(r,o)&&i.push(o);if(e)for(var s=0;a>s;s++)t.call(r,n[s])&&i.push(n[s]);return i}}()),Array.prototype.indexOf||(Array.prototype.indexOf=function(t,e){var n;for(void 0===e&&(e=0),0>e&&(e+=this.length),0>e&&(e=0),n=this.length;n>e;e++)if(this.hasOwnProperty(e)&&this[e]===t)return e;return-1}),Array.prototype.forEach||(Array.prototype.forEach=function(t,e){var n,a;for(n=0,a=this.length;a>n;n+=1)this.hasOwnProperty(n)&&t.call(e,this[n],n,this)}),Array.prototype.map||(Array.prototype.map=function(t,e){var n,a,r,i=this,o=[];for(i instanceof String&&(i=""+i,r=!0),n=0,a=i.length;a>n;n+=1)(i.hasOwnProperty(n)||r)&&(o[n]=t.call(e,i[n],n,i));return o}),"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(t,e){var n,a,r,i;if("function"!=typeof t)throw new TypeError(t+" is not a function");for(r=this.length,i=!1,arguments.length>1&&(a=e,i=!0),n=0;r>n;n+=1)this.hasOwnProperty(n)?i&&(a=t(a,this[n],n,this)):(a=this[n],i=!0);if(!i)throw new TypeError("Reduce of empty array with no initial value");return a}),Array.prototype.filter||(Array.prototype.filter=function(t,e){var n,a,r=[];for(n=0,a=this.length;a>n;n+=1)this.hasOwnProperty(n)&&t.call(e,this[n],n,this)&&(r[r.length]=this[n]);return r}),Array.prototype.every||(Array.prototype.every=function(t,e){var n,a,r;if(null==this)throw new TypeError;if(n=Object(this),a=n.length>>>0,"function"!=typeof t)throw new TypeError;for(r=0;a>r;r+=1)if(r in n&&!t.call(e,n[r],r,n))return!1;return!0}),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(t){var e,n,a,r,i=[].slice;if("function"!=typeof this)throw new TypeError("Function.prototype.bind called on non-function");return e=i.call(arguments,1),n=this,a=function(){},r=function(){var r=this instanceof a&&t?this:t;return n.apply(r,e.concat(i.call(arguments)))},a.prototype=this.prototype,r.prototype=new a,r}),_o.addEventListener||!function(t,e){var n,a,r,i,o,s;t.appearsToBeIELessEqual8=!0,n=function(t,e){var n,a=this;for(n in t)a[n]=t[n];a.currentTarget=e,a.target=t.srcElement||e,a.timeStamp=+new Date,a.preventDefault=function(){t.returnValue=!1},a.stopPropagation=function(){t.cancelBubble=!0}},a=function(t,e){var a,r,i=this;a=i.listeners||(i.listeners=[]),r=a.length,a[r]=[e,function(t){e.call(i,new n(t,i))}],i.attachEvent("on"+t,a[r][1])},r=function(t,e){var n,a,r=this;if(r.listeners)for(n=r.listeners,a=n.length;a--;)n[a][0]===e&&r.detachEvent("on"+t,n[a][1])},t.addEventListener=e.addEventListener=a,t.removeEventListener=e.removeEventListener=r,"Element"in t?(t.Element.prototype.addEventListener=a,t.Element.prototype.removeEventListener=r):(s=e.createElement,e.createElement=function(t){var e=s(t);return e.addEventListener=a,e.removeEventListener=r,e},i=e.getElementsByTagName("head")[0],o=e.createElement("style"),i.insertBefore(o,i.firstChild))}(_o,xo),_o.getComputedStyle||(wo.getComputedStyle=function(){function t(n,a,r,i){var o,s=a[r],p=parseFloat(s),u=s.split(/\d/)[0];return isNaN(p)&&/^thin|medium|thick$/.test(s)&&(p=e(s),u=""),i=null!=i?i:/%|em/.test(u)&&n.parentElement?t(n.parentElement,n.parentElement.currentStyle,"fontSize",null):16,o="fontSize"==r?i:/width/i.test(r)?n.clientWidth:n.clientHeight,"em"==u?p*i:"in"==u?96*p:"pt"==u?96*p/72:"%"==u?p/100*o:p}function e(t){var e,n;return i[t]||(e=document.createElement("div"),e.style.display="block",e.style.position="fixed",e.style.width=e.style.height="0",e.style.borderRight=t+" solid black",document.getElementsByTagName("body")[0].appendChild(e),n=e.getBoundingClientRect(),i[t]=n.right-n.left),i[t]}function n(t,e){var n="border"==e?"Width":"",a=e+"Top"+n,r=e+"Right"+n,i=e+"Bottom"+n,o=e+"Left"+n;t[e]=(t[a]==t[r]==t[i]==t[o]?[t[a]]:t[a]==t[i]&&t[o]==t[r]?[t[a],t[r]]:t[o]==t[r]?[t[a],t[r],t[i]]:[t[a],t[r],t[i],t[o]]).join(" ")}function a(e){var a,r,i,s;a=e.currentStyle,r=this,i=t(e,a,"fontSize",null);for(s in a)"normal"===a[s]&&o.hasOwnProperty(s)?r[s]=o[s]:/width|height|margin.|padding.|border.+W/.test(s)?"auto"===a[s]?/^width|height/.test(s)?r[s]=("width"===s?e.clientWidth:e.clientHeight)+"px":/(?:padding)?Top|Bottom$/.test(s)&&(r[s]="0px"):r[s]=t(e,a,s,i)+"px":"styleFloat"===s?r["float"]=a[s]:r[s]=a[s];return n(r,"margin"),n(r,"padding"),n(r,"border"),r.fontSize=i+"px",r}function r(t){return new a(t)}var i={},o={fontWeight:400,lineHeight:1.2,letterSpacing:0};return a.prototype={constructor:a,getPropertyPriority:ko,getPropertyValue:function(t){return this[t]||""},item:ko,removeProperty:ko,setProperty:ko,getPropertyCSSValue:ko},r}()));var So,Eo,Co,Po=wo;try{Object.defineProperty({},"test",{value:0}),Xi&&Object.defineProperty(document.createElement("div"),"test",{value:0}),Eo=Object.defineProperty}catch(Ao){Eo=function(t,e,n){t[e]=n.value}}try{try{Object.defineProperties({},{test:{value:0}})}catch(Ao){throw Ao}Xi&&Object.defineProperties(co("div"),{test:{value:0}}),Co=Object.defineProperties}catch(Ao){Co=function(t,e){var n;for(n in e)e.hasOwnProperty(n)&&Eo(t,n,e[n])}}try{Object.create(null),So=Object.create}catch(Ao){So=function(){var t=function(){};return function(e,n){var a;return null===e?{}:(t.prototype=e,a=new t,n&&Object.defineProperties(a,n),a)}}()}var Oo,To,Ro,Mo=Object.prototype.hasOwnProperty,Lo=Object.prototype.toString,jo=/^\[object (?:Array|FileList)\]$/,Do={};to?!function(){var t=["%cRactive.js %c0.7.3 %cin debug mode, %cmore...","color: rgb(114, 157, 52); font-weight: normal;","color: rgb(85, 85, 85); font-weight: normal;","color: rgb(85, 85, 85); font-weight: normal;","color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;"],e="You're running Ractive 0.7.3 in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\n\nTo disable debug mode, add this line at the start of your app:\n Ractive.DEBUG = false;\n\nTo disable debug mode when your app is minified, add this snippet:\n Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\n\nGet help and support:\n http://docs.ractivejs.org\n http://stackoverflow.com/questions/tagged/ractivejs\n http://groups.google.com/forum/#!forum/ractive-js\n http://twitter.com/ractivejs\n\nFound a bug? Raise an issue:\n https://github.com/ractivejs/ractive/issues\n\n";Ro=function(){var n=!!console.groupCollapsed;console[n?"groupCollapsed":"log"].apply(console,t),console.log(e),n&&console.groupEnd(t),Ro=ko},To=function(t,e){if(Ro(),"object"==typeof e[e.length-1]){var n=e.pop(),a=n?n.ractive:null;if(a){var r=void 0;a.component&&(r=a.component.name)&&(t="<"+r+"> "+t);var i=void 0;(i=n.node||a.fragment&&a.fragment.rendered&&a.find("*"))&&e.push(i)}}console.warn.apply(console,["%cRactive.js: %c"+t,"color: rgb(114, 157, 52);","color: rgb(85, 85, 85);"].concat(e))},Oo=function(){console.log.apply(console,arguments)}}():To=Oo=Ro=ko;var No="Bad arguments",Fo='A function was specified for "%s" %s, but no %s was returned',Io=function(t,e){return'Missing "'+t+'" '+e+" plugin. You may need to download a plugin via http://docs.ractivejs.org/latest/plugins#"+e+"s"},Bo=function(t,e,n,a){if(t===e)return y(e);if(a){var r=v("interpolators",n,a);if(r)return r(t,e)||y(e);l(Io(a,"interpolator"))}return Uo.number(t,e)||Uo.array(t,e)||Uo.object(t,e)||y(e)},Vo=Bo,qo={number:function(t,e){var n;return p(t)&&p(e)?(t=+t,e=+e,n=e-t,n?function(e){return t+e*n}:function(){return t}):null},array:function(t,e){var n,a,r,o;if(!i(t)||!i(e))return null;for(n=[],a=[],o=r=Math.min(t.length,e.length);o--;)a[o]=Vo(t[o],e[o]);for(o=r;o=this.duration?(null!==i&&(bs.start(this.root),this.root.viewmodel.set(i,this.to),bs.end()),this.step&&this.step(1,this.to),this.complete(this.to),r=this.root._animations.indexOf(this),-1===r&&m("Animation was not found"),this.root._animations.splice(r,1),this.running=!1,!1):(e=this.easing?this.easing(t/this.duration):t/this.duration,null!==i&&(n=this.interpolator(e),bs.start(this.root),this.root.viewmodel.set(i,n),bs.end()),this.step&&this.step(e,n),!0)):!1},stop:function(){var t;this.running=!1,t=this.root._animations.indexOf(this),-1===t&&m("Animation was not found"),this.root._animations.splice(t,1)}};var ks=ws,Ss=nt,Es={stop:ko},Cs=rt,Ps=new is("detach"),As=it,Os=ot,Ts=function(){var t,e,n;t=this._root[this._isComponentQuery?"liveComponentQueries":"liveQueries"],e=this.selector,n=t.indexOf(e),-1!==n&&(t.splice(n,1),t[e]=null)},Rs=function(t,e){var n,a,r,i,o,s,p,u,c,l;for(n=pt(t.component||t._ractive.proxy),a=pt(e.component||e._ractive.proxy),r=D(n),i=D(a);r&&r===i;)n.pop(),a.pop(),o=r,r=D(n),i=D(a);if(r=r.component||r,i=i.component||i,c=r.parentFragment,l=i.parentFragment,c===l)return s=c.items.indexOf(r),p=l.items.indexOf(i),s-p||n.length-a.length;if(u=o.fragments)return s=u.indexOf(c),p=u.indexOf(l),s-p||n.length-a.length;throw Error("An unexpected condition was met while comparing the position of two components. Please file an issue at https://github.com/RactiveJS/Ractive/issues - thanks!")},Ms=function(t,e){var n;return t.compareDocumentPosition?(n=t.compareDocumentPosition(e),2&n?1:-1):Rs(t,e)},Ls=function(){this.sort(this._isComponentQuery?Rs:Ms),this._dirty=!1},js=function(){var t=this;this._dirty||(this._dirty=!0,bs.scheduleTask(function(){t._sort()}))},Ds=function(t){var e=this.indexOf(this._isComponentQuery?t.instance:t);-1!==e&&this.splice(e,1)},Ns=ut,Fs=ct,Is=lt,Bs=dt,Vs=ft,qs=ht,Us={enqueue:function(t,e){t.event&&(t._eventQueue=t._eventQueue||[],t._eventQueue.push(t.event)),t.event=e},dequeue:function(t){t._eventQueue&&t._eventQueue.length?t.event=t._eventQueue.pop():delete t.event}},Gs=Us,zs=mt,Ws=bt,Hs=yt,Ks={capture:!0,noUnwrap:!0,fullRootGet:!0},Qs=_t,Ys=new is("insert"),$s=wt,Js=function(t,e,n,a){this.root=t,this.keypath=e,this.callback=n,this.defer=a.defer,this.context=a&&a.context?a.context:t};Js.prototype={init:function(t){this.value=this.root.get(this.keypath.str),t!==!1?this.update():this.oldValue=this.value},setValue:function(t){var e=this;s(t,this.value)||(this.value=t,this.defer&&this.ready?bs.scheduleTask(function(){return e.update()}):this.update())},update:function(){this.updating||(this.updating=!0,this.callback.call(this.context,this.value,this.oldValue,this.keypath.str),this.oldValue=this.value,this.updating=!1)}};var Xs,Zs=Js,tp=kt,ep=Array.prototype.slice;Xs=function(t,e,n,a){this.root=t,this.callback=n,this.defer=a.defer,this.keypath=e,this.regex=RegExp("^"+e.str.replace(/\./g,"\\.").replace(/\*/g,"([^\\.]+)")+"$"),this.values={},this.defer&&(this.proxies=[]),this.context=a&&a.context?a.context:t},Xs.prototype={init:function(t){var e,n;if(e=tp(this.root,this.keypath),t!==!1)for(n in e)e.hasOwnProperty(n)&&this.update(S(n));else this.values=e},update:function(t){var e,n=this;if(t.isPattern){e=tp(this.root,t);for(t in e)e.hasOwnProperty(t)&&this.update(S(t))}else if(!this.root.viewmodel.implicitChanges[t.str])return this.defer&&this.ready?void bs.scheduleTask(function(){return n.getProxy(t).update()}):void this.reallyUpdate(t)},reallyUpdate:function(t){var e,n,a,r;return e=t.str,n=this.root.viewmodel.get(t),this.updating?void(this.values[e]=n):(this.updating=!0,s(n,this.values[e])&&this.ready||(a=ep.call(this.regex.exec(e),1),r=[n,this.values[e],e].concat(a),this.values[e]=n,this.callback.apply(this.context,r)),void(this.updating=!1))},getProxy:function(t){var e=this;return this.proxies[t.str]||(this.proxies[t.str]={update:function(){return e.reallyUpdate(t)}}),this.proxies[t.str]}};var np,ap,rp,ip,op,sp,pp=Xs,up=St,cp={},lp=Et,dp=Ct,fp=function(t){return t.trim()},hp=function(t){return""!==t},mp=Pt,gp=At,vp=Ot,bp=Tt,yp=Array.prototype,_p=function(t){return function(e){for(var n=arguments.length,a=Array(n>1?n-1:0),r=1;n>r;r++)a[r-1]=arguments[r];var o,s,p,u,c=[];if(e=S(P(e)),o=this.viewmodel.get(e),s=o.length,!i(o))throw Error("Called ractive."+t+"('"+e.str+"'), but '"+e.str+"' does not refer to an array");return c=bp(o,t,a),u=yp[t].apply(o,a),p=bs.start(this,!0).then(function(){return u}),c?this.viewmodel.smartUpdate(e,o,c):this.viewmodel.mark(e),bs.end(),p}},xp=_p("pop"),wp=_p("push"),kp="/* Ractive.js component styles */\n",Sp=[],Ep=!1;Xi?(rp=document.createElement("style"),rp.type="text/css",ip=document.getElementsByTagName("head")[0],sp=!1,op=rp.styleSheet,ap=function(){var t=kp+Sp.map(function(t){return"\n/* {"+t.id+"} */\n"+t.styles}).join("\n");op?op.cssText=t:rp.innerHTML=t,sp||(ip.appendChild(rp),sp=!0)},np={add:function(t){Sp.push(t),Ep=!0},apply:function(){Ep&&(ap(),Ep=!1)}}):np={add:ko,apply:ko};var Cp,Pp,Ap,Op=np,Tp=Mt,Rp=new is("render"),Mp=new is("complete"),Lp={extend:function(t,e,n){e.adapt=jt(e.adapt,j(n.adapt))},init:function(){}},jp=Lp,Dp=Dt,Np=/(?:^|\})?\s*([^\{\}]+)\s*\{/g,Fp=/\/\*.*?\*\//g,Ip=/((?:(?:\[[^\]+]\])|(?:[^\s\+\>\~:]))+)((?::[^\s\+\>\~\(]+(?:\([^\)]+\))?)?\s*[\s\+\>\~]?)\s*/g,Bp=/^@media/,Vp=/\[data-ractive-css~="\{[a-z0-9-]+\}"]/g,qp=1,Up={
name:"css",extend:function(t,e,n){if(n.css){var a=qp++,r=n.noCssTransform?n.css:Dp(n.css,a);e.cssId=a,Op.add({id:a,styles:r})}},init:function(){}},Gp=Up,zp={name:"data",extend:function(t,e,n){var a=void 0,r=void 0;if(n.data&&u(n.data))for(a in n.data)r=n.data[a],r&&"object"==typeof r&&(u(r)||i(r))&&m("Passing a `data` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\n\n // this...\n data: function () {\n return {\n myObject: {}\n };\n })\n\n // instead of this:\n data: {\n myObject: {}\n }");e.data=Bt(e.data,n.data)},init:function(t,e,n){var a=Bt(t.prototype.data,n.data);return"function"==typeof a&&(a=a.call(e)),a||{}},reset:function(t){var e=this.init(t.constructor,t,t.viewmodel);return t.viewmodel.reset(e),!0}},Wp=zp,Hp=null,Kp=["preserveWhitespace","sanitize","stripComments","delimiters","tripleDelimiters","interpolate"],Qp={fromId:zt,isHashedId:Wt,isParsed:Ht,getParseOptions:Kt,createHelper:Ut,parse:Gt},Yp=Qp,$p={name:"template",extend:function(t,e,n){var a;"template"in n&&(a=n.template,"function"==typeof a?e.template=a:e.template=Jt(a,e))},init:function(t,e,n){var a,r;a="template"in n?n.template:t.prototype.template,"function"==typeof a&&(r=a,a=Yt(e,r),e._config.template={fn:r,result:a}),a=Jt(a,e),e.template=a.t,a.p&&Xt(e.partials,a.p)},reset:function(t){var e,n=Qt(t);return n?(e=Jt(n,t),t.template=e.t,Xt(t.partials,e.p,!0),!0):void 0}},Jp=$p;Cp=["adaptors","components","computed","decorators","easing","events","interpolators","partials","transitions"],Pp=function(t,e){this.name=t,this.useDefaults=e},Pp.prototype={constructor:Pp,extend:function(t,e,n){this.configure(this.useDefaults?t.defaults:t,this.useDefaults?e:e.constructor,n)},init:function(){},configure:function(t,e,n){var a,r=this.name,i=n[r];a=So(t[r]);for(var o in i)a[o]=i[o];e[r]=a},reset:function(t){var e=t[this.name],n=!1;return Object.keys(e).forEach(function(t){var a=e[t];a._fn&&(a._fn.isOwner?e[t]=a._fn:delete e[t],n=!0)}),n}},Ap=Cp.map(function(t){return new Pp(t,"computed"===t)});var Xp,Zp,tu,eu,nu,au,ru=Ap,iu=Zt,ou=ae;eu={adapt:jp,css:Gp,data:Wp,template:Jp},tu=Object.keys(so),au=oe(tu.filter(function(t){return!eu[t]})),nu=oe(tu.concat(ru.map(function(t){return t.name}))),Zp=[].concat(tu.filter(function(t){return!ru[t]&&!eu[t]}),ru,eu.data,eu.template,eu.css),Xp={extend:function(t,e,n){return re("extend",t,e,n)},init:function(t,e,n){return re("init",t,e,n)},reset:function(t){return Zp.filter(function(e){return e.reset&&e.reset(t)}).map(function(t){return t.name})},order:Zp};var su,pu,uu=Xp,cu=se,lu=pe,du=ue,fu=ce,hu=le,mu=de,gu=fe,vu=he,bu=/^\s+/;pu=function(t){this.name="ParseError",this.message=t;try{throw Error(t)}catch(e){this.stack=e.stack}},pu.prototype=Error.prototype,su=function(t,e){var n,a,r=0;for(this.str=t,this.options=e||{},this.pos=0,this.lines=this.str.split("\n"),this.lineEnds=this.lines.map(function(t){var e=r+t.length+1;return r=e,e},0),this.init&&this.init(t,e),n=[];this.posn;n+=1)if(this.pos=e,r=t[n](this))return r;return null},getLinePos:function(t){for(var e,n=0,a=0;t>=this.lineEnds[n];)a=this.lineEnds[n],n+=1;return e=t-a,[n+1,e+1,t]},error:function(t){var e=this.getLinePos(this.pos),n=e[0],a=e[1],r=this.lines[e[0]-1],i=0,o=r.replace(/\t/g,function(t,n){return n /g,lc=/&/g;var vc=function(){return e(this.node)},bc=function(t){this.type=ku,this.text=t.template};bc.prototype={detach:vc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createTextNode(this.text)),this.node},toString:function(t){return t?Se(this.text):this.text},unrender:function(t){return t?this.detach():void 0}};var yc=bc,_c=Ee,xc=Ce,wc=function(t,e,n){var a;this.ref=e,this.resolved=!1,this.root=t.root,this.parentFragment=t.parentFragment,this.callback=n,a=ls(t.root,e,t.parentFragment),void 0!=a?this.resolve(a):bs.addUnresolved(this)};wc.prototype={resolve:function(t){this.keypath&&!t&&bs.addUnresolved(this),this.resolved=!0,this.keypath=t,this.callback(t)},forceResolution:function(){this.resolve(S(this.ref))},rebind:function(t,e){var n;void 0!=this.keypath&&(n=this.keypath.replace(t,e),void 0!==n&&this.resolve(n))},unbind:function(){this.resolved||bs.removeUnresolved(this)}};var kc=wc,Sc=function(t,e,n){this.parentFragment=t.parentFragment,this.ref=e,this.callback=n,this.rebind()},Ec={"@keypath":{prefix:"c",prop:["context"]},"@index":{prefix:"i",prop:["index"]},"@key":{prefix:"k",prop:["key","index"]}};Sc.prototype={rebind:function(){var t,e=this.ref,n=this.parentFragment,a=Ec[e];if(!a)throw Error('Unknown special reference "'+e+'" - valid references are @index, @key and @keypath');if(this.cached)return this.callback(S("@"+a.prefix+Pe(this.cached,a)));if(-1!==a.prop.indexOf("index")||-1!==a.prop.indexOf("key"))for(;n;){if(n.owner.currentSubtype===Bu&&void 0!==(t=Pe(n,a)))return this.cached=n,n.registerIndexRef(this),this.callback(S("@"+a.prefix+t));n=!n.parent&&n.owner&&n.owner.component&&n.owner.component.parentFragment&&!n.owner.component.instance.isolated?n.owner.component.parentFragment:n.parent}else for(;n;){if(void 0!==(t=Pe(n,a)))return this.callback(S("@"+a.prefix+t.str));n=n.parent}},unbind:function(){this.cached&&this.cached.unregisterIndexRef(this)}};var Cc=Sc,Pc=function(t,e,n){this.parentFragment=t.parentFragment,this.ref=e,this.callback=n,e.ref.fragment.registerIndexRef(this),this.rebind()};Pc.prototype={rebind:function(){var t,e=this.ref.ref;t="k"===e.ref.t?"k"+e.fragment.key:"i"+e.fragment.index,void 0!==t&&this.callback(S("@"+t))},unbind:function(){this.ref.ref.fragment.unregisterIndexRef(this)}};var Ac=Pc,Oc=Ae;Ae.resolve=function(t){var e,n,a={};for(e in t.refs)n=t.refs[e],a[n.ref.n]="k"===n.ref.t?n.fragment.key:n.fragment.index;return a};var Tc,Rc=Oe,Mc=Te,Lc={},jc=Function.prototype.bind;Tc=function(t,e,n,a){var r,i=this;r=t.root,this.root=r,this.parentFragment=e,this.callback=a,this.owner=t,this.str=n.s,this.keypaths=[],this.pending=n.r.length,this.refResolvers=n.r.map(function(t,e){return Rc(i,t,function(t){i.resolve(e,t)})}),this.ready=!0,this.bubble()},Tc.prototype={bubble:function(){this.ready&&(this.uniqueString=Me(this.str,this.keypaths),this.keypath=Le(this.uniqueString),this.createEvaluator(),this.callback(this.keypath))},unbind:function(){for(var t;t=this.refResolvers.pop();)t.unbind()},resolve:function(t,e){this.keypaths[t]=e,this.bubble()},createEvaluator:function(){var t,e,n,a,r,i=this;a=this.keypath,t=this.root.viewmodel.computations[a.str],t?this.root.viewmodel.mark(a):(r=Mc(this.str,this.refResolvers.length),e=this.keypaths.map(function(t){var e;return"undefined"===t?function(){}:t.isSpecial?(e=t.value,function(){return e}):function(){var e=i.root.viewmodel.get(t,{noUnwrap:!0,fullRootGet:!0});return"function"==typeof e&&(e=De(e,i.root)),e}}),n={deps:this.keypaths.filter(je),getter:function(){var t=e.map(Re);return r.apply(null,t)}},t=this.root.viewmodel.compute(a,n))},rebind:function(t,e){this.refResolvers.forEach(function(n){return n.rebind(t,e)})}};var Dc=Tc,Nc=function(t,e,n){var a=this;this.resolver=e,this.root=e.root,this.parentFragment=n,this.viewmodel=e.root.viewmodel,"string"==typeof t?this.value=t:t.t===Nu?this.refResolver=Rc(this,t.n,function(t){a.resolve(t)}):new Dc(e,n,t,function(t){a.resolve(t)})};Nc.prototype={resolve:function(t){this.keypath&&this.viewmodel.unregister(this.keypath,this),this.keypath=t,this.value=this.viewmodel.get(t),this.bind(),this.resolver.bubble()},bind:function(){this.viewmodel.register(this.keypath,this)},rebind:function(t,e){this.refResolver&&this.refResolver.rebind(t,e)},setValue:function(t){this.value=t,this.resolver.bubble()},unbind:function(){this.keypath&&this.viewmodel.unregister(this.keypath,this),this.refResolver&&this.refResolver.unbind()},forceResolution:function(){this.refResolver&&this.refResolver.forceResolution()}};var Fc=Nc,Ic=function(t,e,n){var a,r,i,o,s=this;this.parentFragment=o=t.parentFragment,this.root=a=t.root,this.mustache=t,this.ref=r=e.r,this.callback=n,this.unresolved=[],(i=ls(a,r,o))?this.base=i:this.baseResolver=new kc(this,r,function(t){s.base=t,s.baseResolver=null,s.bubble()}),this.members=e.m.map(function(t){return new Fc(t,s,o)}),this.ready=!0,this.bubble()};Ic.prototype={getKeypath:function(){var t=this.members.map(Ne);return!t.every(Fe)||this.baseResolver?null:this.base.join(t.join("."))},bubble:function(){this.ready&&!this.baseResolver&&this.callback(this.getKeypath())},unbind:function(){this.members.forEach(K)},rebind:function(t,e){var n;if(this.base){var a=this.base.replace(t,e);a&&a!==this.base&&(this.base=a,n=!0)}this.members.forEach(function(a){a.rebind(t,e)&&(n=!0)}),n&&this.bubble()},forceResolution:function(){this.baseResolver&&(this.base=S(this.ref),this.baseResolver.unbind(),this.baseResolver=null),this.members.forEach(Ie),this.bubble()}};var Bc=Ic,Vc=Be,qc=Ve,Uc=qe,Gc={getValue:xc,init:Vc,resolve:qc,rebind:Uc},zc=function(t){this.type=Su,Gc.init(this,t)};zc.prototype={update:function(){this.node.data=void 0==this.value?"":this.value},resolve:Gc.resolve,rebind:Gc.rebind,detach:vc,unbind:_c,render:function(){return this.node||(this.node=document.createTextNode(n(this.value))),this.node},unrender:function(t){t&&e(this.node)},getValue:Gc.getValue,setValue:function(t){var e;this.keypath&&(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),s(t,this.value)||(this.value=t,this.parentFragment.bubble(),this.node&&bs.addView(this))},firstNode:function(){return this.node},toString:function(t){var e=""+n(this.value);return t?Se(e):e}};var Wc=zc,Hc=Ue,Kc=Ge,Qc=ze,Yc=We,$c=He,Jc=Ke,Xc=Qe,Zc=Ye,tl=$e,el=function(t,e){Gc.rebind.call(this,t,e)},nl=Xe,al=Ze,rl=ln,il=dn,ol=fn,sl=gn,pl=function(t){this.type=Cu,this.subtype=this.currentSubtype=t.template.n,this.inverted=this.subtype===Iu,this.pElement=t.pElement,this.fragments=[],this.fragmentsToCreate=[],this.fragmentsToRender=[],this.fragmentsToUnrender=[],t.template.i&&(this.indexRefs=t.template.i.split(",").map(function(t,e){return{n:t,t:0===e?"k":"i"}})),this.renderedFragments=[],this.length=0,Gc.init(this,t)};pl.prototype={bubble:Hc,detach:Kc,find:Qc,findAll:Yc,findAllComponents:$c,findComponent:Jc,findNextNode:Xc,firstNode:Zc,getIndexRef:function(t){if(this.indexRefs)for(var e=this.indexRefs.length;e--;){var n=this.indexRefs[e];if(n.n===t)return n}},getValue:Gc.getValue,shuffle:tl,rebind:el,render:nl,resolve:Gc.resolve,setValue:al,toString:rl,unbind:il,unrender:ol,update:sl};var ul,cl,ll=pl,dl=vn,fl=bn,hl=yn,ml=_n,gl={};try{co("table").innerHTML="foo"}catch(Ao){ul=!0,cl={TABLE:['"],THEAD:['"],TBODY:['"],TR:['"],SELECT:[''," "]}}var vl=function(t,e,n){var a,r,i,o,s,p=[];if(null!=t&&""!==t){for(ul&&(r=cl[e.tagName])?(a=xn("DIV"),a.innerHTML=r[0]+t+r[1],a=a.querySelector(".x"),"SELECT"===a.tagName&&(i=a.options[a.selectedIndex])):e.namespaceURI===no.svg?(a=xn("DIV"),a.innerHTML=''+t+" ",a=a.querySelector(".x")):(a=xn(e.tagName),a.innerHTML=t,"SELECT"===a.tagName&&(i=a.options[a.selectedIndex]));o=a.firstChild;)p.push(o),n.appendChild(o);if("SELECT"===e.tagName)for(s=p.length;s--;)p[s]!==i&&(p[s].selected=!1)}return p},bl=wn,yl=Sn,_l=En,xl=Cn,wl=Pn,kl=An,Sl=function(t){this.type=Eu,Gc.init(this,t)};Sl.prototype={detach:dl,find:fl,findAll:hl,firstNode:ml,getValue:Gc.getValue,rebind:Gc.rebind,render:yl,resolve:Gc.resolve,setValue:_l,toString:xl,unbind:_c,unrender:wl,update:kl};var El,Cl,Pl,Al,Ol=Sl,Tl=function(){this.parentFragment.bubble()},Rl=On,Ml=function(t){return this.node?lo(this.node,t)?this.node:this.fragment&&this.fragment.find?this.fragment.find(t):void 0:null},Ll=function(t,e){e._test(this,!0)&&e.live&&(this.liveQueries||(this.liveQueries=[])).push(e),this.fragment&&this.fragment.findAll(t,e)},jl=function(t,e){this.fragment&&this.fragment.findAllComponents(t,e)},Dl=function(t){return this.fragment?this.fragment.findComponent(t):void 0},Nl=Tn,Fl=Rn,Il=Mn,Bl=/^true|on|yes|1$/i,Vl=/^[0-9]+$/,ql=function(t,e){var n,a,r;return r=e.a||{},a={},n=r.twoway,void 0!==n&&(a.twoway=0===n||Bl.test(n)),n=r.lazy,void 0!==n&&(0!==n&&Vl.test(n)?a.lazy=parseInt(n):a.lazy=0===n||Bl.test(n)),a},Ul=Ln;El="altGlyph altGlyphDef altGlyphItem animateColor animateMotion animateTransform clipPath feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence foreignObject glyphRef linearGradient radialGradient textPath vkern".split(" "),Cl="attributeName attributeType baseFrequency baseProfile calcMode clipPathUnits contentScriptType contentStyleType diffuseConstant edgeMode externalResourcesRequired filterRes filterUnits glyphRef gradientTransform gradientUnits kernelMatrix kernelUnitLength keyPoints keySplines keyTimes lengthAdjust limitingConeAngle markerHeight markerUnits markerWidth maskContentUnits maskUnits numOctaves pathLength patternContentUnits patternTransform patternUnits pointsAtX pointsAtY pointsAtZ preserveAlpha preserveAspectRatio primitiveUnits refX refY repeatCount repeatDur requiredExtensions requiredFeatures specularConstant specularExponent spreadMethod startOffset stdDeviation stitchTiles surfaceScale systemLanguage tableValues targetX targetY textLength viewBox viewTarget xChannelSelector yChannelSelector zoomAndPan".split(" "),Pl=function(t){for(var e={},n=t.length;n--;)e[t[n].toLowerCase()]=t[n];return e},Al=Pl(El.concat(Cl));var Gl=function(t){var e=t.toLowerCase();return Al[e]||e},zl=function(t,e){var n,a;if(n=e.indexOf(":"),-1===n||(a=e.substr(0,n),"xmlns"===a))t.name=t.element.namespace!==no.html?Gl(e):e;else if(e=e.substring(n+1),t.name=Gl(e),t.namespace=no[a.toLowerCase()],t.namespacePrefix=a,!t.namespace)throw'Unknown namespace ("'+a+'")'},Wl=jn,Hl=Dn,Kl=Nn,Ql=Fn,Yl={"accept-charset":"acceptCharset",accesskey:"accessKey",bgcolor:"bgColor","class":"className",codebase:"codeBase",colspan:"colSpan",contenteditable:"contentEditable",datetime:"dateTime",dirname:"dirName","for":"htmlFor","http-equiv":"httpEquiv",ismap:"isMap",maxlength:"maxLength",novalidate:"noValidate",pubdate:"pubDate",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",usemap:"useMap"},$l=In,Jl=Vn,Xl=qn,Zl=Un,td=Gn,ed=zn,nd=Wn,ad=Hn,rd=Kn,id=Qn,od=Yn,sd=$n,pd=Jn,ud=Xn,cd=Zn,ld=function(t){this.init(t)};ld.prototype={bubble:Ul,init:Hl,rebind:Kl,render:Ql,toString:$l,unbind:Jl,update:cd};var dd,fd=ld,hd=function(t,e){var n,a,r=[];for(n in e)"twoway"!==n&&"lazy"!==n&&e.hasOwnProperty(n)&&(a=new fd({element:t,name:n,value:e[n],root:t.root}),r[n]=a,"value"!==n&&r.push(a));return(a=r.value)&&r.push(a),r};"undefined"!=typeof document&&(dd=co("div"));var md=function(t,e){this.element=t,this.root=t.root,this.parentFragment=t.parentFragment,this.attributes=[],this.fragment=new rg({root:t.root,owner:this,template:[e]})};md.prototype={bubble:function(){this.node&&this.update(),this.element.bubble()},rebind:function(t,e){this.fragment.rebind(t,e)},render:function(t){this.node=t,this.isSvg=t.namespaceURI===no.svg,this.update()},unbind:function(){this.fragment.unbind()},update:function(){var t,e,n=this;t=""+this.fragment,e=ta(t,this.isSvg),this.attributes.filter(function(t){return ea(e,t)}).forEach(function(t){n.node.removeAttribute(t.name)}),e.forEach(function(t){n.node.setAttribute(t.name,t.value)}),this.attributes=e},toString:function(){return""+this.fragment}};var gd=md,vd=function(t,e){return e?e.map(function(e){return new gd(t,e)}):[]},bd=function(t){var e,n,a,r;if(this.element=t,this.root=t.root,this.attribute=t.attributes[this.name||"value"],e=this.attribute.interpolator,e.twowayBinding=this,n=e.keypath){if("}"===n.str.slice(-1))return g("Two-way binding does not work with expressions (`%s` on <%s>)",e.resolver.uniqueString,t.name,{ractive:this.root}),!1;if(n.isSpecial)return g("Two-way binding does not work with %s",e.resolver.ref,{ractive:this.root}),!1}else{var i=e.template.r?"'"+e.template.r+"' reference":"expression";m("The %s being used for two-way binding is ambiguous, and may cause unexpected results. Consider initialising your data to eliminate the ambiguity",i,{ractive:this.root}),e.resolver.forceResolution(),n=e.keypath}this.attribute.isTwoway=!0,this.keypath=n,a=this.root.viewmodel.get(n),void 0===a&&this.getInitialValue&&(a=this.getInitialValue(),void 0!==a&&this.root.viewmodel.set(n,a)),(r=na(t))&&(this.resetValue=a,r.formBindings.push(this))};bd.prototype={handleChange:function(){var t=this;bs.start(this.root),this.attribute.locked=!0,this.root.viewmodel.set(this.keypath,this.getValue()),bs.scheduleTask(function(){return t.attribute.locked=!1}),bs.end()},rebound:function(){var t,e,n;e=this.keypath,n=this.attribute.interpolator.keypath,e!==n&&(N(this.root._twowayBindings[e.str],this),this.keypath=n,t=this.root._twowayBindings[n.str]||(this.root._twowayBindings[n.str]=[]),t.push(this))},unbind:function(){}},bd.extend=function(t){var e,n=this;return e=function(t){bd.call(this,t),this.init&&this.init()},e.prototype=So(n.prototype),a(e.prototype,t),e.extend=bd.extend,e};var yd,_d=bd,xd=aa;yd=_d.extend({getInitialValue:function(){return""},getValue:function(){return this.element.node.value},render:function(){var t,e=this.element.node,n=!1;this.rendered=!0,t=this.root.lazy,this.element.lazy===!0?t=!0:this.element.lazy===!1?t=!1:p(this.element.lazy)?(t=!1,n=+this.element.lazy):p(t||"")&&(n=+t,t=!1,this.element.lazy=n),this.handler=n?ia:xd,e.addEventListener("change",xd,!1),t||(e.addEventListener("input",this.handler,!1),e.attachEvent&&e.addEventListener("keyup",this.handler,!1)),e.addEventListener("blur",ra,!1)},unrender:function(){var t=this.element.node;this.rendered=!1,t.removeEventListener("change",xd,!1),t.removeEventListener("input",this.handler,!1),t.removeEventListener("keyup",this.handler,!1),t.removeEventListener("blur",ra,!1)}});var wd=yd,kd=wd.extend({getInitialValue:function(){return this.element.fragment?""+this.element.fragment:""},getValue:function(){return this.element.node.innerHTML}}),Sd=kd,Ed=oa,Cd={},Pd=_d.extend({name:"checked",init:function(){this.siblings=Ed(this.root._guid,"radio",this.element.getAttribute("name")),this.siblings.push(this)},render:function(){var t=this.element.node;t.addEventListener("change",xd,!1),t.attachEvent&&t.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},handleChange:function(){bs.start(this.root),this.siblings.forEach(function(t){t.root.viewmodel.set(t.keypath,t.getValue())}),bs.end()},getValue:function(){return this.element.node.checked},unbind:function(){N(this.siblings,this)}}),Ad=Pd,Od=_d.extend({name:"name",init:function(){this.siblings=Ed(this.root._guid,"radioname",this.keypath.str),this.siblings.push(this),this.radioName=!0},getInitialValue:function(){return this.element.getAttribute("checked")?this.element.getAttribute("value"):void 0},render:function(){var t=this.element.node;t.name="{{"+this.keypath.str+"}}",t.checked=this.root.viewmodel.get(this.keypath)==this.element.getAttribute("value"),t.addEventListener("change",xd,!1),t.attachEvent&&t.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},getValue:function(){var t=this.element.node;return t._ractive?t._ractive.value:t.value},handleChange:function(){this.element.node.checked&&_d.prototype.handleChange.call(this)},rebound:function(t,e){var n;_d.prototype.rebound.call(this,t,e),(n=this.element.node)&&(n.name="{{"+this.keypath.str+"}}")},unbind:function(){N(this.siblings,this)}}),Td=Od,Rd=_d.extend({name:"name",getInitialValue:function(){return this.noInitialValue=!0,[]},init:function(){var t,e;this.checkboxName=!0,this.siblings=Ed(this.root._guid,"checkboxes",this.keypath.str),this.siblings.push(this),this.noInitialValue&&(this.siblings.noInitialValue=!0),this.siblings.noInitialValue&&this.element.getAttribute("checked")&&(t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),t.push(e))},unbind:function(){N(this.siblings,this)},render:function(){var t,e,n=this.element.node;t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),i(t)?this.isChecked=M(t,e):this.isChecked=t==e,n.name="{{"+this.keypath.str+"}}",n.checked=this.isChecked,n.addEventListener("change",xd,!1),n.attachEvent&&n.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},changed:function(){var t=!!this.isChecked;return this.isChecked=this.element.node.checked,this.isChecked===t},handleChange:function(){this.isChecked=this.element.node.checked,_d.prototype.handleChange.call(this)},getValue:function(){return this.siblings.filter(sa).map(pa)}}),Md=Rd,Ld=_d.extend({name:"checked",render:function(){var t=this.element.node;t.addEventListener("change",xd,!1),t.attachEvent&&t.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},getValue:function(){return this.element.node.checked}}),jd=Ld,Dd=_d.extend({getInitialValue:function(){var t,e,n,a,r=this.element.options;if(void 0===this.element.getAttribute("value")&&(e=t=r.length,t)){for(;e--;)if(r[e].getAttribute("selected")){n=r[e].getAttribute("value"),a=!0;break}if(!a)for(;++ee;e+=1)if(a=t[e],t[e].selected)return r=a._ractive?a._ractive.value:a.value},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,bs.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))}}),Nd=Dd,Fd=Nd.extend({getInitialValue:function(){return this.element.options.filter(function(t){return t.getAttribute("selected")}).map(function(t){return t.getAttribute("value")})},render:function(){var t;this.element.node.addEventListener("change",xd,!1),t=this.root.viewmodel.get(this.keypath),void 0===t&&this.handleChange()},unrender:function(){this.element.node.removeEventListener("change",xd,!1)},setValue:function(){throw Error("TODO not implemented yet")},getValue:function(){var t,e,n,a,r,i;for(t=[],e=this.element.node.options,a=e.length,n=0;a>n;n+=1)r=e[n],r.selected&&(i=r._ractive?r._ractive.value:r.value,t.push(i));return t},handleChange:function(){var t,e,n;return t=this.attribute,e=t.value,n=this.getValue(),void 0!==e&&L(n,e)||Nd.prototype.handleChange.call(this),this},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,bs.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))},updateModel:function(){void 0!==this.attribute.value&&this.attribute.value.length||this.root.viewmodel.set(this.keypath,this.initialValue)}}),Id=Fd,Bd=_d.extend({render:function(){this.element.node.addEventListener("change",xd,!1)},unrender:function(){this.element.node.removeEventListener("change",xd,!1)},getValue:function(){return this.element.node.files}}),Vd=Bd,qd=wd.extend({getInitialValue:function(){},getValue:function(){var t=parseFloat(this.element.node.value);return isNaN(t)?void 0:t}}),Ud=ua,Gd=la,zd=da,Wd=fa,Hd=ha,Kd=/^event(?:\.(.+))?/,Qd=ba,Yd=ya,$d={},Jd={touchstart:!0,touchmove:!0,touchend:!0,touchcancel:!0,touchleave:!0},Xd=xa,Zd=wa,tf=ka,ef=Sa,nf=Ea,af=function(t,e,n){this.init(t,e,n)};af.prototype={bubble:Gd,fire:zd,getAction:Wd,init:Hd,listen:Yd,rebind:Xd,render:Zd,resolve:tf,unbind:ef,unrender:nf};var rf=af,of=function(t,e){var n,a,r,i,o=[];for(a in e)if(e.hasOwnProperty(a))for(r=a.split("-"),n=r.length;n--;)i=new rf(t,r[n],e[a]),o.push(i);return o},sf=function(t,e){var n,a,r,i=this;this.element=t,this.root=n=t.root,a=e.n||e,("string"==typeof a||(r=new rg({template:a,root:n,owner:t}),a=""+r,r.unbind(),""!==a))&&(e.a?this.params=e.a:e.d&&(this.fragment=new rg({template:e.d,root:n,owner:t}),this.params=this.fragment.getArgsList(),this.fragment.bubble=function(){this.dirtyArgs=this.dirtyValue=!0,i.params=this.getArgsList(),i.ready&&i.update()}),this.fn=v("decorators",n,a),this.fn||l(Io(a,"decorator")))};sf.prototype={init:function(){var t,e,n;if(t=this.element.node,this.params?(n=[t].concat(this.params),e=this.fn.apply(this.root,n)):e=this.fn.call(this.root,t),!e||!e.teardown)throw Error("Decorator definition must return an object with a teardown method");this.actual=e,this.ready=!0},update:function(){this.actual.update?this.actual.update.apply(this.root,this.params):(this.actual.teardown(!0),this.init())},rebind:function(t,e){this.fragment&&this.fragment.rebind(t,e)},teardown:function(t){this.torndown=!0,this.ready&&this.actual.teardown(),!t&&this.fragment&&this.fragment.unbind()}};var pf,uf,cf,lf=sf,df=Ma,ff=La,hf=Ba,mf=function(t){
-return t.replace(/-([a-zA-Z])/g,function(t,e){return e.toUpperCase()})};Xi?(uf={},cf=co("div").style,pf=function(t){var e,n,a;if(t=mf(t),!uf[t])if(void 0!==cf[t])uf[t]=t;else for(a=t.charAt(0).toUpperCase()+t.substring(1),e=ro.length;e--;)if(n=ro[e],void 0!==cf[n+a]){uf[t]=n+a;break}return uf[t]}):pf=null;var gf,vf,bf=pf;Xi?(vf=window.getComputedStyle||Po.getComputedStyle,gf=function(t){var e,n,a,r,o;if(e=vf(this.node),"string"==typeof t)return o=e[bf(t)],"0px"===o&&(o=0),o;if(!i(t))throw Error("Transition$getStyle must be passed a string, or an array of strings representing CSS properties");for(n={},a=t.length;a--;)r=t[a],o=e[bf(r)],"0px"===o&&(o=0),n[r]=o;return n}):gf=null;var yf=gf,_f=function(t,e){var n;if("string"==typeof t)this.node.style[bf(t)]=e;else for(n in t)t.hasOwnProperty(n)&&(this.node.style[bf(n)]=t[n]);return this},xf=function(t){var e;this.duration=t.duration,this.step=t.step,this.complete=t.complete,"string"==typeof t.easing?(e=t.root.easing[t.easing],e||(g(Io(t.easing,"easing")),e=Va)):e="function"==typeof t.easing?t.easing:Va,this.easing=e,this.start=ns(),this.end=this.start+this.duration,this.running=!0,xs.add(this)};xf.prototype={tick:function(t){var e,n;return this.running?t>this.end?(this.step&&this.step(1),this.complete&&this.complete(1),!1):(e=t-this.start,n=this.easing(e/this.duration),this.step&&this.step(n),!0):!1},stop:function(){this.abort&&this.abort(),this.running=!1}};var wf,kf,Sf,Ef,Cf,Pf,Af,Of,Tf=xf,Rf=RegExp("^-(?:"+ro.join("|")+")-"),Mf=function(t){return t.replace(Rf,"")},Lf=RegExp("^(?:"+ro.join("|")+")([A-Z])"),jf=function(t){var e;return t?(Lf.test(t)&&(t="-"+t),e=t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})):""},Df={},Nf={};Xi?(kf=co("div").style,function(){void 0!==kf.transition?(Sf="transition",Ef="transitionend",Cf=!0):void 0!==kf.webkitTransition?(Sf="webkitTransition",Ef="webkitTransitionEnd",Cf=!0):Cf=!1}(),Sf&&(Pf=Sf+"Duration",Af=Sf+"Property",Of=Sf+"TimingFunction"),wf=function(t,e,n,a,r){setTimeout(function(){var i,o,s,p,u;p=function(){o&&s&&(t.root.fire(t.name+":end",t.node,t.isIntro),r())},i=(t.node.namespaceURI||"")+t.node.tagName,t.node.style[Af]=a.map(bf).map(jf).join(","),t.node.style[Of]=jf(n.easing||"linear"),t.node.style[Pf]=n.duration/1e3+"s",u=function(e){var n;n=a.indexOf(mf(Mf(e.propertyName))),-1!==n&&a.splice(n,1),a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},t.node.addEventListener(Ef,u,!1),setTimeout(function(){for(var r,c,l,d,f,h=a.length,g=[];h--;)d=a[h],r=i+d,Cf&&!Nf[r]&&(t.node.style[bf(d)]=e[d],Df[r]||(c=t.getStyle(d),Df[r]=t.getStyle(d)!=e[d],Nf[r]=!Df[r],Nf[r]&&(t.node.style[bf(d)]=c))),(!Cf||Nf[r])&&(void 0===c&&(c=t.getStyle(d)),l=a.indexOf(d),-1===l?m("Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!",{node:t.node}):a.splice(l,1),f=/[^\d]*$/.exec(e[d])[0],g.push({name:bf(d),interpolator:Vo(parseFloat(c),parseFloat(e[d])),suffix:f}));g.length?new Tf({root:t.root,duration:n.duration,easing:mf(n.easing||""),step:function(e){var n,a;for(a=g.length;a--;)n=g[a],t.node.style[n.name]=n.interpolator(e)+n.suffix},complete:function(){o=!0,p()}}):o=!0,a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},0)},n.delay||0)}):wf=null;var Ff,If,Bf,Vf,qf,Uf=wf;if("undefined"!=typeof document){if(Ff="hidden",qf={},Ff in document)Bf="";else for(Vf=ro.length;Vf--;)If=ro[Vf],Ff=If+"Hidden",Ff in document&&(Bf=If);void 0!==Bf?(document.addEventListener(Bf+"visibilitychange",qa),qa()):("onfocusout"in document?(document.addEventListener("focusout",Ua),document.addEventListener("focusin",Ga)):(window.addEventListener("pagehide",Ua),window.addEventListener("blur",Ua),window.addEventListener("pageshow",Ga),window.addEventListener("focus",Ga)),qf.hidden=!1)}var Gf,zf,Wf,Hf=qf;Xi?(zf=window.getComputedStyle||Po.getComputedStyle,Gf=function(t,e,n){var a,r=this;if(4===arguments.length)throw Error("t.animateStyle() returns a promise - use .then() instead of passing a callback");if(Hf.hidden)return this.setStyle(t,e),Wf||(Wf=us.resolve());"string"==typeof t?(a={},a[t]=e):(a=t,n=e),n||(g('The "%s" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340',this.name),n=this);var i=new us(function(t){var e,i,o,s,p,u,c;if(!n.duration)return r.setStyle(a),void t();for(e=Object.keys(a),i=[],o=zf(r.node),p={},u=e.length;u--;)c=e[u],s=o[bf(c)],"0px"===s&&(s=0),s!=a[c]&&(i.push(c),r.node.style[bf(c)]=s);return i.length?void Uf(r,a,n,i,t):void t()});return i}):Gf=null;var Kf=Gf,Qf=function(t,e){return"number"==typeof t?t={duration:t}:"string"==typeof t?t="slow"===t?{duration:600}:"fast"===t?{duration:200}:{duration:400}:t||(t={}),r({},t,e)},Yf=za,$f=function(t,e,n){this.init(t,e,n)};$f.prototype={init:hf,start:Yf,getStyle:yf,setStyle:_f,animateStyle:Kf,processParams:Qf};var Jf,Xf,Zf=$f,th=Ha;Jf=function(){var t=this.node,e=this.fragment.toString(!1);if(window&&window.appearsToBeIELessEqual8&&(t.type="text/css"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}},Xf=function(){this.node.type&&"text/javascript"!==this.node.type||m("Script tag was updated. This does not cause the code to be re-evaluated!",{ractive:this.root}),this.node.text=this.fragment.toString(!1)};var eh=function(){var t,e;return this.template.y?"":(t="<"+this.template.e,t+=this.attributes.map(Xa).join("")+this.conditionalAttributes.map(Xa).join(""),"option"===this.name&&$a(this)&&(t+=" selected"),"input"===this.name&&Ja(this)&&(t+=" checked"),t+=">","textarea"===this.name&&void 0!==this.getAttribute("value")?t+=Se(this.getAttribute("value")):void 0!==this.getAttribute("contenteditable")&&(t+=this.getAttribute("value")||""),this.fragment&&(e="script"!==this.name&&"style"!==this.name,t+=this.fragment.toString(e)),ic.test(this.template.e)||(t+=""+this.template.e+">"),t)},nh=Za,ah=tr,rh=function(t){this.init(t)};rh.prototype={bubble:Tl,detach:Rl,find:Ml,findAll:Ll,findAllComponents:jl,findComponent:Dl,findNextNode:Nl,firstNode:Fl,getAttribute:Il,init:df,rebind:ff,render:th,toString:eh,unbind:nh,unrender:ah};var ih=rh,oh=/^\s*$/,sh=/^\s*/,ph=function(t){var e,n,a,r;return e=t.split("\n"),n=e[0],void 0!==n&&oh.test(n)&&e.shift(),a=D(e),void 0!==a&&oh.test(a)&&e.pop(),r=e.reduce(nr,null),r&&(t=e.map(function(t){return t.replace(r,"")}).join("\n")),t},uh=ar,ch=function(t,e){var n;return e?n=t.split("\n").map(function(t,n){return n?e+t:t}).join("\n"):t},lh='Could not find template for partial "%s"',dh=function(t){var e,n;e=this.parentFragment=t.parentFragment,this.root=e.root,this.type=Au,this.index=t.index,this.name=t.template.r,this.rendered=!1,this.fragment=this.fragmentToRender=this.fragmentToUnrender=null,Gc.init(this,t),this.keypath||((n=uh(this.root,this.name,e))?(_c.call(this),this.isNamed=!0,this.setTemplate(n)):g(lh,this.name))};dh.prototype={bubble:function(){this.parentFragment.bubble()},detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},firstNode:function(){return this.fragment.firstNode()},findNextNode:function(){return this.parentFragment.findNextNode(this)},getPartialName:function(){return this.isNamed&&this.name?this.name:void 0===this.value?this.name:this.value},getValue:function(){return this.fragment.getValue()},rebind:function(t,e){this.isNamed||Uc.call(this,t,e),this.fragment&&this.fragment.rebind(t,e)},render:function(){return this.docFrag=document.createDocumentFragment(),this.update(),this.rendered=!0,this.docFrag},resolve:Gc.resolve,setValue:function(t){var e;(void 0===t||t!==this.value)&&(void 0!==t&&(e=uh(this.root,""+t,this.parentFragment)),!e&&this.name&&(e=uh(this.root,this.name,this.parentFragment))&&(_c.call(this),this.isNamed=!0),e||g(lh,this.name,{ractive:this.root}),this.value=t,this.setTemplate(e||[]),this.bubble(),this.rendered&&bs.addView(this))},setTemplate:function(t){this.fragment&&(this.fragment.unbind(),this.rendered&&(this.fragmentToUnrender=this.fragment)),this.fragment=new rg({template:t,root:this.root,owner:this,pElement:this.parentFragment.pElement}),this.fragmentToRender=this.fragment},toString:function(t){var e,n,a,r;return e=this.fragment.toString(t),n=this.parentFragment.items[this.index-1],n&&n.type===ku?(a=n.text.split("\n").pop(),(r=/^\s+$/.exec(a))?ch(e,r[0]):e):e},unbind:function(){this.isNamed||_c.call(this),this.fragment&&this.fragment.unbind()},unrender:function(t){this.rendered&&(this.fragment&&this.fragment.unrender(t),this.rendered=!1)},update:function(){var t,e;this.fragmentToUnrender&&(this.fragmentToUnrender.unrender(!0),this.fragmentToUnrender=null),this.fragmentToRender&&(this.docFrag.appendChild(this.fragmentToRender.render()),this.fragmentToRender=null),this.rendered&&(t=this.parentFragment.getNode(),e=this.parentFragment.findNextNode(this),t.insertBefore(this.docFrag,e))}};var fh,hh,mh,gh=dh,vh=pr,bh=ur,yh=new is("detach"),_h=cr,xh=lr,wh=dr,kh=fr,Sh=hr,Eh=mr,Ch=function(t,e,n,a){var r=t.root,i=t.keypath;a?r.viewmodel.smartUpdate(i,e,a):r.viewmodel.mark(i)},Ph=[],Ah=["pop","push","reverse","shift","sort","splice","unshift"];Ah.forEach(function(t){var e=function(){for(var e=arguments.length,n=Array(e),a=0;e>a;a++)n[a]=arguments[a];var r,i,o,s;for(r=bp(this,t,n),i=Array.prototype[t].apply(this,arguments),bs.start(),this._ractive.setting=!0,s=this._ractive.wrappers.length;s--;)o=this._ractive.wrappers[s],bs.addRactive(o.root),Ch(o,this,t,r);return bs.end(),this._ractive.setting=!1,i};Eo(Ph,t,{value:e})}),fh={},fh.__proto__?(hh=function(t){t.__proto__=Ph},mh=function(t){t.__proto__=Array.prototype}):(hh=function(t){var e,n;for(e=Ah.length;e--;)n=Ah[e],Eo(t,n,{value:Ph[n],configurable:!0})},mh=function(t){var e;for(e=Ah.length;e--;)delete t[Ah[e]]}),hh.unpatch=mh;var Oh,Th,Rh,Mh=hh;Oh={filter:function(t){return i(t)&&(!t._ractive||!t._ractive.setting)},wrap:function(t,e,n){return new Th(t,e,n)}},Th=function(t,e,n){this.root=t,this.value=e,this.keypath=S(n),e._ractive||(Eo(e,"_ractive",{value:{wrappers:[],instances:[],setting:!1},configurable:!0}),Mh(e)),e._ractive.instances[t._guid]||(e._ractive.instances[t._guid]=0,e._ractive.instances.push(t)),e._ractive.instances[t._guid]+=1,e._ractive.wrappers.push(this)},Th.prototype={get:function(){return this.value},teardown:function(){var t,e,n,a,r;if(t=this.value,e=t._ractive,n=e.wrappers,a=e.instances,e.setting)return!1;if(r=n.indexOf(this),-1===r)throw Error(Rh);if(n.splice(r,1),n.length){if(a[this.root._guid]-=1,!a[this.root._guid]){if(r=a.indexOf(this.root),-1===r)throw Error(Rh);a.splice(r,1)}}else delete t._ractive,Mh.unpatch(this.value)}},Rh="Something went wrong in a rather interesting way";var Lh,jh,Dh=Oh,Nh=/^\s*[0-9]+\s*$/,Fh=function(t){return Nh.test(t)?[]:{}};try{Object.defineProperty({},"test",{value:0}),Lh={filter:function(t,e,n){var a,r;return e?(e=S(e),(a=n.viewmodel.wrapped[e.parent.str])&&!a.magic?!1:(r=n.viewmodel.get(e.parent),i(r)&&/^[0-9]+$/.test(e.lastKey)?!1:r&&("object"==typeof r||"function"==typeof r))):!1},wrap:function(t,e,n){return new jh(t,e,n)}},jh=function(t,e,n){var a,r,i;return n=S(n),this.magic=!0,this.ractive=t,this.keypath=n,this.value=e,this.prop=n.lastKey,a=n.parent,this.obj=a.isRoot?t.viewmodel.data:t.viewmodel.get(a),r=this.originalDescriptor=Object.getOwnPropertyDescriptor(this.obj,this.prop),r&&r.set&&(i=r.set._ractiveWrappers)?void(-1===i.indexOf(this)&&i.push(this)):void gr(this,e,r)},jh.prototype={get:function(){return this.value},reset:function(t){return this.updating?void 0:(this.updating=!0,this.obj[this.prop]=t,bs.addRactive(this.ractive),this.ractive.viewmodel.mark(this.keypath,{keepExistingWrapper:!0}),this.updating=!1,!0)},set:function(t,e){this.updating||(this.obj[this.prop]||(this.updating=!0,this.obj[this.prop]=Fh(t),this.updating=!1),this.obj[this.prop][t]=e)},teardown:function(){var t,e,n,a,r;return this.updating?!1:(t=Object.getOwnPropertyDescriptor(this.obj,this.prop),e=t&&t.set,void(e&&(a=e._ractiveWrappers,r=a.indexOf(this),-1!==r&&a.splice(r,1),a.length||(n=this.obj[this.prop],Object.defineProperty(this.obj,this.prop,this.originalDescriptor||{writable:!0,enumerable:!0,configurable:!0}),this.obj[this.prop]=n))))}}}catch(Ao){Lh=!1}var Ih,Bh,Vh=Lh;Vh&&(Ih={filter:function(t,e,n){return Vh.filter(t,e,n)&&Dh.filter(t)},wrap:function(t,e,n){return new Bh(t,e,n)}},Bh=function(t,e,n){this.value=e,this.magic=!0,this.magicWrapper=Vh.wrap(t,e,n),this.arrayWrapper=Dh.wrap(t,e,n)},Bh.prototype={get:function(){return this.value},teardown:function(){this.arrayWrapper.teardown(),this.magicWrapper.teardown()},reset:function(t){return this.magicWrapper.reset(t)}});var qh=Ih,Uh=vr,Gh={},zh=_r,Wh=xr,Hh=Sr,Kh=Or,Qh=Tr,Yh=function(t,e){this.computation=t,this.viewmodel=t.viewmodel,this.ref=e,this.root=this.viewmodel.ractive,this.parentFragment=this.root.component&&this.root.component.parentFragment};Yh.prototype={resolve:function(t){this.computation.softDeps.push(t),this.computation.unresolvedDeps[t.str]=null,this.viewmodel.register(t,this.computation,"computed")}};var $h=Yh,Jh=function(t,e){this.key=t,this.getter=e.getter,this.setter=e.setter,this.hardDeps=e.deps||[],this.softDeps=[],this.unresolvedDeps={},this.depValues={},this._dirty=this._firstRun=!0};Jh.prototype={constructor:Jh,init:function(t){var e,n=this;this.viewmodel=t,this.bypass=!0,e=t.get(this.key),t.clearCache(this.key.str),this.bypass=!1,this.setter&&void 0!==e&&this.set(e),this.hardDeps&&this.hardDeps.forEach(function(e){return t.register(e,n,"computed")})},invalidate:function(){this._dirty=!0},get:function(){var t,e,n=this,a=!1;if(this.getting){var r="The "+this.key.str+" computation indirectly called itself. This probably indicates a bug in the computation. It is commonly caused by `array.sort(...)` - if that's the case, clone the array first with `array.slice().sort(...)`";return h(r),this.value}if(this.getting=!0,this._dirty){if(this._firstRun||!this.hardDeps.length&&!this.softDeps.length?a=!0:[this.hardDeps,this.softDeps].forEach(function(t){var e,r,i;if(!a)for(i=t.length;i--;)if(e=t[i],r=n.viewmodel.get(e),!s(r,n.depValues[e.str]))return n.depValues[e.str]=r,void(a=!0)}),a){this.viewmodel.capture();try{this.value=this.getter()}catch(i){m('Failed to compute "%s"',this.key.str),d(i.stack||i),this.value=void 0}t=this.viewmodel.release(),e=this.updateDependencies(t),e&&[this.hardDeps,this.softDeps].forEach(function(t){t.forEach(function(t){n.depValues[t.str]=n.viewmodel.get(t)})})}this._dirty=!1}return this.getting=this._firstRun=!1,this.value},set:function(t){if(this.setting)return void(this.value=t);if(!this.setter)throw Error("Computed properties without setters are read-only. (This may change in a future version of Ractive!)");this.setter(t)},updateDependencies:function(t){var e,n,a,r,i;for(n=this.softDeps,e=n.length;e--;)a=n[e],-1===t.indexOf(a)&&(r=!0,this.viewmodel.unregister(a,this,"computed"));for(e=t.length;e--;)a=t[e],-1!==n.indexOf(a)||this.hardDeps&&-1!==this.hardDeps.indexOf(a)||(r=!0,Rr(this.viewmodel,a)&&!this.unresolvedDeps[a.str]?(i=new $h(this,a.str),t.splice(e,1),this.unresolvedDeps[a.str]=i,bs.addUnresolved(i)):this.viewmodel.register(a,this,"computed"));return r&&(this.softDeps=t.slice()),r}};var Xh=Jh,Zh=Mr,tm={FAILED_LOOKUP:!0},em=Lr,nm={},am=Dr,rm=Nr,im=function(t,e){this.localKey=t,this.keypath=e.keypath,this.origin=e.origin,this.deps=[],this.unresolved=[],this.resolved=!1};im.prototype={forceResolution:function(){this.keypath=this.localKey,this.setup()},get:function(t,e){return this.resolved?this.origin.get(this.map(t),e):void 0},getValue:function(){return this.keypath?this.origin.get(this.keypath):void 0},initViewmodel:function(t){this.local=t,this.setup()},map:function(t){return void 0===typeof this.keypath?this.localKey:t.replace(this.localKey,this.keypath)},register:function(t,e,n){this.deps.push({keypath:t,dep:e,group:n}),this.resolved&&this.origin.register(this.map(t),e,n)},resolve:function(t){void 0!==this.keypath&&this.unbind(!0),this.keypath=t,this.setup()},set:function(t,e){this.resolved||this.forceResolution(),this.origin.set(this.map(t),e)},setup:function(){var t=this;void 0!==this.keypath&&(this.resolved=!0,this.deps.length&&(this.deps.forEach(function(e){var n=t.map(e.keypath);if(t.origin.register(n,e.dep,e.group),e.dep.setValue)e.dep.setValue(t.origin.get(n));else{if(!e.dep.invalidate)throw Error("An unexpected error occurred. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");e.dep.invalidate()}}),this.origin.mark(this.keypath)))},setValue:function(t){if(!this.keypath)throw Error("Mapping does not have keypath, cannot set value. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");this.origin.set(this.keypath,t)},unbind:function(t){var e=this;t||delete this.local.mappings[this.localKey],this.resolved&&(this.deps.forEach(function(t){e.origin.unregister(e.map(t.keypath),t.dep,t.group)}),this.tracker&&this.origin.unregister(this.keypath,this.tracker))},unregister:function(t,e,n){var a,r;if(this.resolved){for(a=this.deps,r=a.length;r--;)if(a[r].dep===e){a.splice(r,1);break}this.origin.unregister(this.map(t),e,n)}}};var om=Fr,sm=function(t,e){var n,a,r,i;return n={},a=0,r=t.map(function(t,r){var o,s,p;s=a,p=e.length;do{if(o=e.indexOf(t,s),-1===o)return i=!0,-1;s=o+1}while(n[o]&&p>s);return o===a&&(a+=1),o!==r&&(i=!0),n[o]=!0,o})},pm=Ir,um={},cm=qr,lm=Gr,dm=zr,fm=Wr,hm=Kr,mm={implicit:!0},gm={noCascade:!0},vm=Yr,bm=$r,ym=function(t){var e,n,a=t.adapt,r=t.data,i=t.ractive,o=t.computed,s=t.mappings;this.ractive=i,this.adaptors=a,this.onchange=t.onchange,this.cache={},this.cacheMap=So(null),this.deps={computed:So(null),"default":So(null)},this.depsMap={computed:So(null),"default":So(null)},this.patternObservers=[],this.specials=So(null),this.wrapped=So(null),this.computations=So(null),this.captureGroups=[],this.unresolvedImplicitDependencies=[],this.changes=[],this.implicitChanges={},this.noCascade={},this.data=r,this.mappings=So(null);for(e in s)this.map(S(e),s[e]);if(r)for(e in r)(n=this.mappings[e])&&void 0===n.getValue()&&n.setValue(r[e]);for(e in o)s&&e in s&&l("Cannot map to a computed property ('%s')",e),this.compute(S(e),o[e]);this.ready=!0};ym.prototype={adapt:Uh,applyChanges:Hh,capture:Kh,clearCache:Qh,compute:Zh,get:em,init:am,map:rm,mark:om,merge:pm,register:cm,release:lm,reset:dm,set:fm,smartUpdate:hm,teardown:vm,unregister:bm};var _m=ym;Xr.prototype={constructor:Xr,begin:function(t){this.inProcess[t._guid]=!0},end:function(t){var e=t.parent;e&&this.inProcess[e._guid]?Zr(this.queue,e).push(t):ti(this,t),delete this.inProcess[t._guid]}};var xm=Xr,wm=ei,km=/\$\{([^\}]+)\}/g,Sm=new is("construct"),Em=new is("config"),Cm=new xm("init"),Pm=0,Am=["adaptors","components","decorators","easing","events","interpolators","partials","transitions"],Om=ii,Tm=ci;ci.prototype={bubble:function(){this.dirty||(this.dirty=!0,bs.addView(this))},update:function(){this.callback(this.fragment.getValue()),this.dirty=!1},rebind:function(t,e){this.fragment.rebind(t,e)},unbind:function(){this.fragment.unbind()}};var Rm=function(t,e,n,r,o){var s,p,u,c,l,d,f={},h={},g={},v=[];for(p=t.parentFragment,u=t.root,o=o||{},a(f,o),o.content=r||[],f[""]=o.content,e.defaults.el&&m("The <%s/> component has a default `el` property; it has been disregarded",t.name),c=p;c;){if(c.owner.type===Mu){l=c.owner.container;break}c=c.parent}return n&&Object.keys(n).forEach(function(e){var a,r,o=n[e];if("string"==typeof o)a=dc(o),h[e]=a?a.value:o;else if(0===o)h[e]=!0;else{if(!i(o))throw Error("erm wut");di(o)?(g[e]={origin:t.root.viewmodel,keypath:void 0},r=li(t,o[0],function(t){t.isSpecial?d?s.set(e,t.value):(h[e]=t.value,delete g[e]):d?s.viewmodel.mappings[e].resolve(t):g[e].keypath=t})):r=new Tm(t,o,function(t){d?s.set(e,t):h[e]=t}),v.push(r)}}),s=So(e.prototype),Om(s,{el:null,append:!0,data:h,partials:o,magic:u.magic||e.defaults.magic,modifyArrays:u.modifyArrays,adapt:u.adapt},{parent:u,component:t,container:l,mappings:g,inlinePartials:f,cssIds:p.cssIds}),d=!0,t.resolvers=v,s},Mm=fi,Lm=function(t){var e,n;for(e=t.root;e;)(n=e._liveComponentQueries["_"+t.name])&&n.push(t.instance),e=e.parent},jm=mi,Dm=gi,Nm=vi,Fm=bi,Im=yi,Bm=new is("teardown"),Vm=xi,qm=function(t,e){this.init(t,e)};qm.prototype={detach:bh,find:_h,findAll:xh,findAllComponents:wh,findComponent:kh,findNextNode:Sh,firstNode:Eh,init:jm,rebind:Dm,render:Nm,toString:Fm,unbind:Im,unrender:Vm};var Um=qm,Gm=function(t){this.type=Ou,this.value=t.template.c};Gm.prototype={detach:vc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createComment(this.value)),this.node},toString:function(){return""},unrender:function(t){t&&this.node.parentNode.removeChild(this.node)}};var zm=Gm,Wm=function(t){var e,n;this.type=Mu,this.container=e=t.parentFragment.root,this.component=n=e.component,this.container=e,this.containerFragment=t.parentFragment,this.parentFragment=n.parentFragment;var a=this.name=t.template.n||"",r=e._inlinePartials[a];r||(m('Could not find template for partial "'+a+'"',{ractive:t.root}),r=[]),this.fragment=new rg({owner:this,root:e.parent,template:r,pElement:this.containerFragment.pElement}),i(n.yielders[a])?n.yielders[a].push(this):n.yielders[a]=[this],bs.scheduleTask(function(){if(n.yielders[a].length>1)throw Error("A component template can only have one {{yield"+(a?" "+a:"")+"}} declaration at a time")})};Wm.prototype={detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},findNextNode:function(){return this.containerFragment.findNextNode(this)},firstNode:function(){return this.fragment.firstNode()},getValue:function(t){return this.fragment.getValue(t)},render:function(){return this.fragment.render()},unbind:function(){this.fragment.unbind()},unrender:function(t){this.fragment.unrender(t),N(this.component.yielders[this.name],this)},rebind:function(t,e){this.fragment.rebind(t,e)},toString:function(){return""+this.fragment}};var Hm=Wm,Km=function(t){this.declaration=t.template.a};Km.prototype={init:ko,render:ko,unrender:ko,teardown:ko,toString:function(){return""}};var Qm=Km,Ym=wi,$m=Si,Jm=Ei,Xm=Ci,Zm=Oi,tg=Ri,eg=function(t){this.init(t)};eg.prototype={bubble:cu,detach:lu,find:du,findAll:fu,findAllComponents:hu,findComponent:mu,findNextNode:gu,firstNode:vu,getArgsList:hc,getNode:mc,getValue:gc,init:Ym,rebind:$m,registerIndexRef:function(t){var e=this.registeredIndexRefs;-1===e.indexOf(t)&&e.push(t)},render:Jm,toString:Xm,unbind:Zm,unregisterIndexRef:function(t){var e=this.registeredIndexRefs;e.splice(e.indexOf(t),1)},unrender:tg};var ng,ag,rg=eg,ig=Mi,og=["template","partials","components","decorators","events"],sg=new is("reset"),pg=function(t,e){function n(e,a,r){r&&r.partials[t]||e.forEach(function(e){e.type===Au&&e.getPartialName()===t&&a.push(e),e.fragment&&n(e.fragment.items,a,r),i(e.fragments)?n(e.fragments,a,r):i(e.items)?n(e.items,a,r):e.type===Ru&&e.instance&&n(e.instance.fragment.items,a,e.instance),e.type===Pu&&(i(e.attributes)&&n(e.attributes,a,r),i(e.conditionalAttributes)&&n(e.conditionalAttributes,a,r))})}var a,r=[];return n(this.fragment.items,r),this.partials[t]=e,a=bs.start(this,!0),r.forEach(function(e){e.value=void 0,e.setValue(t)}),bs.end(),a},ug=Li,cg=_p("reverse"),lg=ji,dg=_p("shift"),fg=_p("sort"),hg=_p("splice"),mg=Ni,gg=Fi,vg=new is("teardown"),bg=Bi,yg=Vi,_g=qi,xg=new is("unrender"),wg=_p("unshift"),kg=Ui,Sg=new is("update"),Eg=Gi,Cg={add:Zo,animate:Ss,detach:Cs,find:As,findAll:Fs,findAllComponents:Is,findComponent:Bs,findContainer:Vs,findParent:qs,fire:Ws,get:Hs,insert:Qs,merge:$s,observe:lp,observeOnce:dp,off:mp,on:gp,once:vp,pop:xp,push:wp,render:Tp,reset:ig,resetPartial:pg,resetTemplate:ug,reverse:cg,set:lg,shift:dg,sort:fg,splice:hg,subtract:mg,teardown:gg,toggle:bg,toHTML:yg,toHtml:yg,unrender:_g,unshift:wg,update:kg,updateModel:Eg},Pg=function(t,e,n){return n||Wi(t,e)?function(){var n,a="_super"in this,r=this._super;return this._super=e,n=t.apply(this,arguments),a&&(this._super=r),n}:t},Ag=Hi,Og=$i,Tg=function(t){var e,n,a={};return t&&(e=t._ractive)?(a.ractive=e.root,a.keypath=e.keypath.str,a.index={},(n=Oc(e.proxy.parentFragment))&&(a.index=Oc.resolve(n)),a):a};ng=function(t){return this instanceof ng?void Om(this,t):new ng(t)},ag={DEBUG:{writable:!0,value:!0},DEBUG_PROMISES:{writable:!0,value:!0},extend:{value:Og},getNodeInfo:{value:Tg},parse:{value:Hp},Promise:{value:us},svg:{value:ao},magic:{value:eo},VERSION:{value:"0.7.3"},adaptors:{writable:!0,value:{}},components:{writable:!0,value:{}},decorators:{writable:!0,value:{}},easing:{writable:!0,value:po},events:{writable:!0,value:{}},interpolators:{writable:!0,value:Uo},partials:{writable:!0,value:{}},transitions:{writable:!0,value:{}}},Co(ng,ag),ng.prototype=a(Cg,so),ng.prototype.constructor=ng,ng.defaults=ng.prototype;var Rg="function";if(typeof Date.now!==Rg||typeof String.prototype.trim!==Rg||typeof Object.keys!==Rg||typeof Array.prototype.indexOf!==Rg||typeof Array.prototype.forEach!==Rg||typeof Array.prototype.map!==Rg||typeof Array.prototype.filter!==Rg||"undefined"!=typeof window&&typeof window.addEventListener!==Rg)throw Error("It looks like you're attempting to use Ractive.js in an older browser. You'll need to use one of the 'legacy builds' in order to continue - see http://docs.ractivejs.org/latest/legacy-builds for more information.");var Mg=ng;return Mg})},{}],342:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.observe("value",function(e,n,a){var r=t.get(),i=r.min,o=r.max,s=Math.clamp(i,o,e);t.animate("percentage",Math.round((s-i)/(o-i)*100))})}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,305],t:7,e:"div",a:{"class":"bar"},f:[{p:[14,3,326],t:7,e:"div",a:{"class":["barFill ",{t:2,r:"state",p:[14,23,346]}],style:["width: ",{t:2,r:"percentage",p:[14,48,371]},"%"]}}," ",{p:[15,3,398],t:7,e:"span",a:{"class":"barText"},f:[{t:16,p:[15,25,420]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],343:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(482),a=t(481);e.exports={computed:{clickable:function(){return!this.get("enabled")||this.get("state")&&"toggle"!=this.get("state")?!1:!0},enabled:function(){return this.get("config.status")===n.UI_INTERACTIVE?!0:!1},styles:function(){var t="";if(this.get("class")&&(t+=" "+this.get("class")),this.get("tooltip-side")&&(t=" tooltip-"+this.get("tooltip-side")),this.get("grid")&&(t+=" gridable"),this.get("enabled")){var e=this.get("state"),n=this.get("style");return e?"inactive "+e+" "+t:"active normal "+n+" "+t}return"inactive disabled "+t}},oninit:function(){var t=this;this.on("press",function(e){var n=t.get(),r=n.action,i=n.params;(0,a.act)(t.get("config.ref"),r,i),e.node.blur()})},data:{iconStackToHTML:function(t){var e="",n=t.split(",");if(n.length){e+='';for(var a=n,r=Array.isArray(a),i=0,a=r?a:a[Symbol.iterator]();;){var o;if(r){if(i>=a.length)break;o=a[i++]}else{if(i=a.next(),i.done)break;o=i.value}var s=o,p=/([\w\-]+)\s*(\dx)/g,u=p.exec(s),c=u[1],l=u[2];e+=' '}}return e&&(e+=" "),e}}}}(r),r.exports.template={v:3,t:[" ",{p:[70,1,2019],t:7,e:"span",a:{"class":["button ",{t:2,r:"styles",p:[70,21,2039]}],unselectable:"on","data-tooltip":[{t:2,r:"tooltip",p:[73,17,2124]}]},m:[{t:4,f:["tabindex='0'"],r:"clickable",p:[72,3,2075]}],v:{"mouseover-mousemove":"hover",mouseleave:"unhover","click-enter":{n:[{t:4,f:["press"],r:"clickable",p:[76,19,2217]}],d:[]}},f:[{t:4,f:[{p:[78,5,2265],t:7,e:"i",a:{"class":["fa fa-",{t:2,r:"icon",p:[78,21,2281]}]}}],n:50,r:"icon",p:[77,3,2247]}," ",{t:4,f:[{t:3,x:{r:["iconStackToHTML","icon_stack"],s:"_0(_1)"},p:[81,6,2335]}],n:50,r:"icon_stack",p:[80,3,2310]}," ",{t:16,p:[83,3,2383]}]}]},e.exports=a.extend(r.exports)},{341:341,481:481,482:482}],344:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"display"},f:[{t:4,f:[{p:[3,5,44],t:7,e:"header",f:[{p:[4,7,60],t:7,e:"h3",f:[{t:2,r:"title",p:[4,11,64]}]}," ",{t:4,f:[{p:[6,9,110],t:7,e:"div",a:{"class":"buttonRight"},f:[{t:16,n:"button",p:[6,34,135]}]}],n:50,r:"button",p:[5,7,86]}]}],n:50,r:"title",p:[2,3,25]}," ",{p:[10,3,202],t:7,e:"article",f:[{t:16,p:[11,5,217]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],345:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.on("clear",function(){t.set("value",""),t.find("input").focus()})}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,170],t:7,e:"input",a:{type:"text",value:[{t:2,r:"value",p:[12,27,196]}],placeholder:[{t:2,r:"placeholder",p:[12,51,220]}]}}," ",{p:[13,1,240],t:7,e:"ui-button",a:{icon:"refresh"},v:{press:"clear"}}]},e.exports=a.extend(r.exports)},{341:341}],346:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";e.exports={data:{graph:t(338),xaccessor:function(t){return t.x},yaccessor:function(t){return t.y}},computed:{size:function(){var t=this.get("points");return t[0].length},scale:function(){var t=this.get("points");return Math.max.apply(Math,Array.map(t,function(t){return Math.max.apply(Math,Array.map(t,function(t){return t.y}))}))},xaxis:function(){var t=this.get("xinc"),e=this.get("size");return Array.from(Array(e).keys()).filter(function(e){return e&&e%t==0})},yaxis:function(){var t=this.get("yinc"),e=this.get("scale");return Array.from(Array(t).keys()).map(function(t){return Math.round(e*(++t/100)*10)})}},oninit:function(){var t=this;this.on({enter:function(t){this.set("selected",t.index.count)},exit:function(t){this.set("selected")}}),window.addEventListener("resize",function(e){t.set("width",t.el.clientWidth)})},onrender:function(){this.set("width",this.el.clientWidth)}}}(r),r.exports.template={v:3,t:[" ",{p:[47,1,1269],t:7,e:"svg",a:{"class":"linegraph",width:"100%",height:[{t:2,x:{r:["height"],s:"_0+10"},p:[47,45,1313]}]},f:[{p:[48,3,1334],t:7,e:"g",a:{transform:"translate(0, 5)"},f:[{t:4,f:[{t:4,f:[{p:[51,9,1504],t:7,e:"line",a:{x1:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,19,1514]}],x2:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,38,1533]}],y1:"0",y2:[{t:2,r:"height",p:[51,64,1559]}],stroke:"darkgray"}}," ",{t:4,f:[{p:[53,11,1635],t:7,e:"text",a:{x:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[53,20,1644]}],y:[{t:2,x:{r:["height"],s:"_0-5"},p:[53,38,1662]}],"text-anchor":"middle",fill:"white"},f:[{t:2,x:{r:["size",".","xfactor"],s:"(_0-_1)*_2"},p:[53,88,1712]}," ",{t:2,r:"xunit",p:[53,113,1737]}]}],n:50,x:{r:["@index"],s:"_0%2==0"},p:[52,9,1600]}],n:52,r:"xaxis",p:[50,7,1479]}," ",{t:4,f:[{p:[57,9,1820],t:7,e:"line",a:{x1:"0",x2:[{t:2,r:"width",p:[57,26,1837]}],y1:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,41,1852]}],y2:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,60,1871]}],stroke:"darkgray"}}," ",{p:[58,9,1915],t:7,e:"text",a:{x:"0",y:[{t:2,x:{r:["yscale","."],s:"_0(_1)-5"},p:[58,24,1930]}],"text-anchor":"begin",fill:"white"},f:[{t:2,x:{r:[".","yfactor"],s:"_0*_1"},p:[58,76,1982]}," ",{t:2,r:"yunit",p:[58,92,1998]}]}],n:52,r:"yaxis",p:[56,7,1795]}," ",{t:4,f:[{p:[61,9,2071],t:7,e:"path",a:{d:[{t:2,x:{r:["area.path"],s:"_0.print()"},p:[61,18,2080]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[61,47,2109]}],opacity:"0.1"}}],n:52,i:"curve",r:"curves",p:[60,7,2039]}," ",{t:4,f:[{p:[64,9,2200],t:7,e:"path",a:{d:[{t:2,x:{r:["line.path"],s:"_0.print()"},p:[64,18,2209]}],stroke:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[64,49,2240]}],fill:"none"}}],n:52,
-i:"curve",r:"curves",p:[63,7,2168]}," ",{t:4,f:[{t:4,f:[{p:[68,11,2375],t:7,e:"circle",a:{transform:["translate(",{t:2,r:".",p:[68,40,2404]},")"],r:[{t:2,x:{r:["selected","count"],s:"_0==_1?10:4"},p:[68,51,2415]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[68,89,2453]}]},v:{mouseenter:"enter",mouseleave:"exit"}}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[67,9,2329]}],n:52,i:"curve",r:"curves",p:[66,7,2297]}," ",{t:4,f:[{t:4,f:[{t:4,f:[{p:[74,13,2678],t:7,e:"text",a:{transform:["translate(",{t:2,r:".",p:[74,40,2705]},") ",{t:2,x:{r:["count","size"],s:'_0<=_1/2?"translate(15, 4)":"translate(-15, 4)"'},p:[74,47,2712]}],"text-anchor":[{t:2,x:{r:["count","size"],s:'_0<=_1/2?"start":"end"'},p:[74,126,2791]}],fill:"white"},f:[{t:2,x:{r:["count","item","yfactor"],s:"_1[_0].y*_2"},p:[75,15,2861]}," ",{t:2,r:"yunit",p:[75,43,2889]}," @ ",{t:2,x:{r:["size","count","item","xfactor"],s:"(_0-_2[_1].x)*_3"},p:[75,55,2901]}," ",{t:2,r:"xunit",p:[75,92,2938]}]}],n:50,x:{r:["selected","count"],s:"_0==_1"},p:[73,11,2638]}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[72,9,2592]}],n:52,i:"curve",r:"curves",p:[71,7,2560]}," ",{t:4,f:[{p:[81,9,3063],t:7,e:"g",a:{transform:["translate(",{t:2,x:{r:["width","curves.length","@index"],s:"(_0/(_1+1))*(_2+1)"},p:[81,33,3087]},", 10)"]},f:[{p:[82,11,3154],t:7,e:"circle",a:{r:"4",fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[82,31,3174]}]}}," ",{p:[83,11,3206],t:7,e:"text",a:{x:"8",y:"4",fill:"white"},f:[{t:2,rx:{r:"legend",m:[{t:30,n:"curve"}]},p:[83,42,3237]}]}]}],n:52,i:"curve",r:"curves",p:[80,7,3031]}],x:{r:["graph","points","xaccessor","yaccessor","width","height"],s:"_0({data:_1,xaccessor:_2,yaccessor:_3,width:_4,height:_5})"},p:[49,5,1371]}]}]}]},e.exports=a.extend(r.exports)},{338:338,341:341}],347:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"notice"},f:[{t:16,p:[2,3,24]}]}]},e.exports=a.extend(r.exports)},{341:341}],348:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={oninit:function(){var t=this,e=a.resize.bind(this),r=function(){return t.set({resize:!1,x:null,y:null})};this.observe("config.fancy",function(a,i,o){(0,n.winset)(t.get("config.window"),"can-resize",!a),a?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r))}),this.on("resize",function(){return t.toggle("resize")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[28,3,766],t:7,e:"div",a:{"class":"resize"},v:{mousedown:"resize"}}],n:50,r:"config.fancy",p:[27,1,742]}]},e.exports=a.extend(r.exports)},{341:341,481:481,483:483}],349:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"section",a:{"class":[{t:4,f:["candystripe"],r:"candystripe",p:[1,17,16]}]},f:[{t:4,f:[{p:[3,5,84],t:7,e:"span",a:{"class":"label",style:[{t:4,f:["color:",{t:2,r:"labelcolor",p:[3,53,132]}],r:"labelcolor",p:[3,32,111]}]},f:[{t:2,r:"label",p:[3,84,163]},":"]}],n:50,r:"label",p:[2,3,65]}," ",{t:4,f:[{t:16,p:[6,5,215]}],n:50,r:"nowrap",p:[5,3,195]},{t:4,n:51,f:[{p:[8,5,242],t:7,e:"div",a:{"class":"content",style:[{t:4,f:["float:right;"],r:"right",p:[8,33,270]}]},f:[{t:16,p:[9,7,312]}]}],r:"nowrap"}]}]},e.exports=a.extend(r.exports)},{341:341}],350:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"subdisplay"},f:[{t:4,f:[{p:[3,5,47],t:7,e:"header",f:[{p:[4,7,63],t:7,e:"h4",f:[{t:2,r:"title",p:[4,11,67]}]}," ",{t:4,f:[{t:16,n:"button",p:[5,21,103]}],n:50,r:"button",p:[5,7,89]}]}],n:50,r:"title",p:[2,3,28]}," ",{p:[8,3,156],t:7,e:"article",f:[{t:16,p:[9,5,171]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],351:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.set("active",this.findComponent("tab").get("name")),this.on("switch",function(e){t.set("active",e.node.textContent.trim())}),this.observe("active",function(e,n,a){for(var r=t.findAllComponents("tab"),i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;p.set("shown",p.get("name")===e)}})}}}(r),r.exports.template={v:3,t:[" "," ",{p:[20,1,524],t:7,e:"header",f:[{t:4,f:[{p:[22,5,556],t:7,e:"ui-button",a:{pane:[{t:2,r:".",p:[22,22,573]}]},v:{press:"switch"},f:[{t:2,r:".",p:[22,47,598]}]}],n:52,r:"tabs",p:[21,3,536]}]}," ",{p:[25,1,641],t:7,e:"ui-display",f:[{t:8,r:"content",p:[26,3,657]}]}]},r.exports.components=r.exports.components||{};var i={tab:t(352)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,352:352}],352:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:16,p:[2,3,17]}],n:50,r:"shown",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],353:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(482),a=t(481),r=t(483);e.exports={computed:{visualStatus:function(){switch(this.get("config.status")){case n.UI_INTERACTIVE:return"good";case n.UI_UPDATE:return"average";case n.UI_DISABLED:return"bad";default:return"bad"}}},oninit:function(){var t=this,e=r.drag.bind(this),n=function(e){return t.set({drag:!1,x:null,y:null})};this.observe("config.fancy",function(r,i,o){(0,a.winset)(t.get("config.window"),"titlebar",!r&&t.get("config.titlebar")),r?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",n)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",n))}),this.on({drag:function(){this.toggle("drag")},close:function(){(0,a.winset)(this.get("config.window"),"is-visible",!1),window.location.href=(0,a.href)({command:"uiclose "+this.get("config.ref")},"winset")},minimize:function(){(0,a.winset)(this.get("config.window"),"is-minimized",!0)}})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[50,3,1440],t:7,e:"header",a:{"class":"titlebar"},v:{mousedown:"drag"},f:[{p:[51,5,1491],t:7,e:"i",a:{"class":["statusicon fa fa-eye fa-2x ",{t:2,r:"visualStatus",p:[51,42,1528]}]}}," ",{p:[52,5,1556],t:7,e:"span",a:{"class":"title"},f:[{t:16,p:[52,25,1576]}]}," ",{t:4,f:[{p:[54,7,1626],t:7,e:"i",a:{"class":"minimize fa fa-minus fa-2x"},v:{click:"minimize"}}," ",{p:[55,7,1696],t:7,e:"i",a:{"class":"close fa fa-close fa-2x"},v:{click:"close"}}],n:50,r:"config.fancy",p:[53,5,1598]}]}],n:50,r:"config.titlebar",p:[49,1,1413]}]},e.exports=a.extend(r.exports)},{341:341,481:481,482:482,483:483}],354:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";var e=[11,10,9,8];t.exports={data:{userAgent:navigator.userAgent},computed:{ie:function(){if(document.documentMode)return document.documentMode;for(var t in e){var n=document.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return t}}},oninit:function(){var t=this;this.on("debug",function(){return t.toggle("debug")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[27,3,662],t:7,e:"ui-notice",f:[{p:[28,5,679],t:7,e:"span",f:["You have an old (IE",{t:2,r:"ie",p:[28,30,704]},"), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed."]},{p:[28,137,811],t:7,e:"br"}," ",{p:[29,5,822],t:7,e:"span",f:["To upgrade, click 'Upgrade IE' to download IE11 from Microsoft."]},{p:[29,81,898],t:7,e:"br"}," ",{p:[30,5,909],t:7,e:"span",f:["If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft."]},{p:[30,122,1026],t:7,e:"br"}," ",{p:[31,5,1037],t:7,e:"span",f:["Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message)."]}," ",{p:[32,5,1155],t:7,e:"hr"}," ",{p:[33,5,1166],t:7,e:"ui-button",a:{icon:"close",action:"tgui:nofrills"},f:["No Frills"]}," ",{p:[34,5,1240],t:7,e:"ui-button",a:{icon:"internet-explorer",action:"tgui:link",params:'{"url": "http://windows.microsoft.com/en-us/internet-explorer/download-ie"}'},f:["Upgrade IE"]}," ",{p:[36,5,1416],t:7,e:"ui-button",a:{icon:"edge",action:"tgui:link",params:'{"url": "https://dev.windows.com/en-us/microsoft-edge/tools/vms"}'},f:["IE VMs"]}," ",{p:[38,5,1565],t:7,e:"ui-button",a:{icon:"info",action:"tgui:link",params:'{"url": "https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer"}'},f:["EOL Info"]}," ",{p:[40,5,1738],t:7,e:"ui-button",a:{icon:"bug"},v:{press:"debug"},f:["Debug Info"]}," ",{t:4,f:[{p:[42,7,1826],t:7,e:"hr"}," ",{p:[43,7,1839],t:7,e:"span",f:["Detected: IE",{t:2,r:"ie",p:[43,25,1857]}]},{p:[43,38,1870],t:7,e:"br"}," ",{p:[44,7,1883],t:7,e:"span",f:["User Agent: ",{t:2,r:"userAgent",p:[44,25,1901]}]}],n:50,r:"debug",p:[41,5,1805]}]}],n:50,x:{r:["config.fancy","ie"],s:"_0&&_1&&_1<11"},p:[26,1,621]}]},e.exports=a.extend(r.exports)},{341:341}],355:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},shockState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[22,1,348],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[23,2,384],t:7,e:"ui-section",a:{label:"Main"},f:[{p:[24,3,413],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.main"],s:"_0(_1)"},p:[24,16,426]}]},f:[{t:2,x:{r:["data.power.main"],s:'_0?"Online":"Offline"'},p:[24,49,459]}]}," ",{t:4,f:["[ ",{p:[26,6,567],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"},p:[25,3,512]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.main_timeleft",p:[29,7,674]}," seconds left ]"],n:50,x:{r:["data.power.main_timeleft"],s:"_0>0"},p:[28,4,630]}],x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"}}," ",{p:[32,3,744],t:7,e:"div",a:{style:"float:right"},f:[{p:[33,4,774],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-main",state:[{t:2,x:{r:["data.power.main"],s:'_0?null:"disabled"'},p:[33,63,833]}]},f:["Disrupt"]}]}]}," ",{p:[36,2,922],t:7,e:"ui-section",a:{label:"Backup"},f:[{p:[37,3,953],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.backup"],s:"_0(_1)"},p:[37,16,966]}]},f:[{t:2,x:{r:["data.power.backup"],s:'_0?"Online":"Offline"'},p:[37,51,1001]}]}," ",{t:4,f:["[ ",{p:[39,6,1115],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"},p:[38,3,1056]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.backup_timeleft",p:[42,7,1224]}," seconds left ]"],n:50,x:{r:["data.power.backup_timeleft"],s:"_0>0"},p:[41,4,1178]}],x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"}}," ",{p:[45,3,1296],t:7,e:"div",a:{style:"float:right"},f:[{p:[46,4,1326],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-backup",state:[{t:2,x:{r:["data.power.backup"],s:'_0?null:"disabled"'},p:[46,65,1387]}]},f:["Disrupt"]}]}]}," ",{p:[49,2,1478],t:7,e:"ui-section",a:{label:"Electrify"},f:[{p:[50,3,1512],t:7,e:"span",a:{"class":[{t:2,x:{r:["shockState","data.shock"],s:"_0(_1)"},p:[50,16,1525]}]},f:[{t:2,x:{r:["data.shock"],s:'_0==2?"Safe":"Electrified"'},p:[50,44,1553]}]}," ",{t:4,f:["[ ",{p:[52,6,1640],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.shock"],s:"!_0"},p:[51,3,1608]},{t:4,n:51,f:[{t:4,f:["[ ",{p:[55,7,1742],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"data.shock_timeleft",p:[55,25,1760]}," seconds left"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0>0"},p:[54,4,1703]}," ",{t:4,f:["[ ",{p:[58,7,1863],t:7,e:"span",a:{"class":"bad"},f:["Permanent"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0==-1"},p:[57,4,1822]}],x:{r:["data.wires.shock"],s:"!_0"}}," ",{p:[61,3,1926],t:7,e:"div",a:{style:"float:right"},f:[{p:[62,4,1956],t:7,e:"ui-button",a:{icon:"wrench",action:"shock-restore",state:[{t:2,x:{r:["data.wires.shock","data.shock"],s:'_0&&_1==0?null:"disabled"'},p:[62,59,2011]}]},f:["Restore"]}," ",{p:[63,4,2094],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-temp",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[63,54,2144]}]},f:["Set (Temporary)"]}," ",{p:[64,4,2199],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-perm",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[64,53,2248]}]},f:["Set (Permanent)"]}]}]}]}," ",{p:[68,1,2341],t:7,e:"ui-display",a:{title:"Access & Door Control"},f:[{p:[69,2,2386],t:7,e:"ui-section",a:{label:"ID Scan"},f:[{t:4,f:["[ ",{p:[71,6,2455],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[70,3,2418]}," ",{p:[73,3,2516],t:7,e:"div",a:{style:"float:right"},f:[{p:[74,4,2546],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[74,22,2564]}],icon:"power-off",action:"idscan-on",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"selected":""'},p:[74,93,2635]}]},f:["Enabled"]}," ",{p:[75,4,2698],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[75,22,2716]}],icon:"close",action:"idscan-off",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"":"selected"'},p:[75,90,2784]}]},f:["Disabled"]}]}]}," ",{p:[78,2,2872],t:7,e:"ui-section",a:{label:"Emergency Access"},f:[{p:[79,3,2913],t:7,e:"div",a:{style:"float:right"},f:[{p:[80,4,2943],t:7,e:"ui-button",a:{icon:"power-off",action:"emergency-on",style:[{t:2,x:{r:["data.emergency"],s:'_0?"selected":""'},p:[80,61,3e3]}]},f:["Enabled"]}," ",{p:[81,4,3062],t:7,e:"ui-button",a:{icon:"close",action:"emergency-off",style:[{t:2,x:{r:["data.emergency"],s:'_0?"":"selected"'},p:[81,58,3116]}]},f:["Disabled"]}]}]}," ",{p:[84,2,3203],t:7,e:"br"}," ",{p:[85,2,3212],t:7,e:"ui-section",a:{label:"Door bolts"},f:[{t:4,f:["[ ",{p:[87,6,3279],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.bolts"],s:"!_0"},p:[86,3,3247]}," ",{p:[89,3,3340],t:7,e:"div",a:{style:"float:right"},f:[{p:[90,4,3370],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[90,22,3388]}],icon:"unlock",action:"bolt-raise",style:[{t:2,x:{r:["data.locked"],s:'_0?"":"selected"'},p:[90,85,3451]}]},f:["Raised"]}," ",{p:[91,4,3509],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[91,22,3527]}],icon:"lock",action:"bolt-drop",style:[{t:2,x:{r:["data.locked"],s:'_0?"selected":""'},p:[91,82,3587]}]},f:["Dropped"]}]}]}," ",{p:[94,2,3670],t:7,e:"ui-section",a:{label:"Door bolt lights"},f:[{t:4,f:["[ ",{p:[96,6,3744],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.lights"],s:"!_0"},p:[95,3,3711]}," ",{p:[98,3,3805],t:7,e:"div",a:{style:"float:right"},f:[{p:[99,4,3835],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[99,22,3853]}],icon:"power-off",action:"light-on",style:[{t:2,x:{r:["data.lights"],s:'_0?"selected":""'},p:[99,88,3919]}]},f:["Enabled"]}," ",{p:[100,4,3978],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[100,22,3996]}],icon:"close",action:"light-off",style:[{t:2,x:{r:["data.lights"],s:'_0?"":"selected"'},p:[100,85,4059]}]},f:["Disabled"]}]}]}," ",{p:[103,2,4143],t:7,e:"ui-section",a:{label:"Door force sensors"},f:[{t:4,f:["[ ",{p:[105,6,4217],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.safe"],s:"!_0"},p:[104,3,4186]}," ",{p:[107,3,4278],t:7,e:"div",a:{style:"float:right"},f:[{p:[108,4,4308],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[108,22,4326]}],icon:"power-off",action:"safe-on",style:[{t:2,x:{r:["data.safe"],s:'_0?"selected":""'},p:[108,85,4389]}]},f:["Enabled"]}," ",{p:[109,4,4446],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[109,22,4464]}],icon:"close",action:"safe-off",style:[{t:2,x:{r:["data.safe"],s:'_0?"":"selected"'},p:[109,82,4524]}]},f:["Disabled"]}]}]}," ",{p:[112,2,4606],t:7,e:"ui-section",a:{label:"Door timing safety"},f:[{t:4,f:["[ ",{p:[114,6,4682],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.timing"],s:"!_0"},p:[113,3,4649]}," ",{p:[116,3,4743],t:7,e:"div",a:{style:"float:right"},f:[{p:[117,4,4773],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[117,22,4791]}],icon:"power-off",action:"speed-on",style:[{t:2,x:{r:["data.speed"],s:'_0?"selected":""'},p:[117,88,4857]}]},f:["Enabled"]}," ",{p:[118,4,4915],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[118,22,4933]}],icon:"close",action:"speed-off",style:[{t:2,x:{r:["data.speed"],s:'_0?"":"selected"'},p:[118,85,4996]}]},f:["Disabled"]}]}]}," ",{p:[121,2,5079],t:7,e:"br"}," ",{p:[122,2,5088],t:7,e:"ui-section",a:{label:"Door control"},f:[{t:4,f:["[ ",{p:[124,6,5166],t:7,e:"span",a:{"class":"bad"},f:["Door is ",{t:2,x:{r:["data.locked","data.welded"],s:'(_0?"bolted":"")+(_0&&_1?" and ":"")+(_1?"welded":"")'},p:[124,32,5192]}]}," ]"],n:50,x:{r:["data.locked","data.welded"],s:"_0||_1"},p:[123,3,5125]}," ",{p:[126,3,5327],t:7,e:"div",a:{style:"float:right"},f:[{p:[127,4,5357],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(_2&&"disabled")'},p:[127,22,5375]}],icon:"sign-out",action:"open-close"},f:["Open door"]}," ",{p:[128,4,5502],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(!_2&&"disabled")'},p:[128,22,5520]}],icon:"sign-in",action:"open-close"},f:["Close door"]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],356:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," ",{p:[7,1,267],t:7,e:"ui-notice",f:[{t:4,f:[{p:[9,5,312],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[10,7,355],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[10,24,372]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[10,75,423]}]}]}],n:50,r:"data.siliconUser",p:[8,3,282]},{t:4,n:51,f:[{p:[13,5,514],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,31,540]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[16,1,625],t:7,e:"status"}," ",{t:4,f:[{t:4,f:[{p:[19,7,719],t:7,e:"ui-display",a:{title:"Air Controls"},f:[{p:[20,9,762],t:7,e:"ui-section",f:[{p:[21,11,786],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"exclamation-triangle":"exclamation"'},p:[21,28,803]}],style:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"caution":null'},p:[21,98,873]}],action:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"reset":"alarm"'},p:[22,23,937]}]},f:["Area Atmosphere Alarm"]}]}," ",{p:[24,9,1045],t:7,e:"ui-section",f:[{p:[25,11,1069],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0==3?"exclamation-triangle":"exclamation"'},p:[25,28,1086]}],style:[{t:2,x:{r:["data.mode"],s:'_0==3?"danger":null'},p:[25,96,1154]}],action:"mode",params:['{"mode": ',{t:2,x:{r:["data.mode"],s:"_0==3?1:3"},p:[26,44,1236]},"}"]},f:["Panic Siphon"]}]}," ",{p:[28,9,1322],t:7,e:"br"}," ",{p:[29,9,1337],t:7,e:"ui-section",f:[{p:[30,11,1361],t:7,e:"ui-button",a:{icon:"sign-out",action:"tgui:view",params:'{"screen": "vents"}'},f:["Vent Controls"]}]}," ",{p:[32,9,1494],t:7,e:"ui-section",f:[{p:[33,11,1518],t:7,e:"ui-button",a:{icon:"filter",action:"tgui:view",params:'{"screen": "scrubbers"}'},f:["Scrubber Controls"]}]}," ",{p:[35,9,1657],t:7,e:"ui-section",f:[{p:[36,11,1681],t:7,e:"ui-button",a:{icon:"cog",action:"tgui:view",params:'{"screen": "modes"}'},f:["Operating Mode"]}]}," ",{p:[38,9,1810],t:7,e:"ui-section",f:[{p:[39,11,1834],t:7,e:"ui-button",a:{icon:"bar-chart",action:"tgui:view",params:'{"screen": "thresholds"}'},f:["Alarm Thresholds"]}]}]}],n:50,x:{r:["config.screen"],s:'_0=="home"'},p:[18,3,680]},{t:4,n:51,f:[{t:4,n:50,x:{r:["config.screen"],s:'_0=="vents"'},f:[{p:[43,5,2032],t:7,e:"vents"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&(_0=="scrubbers")'},f:[" ",{p:[45,5,2089],t:7,e:"scrubbers"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&(_0=="modes"))'},f:[" ",{p:[47,5,2146],t:7,e:"modes"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&((!(_0=="modes"))&&(_0=="thresholds")))'},f:[" ",{p:[49,5,2204],t:7,e:"thresholds"}]}],x:{r:["config.screen"],s:'_0=="home"'}}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[17,1,636]}]},r.exports.components=r.exports.components||{};var i={vents:t(362),modes:t(358),thresholds:t(361),status:t(360),scrubbers:t(359)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,358:358,359:359,360:360,361:361,362:362}],357:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-button",a:{icon:"arrow-left",action:"tgui:view",params:'{"screen": "home"}'},f:["Back"]}]},e.exports=a.extend(r.exports)},{341:341}],358:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,115],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Operating Modes",button:0},f:[" ",{t:4,f:[{p:[8,5,168],t:7,e:"ui-section",f:[{p:[9,7,188],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["selected"],s:'_0?"check-square-o":"square-o"'},p:[9,24,205]}],state:[{t:2,x:{r:["selected","danger"],s:'_0?_1?"danger":"selected":null'},p:[10,16,267]}],action:"mode",params:['{"mode": ',{t:2,r:"mode",p:[11,40,361]},"}"]},f:[{t:2,r:"name",p:[11,51,372]}]}]}],n:52,r:"data.modes",p:[7,3,142]}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],359:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," ",{p:{button:[{p:[6,5,185],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Scrubber Controls",button:0},f:[" ",{t:4,f:[{p:[9,5,242],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[9,27,264]}]},f:[{p:[10,7,287],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,323],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[11,26,340]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[11,68,382]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[12,46,459]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[12,66,479]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[12,80,493]}]}]}," ",{p:[14,7,558],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[15,9,593],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["scrubbing"],s:'_0?"filter":"sign-in"'},p:[15,26,610]}],style:[{t:2,x:{r:["scrubbing"],s:'_0?null:"danger"'},p:[15,71,655]}],action:"scrubbing",params:['{"id_tag": "',{t:2,r:"id_tag",p:[16,50,738]},'", "val": ',{t:2,x:{r:["scrubbing"],s:"+!_0"},p:[16,70,758]},"}"]},f:[{t:2,x:{r:["scrubbing"],s:'_0?"Scrubbing":"Siphoning"'},p:[16,88,776]}]}]}," ",{p:[18,7,858],t:7,e:"ui-section",a:{label:"Range"},f:[{p:[19,9,894],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["widenet"],s:'_0?"expand":"compress"'},p:[19,26,911]}],style:[{t:2,x:{r:["widenet"],s:'_0?"selected":null'},p:[19,70,955]}],action:"widenet",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,1036]},'", "val": ',{t:2,x:{r:["widenet"],s:"+!_0"},p:[20,68,1056]},"}"]},f:[{t:2,x:{r:["widenet"],s:'_0?"Expanded":"Normal"'},p:[20,84,1072]}]}]}," ",{p:[22,7,1148],t:7,e:"ui-section",a:{label:"Filters"},f:[{p:[23,9,1186],t:7,e:"filters"}]}]}],n:52,r:"data.scrubbers",p:[8,3,212]},{t:4,n:51,f:[{p:[27,5,1257],t:7,e:"span",a:{"class":"bad"},f:["Error: No scrubbers connected."]}],r:"data.scrubbers"}]}]},r.exports.components=r.exports.components||{};var i={filters:t(457),back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357,457:457}],360:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Air Status"},f:[{t:4,f:[{t:4,f:[{p:[4,7,110],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[4,26,129]}]},f:[{p:[5,6,146],t:7,e:"span",a:{"class":[{t:2,x:{r:["danger_level"],s:'_0==2?"bad":_0==1?"average":"good"'},p:[5,19,159]}]},f:[{t:2,x:{r:["value"],s:"Math.fixed(_0,2)"},p:[6,5,237]},{t:2,r:"unit",p:[6,29,261]}]}]}],n:52,r:"adata.environment_data",p:[3,5,70]}," ",{p:[10,5,322],t:7,e:"ui-section",a:{label:"Local Status"},f:[{p:[11,7,363],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.danger_level"],s:'_0==2?"bad bold":_0==1?"average bold":"good"'},p:[11,20,376]}]},f:[{t:2,x:{r:["data.danger_level"],s:'_0==2?"Danger (Internals Required)":_0==1?"Caution":"Optimal"'},p:[12,6,475]}]}]}," ",{p:[15,5,619],t:7,e:"ui-section",a:{label:"Area Status"},f:[{p:[16,7,659],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.atmos_alarm","data.fire_alarm"],s:'_0||_1?"bad bold":"good"'},p:[16,20,672]}]},f:[{t:2,x:{r:["data.atmos_alarm","fire_alarm"],s:'_0?"Atmosphere Alarm":_1?"Fire Alarm":"Nominal"'},p:[17,8,744]}]}]}],n:50,r:"data.environment_data",p:[2,3,35]},{t:4,n:51,f:[{p:[21,5,876],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[22,7,912],t:7,e:"span",a:{"class":"bad bold"},f:["Cannot obtain air sample for analysis."]}]}],r:"data.environment_data"}," ",{t:4,f:[{p:[26,5,1040],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[27,7,1076],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[25,3,1014]}]}]},e.exports=a.extend(r.exports)},{341:341}],361:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" th, td {\r\n padding-right: 16px;\r\n text-align: left;\r\n }",r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,116],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Alarm Thresholds",button:0},f:[" ",{p:[7,3,143],t:7,e:"table",f:[{p:[8,5,156],t:7,e:"thead",f:[{p:[8,12,163],t:7,e:"tr",f:[{p:[9,7,175],t:7,e:"th"}," ",{p:[10,7,192],t:7,e:"th",f:[{p:[10,11,196],t:7,e:"span",a:{"class":"bad"},f:["min2"]}]}," ",{p:[11,7,238],t:7,e:"th",f:[{p:[11,11,242],t:7,e:"span",a:{"class":"average"},f:["min1"]}]}," ",{p:[12,7,288],t:7,e:"th",f:[{p:[12,11,292],t:7,e:"span",a:{"class":"average"},f:["max1"]}]}," ",{p:[13,7,338],t:7,e:"th",f:[{p:[13,11,342],t:7,e:"span",a:{"class":"bad"},f:["max2"]}]}]}]}," ",{p:[15,5,401],t:7,e:"tbody",f:[{t:4,f:[{p:[16,32,441],t:7,e:"tr",f:[{p:[17,9,455],t:7,e:"th",f:[{t:3,r:"name",p:[17,13,459]}]}," ",{t:4,f:[{p:[18,27,502],t:7,e:"td",f:[{p:[19,11,518],t:7,e:"ui-button",a:{action:"threshold",params:['{"env": "',{t:2,r:"env",p:[19,58,565]},'", "var": "',{t:2,r:"val",p:[19,76,583]},'"}']},f:[{t:2,x:{r:["selected"],s:"Math.fixed(_0,2)"},p:[19,87,594]}]}]}],n:52,r:"settings",p:[18,9,484]}]}],n:52,r:"data.thresholds",p:[16,7,416]}]}," ",{p:[23,3,697],t:7,e:"table",f:[]}]}]}," "]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],362:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,113],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Vent Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,166],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,188]}]},f:[{p:[9,7,211],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,247],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,264]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,306]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,383]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,403]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,417]}]}]}," ",{p:[13,7,482],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,517],t:7,e:"span",f:[{t:2,x:{r:["direction"],s:'_0=="release"?"Pressurizing":"Siphoning"'},p:[14,15,523]}]}]}," ",{p:[16,7,616],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[17,9,665],t:7,e:"ui-button",a:{icon:"sign-in",style:[{t:2,x:{r:["incheck"],s:'_0?"selected":null'},p:[17,42,698]}],action:"incheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[18,48,779]},'", "val": ',{t:2,r:"checks",p:[18,68,799]},"}"]},f:["Internal"]}," ",{p:[19,9,842],t:7,e:"ui-button",a:{icon:"sign-out",style:[{t:2,x:{r:["excheck"],s:'_0?"selected":null'},p:[19,43,876]}],action:"excheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,957]},'", "val": ',{t:2,r:"checks",p:[20,68,977]},"}"]},f:["External"]}]}," ",{t:4,f:[{p:[23,9,1064],t:7,e:"ui-section",a:{label:"Internal Target Pressure"},f:[{p:[24,11,1121],t:7,e:"ui-button",a:{icon:"pencil",action:"set_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[25,33,1210]},'"}']},f:[{t:2,x:{r:["internal"],s:"Math.fixed(_0)"},p:[25,47,1224]}]}," ",{p:[26,11,1272],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["intdefault"],s:'_0?"disabled":null'},p:[26,44,1305]}],action:"reset_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[27,33,1407]},'"}']},f:["Reset"]}]}],n:50,r:"incheck",p:[22,7,1039]}," ",{t:4,f:[{p:[31,11,1511],t:7,e:"ui-section",a:{label:"External Target Pressure"},f:[{p:[32,13,1570],t:7,e:"ui-button",a:{icon:"pencil",action:"set_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[33,35,1661]},'"}']},f:[{t:2,x:{r:["external"],s:"Math.fixed(_0)"},p:[33,49,1675]}]}," ",{p:[34,13,1725],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["extdefault"],s:'_0?"disabled":null'},p:[34,46,1758]}],action:"reset_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[35,35,1862]},'"}']},f:["Reset"]}]}],n:50,r:"excheck",p:[30,7,1484]}]}],n:52,r:"data.vents",p:[7,3,140]},{t:4,n:51,f:[{p:[40,5,1973],t:7,e:"span",a:{"class":"bad"},f:["Error: No vents connected."]}],r:"data.vents"}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],363:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" table {\r\n width: 100%;\r\n border-spacing: 2px;\r\n }\r\n th {\r\n text-align: left;\r\n }\r\n td {\r\n vertical-align: top;\r\n }\r\n td .button {\r\n margin-top: 4px\r\n }",r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",f:[{p:[3,5,34],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oneAccess"],s:'_0?"unlock":"lock"'},p:[3,22,51]}],action:"one_access"},f:[{t:2,x:{r:["data.oneAccess"],s:'_0?"One":"All"'},p:[3,82,111]}," Required"]}," ",{p:[4,5,172],t:7,e:"ui-button",a:{icon:"refresh",action:"clear"},f:["Clear"]}]}," ",{p:[6,3,251],t:7,e:"hr"}," ",{p:[7,3,260],t:7,e:"table",f:[{p:[8,3,271],t:7,e:"thead",f:[{p:[9,4,283],t:7,e:"tr",f:[{t:4,f:[{p:[10,5,315],t:7,e:"th",f:[{p:[10,9,319],t:7,e:"span",a:{"class":"highlight bold"},f:[{t:2,r:"name",p:[10,38,348]}]}]}],n:52,r:"data.regions",p:[9,8,287]}]}]}," ",{p:[13,3,403],t:7,e:"tbody",f:[{p:[14,4,415],t:7,e:"tr",f:[{t:4,f:[{p:[15,5,447],t:7,e:"td",f:[{t:4,f:[{p:[16,11,481],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["req"],s:'_0?"check-square-o":"square-o"'},p:[16,28,498]}],style:[{t:2,x:{r:["req"],s:'_0?"selected":null'},p:[16,76,546]}],action:"set",params:['{"access": "',{t:2,r:"id",p:[17,46,621]},'"}']},f:[{t:2,r:"name",p:[17,56,631]}]}," ",{p:[18,9,661],t:7,e:"br"}],n:52,r:"accesses",p:[15,9,451]}]}],n:52,r:"data.regions",p:[14,8,419]}]}]}]}," ",{p:[23,2,731],t:7,e:"hr"}," ",{p:[24,2,739],t:7,e:"span",a:{"class":"highlight bold"},f:["Unrestricted Access:"]}," ",{p:[25,2,798],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"check-square-o":"square-o"'},p:[25,19,815]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"selected":null'},p:[25,88,884]}],action:"direc_set",params:'{"unres_direction": "1"}'},f:["North"]}," ",{p:[26,2,1007],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"check-square-o":"square-o"'},p:[26,19,1024]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"selected":null'},p:[26,88,1093]}],action:"direc_set",params:'{"unres_direction": "4"}'},f:["East"]}," ",{p:[27,2,1215],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"check-square-o":"square-o"'},p:[27,19,1232]}],style:[{t:2,x:{r:["data.unres_direction"],
-s:'_0&2?"selected":null'},p:[27,88,1301]}],action:"direc_set",params:'{"unres_direction": "2"}'},f:["South"]}," ",{p:[28,2,1424],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&8?"check-square-o":"square-o"'},p:[28,19,1441]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&8?"selected":null'},p:[28,88,1510]}],action:"direc_set",params:'{"unres_direction": "8"}'},f:["West"]}]}," "]},e.exports=a.extend(r.exports)},{341:341}],364:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}},computed:{malfAction:function(){switch(this.get("data.malfStatus")){case 1:return"hack";case 2:return"occupy";case 3:return"deoccupy"}},malfButton:function(){switch(this.get("data.malfStatus")){case 1:return"Override Programming";case 2:case 4:return"Shunt Core Process";case 3:return"Return to Main Core"}},malfIcon:function(){switch(this.get("data.malfStatus")){case 1:return"terminal";case 2:case 4:return"caret-square-o-down";case 3:return"caret-square-o-left"}},powerCellStatusState:function(){var t=this.get("data.powerCellStatus");return t>50?"good":t>25?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[46,2,1206],t:7,e:"ui-notice",f:[{p:[47,3,1221],t:7,e:"b",f:[{p:[47,6,1224],t:7,e:"h3",f:["SYSTEM FAILURE"]}]}," ",{p:[48,3,1255],t:7,e:"i",f:["I/O regulators malfunction detected! Waiting for system reboot..."]},{p:[48,75,1327],t:7,e:"br"}," Automatic reboot in ",{t:2,r:"data.failTime",p:[49,23,1355]}," seconds... ",{p:[50,3,1387],t:7,e:"ui-button",a:{icon:"refresh",action:"reboot"},f:["Reboot Now"]},{p:[50,67,1451],t:7,e:"br"},{p:[50,71,1455],t:7,e:"br"},{p:[50,75,1459],t:7,e:"br"}]}],n:50,r:"data.failTime",p:[45,1,1182]},{t:4,n:51,f:[{p:[53,2,1491],t:7,e:"ui-notice",f:[{t:4,f:[{p:[55,3,1535],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[56,5,1576],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[56,22,1593]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[56,73,1644]}]}]}],n:50,r:"data.siliconUser",p:[54,4,1507]},{t:4,n:51,f:[{p:[59,3,1732],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[59,29,1758]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[62,2,1846],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[63,4,1884],t:7,e:"ui-section",a:{label:"Main Breaker"},f:[{t:4,f:[{p:[65,5,1967],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isOperating"],s:'_0?"good":"bad"'},p:[65,18,1980]}]},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[65,57,2019]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[64,3,1921]},{t:4,n:51,f:[{p:[67,5,2079],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[67,22,2096]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[67,75,2149]}],action:"breaker"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[68,21,2212]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}," ",{p:[71,4,2293],t:7,e:"ui-section",a:{label:"External Power"},f:[{p:[72,3,2332],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.externalPower"],s:"_0(_1)"},p:[72,16,2345]}]},f:[{t:2,x:{r:["data.externalPower"],s:'_0==2?"Good":_0==1?"Low":"None"'},p:[72,52,2381]}]}]}," ",{p:[74,4,2490],t:7,e:"ui-section",a:{label:"Power Cell"},f:[{t:4,f:[{p:[76,5,2567],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerCellStatus",p:[76,38,2600]}],state:[{t:2,r:"powerCellStatusState",p:[76,71,2633]}]},f:[{t:2,x:{r:["adata.powerCellStatus"],s:"Math.fixed(_0)"},p:[76,97,2659]},"%"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[75,3,2525]},{t:4,n:51,f:[{p:[78,5,2724],t:7,e:"span",a:{"class":"bad"},f:["Removed"]}],x:{r:["data.powerCellStatus"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[82,3,2830],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{t:4,f:[{p:[84,4,2913],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.chargeMode"],s:'_0?"good":"bad"'},p:[84,17,2926]}]},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[84,55,2964]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[83,5,2868]},{t:4,n:51,f:[{p:[86,4,3026],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.chargeMode"],s:'_0?"refresh":"close"'},p:[86,21,3043]}],style:[{t:2,x:{r:["data.chargeMode"],s:'_0?"selected":null'},p:[86,71,3093]}],action:"charge"},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[87,22,3156]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}," [",{p:[90,6,3236],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.chargingStatus"],s:"_0(_1)"},p:[90,19,3249]}]},f:[{t:2,x:{r:["data.chargingStatus"],s:'_0==2?"Fully Charged":_0==1?"Charging":"Not Charging"'},p:[90,56,3286]}]},"]"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[81,4,2790]}]}," ",{p:[94,2,3445],t:7,e:"ui-display",a:{title:"Power Channels"},f:[{t:4,f:[{p:[96,3,3517],t:7,e:"ui-section",a:{label:[{t:2,r:"title",p:[96,22,3536]}],nowrap:0},f:[{p:[97,5,3560],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.powerChannels",m:[{t:30,n:"@index"},"powerLoad"]},p:[97,26,3581]}]}," ",{p:[98,5,3634],t:7,e:"div",a:{"class":"content"},f:[{p:[98,26,3655],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0>=2?"good":"bad"'},p:[98,39,3668]}]},f:[{t:2,x:{r:["status"],s:'_0>=2?"On":"Off"'},p:[98,73,3702]}]}]}," ",{p:[99,5,3751],t:7,e:"div",a:{"class":"content"},f:["[",{p:[99,27,3773],t:7,e:"span",f:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"Auto":"Manual"'},p:[99,33,3779]}]},"]"]}," ",{p:[100,5,3849],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{t:4,f:[{p:[102,6,3942],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"selected":null'},p:[102,39,3975]}],action:"channel",params:[{t:2,r:"topicParams.auto",p:[103,30,4057]}]},f:["Auto"]}," ",{p:[104,6,4102],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["status"],s:'_0==2?"selected":null'},p:[104,41,4137]}],action:"channel",params:[{t:2,r:"topicParams.on",p:[105,13,4204]}]},f:["On"]}," ",{p:[106,6,4245],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["status"],s:'_0==0?"selected":null'},p:[106,37,4276]}],action:"channel",params:[{t:2,r:"topicParams.off",p:[107,13,4343]}]},f:["Off"]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[101,4,3895]}]}]}],n:52,r:"data.powerChannels",p:[95,4,3485]}," ",{p:[112,4,4439],t:7,e:"ui-section",a:{label:"Total Load"},f:[{p:[113,3,4474],t:7,e:"span",a:{"class":"bold"},f:[{t:2,r:"adata.totalLoad",p:[113,22,4493]}]}]}]}," ",{t:4,f:[{p:[117,4,4585],t:7,e:"ui-display",a:{title:"System Overrides"},f:[{p:[118,3,4626],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"overload"},f:["Overload"]}," ",{t:4,f:[{p:[120,5,4727],t:7,e:"ui-button",a:{icon:[{t:2,r:"malfIcon",p:[120,22,4744]}],state:[{t:2,x:{r:["data.malfStatus"],s:'_0==4?"disabled":null'},p:[120,43,4765]}],action:[{t:2,r:"malfAction",p:[120,97,4819]}]},f:[{t:2,r:"malfButton",p:[120,113,4835]}]}],n:50,r:"data.malfStatus",p:[119,3,4698]}]}],n:50,r:"data.siliconUser",p:[116,2,4556]}," ",{p:[124,2,4903],t:7,e:"ui-notice",f:[{p:[125,4,4919],t:7,e:"ui-section",a:{label:"Emergency Light Fallback"},f:[{t:4,f:[{p:[127,8,5020],t:7,e:"span",f:[{t:2,x:{r:["data.emergencyLights"],s:'_0?"Enabled":"Disabled"'},p:[127,14,5026]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[126,6,4971]},{t:4,n:51,f:[{p:[129,8,5106],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"emergency_lighting"},f:[{t:2,x:{r:["data.emergencyLights"],s:'_0?"Enabled":"Disabled"'},p:[129,66,5164]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}," ",{p:[133,2,5275],t:7,e:"ui-notice",f:[{p:[134,4,5291],t:7,e:"ui-section",a:{label:"Night Shift Lighting"},f:[{t:4,f:[{p:[136,8,5388],t:7,e:"span",f:[{t:2,x:{r:["data.nightshiftLights"],s:'_0?"Enabled":"Disabled"'},p:[136,14,5394]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[135,6,5339]},{t:4,n:51,f:[{p:[138,8,5475],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"toggle_nightshift"},f:[{t:2,x:{r:["data.nightshiftLights"],s:'_0?"Enabled":"Disabled"'},p:[138,65,5532]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}," ",{p:[142,2,5644],t:7,e:"ui-notice",f:[{p:[143,4,5660],t:7,e:"ui-section",a:{label:"Cover Lock"},f:[{t:4,f:[{p:[145,5,5741],t:7,e:"span",f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[145,11,5747]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[144,3,5695]},{t:4,n:51,f:[{p:[147,5,5819],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.coverLocked"],s:'_0?"lock":"unlock"'},p:[147,22,5836]}],action:"cover"},f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[147,79,5893]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}],r:"data.failTime"}]},e.exports=a.extend(r.exports)},{341:341}],365:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Alarms"},f:[{p:[2,3,31],t:7,e:"ul",f:[{t:4,f:[{p:[4,7,72],t:7,e:"li",f:[{p:[4,11,76],t:7,e:"ui-button",a:{icon:"close",style:"danger",action:"clear",params:['{"zone": "',{t:2,r:".",p:[4,83,148]},'"}']},f:[{t:2,r:".",p:[4,92,157]}]}]}],n:52,r:"data.priority",p:[3,5,41]},{t:4,n:51,f:[{p:[6,7,201],t:7,e:"li",f:[{p:[6,11,205],t:7,e:"span",a:{"class":"good"},f:["No Priority Alerts"]}]}],r:"data.priority"}," ",{t:4,f:[{p:[9,7,303],t:7,e:"li",f:[{p:[9,11,307],t:7,e:"ui-button",a:{icon:"close",style:"caution",action:"clear",params:['{"zone": "',{t:2,r:".",p:[9,84,380]},'"}']},f:[{t:2,r:".",p:[9,93,389]}]}]}],n:52,r:"data.minor",p:[8,5,275]},{t:4,n:51,f:[{p:[11,7,433],t:7,e:"li",f:[{p:[11,11,437],t:7,e:"span",a:{"class":"good"},f:["No Minor Alerts"]}]}],r:"data.minor"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],366:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.tank","data.sensors.0.long_name"],s:"_0?_1:null"},p:[1,20,19]}]},f:[{t:4,f:[{p:[3,5,102],t:7,e:"ui-subdisplay",a:{title:[{t:2,x:{r:["data.tank","long_name"],s:"!_0?_1:null"},p:[3,27,124]}]},f:[{p:[4,7,167],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[5,3,200],t:7,e:"span",f:[{t:2,x:{r:["pressure"],s:"Math.fixed(_0,2)"},p:[5,9,206]}," kPa"]}]}," ",{t:4,f:[{p:[8,9,302],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[9,11,346],t:7,e:"span",f:[{t:2,x:{r:["temperature"],s:"Math.fixed(_0,2)"},p:[9,17,352]}," K"]}]}],n:50,r:"temperature",p:[7,7,273]}," ",{t:4,f:[{p:[13,9,462],t:7,e:"ui-section",a:{label:[{t:2,r:"id",p:[13,28,481]}]},f:[{p:[14,5,495],t:7,e:"span",f:[{t:2,x:{r:["."],s:"Math.fixed(_0,2)"},p:[14,11,501]},"%"]}]}],n:52,i:"id",r:"gases",p:[12,4,434]}]}],n:52,r:"adata.sensors",p:[2,3,73]}]}," ",{t:4,f:[{p:{button:[{p:[23,5,704],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[25,5,792],t:7,e:"ui-section",a:{label:"Input Injector"},f:[{p:[26,7,835],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputting"],s:'_0?"power-off":"close"'},p:[26,24,852]}],style:[{t:2,x:{r:["data.inputting"],s:'_0?"selected":null'},p:[26,75,903]}],action:"input"},f:[{t:2,x:{r:["data.inputting"],s:'_0?"Injecting":"Off"'},p:[27,9,968]}]}]}," ",{p:[29,5,1044],t:7,e:"ui-section",a:{label:"Input Rate"},f:[{p:[30,7,1083],t:7,e:"span",f:[{t:2,x:{r:["adata.inputRate"],s:"Math.fixed(_0)"},p:[30,13,1089]}," L/s"]}]}," ",{p:[32,5,1156],t:7,e:"ui-section",a:{label:"Output Regulator"},f:[{p:[33,7,1201],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputting"],s:'_0?"power-off":"close"'},p:[33,24,1218]}],style:[{t:2,x:{r:["data.outputting"],s:'_0?"selected":null'},p:[33,76,1270]}],action:"output"},f:[{t:2,x:{r:["data.outputting"],s:'_0?"Open":"Closed"'},p:[34,9,1337]}]}]}," ",{p:[36,5,1412],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[37,7,1456],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure"},f:[{t:2,x:{r:["adata.outputPressure"],s:"Math.round(_0)"},p:[37,50,1499]}," kPa"]}]}]}],n:50,r:"data.tank",p:[20,1,618]}]},e.exports=a.extend(r.exports)},{341:341}],367:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,48],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,65]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,109]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,164]}]}]}," ",{p:[6,3,223],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,265],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[8,5,360],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,390]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,518],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[9,11,524]}," kPa"]}]}," ",{p:[11,3,586],t:7,e:"ui-section",a:{label:"Filter"},f:[{t:4,f:[{p:[13,7,654],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[13,25,672]}],action:"filter",params:['{"mode": ',{t:2,r:"id",p:[14,42,748]},"}"]},f:[{t:2,r:"name",p:[14,51,757]}]}],n:52,r:"data.filter_types",p:[12,5,619]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],368:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,48],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,65]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,109]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,164]}]}]}," ",{p:[6,3,223],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,265],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[8,5,360],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.set_pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,390]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,522],t:7,e:"span",f:[{t:2,x:{r:["adata.set_pressure"],s:"Math.round(_0)"},p:[9,11,528]}," kPa"]}]}," ",{p:[11,3,594],t:7,e:"ui-section",a:{label:"Node 1"},f:[{p:[12,5,627],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[12,44,666]}],action:"node1",params:'{"concentration": -0.1}'}}," ",{p:[14,5,783],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[14,39,817]}],action:"node1",params:'{"concentration": -0.01}'}}," ",{p:[16,5,935],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[16,38,968]}],action:"node1",params:'{"concentration": 0.01}'}}," ",{p:[18,5,1087],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[18,43,1125]}],action:"node1",params:'{"concentration": 0.1}'}}," ",{p:[20,5,1243],t:7,e:"span",f:[{t:2,x:{r:["adata.node1_concentration"],s:"Math.round(_0)"},p:[20,11,1249]},"%"]}]}," ",{p:[22,3,1319],t:7,e:"ui-section",a:{label:"Node 2"},f:[{p:[23,5,1352],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[23,44,1391]}],action:"node2",params:'{"concentration": -0.1}'}}," ",{p:[25,5,1508],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[25,39,1542]}],action:"node2",params:'{"concentration": -0.01}'}}," ",{p:[27,5,1660],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[27,38,1693]}],action:"node2",params:'{"concentration": 0.01}'}}," ",{p:[29,5,1812],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[29,43,1850]}],action:"node2",params:'{"concentration": 0.1}'}}," ",{p:[31,5,1968],t:7,e:"span",f:[{t:2,x:{r:["adata.node2_concentration"],s:"Math.round(_0)"},p:[31,11,1974]},"%"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],369:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,48],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,65]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,109]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,164]}]}]}," ",{t:4,f:[{p:[7,5,250],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{p:[8,7,292],t:7,e:"ui-button",a:{icon:"pencil",action:"rate",params:'{"rate": "input"}'},f:["Set"]}," ",{p:[9,7,381],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.rate","data.max_rate"],s:'_0==_1?"disabled":null'},p:[9,37,411]}],action:"rate",params:'{"rate": "max"}'},f:["Max"]}," ",{p:[10,7,525],t:7,e:"span",f:[{t:2,x:{r:["adata.rate"],s:"Math.round(_0)"},p:[10,13,531]}," L/s"]}]}],n:50,r:"data.max_rate",p:[6,3,223]},{t:4,n:51,f:[{p:[13,5,605],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[14,7,649],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[15,7,746],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[15,37,776]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[16,7,906],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[16,13,912]}," kPa"]}]}],r:"data.max_rate"}]}]},e.exports=a.extend(r.exports)},{341:341}],370:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,72],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"data.borg.name",p:[1,20,19]}],button:0},f:[" ",{p:[5,2,149],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[6,4,181],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.emagged"],s:'_0?"check-square-o":"square-o"'},p:[6,21,198]}],style:[{t:2,x:{r:["data.borg.emagged"],s:'_0?"selected":null'},p:[6,83,260]}],action:"toggle_emagged"},f:["Emagged"]}," ",{p:[7,4,351],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.lockdown"],s:'_0?"check-square-o":"square-o"'},p:[7,21,368]}],style:[{t:2,x:{r:["data.borg.lockdown"],s:'_0?"selected":null'},p:[7,84,431]}],action:"toggle_lockdown"},f:["Locked down"]}," ",{p:[8,4,528],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.scrambledcodes"],s:'_0?"check-square-o":"square-o"'},p:[8,21,545]}],style:[{t:2,x:{r:["data.borg.scrambledcodes"],s:'_0?"selected":null'},p:[8,90,614]}],action:"toggle_scrambledcodes"},f:["Scrambled codes"]}]}," ",{p:[10,2,741],t:7,e:"ui-section",a:{label:"Charge"},f:[{t:4,f:[{p:[12,4,803],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.cell.maxcharge",p:[12,25,824]}],value:[{t:2,r:"data.cell.charge",p:[12,57,856]}]},f:[{t:2,x:{r:["data.cell.charge"],s:"Math.round(_0)"},p:[12,79,878]}," / ",{t:2,x:{r:["data.cell.maxcharge"],s:"Math.round(_0)"},p:[12,114,913]}]}],n:50,x:{r:["data.cell.missing"],s:"!_0"},p:[11,3,772]},{t:4,n:51,f:[{p:[14,4,974],t:7,e:"span",a:{"class":"warning"},f:["Cell missing"]},{p:[14,45,1015],t:7,e:"br"}],x:{r:["data.cell.missing"],s:"!_0"}}," ",{p:[16,3,1035],t:7,e:"ui-button",a:{icon:"pencil",action:"set_charge"},f:["Set"]},{p:[16,63,1095],t:7,e:"ui-button",a:{icon:"eject",action:"change_cell"},f:["Change"]},{p:[16,126,1158],t:7,e:"ui-button",a:{icon:"trash","class":"bad",action:"remove_cell"},f:["Remove"]}]}," ",{p:[18,2,1252],t:7,e:"ui-section",a:{label:"Radio channels"},f:[{t:4,f:[{p:[20,4,1319],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["installed"],s:'_0?"check-square-o":"square-o"'},p:[20,21,1336]}],style:[{t:2,x:{r:["installed"],s:'_0?"selected":null'},p:[20,75,1390]}],action:"toggle_radio",params:['{"channel": "',{t:2,r:"name",p:[20,154,1469]},'"}']},f:[{t:2,r:"name",p:[20,166,1481]}]}],n:52,r:"data.channels",p:[19,3,1291]}]}," ",{p:[23,2,1533],t:7,e:"ui-section",a:{label:"Module"},f:[{t:4,f:[{p:[25,4,1591],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.active_module","type"],s:'_0==_1?"check-square-o":"square-o"'},p:[25,21,1608]}],style:[{t:2,x:{r:["data.borg.active_module","type"],s:'_0==_1?"selected":null'},p:[25,97,1684]}],action:"setmodule",params:['{"module": "',{t:2,r:"type",p:[25,193,1780]},'"}']},f:[{t:2,r:"name",p:[25,205,1792]}]}],n:52,r:"data.modules",p:[24,3,1564]}]}," ",{p:[28,2,1844],t:7,e:"ui-section",a:{label:"Upgrades"},f:[{t:4,f:[{p:[30,4,1905],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["installed"],s:'_0?"check-square-o":"square-o"'},p:[30,21,1922]}],style:[{t:2,x:{r:["installed"],s:'_0?"selected":null'},p:[30,75,1976]}],action:"toggle_upgrade",params:['{"upgrade": "',{t:2,r:"type",p:[30,155,2056]},'"}']},f:[{t:2,r:"name",p:[30,167,2068]}]}],n:52,r:"data.upgrades",p:[29,3,1877]}]}," ",{p:[33,2,2120],t:7,e:"ui-section",a:{label:"Master AI"},f:[{t:4,f:[{p:[35,4,2177],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["connected"],s:'_0?"check-square-o":"square-o"'},p:[35,21,2194]}],style:[{t:2,x:{r:["connected"],s:'_0?"selected":null'},p:[35,75,2248]}],action:"slavetoai",params:['{"slavetoai": "',{t:2,r:"ref",p:[35,152,2325]},'"}']},f:[{t:2,r:"name",p:[35,163,2336]}]}],n:52,r:"data.ais",p:[34,3,2154]}]}]}," ",{p:{button:[{p:[41,3,2460],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.lawupdate"],s:'_0?"check-square-o":"square-o"'},p:[41,20,2477]}],style:[{t:2,x:{r:["data.borg.lawupdate"],s:'_0?"selected":null'},p:[41,84,2541]}],action:"toggle_lawupdate"},f:["Lawsync"]}]},t:7,e:"ui-display",a:{title:"Laws",button:0},f:[" ",{t:4,f:[{p:[44,3,2672],t:7,e:"p",f:[{t:2,r:".",p:[44,6,2675]}]}],n:52,r:"data.laws",p:[43,2,2649]}]}]},e.exports=a.extend(r.exports)},{341:341}],371:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,5,67],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"selected":null'},p:[3,38,100]}],action:[{t:2,x:{r:["data.timing"],s:'_0?"stop":"start"'},p:[3,83,145]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"Stop":"Start"'},p:[3,119,181]}]}," ",{p:[4,5,233],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"flash",style:[{t:2,x:{r:["data.flash_charging"],s:'_0?"disabled":null'},p:[4,57,285]}]},f:[{t:2,x:{r:["data.flash_charging"],s:'_0?"Recharging":"Flash"'},p:[4,102,330]}]}]},t:7,e:"ui-display",a:{title:"Cell Timer",button:0},f:[" ",{p:[6,3,410],t:7,e:"ui-section",f:[{p:[7,5,428],t:7,e:"ui-button",a:{icon:"fast-backward",action:"time",params:'{"adjust": -600}'}}," ",{p:[8,5,518],t:7,e:"ui-button",a:{icon:"backward",action:"time",params:'{"adjust": -100}'}}," ",{p:[9,5,603],t:7,e:"span",f:[{t:2,x:{r:["text","data.minutes"],s:"_0.zeroPad(_1,2)"},p:[9,11,609]},":",{t:2,x:{r:["text","data.seconds"],s:"_0.zeroPad(_1,2)"},p:[9,45,643]}]}," ",{p:[10,5,689],t:7,e:"ui-button",a:{icon:"forward",action:"time",params:'{"adjust": 100}'}}," ",{p:[11,5,772],t:7,e:"ui-button",a:{icon:"fast-forward",action:"time",params:'{"adjust": 600}'}}]}," ",{p:[13,3,875],t:7,e:"ui-section",f:[{p:[14,7,895],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "short"}'},f:["Short"]}," ",{p:[15,7,999],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "medium"}'},f:["Medium"]}," ",{p:[16,7,1105],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "long"}'},f:["Long"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],372:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,40]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,82],t:7,e:"ui-display",a:{title:"Bluespace Artillery Control",button:0},f:[{t:4,f:[{p:[8,3,167],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,5,200],t:7,e:"ui-button",a:{icon:"crosshairs",action:"recalibrate"},f:[{t:2,r:"data.target",p:[9,55,250]}]}]}," ",{p:[11,3,298],t:7,e:"ui-section",a:{label:"Controls"},f:[{t:4,f:[{p:[13,3,356],t:7,e:"ui-notice",f:[{p:[14,4,372],t:7,e:"span",f:["Bluespace Artillery firing protocols must be globally unlocked from two keycard authentication devices first!"]}]}],n:50,x:{r:["data.unlocked"],s:"!_0"},p:[12,2,330]},{t:4,n:51,f:[{p:[17,3,525],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.ready"],s:'_0?null:"disabled"'},p:[17,36,558]}],action:"fire"},f:["FIRE!"]}],x:{r:["data.unlocked"],s:"!_0"}}]}],n:50,r:"data.connected",p:[7,3,141]}," ",{t:4,f:[{p:[22,3,694],t:7,e:"ui-section",a:{label:"Maintenance"},f:[{p:[23,7,734],t:7,e:"ui-button",a:{icon:"wrench",action:"build"},f:["Complete Deployment."]}]}],n:50,x:{r:["data.connected"],s:"!_0"},p:[21,3,667]}]}]},e.exports=a.extend(r.exports)},{341:341}],373:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,15],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.hasHoldingTank"],s:'_0?"is":"is not"'},p:[2,23,35]}," connected to a tank."]}]}," ",{p:{button:[{p:[6,5,185],t:7,e:"ui-button",a:{icon:"pencil",action:"relabel"},f:["Relabel"]}]},t:7,e:"ui-display",a:{title:"Canister",button:0},f:[" ",{p:[8,3,266],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[9,5,301],t:7,e:"span",f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[9,11,307]}," kPa"]}]}," ",{p:[11,3,373],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[12,5,404],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.portConnected"],s:'_0?"good":"average"'},p:[12,18,417]}]},f:[{t:2,x:{r:["data.portConnected"],s:'_0?"Connected":"Not Connected"'},p:[12,63,462]}]}]}," ",{t:4,f:[{p:[15,3,573],t:7,e:"ui-section",a:{label:"Access"},f:[{p:[16,7,608],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.restricted"],s:'_0?"lock":"unlock"'},p:[16,24,625]}],style:[{t:2,x:{r:[],s:'"caution"'},p:[17,14,680]}],action:"restricted"},f:[{t:2,x:{r:["data.restricted"],s:'_0?"Restricted to Engineering":"Public"'},p:[18,27,722]}]}]}],n:50,r:"data.isPrototype",p:[14,3,544]}]}," ",{p:[22,1,839],t:7,e:"ui-display",a:{title:"Valve"},f:[{p:[23,3,869],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[24,5,912],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[24,18,925]}],max:[{t:2,r:"data.maxReleasePressure",p:[24,52,959]}],value:[{t:2,r:"data.releasePressure",p:[25,14,1002]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[25,40,1028]}," kPa"]}]}," ",{p:[27,3,1099],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[28,5,1144],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[28,38,1177]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[30,5,1333],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[30,36,1364]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[32,5,1511],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[33,5,1606],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[33,35,1636]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}," ",{p:[36,3,1798],t:7,e:"ui-section",a:{label:"Valve"},f:[{p:[37,5,1830],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.valveOpen"],s:'_0?"unlock":"lock"'},p:[37,22,1847]}],style:[{t:2,x:{r:["data.valveOpen","data.hasHoldingTank"],s:'_0?_1?"caution":"danger":null'},p:[38,14,1901]}],action:"valve"},f:[{t:2,x:{r:["data.valveOpen"],s:'_0?"Open":"Closed"'},p:[39,22,1995]}]}]}]}," ",{t:4,f:[{p:[42,1,2090],t:7,e:"ui-display",a:{title:"Valve Toggle Timer"},f:[{t:4,f:[{p:[44,5,2155],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[45,7,2196],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.timer_is_not_default"],s:'_0?null:"disabled"'},p:[45,40,2229]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[47,7,2358],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.timer_is_not_min"],s:'_0?null:"disabled"'},p:[47,38,2389]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[49,7,2520],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:[],s:'"disabled"'},p:[49,39,2552]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[51,7,2637],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.timer_is_not_max"],s:'_0?null:"disabled"'},p:[51,37,2667]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[43,3,2133]}," ",{p:[55,3,2833],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[56,6,2866],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[56,39,2899]}],action:"toggle_timer"},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[57,30,2969]}]}," ",{p:[59,2,3017],t:7,e:"ui-section",a:{label:"Time until Valve Toggle"},f:[{p:[60,2,3064],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[60,8,3070]}]}]}]}]}],n:50,r:"data.isPrototype",p:[41,1,2062]},{p:{button:[{t:4,f:[{p:[69,7,3277],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.valveOpen"],s:'_0?"danger":null'},p:[69,38,3308]}],action:"eject"},f:["Eject"]}],n:50,r:"data.hasHoldingTank",p:[68,5,3242]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[73,3,3442],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holdingTank.name",p:[74,4,3473]}]}," ",{p:[76,3,3519],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holdingTank.tankPressure"],s:"Math.round(_0)"},p:[77,4,3553]}," kPa"]}],n:50,r:"data.hasHoldingTank",p:[72,3,3411]},{t:4,n:51,f:[{p:[80,3,3635],t:7,e:"ui-section",f:[{p:[81,4,3652],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.hasHoldingTank"}]}]},e.exports=a.extend(r.exports)},{341:341}],374:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,158],t:7,e:"ui-display",a:{title:"Cargo"},f:[{p:[12,3,188],t:7,e:"ui-section",a:{label:"Shuttle"},f:[{t:4,f:[{p:[14,7,270],t:7,e:"ui-button",a:{action:"send"},f:[{t:2,r:"data.location",p:[14,32,295]}]}],n:50,x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"},p:[13,5,222]},{t:4,n:51,f:[{p:[16,7,346],t:7,e:"span",f:[{t:2,r:"data.location",p:[16,13,352]}]}],x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"}}]}," ",{p:[19,3,410],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[20,5,444],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[20,11,450]}]}]}," ",{p:[22,3,506],t:7,e:"ui-section",a:{label:"CentCom Message"},f:[{p:[23,7,550],t:7,e:"span",f:[{t:2,r:"data.message",p:[23,13,556]}]}]}," ",{t:4,f:[{p:[26,5,644],t:7,e:"ui-section",a:{label:"Loan"},f:[{t:4,f:[{p:[28,9,716],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.away","data.docked"],s:'_0&&_1?null:"disabled"'},p:[29,17,744]}],action:"loan"},f:["Loan Shuttle"]}],n:50,x:{r:["data.loan_dispatched"],s:"!_0"},p:[27,7,677]},{t:4,n:51,f:[{p:[32,9,868],t:7,e:"span",a:{"class":"bad"},f:["Loaned to CentCom"]}],x:{r:["data.loan_dispatched"],s:"!_0"}}]}],n:50,x:{r:["data.loan","data.requestonly"],s:"_0&&!_1"},p:[25,3,600]}]}," ",{t:4,f:[{p:{button:[{p:[40,7,1066],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.cart.length"],s:'_0?null:"disabled"'},p:[40,38,1097]}],action:"clear"},f:["Clear"]}]},t:7,e:"ui-display",a:{title:"Cart",button:0},f:[" ",{t:4,f:[{p:[43,7,1222],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[44,9,1263],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[44,31,1285]}]}," ",{p:[45,9,1307],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[45,30,1328]}]}," ",{p:[46,9,1354],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[46,30,1375]}," Credits"]}," ",{p:[47,9,1407],t:7,e:"div",a:{"class":"content"},f:[{p:[48,11,1440],t:7,e:"ui-button",a:{icon:"minus",action:"remove",
-params:['{"id": "',{t:2,r:"id",p:[48,67,1496]},'"}']}}]}]}],n:52,r:"data.cart",p:[42,5,1195]},{t:4,n:51,f:[{p:[52,7,1566],t:7,e:"span",f:["Nothing in Cart"]}],r:"data.cart"}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[37,1,972]},{p:{button:[{t:4,f:[{p:[59,7,1735],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.requests.length"],s:'_0?null:"disabled"'},p:[59,38,1766]}],action:"denyall"},f:["Clear"]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[58,5,1702]}]},t:7,e:"ui-display",a:{title:"Requests",button:0},f:[" ",{t:4,f:[{p:[63,5,1908],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[64,7,1947],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[64,29,1969]}]}," ",{p:[65,7,1989],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[65,28,2010]}]}," ",{p:[66,7,2034],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[66,28,2055]}," Credits"]}," ",{p:[67,7,2085],t:7,e:"div",a:{"class":"content"},f:["By ",{t:2,r:"orderer",p:[67,31,2109]}]}," ",{p:[68,7,2134],t:7,e:"div",a:{"class":"content"},f:["Comment: ",{t:2,r:"reason",p:[68,37,2164]}]}," ",{t:4,f:[{p:[70,9,2223],t:7,e:"div",a:{"class":"content"},f:[{p:[71,11,2256],t:7,e:"ui-button",a:{icon:"check",action:"approve",params:['{"id": "',{t:2,r:"id",p:[71,68,2313]},'"}']}}," ",{p:[72,11,2336],t:7,e:"ui-button",a:{icon:"close",action:"deny",params:['{"id": "',{t:2,r:"id",p:[72,65,2390]},'"}']}}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[69,7,2188]}]}],n:52,r:"data.requests",p:[62,3,1879]},{t:4,n:51,f:[{p:[77,7,2473],t:7,e:"span",f:["No Requests"]}],r:"data.requests"}]}," ",{p:[80,1,2529],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[80,16,2544]}]},f:[{t:4,f:[{p:[82,5,2587],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[82,16,2598]}]},f:[{t:4,f:[{p:[84,9,2641],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,28,2660]}],candystripe:0,right:0},f:[{p:[85,11,2700],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"desc",p:[85,31,2720]}],"tooltip-side":"left",action:"add",params:['{"id": "',{t:2,r:"id",p:[85,90,2779]},'"}']},f:[{t:2,r:"cost",p:[85,100,2789]}," Credits"]}]}],n:52,r:"packs",p:[83,7,2616]}]}],n:52,r:"data.supplies",p:[81,3,2558]}]}]},e.exports=a.extend(r.exports)},{341:341}],375:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,174],t:7,e:"ui-notice",f:[{t:4,f:[{p:[14,5,220],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[15,7,263],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[15,24,280]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[15,75,331]}]}]}],n:50,r:"data.siliconUser",p:[13,3,189]},{t:4,n:51,f:[{p:[18,5,422],t:7,e:"span",f:["Swipe a QM-Level ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[18,39,456]}," this interface."]}],r:"data.siliconUser"}]}," ",{t:4,f:[{p:[23,3,568],t:7,e:"ui-display",a:{title:"Express Cargo Console"},f:[{p:[25,5,618],t:7,e:"ui-section",a:{label:"Landing Location"},f:[{p:[26,7,663],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.usingBeacon"],s:'_0?null:"selected"'},p:[26,25,681]}],action:"LZCargo"},f:["Cargo Bay"]}," ",{p:[27,7,770],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.hasBeacon","data.usingBeacon"],s:'_0?_1?"selected":null:"disabled"'},p:[27,25,788]}],action:"LZBeacon"},f:[{t:2,r:"data.beaconzone",p:[27,116,879]}," (",{t:2,r:"data.beaconName",p:[27,137,900]},")"]}," ",{p:[28,7,940],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.canBuyBeacon"],s:'_0?null:"disabled"'},p:[28,25,958]}],action:"printBeacon"},f:[{t:2,r:"data.printMsg",p:[28,90,1023]}]}]}," ",{p:[31,5,1079],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[32,7,1115],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[32,13,1121]}]}]}," ",{p:[35,5,1183],t:7,e:"ui-section",a:{label:"Notice"},f:[{p:[36,7,1218],t:7,e:"span",f:[{t:2,r:"data.message",p:[36,13,1224]}]}]}]}," ",{p:[39,3,1287],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[39,18,1302]}]},f:[{t:4,f:[{p:[41,7,1349],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[41,18,1360]}]},f:[{t:4,f:[{p:[43,11,1407],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[43,30,1426]}],candystripe:0,right:0},f:[{p:[44,13,1468],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.canBeacon"],s:'_0?null:"disabled"'},p:[44,31,1486]}],tooltip:[{t:2,r:"desc",p:[44,80,1535]}],"tooltip-side":"left",action:"add",params:['{"id": "',{t:2,r:"id",p:[44,139,1594]},'"}']},f:[{t:2,r:"cost",p:[44,149,1604]}," Credits ",{t:2,r:"data.beaconError",p:[44,166,1621]}]}]}],n:52,r:"packs",p:[42,9,1380]}]}],n:52,r:"data.supplies",p:[40,5,1318]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[22,1,543]}]},e.exports=a.extend(r.exports)},{341:341}],376:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Cellular Emporium",button:0},f:[{p:[2,3,49],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.can_readapt"],s:'_0?null:"disabled"'},p:[2,36,82]}],action:"readapt"},f:["Readapt"]}," ",{p:[4,3,169],t:7,e:"ui-section",a:{label:"Genetic Points Remaining",right:0},f:[{t:2,r:"data.genetic_points_remaining",p:[5,5,226]}]}]}," ",{p:[8,1,293],t:7,e:"ui-display",f:[{t:4,f:[{p:[10,3,335],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[10,22,354]}],candystripe:0,right:0},f:[{p:[11,5,388],t:7,e:"span",f:[{t:2,r:"desc",p:[11,11,394]}]}," ",{p:[12,5,415],t:7,e:"span",f:[{t:2,r:"helptext",p:[12,11,421]}]}," ",{p:[13,5,446],t:7,e:"span",f:["Cost: ",{t:2,r:"dna_cost",p:[13,17,458]}]}," ",{p:[14,5,483],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["owned","can_purchase"],s:'_0?"selected":_1?null:"disabled"'},p:[15,14,508]}],action:"evolve",params:['{"name": "',{t:2,r:"name",p:[17,25,615]},'"}']},f:[{t:2,x:{r:["owned"],s:'_0?"Evolved":"Evolve"'},p:[18,7,635]}]}]}],n:52,r:"data.abilities",p:[9,1,307]},{t:4,f:[{p:[23,3,738],t:7,e:"span",a:{"class":"warning"},f:["No abilities available."]}],n:51,r:"data.abilities",p:[22,1,715]}]}]},e.exports=a.extend(r.exports)},{341:341}],377:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,17],t:7,e:"span",f:["To use this, simply spawn the atoms you want in one of the four Centcom Supplypod Bays. Items in the bay will then be launched inside your supplypod, one turf-full at a time! You can optionally use the following buttons to configure how the supplypod acts."]}]}," ",{p:[5,1,304],t:7,e:"ui-display",a:{title:"Centcom Pod Customization (to be used against helen weinstein)"},f:[{p:[6,4,392],t:7,e:"ui-section",a:{label:"Which supplypod bay will you use?"},f:[{p:[7,9,458],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bay"],s:'_0==1?"selected":null'},p:[7,27,476]}],action:"bay1"},f:["Bay #1"]}," ",{p:[8,9,557],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bay"],s:'_0==2?"selected":null'},p:[8,27,575]}],action:"bay2"},f:["Bay #2"]}," ",{p:[9,9,656],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bay"],s:'_0==3?"selected":null'},p:[9,27,674]}],action:"bay3"},f:["Bay #3"]}," ",{p:[10,9,755],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bay"],s:'_0==4?"selected":null'},p:[10,27,773]}],action:"bay4"},f:["Bay #4"]}]}," ",{p:[13,5,871],t:7,e:"ui-section",a:{label:"Useful teleport tools!"},f:[{p:[14,9,926],t:7,e:"ui-button",a:{action:"teleportCentcom"},f:["Teleport to Centcom's Supplypod Loading Bay"]}," ",{p:[15,9,1027],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.oldArea"],s:'_0?null:"disabled"'},p:[15,27,1045]}],action:"teleportBack"},f:["Teleport Back to ",{t:2,x:{r:["data.oldArea"],s:'_0?_0:"where you were"'},p:[15,103,1121]}]}]}," ",{p:[18,5,1210],t:7,e:"ui-section",a:{label:"Keep stuff after launching?"},f:[{p:[19,9,1268],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchClone"],s:'_0?"selected":null'},p:[19,27,1286]}],action:"launchClone","tooltip-side":"left",tooltip:"Choosing this will create a duplicate of the item to be launched in Centcom, allowing you to send one type of item multiple times. Either way, the atoms are forceMoved into the supplypod after it lands (but before it opens)."},f:["Clone and Launch"]}]}," ",{p:[23,5,1668],t:7,e:"ui-section",a:{label:"Launch all at once?"},f:[{p:[24,9,1718],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchChoice"],s:'_0==1?"selected":null'},p:[24,27,1736]}],action:"launchOrdered","tooltip-side":"left",tooltip:'Instead of launching everything in the bay at once, this will "scan" things (one turf-full at a time) in order, left to right and top to bottom. Refreshing will reset the "scanner" to the top-leftmost position.'},f:["Ordered"]}," ",{p:[26,9,2086],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchChoice"],s:'_0==2?"selected":null'},p:[26,27,2104]}],action:"launchRandom","tooltip-side":"left",tooltip:"Instead of launching everything in the bay at once, this will launch one random turf of items at a time."},f:["Random"]}]}," ",{p:[30,5,2362],t:7,e:"ui-section",a:{label:"Add an explosion?"},f:[{p:[31,9,2410],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.explosionChoice"],s:'_0==1?"selected":null'},p:[31,27,2428]}],action:"explosionCustom","tooltip-side":"left",tooltip:"This will cause an explosion of whatever size you like (including flame range) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!"},f:["Custom Size"]}," ",{p:[33,9,2740],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.explosionChoice"],s:'_0==2?"selected":null'},p:[33,27,2758]}],action:"explosionBus","tooltip-side":"left",tooltip:"This will cause a maxcap explosion (dependent on server config) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!"},f:["Adminbus"]}]}," ",{p:[37,5,3066],t:7,e:"ui-section",a:{label:"Extra damage?","(default":"None)"},f:[{p:[38,9,3127],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.damageChoice"],s:'_0==1?"selected":null'},p:[38,27,3145]}],action:"damageCustom","tooltip-side":"left",tooltip:"Anyone caught under the pod when it lands will be dealt this amount of brute damage. Sucks to be them!"},f:["Custom Damage"]}," ",{p:[40,9,3392],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.damageChoice"],s:'_0==2?"selected":null'},p:[40,27,3410]}],action:"damageGib","tooltip-side":"left",tooltip:"This will attempt to gib any mob caught under the pod when it lands, as well as dealing a nice 5000 brute damage. Ya know, just to be sure!"},f:["Gib"]}]}," ",{p:[44,5,3698],t:7,e:"ui-section",a:{label:"Extra effects?"},f:[{p:[45,9,3743],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectStun"],s:'_0?"selected":null'},p:[45,27,3761]}],action:"effectStun","tooltip-side":"left",tooltip:"Anyone who is on the turf when the supplypod is launched will be stunned until the supplypod lands. They cant get away that easy!"},f:["Stun"]}," ",{p:[47,9,4017],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectLimb"],s:'_0?"selected":null'},p:[47,27,4035]}],action:"effectLimb","tooltip-side":"left",tooltip:"This will cause anyone caught under the pod to lose a limb, excluding their head."},f:["Delimb"]}," ",{p:[49,9,4245],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectBluespace"],s:'_0?"selected":null'},p:[49,27,4263]}],action:"effectBluespace","tooltip-side":"left",tooltip:"Gives the supplypod an advanced Bluespace Recyling Device. After opening, the supplypod will be warped directly to the surface of a nearby NT-designated trash planet (/r/ss13)."},f:["Bluespace"]}," ",{p:[51,9,4581],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectStealth"],s:'_0?"selected":null'},p:[51,27,4599]}],action:"effectStealth","tooltip-side":"left",tooltip:'This hides the red target icon from appearing when you launch the supplypod. Combos well with the "Invisible" style. Sneak attack, go!'},f:["Stealth"]}," ",{p:[53,9,4869],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectQuiet"],s:'_0?"selected":null'},p:[53,27,4887]}],action:"effectQuiet","tooltip-side":"left",tooltip:"This will keep the supplypod from making any sounds, except for those specifically set by admins in the Sound section."},f:["Quiet Landing"]}," ",{p:[55,9,5143],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectReverse"],s:'_0?"selected":null'},p:[55,27,5161]}],action:"effectReverse","tooltip-side":"left",tooltip:"This pod will not send any items. Instead, after landing, the supplypod will close (similar to a normal closet closing), and then launch back to the right centcom bay to drop off any new contents."},f:["Reverse Mode"]}," ",{p:[57,9,5498],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectMissile"],s:'_0?"selected":null'},p:[57,27,5516]}],action:"effectMissile","tooltip-side":"left",tooltip:"This pod will not send any items. Instead, it will immediatley delete after landing (Similar visually to setting openDelay & departDelay to 0, but this looks nicer). Useful if you just wanna fuck some shit up. Combos well with the Missile style."},f:["Missile Mode"]}," ",{p:[59,9,5902],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectCircle"],s:'_0?"selected":null'},p:[59,27,5920]}],action:"effectCircle","tooltip-side":"left",tooltip:"This will make the supplypod come in from any angle. Im not sure why this feature exists, but here it is."},f:["Any Descent Angle"]}," ",{p:[61,9,6169],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectBurst"],s:'_0?"selected":null'},p:[61,27,6187]}],action:"effectBurst","tooltip-side":"left",tooltip:"This will make each click launch 5 supplypods inaccuratly around the target turf (a 3x3 area). Combos well with the Missle Mode if you dont want shit lying everywhere after."},f:["Machine Gun Mode"]}," ",{p:[63,9,6501],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectTarget"],s:'_0?"selected":null'},p:[63,27,6519]}],action:"effectTarget","tooltip-side":"left",tooltip:"This will make the supplypod target a specific atom, instead of the mouses position. Smiting does this automatically!"},f:["Specific Target"]}," ",{p:[65,9,6778],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectName"],s:'_0?"selected":null'},p:[65,27,6796]}],action:"effectName","tooltip-side":"left",tooltip:"Allows you to add a custom name and description."},f:["Custom Name/Desc"]}]}," ",{p:[69,5,7e3],t:7,e:"ui-section",a:{label:"Sound?"},f:[{p:[70,9,7037],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.landingSound"],s:'_0?"selected":null'},p:[70,27,7055]}],action:"landingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod lands."},f:["Custom Landing Sound"]}," ",{p:[72,10,7245],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.openingSound"],s:'_0?"selected":null'},p:[72,28,7263]}],action:"openingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod opens."},f:["Custom Opening Sound"]}," ",{p:[74,9,7452],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.leavingSound"],s:'_0?"selected":null'},p:[74,27,7470]}],action:"leavingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod departs (whether that be delection in the case of a bluespace pod, or leaving for centcom for a reversing pod)."},f:["Custom Leaving Sound"]}," ",{p:[76,9,7764],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.soundVolume"],s:'_0?"selected":null'},p:[76,27,7782]}],action:"soundVolume","tooltip-side":"left",tooltip:"Choose the volume for the sound to play at. Default values are between 1 and 100, but hey, do whatever. Im a tooltip, not a cop."},f:["Admin Sound Volume"]}]}," ",{p:[80,5,8070],t:7,e:"ui-section",a:{label:"Delay timers?"},f:[{p:[81,9,8114],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.landingDelay"],s:'_0!=5?"selected":null'},p:[81,27,8132]}],action:"landingDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to hit the station. By default this value is 0.5 seconds."},f:["Custom Landing Time"]}," ",{p:[83,10,8394],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.openingDelay"],s:'_0!=30?"selected":null'},p:[83,28,8412]}],action:"openingDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to open after landing. Useful for giving whatevers inside the pod a nice dramatic entrance! By default this value is 3 seconds."},f:["Custom Opening Time"]}," ",{p:[85,9,8744],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.departureDelay"],s:'_0!=30?"selected":null'},p:[85,27,8762]}],action:"departureDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to leave after landing. By default this value is 3 seconds."},f:["Custom Leaving Time"]}]}," ",{p:[89,5,9047],t:7,e:"ui-section",a:{label:"Style?"},f:[{p:[90,9,9084],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==1?"selected":null'},p:[90,27,9102]}],action:"styleStandard","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to your standard Nanotrasen black and orange. Same color scheme as the normal station-used supplypods."},f:["Standard"]}," ",{p:[92,9,9405],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==2?"selected":null'},p:[92,27,9423]}],action:"styleBluespace","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to the same as the stations upgraded blue-and-white Bluespace Supplypods."},f:["Advanced"]}," ",{p:[94,9,9698],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==4?"selected":null'},p:[94,27,9716]}],action:"styleSyndie","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a menacing black and blood-red. Great for sending meme-ops in style!"},f:["Syndicate"]}," ",{p:[96,9,9987],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==5?"selected":null'},p:[96,27,10005]}],action:"styleBlue","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a menacing black and dark blue. Great for sending deathsquads in style!"},f:["Deathsquad"]}," ",{p:[98,10,10279],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==6?"selected":null'},p:[98,28,10297]}],action:"styleCult","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a blood and rune covered cult pod!"},f:["Cult Pod"]}," ",{p:[100,9,10524],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==7?"selected":null'},p:[100,27,10542]}],action:"styleMissile","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large missile. Combos well with a missile mode, so the missile doesnt stick around after landing."},f:["Missile"]}," ",{p:[102,9,10836],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==8?"selected":null'},p:[102,27,10854]}],action:"styleSMissile","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large blood-red missile. Combos well with missile mode, so the missile doesnt stick around after landing."},f:["Syndicate Missile"]}," ",{p:[104,9,11167],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==9?"selected":null'},p:[104,27,11185]}],action:"styleBox","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large, dark-green military supply crate."},f:["Supply Crate"]}," ",{p:[106,9,11423],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==10?"selected":null'},p:[106,27,11441]}],action:"styleHONK","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a colorful, clown inspired look."},f:["HONK"]}," ",{p:[108,9,11670],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==11?"selected":null'},p:[108,27,11688]}],action:"styleFruit","tooltip-side":"left",tooltip:"for when an orange is angry"},f:["Fruit~"]}," ",{p:[110,9,11851],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==12?"selected":null'},p:[110,27,11869]}],action:"styleInvisible","tooltip-side":"left",tooltip:'Makes the supplypod invisible! Useful for when you want to use this feature with a gateway or something. Combos well with the "Stealth" and "Quiet Landing" effects.'},f:["Invisible"]}," ",{p:[112,9,12175],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==13?"selected":null'},p:[112,27,12193]}],action:"styleGondola","tooltip-side":"left",tooltip:"this gondola can control when he wants to deliver his supplies if he has a smart enough mind, so offer up his body to ghosts for maximum enjoyment. (Make sure to turn off bluespace and set a arbitrarily high open-time if you do!)"},f:["Gondola (alive)"]}]}]}," ",{p:[117,1,12597],t:7,e:"ui-display",f:[{p:[118,5,12615],t:7,e:"ui-section",a:{label:[{t:2,r:"data.numObjects",p:[118,26,12636]}," turfs with launchable atoms found in Bay #",{t:2,r:"data.bay",p:[118,88,12698]}]},f:[{p:[119,9,12722],t:7,e:"ui-button",a:{action:"refresh","tooltip-side":"right",tooltip:"Manually refreshes the possible things to launch in the pod bay."},f:["Refresh Pod Bay"]}]}," ",{p:[123,5,12909],t:7,e:"ui-section",f:[{p:[124,9,12931],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.giveLauncher"],s:'_0?"selected":null'},p:[124,27,12949]}],action:"giveLauncher","tooltip-side":"right",tooltip:"THE CODEX ASTARTES CALLS THIS MANEUVER: STEEL RAIN!!"},f:["Enter Launch Mode"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],378:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,31],t:7,e:"ui-section",a:{label:"Energy"},f:[{p:[3,5,64],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.maxEnergy",p:[3,26,85]}],value:[{t:2,r:"data.energy",p:[3,53,112]}]},f:[{t:2,x:{r:["adata.energy"],s:"Math.fixed(_0)"},p:[3,70,129]}," Units"]}]}]}," ",{p:[6,1,206],t:7,e:"ui-display",a:{title:"Saved Recipes",button:0},f:[{p:[7,3,251],t:7,e:"ui-section",f:[{p:[8,5,269],t:7,e:"ui-button",a:{icon:"plus",action:"add_recipe"},f:["Add Recipe"]}," ",{p:[9,2,337],t:7,e:"ui-button",a:{icon:"minus",action:"clear_recipes"},f:["Clear Recipes"]}," ",{t:4,f:[{p:[11,7,445],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense_recipe",params:['{"recipe": "',{t:2,r:"contents",p:[11,80,518]},'"}']},f:[{t:2,r:"recipe_name",p:[11,96,534]}]}],n:52,r:"data.recipes",p:[10,5,415]}]}]}," ",{p:{button:[{t:4,f:[{p:[18,7,719],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.amount","."],s:'_0==_1?"selected":null'},p:[18,37,749]}],action:"amount",params:['{"target": ',{t:2,r:".",p:[18,114,826]},"}"]},f:[{t:2,r:".",p:[18,122,834]}]}],n:52,r:"data.beakerTransferAmounts",p:[17,5,675]}]},t:7,e:"ui-display",a:{title:"Dispense",button:0},f:[" ",{p:[21,3,886],t:7,e:"ui-section",f:[{t:4,f:[{p:[23,7,936],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense",params:['{"reagent": "',{t:2,r:"id",p:[23,74,1003]},'"}']},f:[{t:2,r:"title",p:[23,84,1013]}]}],n:52,r:"data.chemicals",p:[22,5,904]}]}]}," ",{p:{button:[{t:4,f:[{p:[30,7,1190],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"amount": ',{t:2,r:".",p:[30,66,1249]},"}"]},f:[{t:2,r:".",p:[30,74,1257]}]}],n:52,r:"data.beakerTransferAmounts",p:[29,5,1146]}," ",{p:[32,5,1295],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[32,36,1326]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[34,3,1423],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[36,7,1493],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[36,13,1499]},"/",{t:2,r:"data.beakerMaxVolume",p:[36,55,1541]}," Units"]}," ",{p:[37,4,1583],t:7,e:"span",f:["pH: ",{t:2,x:{r:["adata.beakerCurrentpH","adata.partRating"],s:"Math.round(_0*_1)/_1"},p:[37,14,1593]}]}," ",{p:[38,7,1679],t:7,e:"br"}," ",{t:4,f:[{p:[40,9,1732],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[40,52,1775]}," units of ",{t:2,r:"name",p:[40,87,1810]}]},{p:[40,102,1825],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[39,7,1692]},{t:4,n:51,f:[{p:[42,9,1856],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[35,5,1458]},{t:4,n:51,f:[{p:[45,7,1932],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],379:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[2,3,35],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,67],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isActive"],s:'_0?"power-off":"close"'},p:[3,22,84]}],style:[{t:2,x:{r:["data.isActive"],s:'_0?"selected":null'},p:[4,10,137]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,10,186]}],action:"power"},f:[{t:2,x:{r:["data.isActive"],s:'_0?"On":"Off"'},p:[6,18,249]}]}]}," ",{p:[8,3,314],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,4,346],t:7,e:"ui-button",a:{icon:"pencil",action:"temperature",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[9,79,421]}," K"]}]}]}," ",{p:{button:[{p:[14,5,564],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[14,36,595]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[16,3,692],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[18,7,762],t:7,e:"span",f:["Temperature: ",{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[18,26,781]}," K"]}," ",{p:[19,4,828],t:7,e:"br"}," ",{p:[20,7,842],t:7,e:"span",f:["pH: ",{t:2,x:{r:["adata.currentpH","adata.partRating"],s:"Math.round(_0*_1)/_1"},p:[20,17,852]}]}," ",{p:[21,7,932],t:7,e:"br"}," ",{t:4,f:[{p:[23,3,980],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[23,46,1023]}," units of ",{t:2,r:"name",p:[23,81,1058]}]},{p:[23,96,1073],t:7,e:"br"}," ",{t:4,f:[{p:[25,4,1111],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["Purity: ",{t:2,x:{r:["purity"],s:"Math.fixed(_0,2)"},p:[25,55,1162]}]},{p:[25,87,1194],t:7,e:"br"}],n:50,r:"data.showPurity",p:[24,3,1083]}],n:52,r:"adata.beakerContents",p:[22,7,946]},{t:4,n:51,f:[{p:[28,9,1237],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[17,5,727]},{t:4,n:51,f:[{p:[31,7,1313],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],380:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,33],t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[{p:[3,3,71],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"close"'},p:[3,20,88]}],style:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"selected":null'},p:[4,11,144]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,11,200]}],action:"eject"},f:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"No beaker"'},p:[7,5,269]}]}," ",{p:[10,3,341],t:7,e:"ui-section",f:[{t:4,f:[{t:4,f:[{p:[13,6,427],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[13,25,446]}," units of ",{t:2,r:"name",p:[13,60,481]}],nowrap:0},f:[{p:[14,7,506],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[15,8,556],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[15,61,609]},'", "amount": 1}']},f:["1"]}," ",{p:[16,8,654],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[16,61,707]},'", "amount": 5}']},f:["5"]}," ",{p:[17,8,752],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[17,61,805]},'", "amount": 10}']},f:["10"]}," ",{p:[18,8,852],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[18,61,905]},'", "amount": 1000}']},f:["All"]}," ",{p:[19,8,955],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[19,61,1008]},'", "amount": -1}']},f:["Custom"]}," ",{p:[20,8,1059],t:7,e:"ui-button",a:{action:"analyze",params:['{"id": "',{t:2,r:"id",p:[20,52,1103]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.beakerContents",p:[12,5,391]},{t:4,n:51,f:[{p:[24,5,1185],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"data.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,4,358]},{t:4,n:51,f:[{p:[27,5,1256],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}," ",{p:[32,2,1344],t:7,e:"ui-display",a:{title:"Buffer"},f:[{p:[33,3,1375],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?null:"selected"'},p:[33,41,1413]}]},f:["Destroy"]}," ",{p:[34,3,1471],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?"selected":null'},p:[34,41,1509]}]},f:["Transfer to Beaker"]}," ",{p:[35,3,1578],t:7,e:"ui-section",f:[{t:4,f:[{p:[37,5,1630],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[37,24,1649]}," units of ",{t:2,r:"name",p:[37,59,1684]}],nowrap:0},f:[{p:[38,6,1708],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[39,7,1757],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[39,62,1812]},'", "amount": 1}']},f:["1"]}," ",{p:[40,7,1856],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[40,62,1911]},'", "amount": 5}']},f:["5"]}," ",{p:[41,7,1955],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[41,62,2010]},'", "amount": 10}']},f:["10"]}," ",{p:[42,7,2056],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[42,62,2111]},'", "amount": 1000}']},f:["All"]}," ",{p:[43,7,2160],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[43,62,2215]},'", "amount": -1}']},f:["Custom"]}," ",{p:[44,7,2265],t:7,e:"ui-button",a:{action:"analyze",params:['{"id": "',{t:2,r:"id",p:[44,51,2309]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.bufferContents",p:[36,4,1595]}]}]}," ",{t:4,f:[{p:[52,3,2445],t:7,e:"ui-display",a:{title:"Pills, Bottles and Patches"},f:[{t:4,f:[{p:[54,5,2529],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["id","data.chosenPillStyle"],s:'_0==_1?"selected":null'},p:[54,23,2547]}],action:"pillStyle",params:['{"id": "',{t:2,r:"id",p:[54,108,2632]},'"}']},f:[{t:3,r:"htmltag",p:[54,118,2642]}]}],n:52,r:"data.pillStyles",p:[53,4,2498]}," ",{p:[56,4,2686],t:7,e:"br"}," ",{t:4,f:[{p:[58,5,2732],t:7,e:"ui-button",a:{action:"ejectp",state:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?null:"disabled"'},p:[58,39,2766]}]},f:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?"Eject":"No Pill bottle loaded"'},p:[58,88,2815]}]}," ",{p:[59,5,2896],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.pillBotContent",p:[59,27,2918]},"/",{t:2,r:"data.pillBotMaxContent",p:[59,51,2942]}]}],n:50,r:"data.isPillBottleLoaded",p:[57,4,2695]},{t:4,n:51,f:[{p:[61,5,2994],t:7,e:"span",a:{"class":"average"},f:["No Pillbottle"]}],r:"data.isPillBottleLoaded"}," ",{p:[64,4,3055],t:7,e:"br"}," ",{p:[65,4,3065],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[65,63,3124]}]},f:["Create Pill (max 50µ)"]}," ",{p:[66,4,3208],t:7,e:"br"}," ",{p:[67,4,3218],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[67,63,3277]}]},f:["Create Multiple Pills"]}," ",{p:[68,4,3361],t:7,e:"br"}," ",{p:[69,4,3371],t:7,e:"br"}," ",{p:[70,4,3381],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[70,64,3441]}]},f:["Create Patch (max 40µ)"]}," ",{p:[71,4,3526],t:7,e:"br"}," ",{p:[72,4,3536],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[72,64,3596]}]},f:["Create Multiple Patches"]}," ",{p:[73,4,3682],t:7,e:"br"}," ",{p:[74,4,3692],t:7,e:"br"}," ",{p:[75,4,3702],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[75,65,3763]}]},f:["Create Bottle (max 30µ)"]}," ",{p:[76,4,3849],t:7,e:"br"}," ",{p:[77,4,3859],t:7,e:"ui-button",a:{action:"createBottle",
-params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[77,65,3920]}]},f:["Dispense Buffer to Bottles"]}," ",{p:[78,4,4009],t:7,e:"br"}," ",{p:[79,4,4019],t:7,e:"br"}," ",{p:[80,4,4029],t:7,e:"ui-button",a:{action:"createVial",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[80,63,4088]}]},f:["Create Hypo Vial (max 60µ)"]}," ",{p:[81,4,4177],t:7,e:"br"}," ",{p:[82,4,4187],t:7,e:"ui-button",a:{action:"createVial",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[82,63,4246]}]},f:["Dispense Buffer to Hypo vials"]}," ",{p:[83,4,4339],t:7,e:"br"}]}],n:50,x:{r:["data.condi"],s:"!_0"},p:[51,2,2422]},{t:4,n:51,f:[{p:[88,3,4382],t:7,e:"ui-display",a:{title:"Condiments bottles and packs"},f:[{p:[89,4,4437],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[89,63,4496]}]},f:["Create Pack (max 10µ)"]}," ",{p:[90,4,4580],t:7,e:"br"}," ",{p:[91,4,4590],t:7,e:"br"}," ",{p:[92,4,4600],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[92,65,4661]}]},f:["Create Bottle (max 50µ)"]}]}],x:{r:["data.condi"],s:"!_0"}}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.screen"],s:'_0=="analyze"'},f:[{p:[96,2,4809],t:7,e:"ui-display",a:{title:[{t:2,r:"data.analyzeVars.name",p:[96,20,4827]}]},f:[{p:[97,3,4858],t:7,e:"span",a:{"class":"highlight"},f:["Description:"]}," ",{p:[98,3,4906],t:7,e:"span",a:{"class":"content",style:"float:center"},f:[{t:2,r:"data.analyzeVars.description",p:[98,46,4949]}]}," ",{p:[99,3,4992],t:7,e:"br"}," ",{p:[100,3,5001],t:7,e:"span",a:{"class":"highlight"},f:["Color:"]}," ",{p:[101,3,5043],t:7,e:"span",a:{style:["color: ",{t:2,r:"data.analyzeVars.color",p:[101,23,5063]},"; background-color: ",{t:2,r:"data.analyzeVars.color",p:[101,69,5109]}]},f:[{t:2,r:"data.analyzeVars.color",p:[101,97,5137]}]}," ",{p:[102,3,5174],t:7,e:"br"}," ",{p:[103,3,5183],t:7,e:"span",a:{"class":"highlight"},f:["State:"]}," ",{p:[104,3,5225],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.state",p:[104,25,5247]}]}," ",{p:[105,3,5284],t:7,e:"br"}," ",{p:[106,3,5293],t:7,e:"span",a:{"class":"highlight"},f:["Metabolization Rate:"]}," ",{p:[107,3,5349],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.metaRate",p:[107,25,5371]},"µ/minute"]}," ",{p:[108,3,5419],t:7,e:"br"}," ",{p:[109,3,5428],t:7,e:"span",a:{"class":"highlight"},f:["Overdose Threshold:"]}," ",{p:[110,3,5483],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.overD",p:[110,25,5505]}]}," ",{p:[111,3,5542],t:7,e:"br"}," ",{p:[112,3,5551],t:7,e:"span",a:{"class":"highlight"},f:["Addiction Threshold:"]}," ",{p:[113,3,5607],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.addicD",p:[113,25,5629]}]}," ",{p:[114,3,5667],t:7,e:"br"}," ",{t:4,f:[{p:[116,4,5706],t:7,e:"span",a:{"class":"highlight"},f:["Minumum Reaction Temperature:"]}," ",{p:[117,4,5772],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.minTemp",p:[117,26,5794]},"K"]}," ",{p:[118,4,5835],t:7,e:"br"}," ",{p:[119,4,5845],t:7,e:"span",a:{"class":"highlight"},f:["Optimal Reaction Temperature:"]}," ",{p:[120,4,5911],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.maxTemp",p:[120,26,5933]},"K"]}," ",{p:[121,4,5974],t:7,e:"br"}," ",{p:[122,4,5984],t:7,e:"span",a:{"class":"highlight"},f:["Explosion Reaction Temperature:"]}," ",{p:[123,4,6052],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.eTemp",p:[123,26,6074]},"K"]}," ",{p:[124,4,6113],t:7,e:"br"}," ",{p:[125,4,6123],t:7,e:"span",a:{"class":"highlight"},f:["Optimal reaction pH:"]}," ",{p:[126,4,6180],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.pHpeak",p:[126,26,6202]}]}," ",{p:[127,4,6241],t:7,e:"br"}," ",{p:[128,4,6251],t:7,e:"span",a:{"class":"highlight"},f:["Current Purity:"]}," ",{p:[129,4,6303],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.purityF",p:[129,26,6325]}]}," ",{p:[130,4,6365],t:7,e:"br"}," ",{p:[131,4,6375],t:7,e:"span",a:{"class":"highlight"},f:["Inverse Purity Threshold:"]}," ",{p:[132,4,6437],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.inverseRatioF",p:[132,26,6459]}]}," ",{p:[133,4,6505],t:7,e:"br"}," ",{p:[134,4,6515],t:7,e:"span",a:{"class":"highlight"},f:["Explosion Purity Threshold:"]}," ",{p:[135,4,6579],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.purityE",p:[135,26,6601]}]}," ",{p:[136,4,6641],t:7,e:"br"}],n:50,r:"data.fermianalyze",p:[115,3,5676]}," ",{p:[138,3,6661],t:7,e:"br"}," ",{p:[139,3,6670],t:7,e:"ui-button",a:{action:"goScreen",params:'{"screen": "home"}'},f:["Back"]}]}]}],x:{r:["data.screen"],s:'_0=="home"'}}]},e.exports=a.extend(r.exports)},{341:341}],381:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Recipient Contents"},f:[{p:[2,2,42],t:7,e:"ui-section",f:[{p:[3,3,58],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[3,34,89]}],action:"ejectBeaker"},f:["Eject"]}," ",{p:[4,3,176],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[4,35,208]}],action:"input"},f:["Input"]}," ",{p:[5,3,289],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,35,321]}],action:"amount"},f:[{t:2,r:"data.amount",p:[5,96,382]},"U"]}," ",{p:[6,3,414],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"disabled":null'},p:[6,33,444]}],action:"makecup"},f:["Create Beaker"]}]}]}," ",{p:[9,1,564],t:7,e:"ui-display",a:{title:"Recipient"},f:[{p:[10,2,597],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[12,4,662],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[12,10,668]},"/",{t:2,r:"data.beakerMaxVolume",p:[12,52,710]}," Units"]}," ",{t:4,f:[{p:[14,5,788],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[14,48,831]}," units of ",{t:2,r:"name",p:[14,83,866]}]},{p:[14,98,881],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[13,4,752]},{t:4,n:51,f:[{p:[16,5,905],t:7,e:"span",a:{"class":"bad"},f:["Recipient Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,3,630]},{t:4,n:51,f:[{p:[19,4,976],t:7,e:"span",a:{"class":"average"},f:["No Recipient"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],382:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-button",a:{action:"toggle"},f:[{t:2,x:{r:["data.recollection"],s:'_0?"Recital":"Recollection"'},p:[2,30,43]}]}]}," ",{t:4,f:[{p:[5,3,149],t:7,e:"ui-display",f:[{t:3,r:"data.rec_text",p:[6,3,165]}," ",{t:4,f:[{p:[8,4,231],t:7,e:"br"},{p:[8,8,235],t:7,e:"ui-button",a:{action:"rec_category",params:['{"category": "',{t:2,r:"name",p:[8,63,290]},'"}']},f:[{t:3,r:"name",p:[8,75,302]}," - ",{t:3,r:"desc",p:[8,88,315]}]}],n:52,r:"data.recollection_categories",p:[7,3,188]}," ",{t:3,r:"data.rec_section",p:[10,3,354]}," ",{t:3,r:"data.rec_binds",p:[11,3,380]}]}],n:50,r:"data.recollection",p:[4,1,120]},{t:4,n:51,f:[{p:[14,2,431],t:7,e:"ui-display",a:{title:"Power",button:0},f:[{p:[15,4,469],t:7,e:"ui-section",f:[{t:3,r:"data.power",p:[16,6,488]}]}]}," ",{p:[19,2,541],t:7,e:"ui-display",f:[{p:[20,3,557],t:7,e:"ui-section",f:[{p:[21,4,574],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Driver"?"selected":null'},p:[21,22,592]}],action:"select",params:'{"category": "Driver"}'},f:["Driver"]}," ",{p:[22,4,715],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Script"?"selected":null'},p:[22,22,733]}],action:"select",params:'{"category": "Script"}'},f:["Scripts"]}," ",{p:[23,4,857],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Application"?"selected":null'},p:[23,22,875]}],action:"select",params:'{"category": "Application"}'},f:["Applications"]}," ",{p:[24,4,1014],t:7,e:"br"},{t:3,r:"data.tier_info",p:[24,8,1018]}]}," ",{p:[26,3,1059],t:7,e:"ui-section",f:[{t:3,r:"data.scripturecolors",p:[27,4,1076]}]},{p:[28,16,1119],t:7,e:"hr"}," ",{p:[29,3,1127],t:7,e:"ui-section",f:[{t:4,f:[{p:[31,4,1172],t:7,e:"div",f:[{p:[31,9,1177],t:7,e:"ui-button",a:{tooltip:[{t:3,r:"tip",p:[31,29,1197]}],"tooltip-side":"right",action:"recite",params:['{"category": "',{t:2,r:"type",p:[31,99,1267]},'"}']},f:["Recite ",{t:3,r:"required",p:[31,118,1286]}]}," ",{t:4,f:[{t:4,f:[{p:[34,6,1362],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[34,53,1409]},'"}']},f:["Unbind ",{t:3,r:"bound",p:[34,72,1428]}]}],n:50,r:"bound",p:[33,5,1342]},{t:4,n:51,f:[{p:[36,6,1472],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[36,53,1519]},'"}']},f:["Quickbind"]}],r:"bound"}],n:50,r:"quickbind",p:[32,6,1319]}," ",{t:3,r:"name",p:[39,6,1586]}," ",{t:3,r:"descname",p:[39,17,1597]}," ",{t:3,r:"invokers",p:[39,32,1612]}]}],n:52,r:"data.scripture",p:[30,3,1143]}]}]}],r:"data.recollection"}]},e.exports=a.extend(r.exports)},{341:341}],383:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Codex Gigas"},f:[{p:[2,2,35],t:7,e:"ui-section",f:[{t:2,r:"data.name",p:[3,3,51]}]}," ",{p:[5,5,86],t:7,e:"ui-section",a:{label:"Prefix"},f:[{p:[6,3,117],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[6,22,136]}],action:"Dark "},f:["Dark"]}," ",{p:[7,3,221],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[7,22,240]}],action:"Hellish "},f:["Hellish"]}," ",{p:[8,3,331],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[8,22,350]}],action:"Fallen "},f:["Fallen"]}," ",{p:[9,3,439],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[9,22,458]}],action:"Fiery "},f:["Fiery"]}," ",{p:[10,3,545],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[10,22,564]}],action:"Sinful "},f:["Sinful"]}," ",{p:[11,3,653],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[11,22,672]}],action:"Blood "},f:["Blood"]}," ",{p:[12,3,759],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[12,22,778]}],action:"Fluffy "},f:["Fluffy"]}]}," ",{p:[14,5,888],t:7,e:"ui-section",a:{label:"Title"},f:[{p:[15,3,918],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[15,22,937]}],action:"Lord "},f:["Lord"]}," ",{p:[16,3,1022],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[16,22,1041]}],action:"Prelate "},f:["Prelate"]}," ",{p:[17,3,1132],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[17,22,1151]}],action:"Count "},f:["Count"]}," ",{p:[18,3,1238],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[18,22,1257]}],action:"Viscount "},f:["Viscount"]}," ",{p:[19,3,1350],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[19,22,1369]}],action:"Vizier "},f:["Vizier"]}," ",{p:[20,3,1458],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[20,22,1477]}],action:"Elder "},f:["Elder"]}," ",{p:[21,3,1564],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[21,22,1583]}],action:"Adept "},f:["Adept"]}]}," ",{p:[23,5,1691],t:7,e:"ui-section",a:{label:"Name"},f:[{p:[24,3,1720],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[24,22,1739]}],action:"hal"},f:["hal"]}," ",{p:[25,3,1821],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[25,22,1840]}],action:"ve"},f:["ve"]}," ",{p:[26,3,1920],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[26,22,1939]}],action:"odr"},f:["odr"]}," ",{p:[27,3,2021],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[27,22,2040]}],action:"neit"},f:["neit"]}," ",{p:[28,3,2124],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[28,22,2143]}],action:"ci"},f:["ci"]}," ",{p:[29,3,2223],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[29,22,2242]}],action:"quon"},f:["quon"]}," ",{p:[30,3,2326],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[30,22,2345]}],action:"mya"},f:["mya"]}," ",{p:[31,3,2427],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[31,22,2446]}],action:"folth"},f:["folth"]}," ",{p:[32,3,2532],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[32,22,2551]}],action:"wren"},f:["wren"]}," ",{p:[33,3,2635],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[33,22,2654]}],action:"geyr"},f:["geyr"]}," ",{p:[34,3,2738],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[34,22,2757]}],action:"hil"},f:["hil"]}," ",{p:[35,3,2839],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[35,22,2858]}],action:"niet"},f:["niet"]}," ",{p:[36,3,2942],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[36,22,2961]}],action:"twou"},f:["twou"]}," ",{p:[37,3,3045],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[37,22,3064]}],action:"phi"},f:["phi"]}," ",{p:[38,3,3146],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[38,22,3165]}],action:"coa"},f:["coa"]}]}," ",{p:[40,5,3268],t:7,e:"ui-section",a:{label:"suffix"},f:[{p:[41,3,3299],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[41,22,3318]}],action:" the Red"},f:["the Red"]}," ",{p:[42,3,3409],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[42,22,3428]}],action:" the Soulless"},f:["the Soulless"]}," ",{p:[43,3,3529],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[43,22,3548]}],action:" the Master"},f:["the Master"]}," ",{p:[44,3,3645],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[44,22,3664]}],action:", the Lord of all things"},f:["the Lord of all things"]}," ",{p:[45,3,3786],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[45,22,3805]}],action:", Jr."},f:["jr"]}]}," ",{p:[47,5,3909],t:7,e:"ui-section",a:{label:"submit"},f:[{p:[48,3,3941],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0>=4?null:"disabled"'},p:[48,21,3959]}],action:"search"},f:["search"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],384:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[2,1,2],t:7,e:"ui-button",a:{icon:"circle",action:"clean_order"},f:["Clear Order"]},{p:[2,70,71],t:7,e:"br"},{p:[2,74,75],t:7,e:"br"}," ",{p:[3,1,81],t:7,e:"i",f:["Your new computer device you always dreamed of is just four steps away..."]},{p:[3,81,161],t:7,e:"hr"}," ",{t:4,f:[" ",{p:[5,1,223],t:7,e:"div",a:{"class":"item"},f:[{p:[6,2,244],t:7,e:"h2",f:["Step 1: Select your device type"]}," ",{p:[7,2,287],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "1"}'},f:["Laptop"]}," ",{p:[8,2,377],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "2"}'},f:["LTablet"]}]}],n:50,x:{r:["data.state"],s:"_0==0"},p:[4,1,167]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.state"],s:"_0==1"},f:[{p:[11,1,502],t:7,e:"div",a:{"class":"item"},f:[{p:[12,2,523],t:7,e:"h2",f:["Step 2: Personalise your device"]}," ",{p:[13,2,566],t:7,e:"table",f:[{p:[14,3,577],t:7,e:"tr",f:[{p:[15,4,586],t:7,e:"td",f:[{p:[15,8,590],t:7,e:"b",f:["Current Price:"]}]},{p:[16,4,616],t:7,e:"td",f:[{t:2,r:"data.totalprice",p:[16,8,620]},"C"]}]}," ",{p:[18,3,653],t:7,e:"tr",f:[{p:[19,4,663],t:7,e:"td",f:[{p:[19,8,667],t:7,e:"b",f:["Battery:"]}]},{p:[20,4,687],t:7,e:"td",f:[{p:[20,8,691],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "1"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==1?"selected":null'},p:[20,73,756]}]},f:["Standard"]}]},{p:[21,4,827],t:7,e:"td",f:[{p:[21,8,831],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "2"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==2?"selected":null'},p:[21,73,896]}]},f:["Upgraded"]}]},{p:[22,4,967],t:7,e:"td",f:[{p:[22,8,971],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "3"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==3?"selected":null'},p:[22,73,1036]}]},f:["Advanced"]}]}]}," ",{p:[24,3,1115],t:7,e:"tr",f:[{p:[25,4,1124],t:7,e:"td",f:[{p:[25,8,1128],t:7,e:"b",f:["Hard Drive:"]}]},{p:[26,4,1151],t:7,e:"td",f:[{p:[26,8,1155],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "1"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==1?"selected":null'},p:[26,67,1214]}]},f:["Standard"]}]},{p:[27,4,1282],t:7,e:"td",f:[{p:[27,8,1286],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "2"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==2?"selected":null'},p:[27,67,1345]}]},f:["Upgraded"]}]},{p:[28,4,1413],t:7,e:"td",f:[{p:[28,8,1417],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "3"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==3?"selected":null'},p:[28,67,1476]}]},f:["Advanced"]}]}]}," ",{p:[30,3,1552],t:7,e:"tr",f:[{p:[31,4,1561],t:7,e:"td",f:[{p:[31,8,1565],t:7,e:"b",f:["Network Card:"]}]},{p:[32,4,1590],t:7,e:"td",f:[{p:[32,8,1594],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "0"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==0?"selected":null'},p:[32,73,1659]}]},f:["None"]}]},{p:[33,4,1726],t:7,e:"td",f:[{p:[33,8,1730],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "1"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==1?"selected":null'},p:[33,73,1795]}]},f:["Standard"]}]},{p:[34,4,1866],t:7,e:"td",f:[{p:[34,8,1870],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "2"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==2?"selected":null'},p:[34,73,1935]}]},f:["Advanced"]}]}]}," ",{p:[36,3,2014],t:7,e:"tr",f:[{p:[37,4,2023],t:7,e:"td",f:[{p:[37,8,2027],t:7,e:"b",f:["Nano Printer:"]}]},{p:[38,4,2052],t:7,e:"td",f:[{p:[38,8,2056],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "0"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==0?"selected":null'},p:[38,73,2121]}]},f:["None"]}]},{p:[39,4,2190],t:7,e:"td",f:[{p:[39,8,2194],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "1"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==1?"selected":null'},p:[39,73,2259]}]},f:["Standard"]}]}]}," ",{p:[41,3,2340],t:7,e:"tr",f:[{p:[42,4,2349],t:7,e:"td",f:[{p:[42,8,2353],t:7,e:"b",f:["Card Reader:"]}]},{p:[43,4,2377],t:7,e:"td",f:[{p:[43,8,2381],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "0"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==0?"selected":null'},p:[43,67,2440]}]},f:["None"]}]},{p:[44,4,2504],t:7,e:"td",f:[{p:[44,8,2508],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "1"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==1?"selected":null'},p:[44,67,2567]}]},f:["Standard"]}]}]}]}," ",{t:4,f:[" ",{p:[49,4,2706],t:7,e:"table",f:[{p:[50,5,2719],t:7,e:"tr",f:[{p:[51,6,2730],t:7,e:"td",f:[{p:[51,10,2734],t:7,e:"b",f:["Processor Unit:"]}]},{p:[52,6,2763],t:7,e:"td",f:[{p:[52,10,2767],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "1"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==1?"selected":null'},p:[52,67,2824]}]},f:["Standard"]}]},{p:[53,6,2893],t:7,e:"td",f:[{p:[53,10,2897],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "2"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==2?"selected":null'},p:[53,67,2954]}]},f:["Advanced"]}]}]}," ",{p:[55,5,3033],t:7,e:"tr",f:[{p:[56,6,3044],t:7,e:"td",f:[{p:[56,10,3048],t:7,e:"b",f:["Tesla Relay:"]}]},{p:[57,6,3074],t:7,e:"td",f:[{p:[57,10,3078],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "0"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==0?"selected":null'},p:[57,71,3139]}]},f:["None"]}]},{p:[58,6,3206],t:7,e:"td",f:[{p:[58,10,3210],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "1"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==1?"selected":null'},p:[58,71,3271]}]},f:["Standard"]}]}]}]}],n:50,x:{r:["data.devtype"],s:"_0!=2"},p:[48,3,2659]}," ",{p:[62,3,3374],t:7,e:"table",f:[{p:[63,4,3386],t:7,e:"tr",f:[{p:[64,5,3396],t:7,e:"td",f:[{p:[64,9,3400],t:7,e:"b",f:["Confirm Order:"]}]},{p:[65,5,3427],t:7,e:"td",f:[{p:[65,9,3431],t:7,e:"ui-button",a:{action:"confirm_order"},f:["CONFIRM"]}]}]}]}," ",{p:[69,2,3512],t:7,e:"hr"}," ",{p:[70,2,3519],t:7,e:"b",f:["Battery"]}," allows your device to operate without external utility power source. Advanced batteries increase battery life.",{p:[70,127,3644],t:7,e:"br"}," ",{p:[71,2,3651],t:7,e:"b",f:["Hard Drive"]}," stores file on your device. Advanced drives can store more files, but use more power, shortening battery life.",{p:[71,130,3779],t:7,e:"br"}," ",{p:[72,2,3786],t:7,e:"b",f:["Network Card"]}," allows your device to wirelessly connect to stationwide NTNet network. Basic cards are limited to on-station use, while advanced cards can operate anywhere near the station, which includes the asteroid outposts.",{p:[72,233,4017],t:7,e:"br"}," ",{p:[73,2,4024],t:7,e:"b",f:["Processor Unit"]}," is critical for your device's functionality. It allows you to run programs from your hard drive. Advanced CPUs use more power, but allow you to run more programs on background at once.",{p:[73,208,4230],t:7,e:"br"}," ",{p:[74,2,4237],t:7,e:"b",f:["Tesla Relay"]}," is an advanced wireless power relay that allows your device to connect to nearby area power controller to provide alternative power source. This component is currently unavailable on tablet computers due to size restrictions.",{p:[74,246,4481],t:7,e:"br"}," ",{p:[75,2,4488],t:7,e:"b",f:["Nano Printer"]}," is device that allows for various paperwork manipulations, such as, scanning of documents or printing new ones. This device was certified EcoFriendlyPlus and is capable of recycling existing paper for printing purposes.",{p:[75,241,4727],t:7,e:"br"}," ",{p:[76,2,4734],t:7,e:"b",f:["Card Reader"]}," adds a slot that allows you to manipulate RFID cards. Please note that this is not necessary to allow the device to read your identification, it is just necessary to manipulate other cards."]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&(_0==2)"},f:[" ",{p:[79,2,4981],t:7,e:"h2",f:["Step 3: Payment"]}," ",{p:[80,2,5008],t:7,e:"b",f:["Your device is now ready for fabrication.."]},{p:[80,51,5057],t:7,e:"br"}," ",{p:[81,2,5064],t:7,e:"i",f:["Please ensure the required amount of credits are in the machine, then press purchase."]},{p:[81,94,5156],t:7,e:"br"}," ",{p:[82,2,5163],t:7,e:"i",f:["Current credits: ",{p:[82,22,5183],t:7,e:"b",f:[{t:2,r:"data.credits",p:[82,25,5186]},"C"]}]},{p:[82,50,5211],t:7,e:"br"}," ",{p:[83,2,5218],t:7,e:"i",f:["Total price: ",{p:[83,18,5234],t:7,e:"b",f:[{t:2,r:"data.totalprice",p:[83,21,5237]},"C"]}]},{p:[83,49,5265],t:7,e:"br"},{p:[83,53,5269],t:7,e:"br"}," ",{p:[84,2,5276],t:7,e:"ui-button",a:{action:"purchase",state:[{t:2,x:{r:["data.credits","data.totalprice"],s:'_0>=_1?null:"disabled"'},p:[84,38,5312]}]},f:["PURCHASE"]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&((!(_0==2))&&(_0==3))"},f:[" ",{p:[87,2,5423],t:7,e:"h2",f:["Step 4: Thank you for your purchase"]},{p:[87,46,5467],t:7,e:"br"}," ",{p:[88,2,5474],t:7,e:"b",f:["Should you experience any issues with your new device, contact your local network admin for assistance."]}]}],x:{r:["data.state"],s:"_0==0"}}]},e.exports=a.extend(r.exports)},{341:341}],385:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,22],t:7,e:"ui-display",f:[{p:[3,2,37],t:7,e:"ui-section",a:{label:"Cap"},f:[{p:[4,3,65],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.is_capped"],s:'_0?"power-off":"close"'},p:[4,20,82]}],style:[{t:2,x:{r:["data.is_capped"],s:'_0?null:"selected"'},p:[4,71,133]}],action:"toggle_cap"},f:[{t:2,x:{r:["data.is_capped"],s:'_0?"On":"Off"'},p:[6,4,202]}]}]}]}],n:50,r:"data.has_cap",p:[1,1,0]},{p:[10,1,288],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,2,419],t:7,e:"ui-section",f:[{p:[15,3,435],t:7,e:"ui-button",a:{action:"select_colour"},f:["Select New Colour"]}]}],n:50,r:"data.can_change_colour",p:[13,1,386]}]}," ",{p:[19,1,540],t:7,e:"ui-display",a:{title:"Stencil"},f:[{t:4,f:[{p:[21,2,599],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[21,21,618]}]},f:[{t:4,f:[{p:[23,7,655],t:7,e:"ui-button",a:{action:"select_stencil",params:['{"item":"',{t:2,r:"item",p:[23,59,707]},'"}'],style:[{t:2,x:{r:["item","data.selected_stencil"],s:'_0==_1?"selected":null'},p:[24,12,731]}]},f:[{t:2,r:"item",p:[25,4,791]}]}],n:52,r:"items",p:[22,3,632]}]}],n:52,r:"data.drawables",p:[20,3,572]}]}," ",{p:[31,1,874],t:7,e:"ui-display",a:{title:"Text Mode"},f:[{p:[32,2,907],t:7,e:"ui-section",a:{label:"Current Buffer"},f:[{t:2,r:"text_buffer",p:[32,37,942]}]}," ",{p:[34,2,976],t:7,e:"ui-section",f:[{p:[34,14,988],t:7,e:"ui-button",a:{action:"enter_text"},f:["New Text"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],386:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{isHead:function(t){return t%10==0},dept_class:function(t){return 0==t?"dept-cap":t>=10&&20>t?"dept-sec":t>=20&&30>t?"dept-med":t>=30&&40>t?"dept-sci":t>=40&&50>t?"dept-eng":t>=50&&60>t?"dept-cargo":t>=200&&230>t?"dept-cent":"dept-other"},health_state:function(t,e,n,a){var r=t+e+n+a;return 0>=r?"health-5":25>=r?"health-4":50>=r?"health-3":75>=r?"health-2":"health-0"}}}}(r),r.exports.css=" .health {\r\n width: 16px;\r\n height: 16px;\r\n background-color: #FFF;\r\n border: 1px solid #434343;\r\n position: relative;\r\n top: 2px;\r\n display: inline-block;\r\n }\r\n .health-5 { background-color: #17d568; }\r\n .health-4 { background-color: #2ecc71; }\r\n .health-3 { background-color: #e67e22; }\r\n .health-2 { background-color: #ed5100; }\r\n .health-1 { background-color: #e74c3c; }\r\n .health-0 { background-color: #ed2814; }\r\n\r\n .dept-cap {color : #C06616;}\r\n .dept-sec {color : #E74C3C;}\r\n .dept-med {color : #3498DB;}\r\n .dept-sci {color : #9B59B6;}\r\n .dept-eng {color : #F1C40F;}\r\n .dept-cargo {color : #F39C12;}\r\n .dept-cent {color : #00C100;}\r\n .dept-other {color: #C38312;}\r\n\r\n .oxy { color : #3498db; }\r\n .toxin { color : #2ecc71; }\r\n .burn { color : #e67e22; }\r\n .brute { color : #e74c3c; }\r\n\r\n table.crew{\r\n border-collapse: collapse;\r\n }\r\n\r\n table.crew td {\r\n padding : 0px 10px;\r\n }",r.exports.template={v:3,t:[" ",{p:[27,1,1030],t:7,e:"ui-display",f:[{p:[28,2,1045],t:7,e:"ui-section",f:[{p:[29,3,1061],t:7,e:"table",a:{"class":"crew"},f:[{p:[30,3,1085],t:7,e:"thead",f:[{p:[31,3,1096],t:7,e:"tr",f:[{p:[32,4,1105],t:7,e:"th",f:["Name"]}," ",{p:[33,4,1123],t:7,e:"th",f:["Status"]}," ",{p:[34,4,1143],t:7,e:"th",f:["Vitals"]}," ",{p:[35,4,1163],t:7,e:"th",f:["Position"]}," ",{t:4,f:[{p:[37,5,1216],t:7,e:"th",f:["Tracking"]}],n:50,r:"data.link_allowed",p:[36,4,1185]}]}]}," ",{p:[41,3,1270],t:7,e:"tbody",f:[{t:4,f:[{p:[43,4,1308],t:7,e:"tr",f:[{p:[44,5,1318],t:7,e:"td",f:[{p:[45,6,1329],t:7,e:"span",a:{"class":[{t:2,x:{r:["isHead","ijob"],s:'_0(_1)?"bold ":""'},p:[45,19,1342]},{t:2,x:{r:["dept_class","ijob"],s:"_0(_1)"},p:[45,49,1372]}]},f:[{t:2,r:"name",p:[46,7,1402]}," (",{t:2,r:"assignment",p:[46,17,1412]},") ",{p:[47,6,1434],t:7,e:"span",f:[]}]}]}," ",{p:[49,5,1457],t:7,e:"td",f:[{t:4,f:[{p:[51,7,1498],t:7,e:"span",a:{"class":["health ",{t:2,x:{r:["health_state","oxydam","toxdam","burndam","brutedam"],s:"_0(_1,_2,_3,_4)"},p:[51,27,1518]}]}}],n:50,x:{r:["oxydam"],s:"_0!=null"},p:[50,6,1468]},{t:4,n:51,f:[{t:4,f:[{p:[54,8,1626],t:7,e:"span",a:{"class":"health health-5"}}],n:50,r:"life_status",p:[53,7,1598]},{t:4,n:51,f:[{p:[56,8,1688],t:7,e:"span",a:{"class":"health health-0"}}],r:"life_status"}],x:{r:["oxydam"],s:"_0!=null"}}]}," ",{p:[60,5,1771],t:7,e:"td",f:[{t:4,f:[{p:[62,7,1812],t:7,e:"span",f:["( ",{p:[64,8,1836],t:7,e:"span",a:{"class":"oxy"},f:[{t:2,r:"oxydam",p:[64,26,1854]}]}," / ",{p:[66,8,1890],t:7,e:"span",a:{"class":"toxin"},f:[{t:2,r:"toxdam",p:[66,28,1910]}]}," / ",{p:[68,8,1946],t:7,e:"span",a:{"class":"burn"},f:[{t:2,r:"burndam",p:[68,27,1965]}]}," / ",{p:[70,8,2002],t:7,e:"span",a:{"class":"brute"},f:[{t:2,r:"brutedam",p:[70,28,2022]}]}," )"]}],n:50,x:{r:["oxydam"],s:"_0!=null"},p:[61,6,1782]},{t:4,n:51,f:[{t:4,f:[{p:[75,8,2116],t:7,e:"span",f:["Alive"]}],n:50,r:"life_status",p:[74,7,2088]},{t:4,n:51,f:[{p:[77,8,2159],t:7,e:"span",f:["Dead"]}],r:"life_status"}],x:{r:["oxydam"],s:"_0!=null"}}]}," ",{p:[81,5,2222],t:7,e:"td",f:[{t:4,f:[{p:[83,6,2260],t:7,e:"span",f:[{t:2,r:"area",p:[83,12,2266]}]}],n:50,x:{r:["pos_x"],s:"_0!=null"},p:[82,5,2232]},{t:4,n:51,f:[{p:[85,6,2302],t:7,e:"span",f:["N/A"]}],x:{r:["pos_x"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[89,6,2381],t:7,e:"td",f:[{p:[90,7,2393],t:7,e:"ui-button",a:{action:"select_person",state:[{t:2,x:{r:["can_track"],s:'_0?null:"disabled"'},p:[90,48,2434]}],params:['{"name":"',{t:2,r:"name",p:[90,100,2486]},'"}']},f:["Track"]}]}],n:50,r:"data.link_allowed",p:[88,5,2348]}]}],n:52,r:"data.sensors",p:[42,3,1281]}]}]}]}]}," "]},e.exports=a.extend(r.exports)},{341:341}],387:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,33],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,66],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,72]}]}]}," ",{t:4,f:[{p:[6,5,189],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,223],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,236]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,265]}]}]}," ",{p:[9,4,317],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[10,6,356],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.temperaturestatus",p:[10,19,369]}]},f:[{t:2,r:"data.occupant.bodyTemperature",p:[10,56,406]}," K"]}]}," ",{p:[12,5,472],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[13,7,507],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[13,20,520]}],max:[{t:2,r:"data.occupant.maxHealth",p:[13,54,554]}],value:[{t:2,r:"data.occupant.health",p:[13,90,590]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[14,16,632]}]},f:[{t:2,r:"data.occupant.health",p:[14,68,684]}]}]}," ",{t:4,f:[{p:[17,7,908],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[17,26,927]}]},f:[{p:[18,9,948],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[18,30,969]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,66,1005]}],state:"bad"},f:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,103,1042]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[16,5,742]}],n:50,r:"data.hasOccupant",p:[5,3,159]}]}," ",{p:[23,1,1138],t:7,e:"ui-display",a:{title:"Cell"},f:[{p:[24,3,1167],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[25,5,1199],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[25,22,1216]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[26,14,1276]}],state:[{t:2,x:{r:["data.isOpen"],s:'_0?"disabled":null'},p:[27,14,1332]}],action:"power"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[28,22,1391]}]}]}," ",{p:[30,3,1459],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[31,3,1495],t:7,e:"span",a:{"class":[{t:2,r:"data.temperaturestatus",p:[31,16,1508]}]},f:[{t:2,r:"data.cellTemperature",p:[31,44,1536]
-}," K"]}]}," ",{p:[33,2,1588],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[34,5,1619],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOpen"],s:'_0?"unlock":"lock"'},p:[34,22,1636]}],action:"door"},f:[{t:2,x:{r:["data.isOpen"],s:'_0?"Open":"Closed"'},p:[34,73,1687]}]}," ",{p:[35,5,1740],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoEject"],s:'_0?"sign-out":"sign-in"'},p:[35,22,1757]}],action:"autoeject"},f:[{t:2,x:{r:["data.autoEject"],s:'_0?"Auto":"Manual"'},p:[35,86,1821]}]}]}]}," ",{p:{button:[{p:[40,5,1967],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[40,36,1998]}],action:"ejectbeaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[42,3,2101],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[45,9,2211],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,r:"volume",p:[45,52,2254]}," units of ",{t:2,r:"name",p:[45,72,2274]}]},{p:[45,87,2289],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[44,7,2171]},{t:4,n:51,f:[{p:[47,9,2320],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[43,5,2136]},{t:4,n:51,f:[{p:[50,7,2396],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],388:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"ui-section",a:{label:"State"},f:[{t:4,f:[{p:[4,4,76],t:7,e:"span",a:{"class":"good"},f:["Ready"]}],n:50,r:"data.full_pressure",p:[3,3,45]},{t:4,n:51,f:[{t:4,f:[{p:[7,5,153],t:7,e:"span",a:{"class":"bad"},f:["Power Disabled"]}],n:50,r:"data.panel_open",p:[6,4,124]},{t:4,n:51,f:[{t:4,f:[{p:[10,6,248],t:7,e:"span",a:{"class":"average"},f:["Pressurizing"]}],n:50,r:"data.pressure_charging",p:[9,5,211]},{t:4,n:51,f:[{p:[12,6,310],t:7,e:"span",a:{"class":"bad"},f:["Off"]}],r:"data.pressure_charging"}],r:"data.panel_open"}],r:"data.full_pressure"}]}," ",{p:[17,2,393],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[18,3,426],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.per",p:[18,36,459]}],state:"good"},f:[{t:2,r:"data.per",p:[18,63,486]},"%"]}]}," ",{p:[20,5,530],t:7,e:"ui-section",a:{label:"Handle"},f:[{p:[21,9,567],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.flush"],s:'_0?"toggle-on":"toggle-off"'},p:[22,10,589]}],state:[{t:2,x:{r:["data.isai","data.panel_open"],s:'_0||_1?"disabled":null'},p:[23,11,647]}],action:[{t:2,x:{r:["data.flush"],s:'_0?"handle-0":"handle-1"'},p:[24,12,714]}]},f:[{t:2,x:{r:["data.flush"],s:'_0?"Disengage":"Engage"'},p:[25,5,763]}]}]}," ",{p:[27,2,837],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[28,3,867],t:7,e:"ui-button",a:{icon:"sign-out",state:[{t:2,x:{r:["data.isai"],s:'_0?"disabled":null'},p:[28,37,901]}],action:"eject"},f:["Eject Contents"]},{p:[28,114,978],t:7,e:"br"}]}," ",{p:[30,2,1002],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,3,1032],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["data.panel_open"],s:'_0?"disabled":null'},p:[31,38,1067]}],action:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"pump-0":"pump-1"'},p:[31,87,1116]}],style:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"selected":null'},p:[31,145,1174]}]}},{p:[31,206,1235],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],389:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"DNA Vault Database"},f:[{p:[2,3,43],t:7,e:"ui-section",a:{label:"Human DNA"},f:[{p:[3,7,81],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.dna_max",p:[3,28,102]}],value:[{t:2,r:"data.dna",p:[3,53,127]}]},f:[{t:2,r:"data.dna",p:[3,67,141]},"/",{t:2,r:"data.dna_max",p:[3,80,154]}," Samples"]}]}," ",{p:[5,3,208],t:7,e:"ui-section",a:{label:"Plant Data"},f:[{p:[6,5,245],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.plants_max",p:[6,26,266]}],value:[{t:2,r:"data.plants",p:[6,54,294]}]},f:[{t:2,r:"data.plants",p:[6,71,311]},"/",{t:2,r:"data.plants_max",p:[6,87,327]}," Samples"]}]}," ",{p:[8,3,384],t:7,e:"ui-section",a:{label:"Animal Data"},f:[{p:[9,5,422],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.animals_max",p:[9,26,443]}],value:[{t:2,r:"data.animals",p:[9,55,472]}]},f:[{t:2,r:"data.animals",p:[9,73,490]},"/",{t:2,r:"data.animals_max",p:[9,90,507]}," Samples"]}]}]}," ",{t:4,f:[{p:[13,1,616],t:7,e:"ui-display",a:{title:"Personal Gene Therapy"},f:[{p:[14,3,663],t:7,e:"ui-section",f:[{p:[15,2,678],t:7,e:"span",f:["Applicable gene therapy treatments:"]}]}," ",{p:[17,3,747],t:7,e:"ui-section",f:[{p:[18,2,762],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceA",p:[18,47,807]},'"}']},f:[{t:2,r:"data.choiceA",p:[18,67,827]}]}," ",{p:[19,2,858],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceB",p:[19,47,903]},'"}']},f:[{t:2,r:"data.choiceB",p:[19,67,923]}]}]}]}],n:50,x:{r:["data.completed","data.used"],s:"_0&&!_1"},p:[12,1,578]}]},e.exports=a.extend(r.exports)},{341:341}],390:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,33],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,66],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,72]}]}]}," ",{t:4,f:[{p:[6,5,183],t:7,e:"ui-section",a:{label:"Items in storage"},f:[{p:[7,4,225],t:7,e:"span",f:[{t:2,r:"data.items",p:[7,10,231]}]}]}],n:50,r:"data.items",p:[5,3,159]}," ",{t:4,f:[{p:[11,5,310],t:7,e:"ui-section",a:{label:"State"},f:[{p:[12,7,344],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[12,20,357]}]},f:[{t:2,r:"data.occupant.stat",p:[12,49,386]}]}]}," ",{p:[14,5,439],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[15,7,474],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[15,20,487]}],max:[{t:2,r:"data.occupant.maxHealth",p:[15,54,521]}],value:[{t:2,r:"data.occupant.health",p:[15,90,557]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[16,16,599]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[16,68,651]}]}]}," ",{t:4,f:[{p:[19,7,888],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[19,26,907]}]},f:[{p:[20,9,928],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[20,30,949]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[20,66,985]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[20,103,1022]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[18,5,722]}," ",{p:[23,5,1109],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[24,9,1145],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[24,22,1158]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[24,68,1204]}]}]}," ",{p:[26,5,1287],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[27,9,1323],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[27,22,1336]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[27,68,1382]}]}]}," ",{p:[29,5,1466],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[31,11,1553],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[31,54,1596]}," units of ",{t:2,r:"name",p:[31,89,1631]}]},{p:[31,104,1646],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[30,9,1508]},{t:4,n:51,f:[{p:[33,11,1681],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[10,3,283]}]}," ",{p:[38,1,1777],t:7,e:"ui-display",a:{title:"Operations"},f:[{p:[39,3,1812],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[41,7,1872],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied"],s:'_0?null:"disabled"'},p:[41,38,1903]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[41,111,1976]},'"}']},f:[{t:2,r:"name",p:[41,121,1986]}]},{p:[41,141,2006],t:7,e:"br"}],n:52,r:"data.chem",p:[40,5,1845]}]}," ",{p:[44,2,2046],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[45,6,2079],t:7,e:"ui-button",a:{icon:"sign-out",action:"eject"},f:["Eject Contents"]}]}," ",{p:[47,2,2166],t:7,e:"ui-section",a:{label:"Self Cleaning"},f:[{p:[48,3,2204],t:7,e:"ui-button",a:{icon:"recycle",action:"cleaning"},f:["Self-Clean Cycle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],391:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,24],t:7,e:"ui-display",a:{title:[{t:2,r:"data.question",p:[2,21,42]}]},f:[{p:[3,5,66],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,9,118],t:7,e:"ui-button",a:{action:"vote",params:['{"answer": "',{t:2,r:"answer",p:[6,45,174]},'"}'],style:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[7,18,206]}]},f:[{t:2,r:"answer",p:[7,53,241]}," (",{t:2,r:"amount",p:[7,65,253]},")"]}],n:52,r:"data.answers",p:[4,7,86]}]}]}],n:50,r:"data.shaking",p:[1,1,0]},{t:4,n:51,f:[{p:[13,3,353],t:7,e:"ui-notice",f:["The eightball is not currently being shaken."]}],r:"data.shaking"}]},e.exports=a.extend(r.exports)},{341:341}],392:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,17],t:7,e:"span",f:["Time Until Launch: ",{t:2,r:"data.timer_str",p:[2,30,42]}]}]}," ",{p:[4,1,83],t:7,e:"ui-notice",f:[{p:[5,3,98],t:7,e:"span",f:["Engines: ",{t:2,x:{r:["data.engines_started"],s:'_0?"Online":"Idle"'},p:[5,18,113]}]}]}," ",{p:[7,1,180],t:7,e:"ui-display",a:{title:"Early Launch"},f:[{p:[8,2,216],t:7,e:"span",f:["Authorizations Remaining: ",{t:2,x:{r:["data.emagged","data.authorizations_remaining"],s:'_0?"ERROR":_1'},p:[9,2,250]}]}," ",{p:[10,2,318],t:7,e:"ui-button",a:{icon:"exclamation-triangle",action:"authorize",style:"danger",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[12,10,404]}]},f:["AUTHORIZE"]}," ",{p:[15,2,473],t:7,e:"ui-button",a:{icon:"minus",action:"repeal",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[16,10,523]}]},f:["Repeal"]}," ",{p:[19,2,589],t:7,e:"ui-button",a:{icon:"close",action:"abort",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[20,10,638]}]},f:["Repeal All"]}]}," ",{p:[24,1,722],t:7,e:"ui-display",a:{title:"Authorizations"},f:[{t:4,f:[{p:[26,3,793],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{t:2,r:"name",p:[26,34,824]}," (",{t:2,r:"job",p:[26,44,834]},")"]}],n:52,r:"data.authorizations",p:[25,2,760]},{t:4,n:51,f:[{p:[28,3,870],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:["No authorizations."]}],r:"data.authorizations"}]}]},e.exports=a.extend(r.exports)},{341:341}],393:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.hidden_message",p:[3,5,50]}]}," ",{p:[5,3,94],t:7,e:"ui-section",a:{label:"Created On"},f:[{t:2,r:"data.realdate",p:[6,5,131]}]}," ",{p:[8,3,169],t:7,e:"ui-section",a:{label:"Approval"},f:[{p:[9,5,204],t:7,e:"ui-button",a:{icon:"arrow-up",state:[{t:2,x:{r:["data.is_creator","data.has_liked"],s:'_0?"disabled":_1?"selected":null'},p:[11,14,252]}],action:"like"},f:[{t:2,r:"data.num_likes",p:[12,21,344]}]}," ",{p:[13,5,380],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.is_creator","data.has_liked","data.has_disliked"],s:'_0?"disabled":!_1&&!_2?"selected":null'},p:[15,14,426]}],action:"neutral"}}," ",{p:[17,5,562],t:7,e:"ui-button",a:{icon:"arrow-down",state:[{t:2,x:{r:["data.is_creator","data.has_disliked"],s:'_0?"disabled":_1?"selected":null'},p:[19,14,612]}],action:"dislike"},f:[{t:2,r:"data.num_dislikes",p:[20,24,710]}]}]}]}," ",{t:4,f:[{p:[24,3,805],t:7,e:"ui-display",a:{title:"Admin Panel"},f:[{p:[25,5,843],t:7,e:"ui-section",a:{label:"Creator Ckey"},f:[{t:2,r:"data.creator_key",p:[25,38,876]}]}," ",{p:[26,5,915],t:7,e:"ui-section",a:{label:"Creator Character Name"},f:[{t:2,r:"data.creator_name",p:[26,48,958]}]}," ",{p:[27,5,998],t:7,e:"ui-button",a:{icon:"remove",action:"delete",style:"danger"},f:["Delete"]}]}],n:50,r:"data.admin_mode",p:[23,1,778]}]},e.exports=a.extend(r.exports)},{341:341}],394:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,15],t:7,e:"span",f:["The requested interface (",{t:2,r:"config.interface",p:[2,34,46]},") was not found. Does it exist?"]}]}]},e.exports=a.extend(r.exports)},{341:341}],395:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,20],t:7,e:"ui-notice",f:["Currently syncing with the database"]}],n:50,r:"data.sync",p:[1,1,0]},{t:4,n:51,f:[{p:{button:[{p:[8,4,163],t:7,e:"ui-button",a:{icon:"eject",action:"eject_all"},f:["Eject all"]}," ",{p:[9,4,232],t:7,e:"ui-button",a:{icon:["toggle-",{t:2,x:{r:["data.show_materials"],s:'_0?"off":"on"'},p:[9,28,256]}],action:"toggle_materials_visibility"},f:[{t:2,x:{r:["data.show_materials"],s:'_0?"Hide":"Show"'},p:[10,5,339]}]}]},t:7,e:"ui-display",a:{title:"Materials",button:0},f:[" ",{t:4,f:[{p:[14,4,449],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[15,5,484],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[16,6,520],t:7,e:"section",a:{"class":"cell"}}," ",{p:[17,6,559],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[20,6,620],t:7,e:"section",a:{"class":"cell"},f:["Amount"]}," ",{p:[23,6,680],t:7,e:"section",a:{"class":"cell"}}," ",{p:[24,6,719],t:7,e:"section",a:{"class":"cell"}}]}," ",{t:4,f:[{p:[27,6,808],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[28,7,845],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[29,8,876]}]}," ",{p:[31,7,910],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"amount",p:[32,8,941]}]}," ",{p:[34,7,977],t:7,e:"section",a:{"class":"cell"},f:[{p:[35,8,1008],t:7,e:"ui-button",a:{icon:"eject"},f:["Release amount"]}]}," ",{p:[37,7,1084],t:7,e:"section",a:{"class":"cell",style:"width: 40px;"},f:[{p:[38,8,1136],t:7,e:"ui-button",a:{icon:"eject"},f:["Release all"]}]}]}],n:52,r:"data.all_materials",p:[26,5,773]}]}],n:50,r:"data.show_materials",p:[13,3,417]}]}," ",{p:[45,2,1274],t:7,e:"ui-display",a:{title:"Categories"},f:[{t:4,f:[{p:[47,4,1334],t:7,e:"ui-button",f:[{t:2,r:".",p:[47,15,1345]}]}],r:"data.categories",p:[46,3,1309]}]}],r:"data.sync"}]},e.exports=a.extend(r.exports)},{341:341}],396:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,5,49],t:7,e:"ui-button",a:{action:"toggle_power",style:[{t:2,x:{r:["data.toggle"],s:'_0?"selected":null'},p:[5,18,111]}]},f:["Turn ",{t:2,x:{r:["data.toggle"],s:'_0?"off":"on"'},p:[6,16,166]}]}]}," ",{p:[9,3,235],t:7,e:"ui-display",a:{title:"Logging"},f:[{t:4,f:[{p:[11,3,292],t:7,e:"ui-section",a:{label:">"},f:[{t:2,r:".",p:[11,25,314]},{p:[11,30,319],t:7,e:"ui-section",f:[]}]}],n:52,r:"data.logs",p:[10,5,269]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],397:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{seclevelState:function(){switch(this.get("data.seclevel")){case"blue":return"average";case"red":return"bad";case"delta":return"bad bold";default:return"good"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[16,1,323],t:7,e:"ui-display",f:[{p:[17,5,341],t:7,e:"ui-section",a:{label:"Alert Level"},f:[{p:[18,9,383],t:7,e:"span",a:{"class":[{t:2,r:"seclevelState",p:[18,22,396]}]},f:[{t:2,x:{r:["text","data.seclevel"],s:"_0.titleCase(_1)"},p:[18,41,415]}]}]}," ",{p:[20,5,480],t:7,e:"ui-section",a:{label:"Controls"},f:[{p:[21,9,519],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.alarm"],s:'_0?"close":"bell-o"'},p:[21,26,536]}],action:[{t:2,x:{r:["data.alarm"],s:'_0?"reset":"alarm"'},p:[21,71,581]}]},f:[{t:2,x:{r:["data.alarm"],s:'_0?"Reset":"Activate"'},p:[22,13,631]}]}]}," ",{t:4,f:[{p:[25,7,733],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[26,9,771],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[24,5,705]}]}]},e.exports=a.extend(r.exports)},{341:341}],398:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[2,1,31],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,2,60],t:7,e:"ui-button",a:{icon:"power-off",style:[{t:2,x:{r:["data.power"],s:'_0?"selected":"danger"'},p:[3,37,95]}],action:"power"},f:[{t:2,x:{r:["data.power"],s:'_0?"Enabled":"Disabled"'},p:[3,92,150]}]}]}," ",{p:[5,1,218],t:7,e:"ui-section",a:{label:"Tag"},f:[{p:[6,2,245],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:[{t:2,r:"data.tag",p:[6,43,286]}]}]}," ",{p:[8,1,327],t:7,e:"ui-section",a:{label:"Scanning mode"},f:[{p:[9,2,364],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.updating"],s:'_0?"unlock":"lock"'},p:[9,18,380]}],style:[{t:2,x:{r:["data.updating"],s:'_0?null:"danger"'},p:[9,63,425]}],action:"updating",tooltip:"Toggle between automatic scanning or scan only when a button is pressed.","tooltip-side":"right"},f:[{t:2,x:{r:["data.updating"],s:'_0?"AUTO":"MANUAL"'},p:[9,221,583]}]}]}," ",{p:[11,1,649],t:7,e:"ui-section",a:{label:"Detection range"},f:[{p:[12,2,688],t:7,e:"ui-button",a:{icon:"refresh",style:[{t:2,x:{r:["data.globalmode"],s:'_0?null:"selected"'},p:[12,35,721]}],action:"globalmode",tooltip:"Local sector or whole region scanning.","tooltip-side":"right"},f:[{t:2,x:{r:["data.globalmode"],s:'_0?"MAXIMUM":"LOCAL"'},p:[12,165,851]}]}]}]}," ",{t:4,f:[{p:[16,2,957],t:7,e:"ui-display",a:{title:"Current Location"},f:[{p:[17,3,998],t:7,e:"span",f:[{t:2,r:"data.current",p:[17,9,1004]}]}]}," ",{p:[20,2,1048],t:7,e:"ui-display",a:{title:"Detected Signals"},f:[{t:4,f:[{p:[22,3,1114],t:7,e:"ui-section",a:{label:[{t:2,r:"entrytag",p:[22,21,1132]}]},f:[{p:[23,3,1149],t:7,e:"span",f:[{t:2,r:"area",p:[23,9,1155]}," (",{t:2,r:"coord",p:[23,19,1165]},")"]}," ",{t:4,f:[{p:[25,4,1209],t:7,e:"span",f:["Dist: ",{t:2,r:"dist",p:[25,16,1221]},"m Dir: ",{t:2,r:"degrees",p:[25,31,1236]},"° (",{t:2,r:"direction",p:[25,45,1250]},")"]}],n:50,r:"direction",p:[24,3,1187]}]}],n:52,r:"data.signals",p:[21,2,1088]}]}],n:50,r:"data.power",p:[15,1,936]}]},e.exports=a.extend(r.exports)},{341:341}],399:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Labor Camp Teleporter"},f:[{p:[2,2,45],t:7,e:"ui-section",a:{label:"Teleporter Status"},f:[{p:[3,3,87],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.teleporter"],s:'_0?"good":"bad"'},p:[3,16,100]}]},f:[{t:2,x:{r:["data.teleporter"],s:'_0?"Connected":"Not connected"'},p:[3,54,138]}]}]}," ",{t:4,f:[{p:[6,4,244],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[7,5,279],t:7,e:"span",f:[{t:2,r:"data.teleporter_location",p:[7,11,285]}]}]}," ",{p:[9,4,343],t:7,e:"ui-section",a:{label:"Locked status"},f:[{p:[10,5,383],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"lock":"unlock"'},p:[10,22,400]}],action:"teleporter_lock"},f:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"Locked":"Unlocked"'},p:[10,93,471]}]}," ",{p:[11,5,537],t:7,e:"ui-button",a:{action:"toggle_open"},f:[{t:2,x:{r:["data.teleporter_state_open"],s:'_0?"Open":"Closed"'},p:[11,37,569]}]}]}],n:50,r:"data.teleporter",p:[5,3,216]},{t:4,n:51,f:[{p:[14,4,666],t:7,e:"span",f:[{p:[14,10,672],t:7,e:"ui-button",a:{action:"scan_teleporter"},f:["Scan Teleporter"]}]}],r:"data.teleporter"}]}," ",{p:[17,1,770],t:7,e:"ui-display",a:{title:"Labor Camp Beacon"},f:[{p:[18,2,811],t:7,e:"ui-section",a:{label:"Beacon Status"},f:[{p:[19,3,849],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.beacon"],s:'_0?"good":"bad"'},p:[19,16,862]}]},f:[{t:2,x:{r:["data.beacon"],s:'_0?"Connected":"Not connected"'},p:[19,50,896]}]}]}," ",{t:4,f:[{p:[22,3,992],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[23,4,1026],t:7,e:"span",f:[{t:2,r:"data.beacon_location",p:[23,10,1032]}]}]}],n:50,r:"data.beacon",p:[21,2,969]},{t:4,n:51,f:[{p:[26,4,1097],t:7,e:"span",f:[{p:[26,10,1103],t:7,e:"ui-button",a:{action:"scan_beacon"},f:["Scan Beacon"]}]}],r:"data.beacon"}]}," ",{p:[29,1,1193],t:7,e:"ui-display",a:{title:"Prisoner details"},f:[{p:[30,2,1233],t:7,e:"ui-section",a:{label:"Prisoner ID"},f:[{p:[31,3,1269],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[31,33,1299]}]}]}," ",{t:4,f:[{p:[34,2,1392],t:7,e:"ui-section",a:{label:"Set ID goal"},f:[{p:[35,4,1429],t:7,e:"ui-button",a:{action:"set_goal"},f:[{t:2,r:"data.goal",p:[35,33,1458]}]}]}],n:50,r:"data.id",p:[33,2,1374]}," ",{p:[38,2,1512],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[39,3,1545],t:7,e:"span",f:[{t:2,x:{r:["data.prisoner.name"],s:'_0?_0:"No Occupant"'},p:[39,9,1551]}]}]}," ",{t:4,f:[{p:[42,3,1661],t:7,e:"ui-section",a:{label:"Criminal Status"},f:[{p:[43,4,1702],t:7,e:"span",f:[{t:2,r:"data.prisoner.crimstat",p:[43,10,1708]}]}]}],n:50,r:"data.prisoner",p:[41,2,1636]}]}," ",{p:[47,1,1785],t:7,e:"ui-display",f:[{p:[48,2,1800],t:7,e:"center",f:[{p:[48,10,1808],t:7,e:"ui-button",a:{action:"teleport",state:[{t:2,x:{r:["data.can_teleport"],s:'_0?null:"disabled"'},p:[48,45,1843]}]},f:["Process Prisoner"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],400:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"center",f:[{p:[2,10,23],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[2,40,53]}]}]}]}," ",{p:[4,1,135],t:7,e:"ui-display",a:{title:"Stored Items"},f:[{t:4,f:[{p:[6,3,194],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[6,22,213]}]},f:[{p:[7,4,228],t:7,e:"ui-button",a:{action:"release_items",params:['{"mobref":',{t:2,r:"mob",p:[7,56,280]},"}"],state:[{t:2,x:{r:["data.can_reclaim"],s:'_0?null:"disabled"'},p:[7,72,296]}]},f:["Drop Items"]}]}],n:52,r:"data.mobs",p:[5,2,171]}]}]},e.exports=a.extend(r.exports)},{341:341}],401:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,70],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.emagged"],s:'_0?"un":null'},p:[3,20,87]},"lock"],state:[{t:2,x:{r:["data.can_toggle_safety"],s:'_0?null:"disabled"'},p:[3,63,130]}],action:"safety"},f:["Safeties: ",{p:[4,14,209],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.emagged"],s:'_0?"bad":"good"'},p:[4,27,222]}]},f:[{t:2,x:{r:["data.emagged"],s:'_0?"OFF":"ON"'},p:[4,62,257]}]}]}]},t:7,e:"ui-display",a:{title:"Default Programs",button:0},f:[" ",{t:4,f:[{p:[8,2,363],t:7,e:"ui-button",a:{action:"load_program",params:['{"type": ',{t:2,r:"type",p:[8,52,413]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[8,70,431]}]},f:[{t:2,r:"name",p:[9,5,483]}," "]},{p:[10,14,506],t:7,e:"br"}],n:52,r:"data.default_programs",p:[7,2,329]}]}," ",{t:4,f:[{p:[14,2,562],t:7,e:"ui-display",a:{title:"Dangerous Programs"},f:[{t:4,f:[{p:[16,4,638],t:7,e:"ui-button",a:{icon:"warning",action:"load_program",params:['{"type": ',{t:2,r:"type",p:[16,69,703]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[16,87,721]}]},f:[{t:2,r:"name",p:[17,5,773]}," "]},{p:[18,16,798],t:7,e:"br"}],n:52,r:"data.emag_programs",p:[15,3,605]}]}],n:50,r:"data.emagged",p:[13,1,539]}]},e.exports=a.extend(r.exports)},{341:341}],402:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[15,1,280],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[16,3,313],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[17,3,346],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[17,9,352]}]}]}," ",{t:4,f:[{p:[20,5,466],t:7,e:"ui-section",a:{label:"State"},f:[{p:[21,7,500],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[21,20,513]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[21,43,536]}]}]}],n:50,r:"data.occupied",p:[19,3,439]}]}," ",{p:[25,1,680],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[26,2,712],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[27,5,743],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[27,22,760]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[27,71,809]}]}]}," ",{p:[29,3,874],t:7,e:"ui-section",a:{label:"Uses"},f:[{t:2,r:"data.ready_implants",p:[30,5,905]}," ",{t:4,f:[{p:[32,7,969],t:7,e:"span",a:{"class":"fa fa-cog fa-spin"}}],n:50,r:"data.replenishing",p:[31,5,936]}]}," ",{p:[35,3,1036],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[36,7,1073],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","data.ready_implants","data.ready"],s:'_0&&_1>0&&_2?null:"disabled"'},p:[36,25,1091]}],action:"implant"},f:[{t:2,x:{r:["data.ready","data.special_name"],s:'_0?(_1?_1:"Implant"):"Recharging"'},p:[37,9,1198]}," "]},{p:[38,19,1302],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],403:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[15,3,296],t:7,e:"ui-notice",f:[{p:[16,5,313],t:7,e:"span",f:["Wipe in progress!"]}]}],n:50,r:"data.wiping",p:[14,1,273]},{p:{button:[{t:4,f:[{p:[22,7,479],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.isDead"],s:'_0?"disabled":null'},p:[22,38,510]}],action:"wipe"},f:[{t:2,x:{r:["data.wiping"],s:'_0?"Stop Wiping":"Wipe"'},p:[22,89,561]}," AI"]}],n:50,r:"data.name",p:[21,5,454]}]},t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.name"],s:'_0||"Empty Card"'},p:[19,19,388]}],button:0},f:[" ",{t:4,f:[{p:[26,5,672],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[27,9,709],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"bad":"good"'},p:[27,22,722]}]},f:[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"Offline":"Operational"'},p:[27,76,776]}]}]}," ",{p:[29,5,871],t:7,e:"ui-section",a:{label:"Software Integrity"},f:[{p:[30,7,918],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[30,40,951]}],state:[{t:2,r:"healthState",p:[30,64,975]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[30,81,992]},"%"]}]}," ",{p:[32,5,1055],t:7,e:"ui-section",a:{label:"Laws"},f:[{t:4,f:[{p:[34,9,1117],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[34,33,1141]}]},{p:[34,45,1153],t:7,e:"br"}],n:52,r:"data.laws",p:[33,7,1088]}]}," ",{p:[37,5,1200],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[38,7,1237],t:7,e:"ui-button",a:{icon:"signal",style:[{t:2,x:{r:["data.wireless"],s:'_0?"selected":null'},p:[38,39,1269]}],action:"wireless"},f:["Wireless Activity"]}," ",{p:[39,7,1363],t:7,e:"ui-button",a:{icon:"microphone",style:[{t:2,x:{r:["data.radio"],s:'_0?"selected":null'},p:[39,43,1399]}],action:"radio"},f:["Subspace Radio"]}]}],n:50,r:"data.name",p:[25,3,649]}]}]},e.exports=a.extend(r.exports)},{341:341}],404:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,23],t:7,e:"ui-notice",f:[{p:[3,3,38],t:7,e:"span",f:["Waiting for another device to confirm your request..."]}]}],n:50,r:"data.waiting",p:[1,1,0]},{t:4,n:51,f:[{p:[6,2,132],t:7,e:"ui-display",f:[{p:[7,3,148],t:7,e:"ui-section",f:[{t:4,f:[{p:[9,5,197],t:7,e:"ui-button",a:{icon:"check",action:"auth_swipe"},f:["Authorize ",{t:2,r:"data.auth_required",p:[9,59,251]}]}],n:50,r:"data.auth_required",p:[8,4,165]},{t:4,n:51,f:[{p:[11,5,304],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.red_alert"],s:'_0?"disabled":null'},p:[11,38,337]}],action:"red_alert"},f:["Red Alert"]}," ",{p:[12,5,423],t:7,e:"ui-button",a:{icon:"wrench",state:[{t:2,x:{r:["data.emergency_maint"],s:'_0?"disabled":null'},p:[12,37,455]}],action:"emergency_maint"},f:["Emergency Maintenance Access"]}," ",{p:[13,5,572],t:7,e:"ui-button",a:{icon:"warning",state:"null",action:"bsa_unlock"},f:["Bluespace Artillery Unlock"]}],r:"data.auth_required"}]}]}],r:"data.waiting"}]},e.exports=a.extend(r.exports)},{341:341}],405:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ore values"},f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-section",a:{label:[{t:2,r:"ore",p:[3,22,76]}]},f:[{p:[4,4,90],t:7,e:"span",f:[{t:2,r:"value",p:[4,10,96]}]}]}],n:52,r:"data.ores",p:[2,2,34]}]}," ",{p:[8,1,158],t:7,e:"ui-display",a:{title:"Points"},f:[{p:[9,2,188],t:7,e:"ui-section",a:{label:"ID"},f:[{p:[10,3,215],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[10,33,245]}]}]}," ",{t:4,f:[{p:[13,3,339],t:7,e:"ui-section",a:{label:"Points collected"},f:[{p:[14,4,381],t:7,e:"span",f:[{t:2,r:"data.points",p:[14,10,387]}]}]}," ",{p:[16,3,430],t:7,e:"ui-section",a:{label:"Goal"},f:[{p:[17,4,460],t:7,e:"span",f:[{t:2,r:"data.goal",p:[17,10,466]}]}]}," ",{p:[19,3,507],t:7,e:"ui-section",a:{label:"Unclaimed points"},f:[{p:[20,4,549],t:7,e:"span",f:[{t:2,r:"data.unclaimed_points",p:[20,10,555]}]}," ",{p:[21,4,592],t:7,e:"ui-button",a:{action:"claim_points",state:[{t:2,x:{r:["data.unclaimed_points"],s:'_0?null:"disabled"'},p:[21,43,631]}]},f:["Claim points"]}]}],n:50,r:"data.id",p:[12,2,320]}]}," ",{p:[25,1,745],t:7,e:"ui-display",f:[{p:[26,2,760],t:7,e:"center",f:[{p:[27,3,772],t:7,e:"ui-button",a:{action:"move_shuttle",state:[{t:2,x:{r:["data.can_go_home"],s:'_0?null:"disabled"'},p:[27,42,811]}]},f:["Move shuttle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],406:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Known Languages"},f:[{t:4,f:[{p:[3,5,70],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,23,88]}]},f:[{p:[4,7,105],t:7,e:"span",f:[{t:2,r:"desc",p:[4,13,111]}]}," ",{p:[5,7,134],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[5,19,146]}]}," ",{t:4,f:[{p:[7,9,192],t:7,e:"span",f:["(gained from mob)"]}],n:50,r:"shadow",p:[6,7,168]}," ",{p:[9,7,245],t:7,e:"span",f:[{t:2,x:{r:["can_speak"],s:'_0?"Can Speak":"Cannot Speak"'},p:[9,13,251]}]}," ",{t:4,f:[{p:[11,9,342],t:7,e:"ui-button",a:{action:"select_default",params:['{"language_name":"',{t:2,r:"name",p:[13,37,425]},'"}'],style:[{t:2,x:{r:["is_default","can_speak"],s:'_0?"selected":_1?null:"disabled"'},p:[14,18,455]}]},f:[{t:2,x:{r:["is_default"],s:'_0?"Default Language":"Select as Default"'},p:[15,10,526]}]}],n:50,r:"data.is_living",p:[10,7,310]}," ",{t:4,f:[{t:4,f:[{p:[20,11,685],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[20,72,746]},'"}']},f:["Grant"]}],n:50,r:"shadow",p:[19,9,659]},{t:4,n:51,f:[{p:[22,11,805],t:7,e:"ui-button",a:{action:"remove_language",params:['{"language_name":"',{t:2,r:"name",p:[22,73,867]},'"}']},f:["Remove"]}],r:"shadow"}],n:50,r:"data.admin_mode",p:[18,7,626]}]}],n:52,r:"data.languages",p:[2,3,40]}]}," ",{t:4,f:[{t:4,f:[{p:[30,5,1033],t:7,e:"ui-button",a:{action:"toggle_omnitongue",style:[{t:2,x:{r:["data.omnitongue"],s:'_0?"selected":null'},p:[32,14,1092]}]},f:["Omnitongue ",{t:2,x:{r:["data.omnitongue"],s:'_0?"Enabled":"Disabled"'},p:[33,19,1152]}]}],n:50,r:"data.is_living",p:[29,3,1005]}," ",{p:[36,3,1231],t:7,e:"ui-display",a:{title:"Unknown Languages"},f:[{t:4,f:[{p:[38,7,1315],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[38,25,1333]}]},f:[{p:[39,9,1352],t:7,e:"span",f:[{t:2,r:"desc",p:[39,15,1358]}]}," ",{p:[40,9,1383],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[40,21,1395]}]}," ",{p:[41,9,1419],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[43,37,1502]},'"}']},f:["Grant"]}]}],n:52,r:"data.unknown_languages",p:[37,5,1275]}]}],n:50,r:"data.admin_mode",p:[28,1,978]}]},e.exports=a.extend(r.exports)},{341:341}],407:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{t:4,f:[{t:4,f:[{p:[4,4,84],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[5,5,118],t:7,e:"span",f:["Launchpad closed."]}]}],n:50,r:"data.pad_closed",p:[3,3,56]},{t:4,n:51,f:[{p:[8,4,183],t:7,e:"ui-section",a:{label:"Launchpad"},f:[{p:[9,4,218],t:7,e:"span",f:[{p:[9,10,224],t:7,e:"b",f:[{
-t:2,r:"data.pad_name",p:[9,13,227]}]}]},{p:[9,41,255],t:7,e:"br"}," ",{p:[10,4,264],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}," ",{p:[11,4,328],t:7,e:"ui-button",a:{icon:"remove",style:"danger",action:"remove"},f:["Remove"]}]}," ",{p:[14,4,427],t:7,e:"ui-section",a:{label:"Set Target"},f:[{p:[15,4,463],t:7,e:"table",f:[{p:[16,4,475],t:7,e:"tr",f:[{p:[17,5,485],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[17,38,518],t:7,e:"ui-button",a:{action:"up-left"},f:["↖"]}]}," ",{p:[18,5,570],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[18,57,622],t:7,e:"ui-button",a:{action:"up"},f:["↑"]}]}," ",{p:[19,5,669],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[19,56,720],t:7,e:"ui-button",a:{action:"up-right"},f:["↗"]}]}]}," ",{p:[21,4,782],t:7,e:"tr",f:[{p:[22,5,792],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[22,38,825],t:7,e:"ui-button",a:{action:"left",style:"width:35px!important"},f:["←"]}]}," ",{p:[23,5,903],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[23,57,955],t:7,e:"ui-button",a:{action:"reset"},f:["R"]}]}," ",{p:[24,5,1005],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[24,56,1056],t:7,e:"ui-button",a:{action:"right"},f:["→"]}]}]}," ",{p:[26,4,1115],t:7,e:"tr",f:[{p:[27,5,1125],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[27,38,1158],t:7,e:"ui-button",a:{action:"down-left"},f:["↙"]}]}," ",{p:[28,5,1212],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[28,57,1264],t:7,e:"ui-button",a:{action:"down"},f:["↓"]}]}," ",{p:[29,5,1313],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[29,56,1364],t:7,e:"ui-button",a:{action:"down-right"},f:["↘"]}]}]}]}]}," ",{p:[33,4,1459],t:7,e:"ui-section",a:{label:"Current Target"},f:[{p:[34,5,1500],t:7,e:"span",f:[{t:2,r:"data.abs_y",p:[34,11,1506]}," ",{t:2,r:"data.north_south",p:[34,26,1521]}]},{p:[34,53,1548],t:7,e:"br"}," ",{p:[35,5,1558],t:7,e:"span",f:[{t:2,r:"data.abs_x",p:[35,11,1564]}," ",{t:2,r:"data.east_west",p:[35,26,1579]}]}]}," ",{p:[37,4,1627],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[38,5,1662],t:7,e:"ui-button",a:{action:"launch",tooltip:"Teleport everything on the pad to the target.","tooltip-side":"down"},f:["Launch"]}," ",{p:[39,5,1789],t:7,e:"ui-button",a:{action:"pull",tooltip:"Teleport everything from the target to the pad.","tooltip-side":"down"},f:["Pull"]}]}],r:"data.pad_closed"}],n:50,r:"data.has_pad",p:[2,2,32]},{t:4,n:51,f:[{p:[45,3,1956],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[46,4,1989],t:7,e:"span",f:["No launchpad found. Link the remote to a launchpad."]}]}],r:"data.has_pad"}]}]},e.exports=a.extend(r.exports)},{341:341}],408:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{mechChargeState:function(t){var e=this.get("data.recharge_port.mech.cell.maxcharge");return t>=e/1.5?"good":t>=e/3?"average":"bad"},mechHealthState:function(t){var e=this.get("data.recharge_port.mech.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[20,1,545],t:7,e:"ui-display",a:{title:"Mech Status"},f:[{t:4,f:[{t:4,f:[{p:[23,4,646],t:7,e:"ui-section",a:{label:"Integrity"},f:[{p:[24,6,683],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,27,704]}],value:[{t:2,r:"adata.recharge_port.mech.health",p:[24,74,751]}],state:[{t:2,x:{r:["mechHealthState","adata.recharge_port.mech.health"],s:"_0(_1)"},p:[24,117,794]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.health"],s:"Math.round(_0)"},p:[24,171,848]},"/",{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,219,896]}]}]}," ",{t:4,f:[{t:4,f:[{p:[28,5,1061],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[28,31,1087],t:7,e:"span",a:{"class":"bad"},f:["Cell Critical Failure"]}]}],n:50,r:"data.recharge_port.mech.cell.critfail",p:[27,3,1010]},{t:4,n:51,f:[{p:[30,11,1170],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,13,1210],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.cell.maxcharge",p:[31,34,1231]}],value:[{t:2,r:"adata.recharge_port.mech.cell.charge",p:[31,86,1283]}],state:[{t:2,x:{r:["mechChargeState","adata.recharge_port.mech.cell.charge"],s:"_0(_1)"},p:[31,134,1331]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.cell.charge"],s:"Math.round(_0)"},p:[31,193,1390]},"/",{t:2,x:{r:["adata.recharge_port.mech.cell.maxcharge"],s:"Math.round(_0)"},p:[31,246,1443]}]}]}],r:"data.recharge_port.mech.cell.critfail"}],n:50,r:"data.recharge_port.mech.cell",p:[26,4,970]},{t:4,n:51,f:[{p:[35,3,1558],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[35,29,1584],t:7,e:"span",a:{"class":"bad"},f:["Cell Missing"]}]}],r:"data.recharge_port.mech.cell"}],n:50,r:"data.recharge_port.mech",p:[22,2,610]},{t:4,n:51,f:[{p:[38,4,1662],t:7,e:"ui-section",f:["Mech Not Found"]}],r:"data.recharge_port.mech"}],n:50,r:"data.recharge_port",p:[21,3,581]},{t:4,n:51,f:[{p:[41,5,1729],t:7,e:"ui-section",f:["Recharging Port Not Found"]}," ",{p:[42,2,1782],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}],r:"data.recharge_port"}]}]},e.exports=a.extend(r.exports)},{341:341}],409:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{t:4,f:[{p:[3,5,45],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[4,7,88],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[4,24,105]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[4,75,156]}]}]}],n:50,r:"data.siliconUser",p:[2,3,15]},{t:4,n:51,f:[{p:[7,5,247],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[7,31,273]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[10,1,358],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[11,3,389],t:7,e:"ui-section",a:{label:"Power"},f:[{t:4,f:[{p:[13,7,470],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[13,24,487]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[13,68,531]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[13,116,579]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[12,5,421]},{t:4,n:51,f:[{p:[15,7,639],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.on"],s:'_0?"good":"bad"'},p:[15,20,652]}],state:[{t:2,x:{r:["data.cell"],s:'_0?null:"disabled"'},p:[15,57,689]}]},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[15,92,724]}]}],x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"}}]}," ",{p:[18,3,791],t:7,e:"ui-section",a:{label:"Cell"},f:[{p:[19,5,822],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.cell"],s:'_0?null:"bad"'},p:[19,18,835]}]},f:[{t:2,x:{r:["data.cell","data.cellPercent"],s:'_0?_1+"%":"No Cell"'},p:[19,48,865]}]}]}," ",{p:[21,3,943],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[22,5,974],t:7,e:"span",a:{"class":[{t:2,r:"data.modeStatus",p:[22,18,987]}]},f:[{t:2,r:"data.mode",p:[22,39,1008]}]}]}," ",{p:[24,3,1049],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[25,5,1080],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.load"],s:'_0?"good":"average"'},p:[25,18,1093]}]},f:[{t:2,x:{r:["data.load"],s:'_0?_0:"None"'},p:[25,54,1129]}]}]}," ",{p:[27,3,1191],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[28,5,1229],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.destination"],s:'_0?"good":"average"'},p:[28,18,1242]}]},f:[{t:2,x:{r:["data.destination"],s:'_0?_0:"None"'},p:[28,60,1284]}]}]}]}," ",{t:4,f:[{p:{button:[{t:4,f:[{p:[35,9,1513],t:7,e:"ui-button",a:{icon:"eject",action:"unload"},f:["Unload"]}],n:50,r:"data.load",p:[34,7,1486]}," ",{t:4,f:[{p:[38,9,1623],t:7,e:"ui-button",a:{icon:"eject",action:"ejectpai"},f:["Eject PAI"]}],n:50,r:"data.haspai",p:[37,7,1594]}," ",{p:[40,7,1709],t:7,e:"ui-button",a:{icon:"pencil",action:"setid"},f:["Set ID"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[42,5,1791],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[43,7,1831],t:7,e:"ui-button",a:{icon:"pencil",action:"destination"},f:["Set Destination"]}," ",{p:[44,7,1912],t:7,e:"ui-button",a:{icon:"stop",action:"stop"},f:["Stop"]}," ",{p:[45,7,1973],t:7,e:"ui-button",a:{icon:"play",action:"go"},f:["Go"]}]}," ",{p:[47,5,2047],t:7,e:"ui-section",a:{label:"Home"},f:[{p:[48,7,2080],t:7,e:"ui-button",a:{icon:"home",action:"home"},f:["Go Home"]}," ",{p:[49,7,2144],t:7,e:"ui-button",a:{icon:"pencil",action:"sethome"},f:["Set Home"]}]}," ",{p:[51,5,2231],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[52,7,2268],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoReturn"],s:'_0?"check-square-o":"square-o"'},p:[52,24,2285]}],style:[{t:2,x:{r:["data.autoReturn"],s:'_0?"selected":null'},p:[52,84,2345]}],action:"autoret"},f:["Auto-Return Home"]}," ",{p:[54,7,2449],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoPickup"],s:'_0?"check-square-o":"square-o"'},p:[54,24,2466]}],style:[{t:2,x:{r:["data.autoPickup"],s:'_0?"selected":null'},p:[54,84,2526]}],action:"autopick"},f:["Auto-Pickup Crate"]}," ",{p:[56,7,2632],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"check-square-o":"square-o"'},p:[56,24,2649]}],style:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"selected":null'},p:[56,88,2713]}],action:"report"},f:["Report Deliveries"]}]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[31,1,1373]}]},e.exports=a.extend(r.exports)},{341:341}],410:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Chamber Console"},f:[{p:[2,1,45],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,2,104],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,63,165],t:7,e:"br"}," ",{t:4,f:[{p:[6,3,200],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[6,36,233]}]}," ",{p:[7,3,268],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[7,35,300]}]}," ",{p:[8,3,335],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[8,41,373]}]}," ",{t:4,f:[{p:[10,4,477],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[10,41,514]}]}],n:50,r:"data.disk.activation_delay",p:[9,3,438]}," ",{t:4,f:[{p:[13,4,600],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[13,30,626]}]}," ",{p:[14,4,663],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[14,36,695]}]}],n:50,r:"data.disk.timer",p:[12,3,572]}," ",{t:4,f:[{p:[17,4,785],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[17,40,821]}]}],n:50,r:"data.disk.activation_code",p:[16,3,747]}," ",{t:4,f:[{p:[20,4,918],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[20,42,956]}]}],n:50,r:"data.disk.deactivation_code",p:[19,3,878]}," ",{t:4,f:[{p:[23,4,1047],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[23,34,1077]}]}],n:50,r:"data.disk.kill_code",p:[22,3,1015]}," ",{t:4,f:[{p:[26,4,1163],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[26,37,1196]}]}],n:50,r:"data.disk.trigger_code",p:[25,3,1128]}," ",{t:4,f:[{t:4,f:[{p:[30,6,1332],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[30,25,1351]}]},f:[{t:2,r:"value",p:[30,35,1361]}]}],n:52,r:"data.disk.extra_settings",p:[29,4,1291]}],n:50,r:"data.disk.has_extra_settings",p:[28,3,1250]}],n:50,r:"data.has_program",p:[5,2,172]},{t:4,n:51,f:[{p:[34,3,1423],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,1,80]},{t:4,n:51,f:[{p:[37,2,1489],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[40,1,1550],t:7,e:"br"}," ",{t:4,f:[{p:[42,2,1582],t:7,e:"ui-notice",f:[{t:2,r:"data.status_msg",p:[42,13,1593]}]}],n:50,r:"data.status_msg",p:[41,1,1556]},{t:4,n:51,f:[{p:[44,2,1637],t:7,e:"ui-display",a:{title:"Chamber"},f:[{p:[45,2,1668],t:7,e:"ui-section",f:[{p:[45,14,1680],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock-open":"lock"'},p:[45,30,1696]}],action:"toggle_lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[45,90,1756]}," Chamber"]},{p:[45,146,1812],t:7,e:"br"}]}," ",{p:[46,2,1832],t:7,e:"ui-section",f:[{p:[46,14,1844],t:7,e:"b",f:["Occupant:"]}," ",{t:2,r:"data.occupant_name",p:[46,31,1861]}]}," ",{t:4,f:[{p:[48,4,1929],t:7,e:"ui-section",f:[{p:[48,16,1941],t:7,e:"ui-notice",f:["No nanites detected."]}]}," ",{p:[49,4,2002],t:7,e:"ui-section",f:[{p:[49,16,2014],t:7,e:"ui-button",a:{icon:"syringe",action:"nanite_injection"},f:["Implant Nanites"]}]}],n:50,x:{r:["data.has_nanites"],s:"!_0"},p:[47,2,1899]},{t:4,n:51,f:[{p:[51,3,2121],t:7,e:"ui-display",a:{title:"Nanites"},f:[{t:4,f:[{p:[53,5,2181],t:7,e:"ui-button",a:{icon:"download",action:"add_program"},f:["Install Program From Disk"]},{p:[53,90,2266],t:7,e:"br"}," ",{p:[54,5,2276],t:7,e:"br"}],n:50,r:"data.has_disk",p:[52,4,2154]}," ",{p:[56,4,2297],t:7,e:"ui-section",f:[{p:[57,5,2315],t:7,e:"ui-section",a:{label:"Nanite Volume"},f:[{t:2,r:"data.nanite_volume",p:[57,39,2349]}]}," ",{p:[58,5,2390],t:7,e:"ui-section",a:{label:"Growth Rate"},f:[{t:2,r:"data.regen_rate",p:[58,37,2422]}]}," ",{p:[59,5,2460],t:7,e:"ui-section",a:{label:"Safety Threshold"},f:[{t:2,r:"data.safety_threshold",p:[59,42,2497]}," ",{p:[59,68,2523],t:7,e:"ui-button",a:{icon:"pencil",action:"set_safety"},f:["Set"]}]}," ",{p:[60,5,2603],t:7,e:"ui-section",a:{label:"Cloud ID"},f:[{t:2,x:{r:["data.cloud_id"],s:'_0?_0:"No Cloud"'},p:[60,34,2632]}," ",{p:[60,82,2680],t:7,e:"ui-button",a:{icon:"pencil",action:"set_cloud"},f:["Set"]}]}]}," ",{p:[62,4,2776],t:7,e:"ui-display",a:{title:"Programs"},f:[{t:4,f:[{p:[64,6,2845],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[64,25,2864]}],button:0},f:[{p:[65,6,2888],t:7,e:"ui-button",a:{icon:"minus",action:"remove_program",params:['{"program_id": "',{t:2,r:"id",p:[65,78,2960]},'"}']},f:["Uninstall"]}," ",{p:[66,6,2998],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[66,38,3030]}]}," ",{t:4,f:[{p:[68,7,3094],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[68,45,3132]}]}," ",{p:[69,7,3191],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[69,44,3228]},"/s"]}," ",{t:4,f:[{p:[71,8,3291],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[71,41,3324]}]}," ",{p:[72,8,3362],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[72,45,3399]}," seconds"]}],n:50,r:"can_trigger",p:[70,7,3263]}," ",{t:4,f:[{t:4,f:[{p:[76,9,3534],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,46,3571]}]}],n:50,r:"activation_delay",p:[75,8,3500]}," ",{t:4,f:[{p:[79,9,3652],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,35,3678]}]}," ",{p:[80,9,3710],t:7,e:"ui-section",a:{label:"Timer Type"},f:[{t:2,r:"timer_type",p:[80,40,3741]}]}],n:50,r:"timer",p:[78,8,3629]}," ",{t:4,f:[{t:4,f:[{p:[84,11,3865],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,30,3884]}]},f:[{t:2,r:"value",p:[84,40,3894]}]}],n:52,r:"extra_settings",p:[83,9,3829]}],n:50,r:"has_extra_settings",p:[82,8,3793]}," ",{t:4,f:[{t:4,f:[{p:[89,10,4032],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[89,46,4068]}]}],n:50,r:"activation_code",p:[88,9,3998]}," ",{t:4,f:[{p:[92,10,4163],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[92,48,4201]}]}],n:50,r:"deactivation_code",p:[91,9,4127]}," ",{t:4,f:[{p:[95,10,4290],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[95,40,4320]}]}],n:50,r:"kill_code",p:[94,9,4262]}," ",{t:4,f:[{p:[98,10,4404],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[98,43,4437]}]}],n:50,r:"trigger_code",p:[97,9,4373]}],n:50,x:{r:["data.scan_level"],s:"_0>=4"},p:[87,8,3960]}],n:50,x:{r:["data.scan_level"],s:"_0>=3"},p:[74,7,3463]}],n:50,x:{r:["data.scan_level"],s:"_0>=2"},p:[67,6,3058]}]}],n:52,r:"data.mob_programs",p:[63,5,2811]}]}]}],x:{r:["data.has_nanites"],s:"!_0"}}]}],r:"data.status_msg"}]}]},e.exports=a.extend(r.exports)},{341:341}],411:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Cloud Console"},f:[{p:[2,1,43],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,3,104],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,64,165],t:7,e:"br"}," ",{t:4,f:[{p:[6,4,202],t:7,e:"ui-section",f:[{p:[7,5,220],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[7,38,253]}]}," ",{p:[8,5,290],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[8,37,322]}]}," ",{p:[9,5,359],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[9,43,397]}]}," ",{t:4,f:[{p:[11,6,505],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[11,43,542]}]}],n:50,r:"data.disk.activation_delay",p:[10,5,464]}," ",{t:4,f:[{p:[14,6,634],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[14,32,660]}]}," ",{p:[15,6,699],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[15,38,731]}]}],n:50,r:"data.disk.timer",p:[13,5,604]}," ",{t:4,f:[{p:[18,6,827],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[18,42,863]}]}],n:50,r:"data.disk.activation_code",p:[17,5,787]}," ",{t:4,f:[{p:[21,6,966],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[21,44,1004]}]}],n:50,r:"data.disk.deactivation_code",p:[20,5,924]}," ",{t:4,f:[{p:[24,6,1101],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[24,36,1131]}]}],n:50,r:"data.disk.kill_code",p:[23,5,1067]}," ",{t:4,f:[{p:[27,6,1223],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[27,39,1256]}]}],n:50,r:"data.disk.trigger_code",p:[26,5,1186]}," ",{t:4,f:[{t:4,f:[{p:[31,8,1400],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[31,27,1419]}]},f:[{t:2,r:"value",p:[31,37,1429]}]}],n:52,r:"data.disk.extra_settings",p:[30,6,1357]}],n:50,r:"data.disk.has_extra_settings",p:[29,5,1314]}]}],n:50,r:"data.has_program",p:[5,3,173]},{t:4,n:51,f:[{p:[36,4,1515],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,2,79]},{t:4,n:51,f:[{p:[39,3,1584],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[42,1,1646],t:7,e:"ui-display",a:{title:"Cloud Storage"},f:[{t:4,f:[{p:[44,3,1713],t:7,e:"ui-button",a:{icon:"plus-circle",action:"create_backup"},f:["Create New Backup"]}," ",{p:[45,3,1799],t:7,e:"ui-display",a:{title:"Active Backups"},f:[{t:4,f:[{p:[47,5,1873],t:7,e:"ui-button",a:{action:"set_view",params:['{"view": "',{t:2,r:"cloud_id",p:[47,52,1920]},'"}']},f:["Backup #",{t:2,r:"cloud_id",p:[47,76,1944]}]}],n:52,r:"data.cloud_backups",p:[46,4,1839]}]}],n:50,x:{r:["data.current_view"],s:"!_0"},p:[43,2,1683]},{t:4,n:51,f:[{p:[51,3,2014],t:7,e:"ui-button",a:{icon:"undo",action:"set_view",params:'{"view": "0"}'},f:["Return"]}," ",{t:4,f:[{p:[53,4,2131],t:7,e:"ui-notice",f:["ERROR: Backup not found."]}],n:50,x:{r:["data.cloud_backup"],s:"!_0"},p:[52,3,2100]},{t:4,n:51,f:[{p:[55,4,2195],t:7,e:"ui-display",a:{title:["Backup #",{t:2,r:"data.current_view",p:[55,31,2222]}]},f:[{t:4,f:[{p:[57,6,2282],t:7,e:"ui-button",a:{icon:"upload",action:"upload_program",style:"selected"},f:["Upload Program From Disk"]},{p:[57,108,2384],t:7,e:"br"}],n:50,r:"data.has_program",p:[56,5,2251]}," ",{t:4,f:[{p:[60,6,2443],t:7,e:"hr"}," ",{p:[61,6,2454],t:7,e:"ui-section",f:[{p:[62,7,2474],t:7,e:"h3",f:[{t:2,r:"name",p:[62,11,2478]}]}," ",{p:[63,7,2499],t:7,e:"div",a:{style:"float:right"},f:[{p:[64,8,2533],t:7,e:"ui-button",a:{icon:"minus-circle",action:"remove_program",style:"danger",params:['{"program_id": "',{t:2,r:"id",p:[64,102,2627]},'"}']},f:["Uninstall"]}]}]}," ",{p:[67,6,2699],t:7,e:"ui-section",f:[{p:[68,7,2719],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[68,39,2751]}]}," ",{p:[69,7,2780],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[69,45,2818]}]}," ",{p:[70,7,2877],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[70,44,2914]},"/s"]}," ",{t:4,f:[{p:[72,8,2977],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[72,41,3010]},"/s"]}," ",{p:[73,8,3050],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[73,45,3087]},"/s"]}],n:50,r:"can_trigger",p:[71,7,2949]}," ",{t:4,f:[{p:[76,8,3178],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,45,3215]}]}],n:50,r:"activation_delay",p:[75,7,3145]}," ",{t:4,f:[{p:[79,8,3293],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,34,3319]}]}," ",{p:[80,8,3350],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"timer_type",p:[80,40,3382]}]}],n:50,r:"timer",p:[78,7,3271]}," ",{t:4,f:[{p:[83,8,3464],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[83,44,3500]}]}],n:50,r:"activation_code",p:[82,7,3432]}," ",{t:4,f:[{p:[86,8,3589],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[86,46,3627]}]}],n:50,r:"deactivation_code",p:[85,7,3555]}," ",{t:4,f:[{p:[89,8,3710],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[89,38,3740]}]}],n:50,r:"kill_code",p:[88,7,3684]}," ",{t:4,f:[{p:[92,8,3818],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[92,41,3851]}]}],n:50,r:"trigger_code",p:[91,7,3789]}," ",{t:4,f:[{t:4,f:[{p:[96,10,3973],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[96,29,3992]}]},f:[{t:2,r:"value",p:[96,39,4002]}]}],n:52,r:"extra_settings",p:[95,8,3938]}],n:50,r:"has_extra_settings",p:[94,7,3903]}]}],n:52,r:"data.cloud_programs",p:[59,5,2407]}]}],x:{r:["data.cloud_backup"],s:"!_0"}}],x:{r:["data.current_view"],s:"!_0"}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],412:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Program Hub"},f:[{t:4,f:[{p:[3,2,65],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{p:[4,3,102],t:7,e:"ui-section",f:[{p:[5,4,119],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{p:[6,4,185],t:7,e:"ui-button",a:{icon:"minus-circle",action:"clear"},f:["Delete Program"]}]}," ",{t:4,f:[{p:[9,4,307],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[9,37,340]}]}," ",{p:[10,4,376],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[10,36,408]}]}],n:50,r:"data.has_program",p:[8,3,278]},{t:4,n:51,f:[{p:[12,4,456],t:7,e:"ui-notice",f:["No program installed."]}],r:"data.has_program"}]}],n:50,r:"data.has_disk",p:[2,1,41]},{t:4,n:51,f:[{p:[16,2,540],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"},{p:[18,1,586],t:7,e:"br"}," ",{p:[19,1,592],t:7,e:"ui-display",a:{title:"Programs"},f:[{p:[20,2,624],t:7,e:"ui-section",f:[{p:[21,3,640],t:7,e:"ui-button",a:{icon:"undo",action:"set_category",params:'{"category": "Main"}'},f:["Return"]}," ",{p:[22,3,737],t:7,e:"ui-button",a:{icon:"align-justify ",action:"toggle_details"},f:[{t:2,x:{r:["data.detail_view"],s:'_0?"Compact View":"Detailed View"'},p:[22,60,794]}]}]}," ",{t:4,f:[{p:[25,3,916],t:7,e:"ui-display",f:[{t:4,f:[{p:[27,5,964],t:7,e:"ui-section",f:[{p:[27,17,976],t:7,e:"ui-button",a:{action:"set_category",params:['{"category": "',{t:2,r:"name",p:[27,72,1031]},'"}']},f:[{t:2,r:"name",p:[27,84,1043]}]}]}],n:52,r:"data.categories",p:[26,4,933]}]}],n:50,x:{r:["data.category"],s:'_0=="Main"'},p:[24,2,881]},{t:4,n:51,f:[{p:[31,3,1122],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[31,22,1141]}]},f:[{t:4,f:[{t:4,f:[{p:[34,6,1229],t:7,e:"ui-display",f:[{p:[35,7,1249],t:7,e:"ui-section",f:[{p:[35,19,1261],t:7,e:"b",f:[{t:2,r:"name",p:[35,22,1264]}]}]}," ",{p:[36,7,1297],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[36,19,1309]}]}," ",{p:[37,7,1338],t:7,e:"ui-section",f:[{p:[38,8,1359],t:7,e:"ui-button",a:{icon:"download",action:"download",params:['{"program_id": "',{t:2,r:"id",p:[38,77,1428]},'"}'],state:[{t:2,x:{r:["data.has_disk"],s:'_0?null:"disabled"'},p:[38,94,1445]}]},f:["Download"]}]}]}],n:50,r:"data.detail_view",p:[33,5,1198]},{t:4,n:51,f:[{p:[44,6,1585],t:7,e:"ui-section",f:[{p:[44,18,1597],t:7,e:"ui-button",a:{action:"download",params:['{"program_id": "',{t:2,r:"id",p:[44,71,1650]},'"}']},f:[{t:2,r:"name",p:[44,81,1660]}]}]}],r:"data.detail_view"}],n:52,r:"data.program_list",p:[32,4,1165]}]}],x:{r:["data.category"],s:'_0=="Main"'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],413:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Programming"},f:[{t:4,f:[{p:[3,3,67],t:7,e:"ui-notice",f:["Insert a nanite program disk."]}],n:50,x:{r:["data.has_disk"],s:"!_0"},p:[2,1,41]},{t:4,n:51,f:[{p:[5,3,133],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{t:4,f:[{p:[7,5,229],t:7,e:"ui-notice",f:["No program detected."]}],n:50,x:{r:["data.has_program"],s:"!_0"},p:[6,3,198]},{t:4,n:51,f:[{p:[9,5,290],t:7,e:"ui-section",f:[{p:[10,7,310],t:7,e:"ui-display",a:{title:[{t:2,r:"data.name",p:[10,26,329]}]},f:[{t:2,r:"data.desc",p:[11,9,354]}]}]}," ",{p:[14,5,413],t:7,e:"ui-section",f:[{p:[15,7,433],t:7,e:"ui-section",a:{label:"Program Info"},f:["Nanites Consumed: ",{t:2,r:"data.use_rate",p:[16,26,493]},{p:[16,43,510],t:7,e:"br"}," ",{t:4,f:["Trigger Cost: ",{t:2,r:"data.trigger_cost",p:[18,25,574]},"u",{p:[18,47,596],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[17,9,524]}]}," ",{p:[22,7,648],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[23,9,685],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.activated"],s:'_0?"toggle-on":"toggle-off"'},p:[24,17,713]}],action:"toggle_active"},f:[{t:2,x:{r:["data.activated"],s:'_0?"Active":"Inactive"'},p:[26,11,809]}]}]}," ",{p:[30,7,905],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[31,9,944],t:7,e:"ui-button",a:{icon:"pencil",action:"set_activation_delay"}}," Activation Delay: ",{t:2,r:"data.activation_delay",p:[31,95,1030]}," ",{p:[31,121,1056],t:7,e:"br"}," ",{p:[32,9,1070],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer"}}," Timer: ",{t:2,r:"data.timer",p:[32,73,1134]}," ",{p:[32,88,1149],t:7,e:"br"}," ",{p:[33,9,1163],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer_type"}}," Timer Type: ",{t:2,r:"data.timer_type",p:[33,83,1237]}," ",{p:[33,103,1257],t:7,e:"br"}]}," ",{p:[36,7,1292],t:7,e:"ui-section",a:{label:"Codes"},f:[{p:[37,9,1328],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "activation"}'}}," Activation Code: ",{t:2,r:"data.activation_code",p:[37,121,1440]}," ",{p:[37,146,1465],t:7,e:"br"}," ",{p:[38,9,1479],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "deactivation"}'}}," Deactivation Code: ",{t:2,r:"data.deactivation_code",p:[38,125,1595]}," ",{p:[38,152,1622],t:7,e:"br"}," ",{p:[39,9,1636],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "kill"}'}}," Kill Code: ",{t:2,r:"data.kill_code",p:[39,109,1736]}," ",{p:[39,128,1755],t:7,e:"br"}," ",{t:4,f:[{p:[41,11,1805],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "trigger"}'}}," Trigger Code: ",{t:2,r:"data.trigger_code",p:[41,117,1911]}," ",{p:[41,139,1933],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[40,9,1769]}]}," ",{t:4,f:[{p:[46,9,2026],t:7,e:"ui-section",a:{label:"Special"},f:[{t:4,f:[{p:[48,13,2109],t:7,e:"ui-button",a:{icon:"pencil",action:"set_extra_setting",params:['{"target_setting": "',{t:2,r:"name",p:[48,93,2189]},'"}']}}," ",{t:2,r:"name",p:[48,118,2214]},": ",{t:2,r:"value",p:[48,128,2224]}," ",{p:[48,138,2234],t:7,e:"br"}],n:52,r:"data.extra_settings",p:[47,11,2066]}]}],n:50,r:"data.has_extra_settings",p:[45,7,1985]}]}],x:{r:["data.has_program"],s:"!_0"}}],x:{r:["data.has_disk"],s:"!_0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],414:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Control"},f:[{t:4,f:[{p:[3,3,60],t:7,e:"ui-notice",f:["The interface is locked."]}],n:50,r:"data.locked",p:[2,1,37]},{t:4,n:51,f:[{p:[5,3,121],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock Interface"]}," ",{p:[6,3,188],t:7,e:"ui-button",a:{icon:"save",action:"save"},f:["Save Current Setting"]}," ",{p:[7,3,261],t:7,e:"ui-section",a:{label:"Signal Code"},f:[{p:[8,5,299],t:7,e:"span",f:[{t:2,r:"data.code",p:[8,11,305]}]}," ",{p:[9,4,330],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code"},f:["Set"]}]}," ",{t:4,f:[{p:[12,5,443],t:7,e:"ui-section",a:{label:"Relay Code"},f:[{p:[13,7,482],t:7,e:"span",f:[{t:2,r:"data.relay_code",p:[13,13,488]}]}," ",{p:[14,5,520],t:7,e:"ui-button",a:{icon:"pencil",action:"set_relay_code"},f:["Set"]}]}],n:50,x:{r:["data.mode"],s:'_0=="Relay"'},p:[11,3,409]}," ",{p:[17,3,618],t:7,e:"ui-section",a:{label:"Signal Mode"},f:[{p:[18,5,656],t:7,e:"span",f:[{t:2,r:"data.mode",p:[18,11,662]}]}," ",{p:[19,5,688],t:7,e:"br"}," ",{p:[20,4,697],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Off"}'},f:["Off"]}," ",{p:[21,5,775],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Local"}'},f:["Local"]}," ",{p:[22,5,857],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Targeted"}'},f:["Targeted"]}," ",{p:[23,5,945],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Area"}'},f:["Area"]}," ",{p:[24,5,1025],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Relay"}'},f:["Relay"]}]}],r:"data.locked"}]}," ",{p:[28,1,1144],t:7,e:"ui-display",a:{title:"Saved Settings"},f:[{t:4,f:[{p:[30,3,1215],t:7,e:"ui-button",a:{icon:"load",action:"load",params:['{"save_id": "',{t:2,r:"id",p:[30,61,1273]},'"}']},f:[{t:2,r:"name",p:[30,71,1283]}]}," ",{t:4,f:[{p:[32,4,1332],t:7,e:"ui-button",a:{icon:"remove",action:"remove_save",params:['{"save_id": "',{t:2,r:"id",p:[32,71,1399]},'"}']},f:["Remove"]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[31,3,1307]}," ",{p:[34,3,1442],t:7,e:"br"}],n:52,r:"data.saved_settings",p:[29,2,1182]}]}]},e.exports=a.extend(r.exports)},{341:341}],415:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ghost roles"},f:[{p:[2,2,35],t:7,e:"ui-section",a:{label:"Ignored roles"},f:[{t:4,f:[{p:[4,4,99],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[4,21,116]}],style:[{t:2,x:{r:["enabled"],s:'_0?"danger":null'},p:[4,73,168]}],action:"toggle_ignore",params:['{"key": "',{t:2,r:"key",p:[4,144,239]},'"}']},f:[{t:2,r:"desc",p:[4,155,250]}]}],n:52,r:"data.ignore",p:[3,3,73]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],416:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Relay"},f:[{t:4,f:[{p:[3,3,57],t:7,e:"h2",f:["NETWORK BUFFERS OVERLOADED"]}," ",{p:[4,3,96],t:7,e:"h3",f:["Overload Recovery Mode"]}," ",{p:[5,3,131],t:7,e:"i",f:["This system is suffering temporary outage due to overflow of traffic buffers. Until buffered traffic is processed, all further requests will be dropped. Frequent occurences of this error may indicate insufficient hardware capacity of your network. Please contact your network planning department for instructions on how to resolve this issue."]}," ",{p:[6,3,484],t:7,e:"h3",f:["ADMINISTRATIVE OVERRIDE"]}," ",{p:[7,3,520],t:7,e:"b",f:["CAUTION - Data loss may occur"]}," ",{p:[8,3,562],t:7,e:"ui-button",a:{icon:"signal",action:"restart"},f:["Purge buffered traffic"]}],n:50,r:"data.dos_crashed",p:[2,2,29]},{t:4,n:51,f:[{p:[12,3,663],t:7,e:"ui-section",a:{label:"Relay status"},f:[{p:[13,4,701],t:7,e:"ui-button",a:{icon:"power-off",action:"toggle"},f:[{t:2,x:{r:["data.enabled"],s:'_0?"ENABLED":"DISABLED"'},p:[14,6,752]}]}]}," ",{p:[18,3,836],t:7,e:"ui-section",a:{label:"Network buffer status"},f:[{t:2,r:"data.dos_overload",p:[19,4,883]}," / ",{t:2,r:"data.dos_capacity",p:[19,28,907]}," GQ"]}],r:"data.dos_crashed"}]}]},e.exports=a.extend(r.exports);
-},{341:341}],417:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,320],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[18,3,363],t:7,e:"ui-notice",f:[{p:[19,5,380],t:7,e:"span",f:["Reconstruction in progress!"]}]}],n:50,r:"data.restoring",p:[17,1,337]},{p:[24,1,451],t:7,e:"ui-display",f:[{p:[26,1,467],t:7,e:"div",a:{"class":"item"},f:[{p:[27,3,489],t:7,e:"div",a:{"class":"itemLabel"},f:["Inserted AI:"]}," ",{p:[30,3,541],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[31,2,569],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",state:[{t:2,x:{r:["data.nocard"],s:'_0?"disabled":null'},p:[31,52,619]}]},f:[{t:2,x:{r:["data.name"],s:'_0?_0:"---"'},p:[31,89,656]}]}]}]}," ",{t:4,f:[{p:[36,2,744],t:7,e:"b",f:["ERROR: ",{t:2,r:"data.error",p:[36,12,754]}]}],n:50,r:"data.error",p:[35,1,723]},{t:4,n:51,f:[{p:[38,2,785],t:7,e:"h2",f:["System Status"]}," ",{p:[39,2,810],t:7,e:"div",a:{"class":"item"},f:[{p:[40,3,832],t:7,e:"div",a:{"class":"itemLabel"},f:["Current AI:"]}," ",{p:[43,3,885],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.name",p:[44,4,915]}]}," ",{p:[46,3,942],t:7,e:"div",a:{"class":"itemLabel"},f:["Status:"]}," ",{p:[49,3,991],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["Nonfunctional"],n:50,r:"data.isDead",p:[50,4,1021]},{t:4,n:51,f:["Functional"],r:"data.isDead"}]}," ",{p:[56,3,1114],t:7,e:"div",a:{"class":"itemLabel"},f:["System Integrity:"]}," ",{p:[59,3,1173],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[60,4,1203],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[60,37,1236]}],state:[{t:2,r:"healthState",p:[61,11,1264]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[61,28,1281]},"%"]}]}," ",{p:[63,3,1336],t:7,e:"div",a:{"class":"itemLabel"},f:["Active Laws:"]}," ",{p:[66,3,1390],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[67,4,1420],t:7,e:"table",f:[{t:4,f:[{p:[69,6,1462],t:7,e:"tr",f:[{p:[69,10,1466],t:7,e:"td",f:[{p:[69,14,1470],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[69,38,1494]}]}]}]}],n:52,r:"data.ai_laws",p:[68,5,1433]}]}]}," ",{p:[73,2,1547],t:7,e:"ui-section",a:{label:"Operations"},f:[{p:[74,3,1582],t:7,e:"ui-button",a:{icon:"plus",style:[{t:2,x:{r:["data.restoring"],s:'_0?"disabled":null'},p:[74,33,1612]}],action:"PRG_beginReconstruction"},f:["Begin Reconstruction"]}]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],418:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,1,91],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"home",params:'{"target" : "mod"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==1?"disabled":null'},p:[5,80,170]}]},f:["Access Modification"]}],n:50,r:"data.have_id_slot",p:[4,1,64]},{p:[7,1,253],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manage"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==2?"disabled":null'},p:[7,90,342]}]},f:["Job Management"]}," ",{p:[8,1,411],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manifest"}',state:[{t:2,x:{r:["data.mmode"],s:'!_0?"disabled":null'},p:[8,92,502]}]},f:["Crew Manifest"]}," ",{t:4,f:[{p:[10,1,593],t:7,e:"ui-button",a:{action:"PRG_print",icon:"print",state:[{t:2,x:{r:["data.has_id","data.mmode"],s:'!_1||_0&&_1==1?null:"disabled"'},p:[10,51,643]}]},f:["Print"]}],n:50,r:"data.have_printer",p:[9,1,566]},{t:4,f:[{p:[14,1,766],t:7,e:"div",a:{"class":"item"},f:[{p:[15,3,788],t:7,e:"h2",f:["Crew Manifest"]}," ",{p:[16,3,814],t:7,e:"br"},"Please use security record computer to modify entries.",{p:[16,61,872],t:7,e:"br"},{p:[16,65,876],t:7,e:"br"}]}," ",{t:4,f:[{p:[19,2,916],t:7,e:"div",a:{"class":"item"},f:[{t:2,r:"name",p:[20,2,937]}," - ",{t:2,r:"rank",p:[20,13,948]}]}],n:52,r:"data.manifest",p:[18,1,890]}],n:50,x:{r:["data.mmode"],s:"!_0"},p:[13,1,745]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.mmode"],s:"_0==2"},f:[{p:[25,1,1008],t:7,e:"div",a:{"class":"item"},f:[{p:[26,3,1030],t:7,e:"h2",f:["Job Management"]}]}," ",{p:[28,1,1063],t:7,e:"table",f:[{p:[29,1,1072],t:7,e:"tr",f:[{p:[29,5,1076],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,27,1098],t:7,e:"b",f:["Job"]}]},{p:[29,42,1113],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,64,1135],t:7,e:"b",f:["Slots"]}]},{p:[29,81,1152],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,103,1174],t:7,e:"b",f:["Open job"]}]},{p:[29,123,1194],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,145,1216],t:7,e:"b",f:["Close job"]}]}]}," ",{t:4,f:[{p:[32,2,1269],t:7,e:"tr",f:[{p:[32,6,1273],t:7,e:"td",f:[{t:2,r:"title",p:[32,10,1277]}]},{p:[32,24,1291],t:7,e:"td",f:[{t:2,r:"current",p:[32,28,1295]},"/",{t:2,r:"total",p:[32,40,1307]}]},{p:[32,54,1321],t:7,e:"td",f:[{p:[32,58,1325],t:7,e:"ui-button",a:{action:"PRG_open_job",params:['{"target" : "',{t:2,r:"title",p:[32,112,1379]},'"}'],state:[{t:2,x:{r:["status_open"],s:'_0?null:"disabled"'},p:[32,132,1399]}]},f:[{t:2,r:"desc_open",p:[32,169,1436]}]},{p:[32,194,1461],t:7,e:"br"}]},{p:[32,203,1470],t:7,e:"td",f:[{p:[32,207,1474],t:7,e:"ui-button",a:{action:"PRG_close_job",params:['{"target" : "',{t:2,r:"title",p:[32,262,1529]},'"}'],state:[{t:2,x:{r:["status_close"],s:'_0?null:"disabled"'},p:[32,282,1549]}]},f:[{t:2,r:"desc_close",p:[32,320,1587]}]}]}]}],n:52,r:"data.slots",p:[30,1,1244]}]}]},{t:4,n:50,x:{r:["data.mmode"],s:"!(_0==2)"},f:[" ",{p:[40,1,1665],t:7,e:"div",a:{"class":"item"},f:[{p:[41,3,1687],t:7,e:"h2",f:["Access Modification"]}]}," ",{t:4,f:[{p:[45,3,1751],t:7,e:"span",a:{"class":"alert"},f:[{p:[45,23,1771],t:7,e:"i",f:["Please insert the ID into the terminal to proceed."]}]},{p:[45,87,1835],t:7,e:"br"}],n:50,x:{r:["data.has_id"],s:"!_0"},p:[44,1,1727]},{p:[48,1,1852],t:7,e:"div",a:{"class":"item"},f:[{p:[49,3,1874],t:7,e:"div",a:{"class":"itemLabel"},f:["Target Identity:"]}," ",{p:[52,3,1930],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[53,2,1958],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "id"}'},f:[{t:2,r:"data.id_name",p:[53,72,2028]}]}]}]}," ",{p:[56,1,2076],t:7,e:"div",a:{"class":"item"},f:[{p:[57,3,2098],t:7,e:"div",a:{"class":"itemLabel"},f:["Auth Identity:"]}," ",{p:[60,3,2152],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[61,2,2180],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "auth"}'},f:[{t:2,r:"data.auth_name",p:[61,74,2252]}]}]}]}," ",{p:[64,1,2302],t:7,e:"hr"}," ",{t:4,f:[{t:4,f:[{p:[68,2,2362],t:7,e:"div",a:{"class":"item"},f:[{p:[69,4,2385],t:7,e:"h2",f:["Details"]}]}," ",{t:4,f:[{p:[73,2,2436],t:7,e:"div",a:{"class":"item"},f:[{p:[74,4,2459],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[77,4,2518],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_owner",p:[78,3,2547]}]}]}," ",{p:[81,2,2587],t:7,e:"div",a:{"class":"item"},f:[{p:[82,4,2610],t:7,e:"div",a:{"class":"itemLabel"},f:["Rank:"]}," ",{p:[85,4,2658],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_rank",p:[86,3,2687]}]}]}," ",{p:[89,2,2726],t:7,e:"div",a:{"class":"item"},f:[{p:[90,4,2749],t:7,e:"div",a:{"class":"itemLabel"},f:["Demote:"]}," ",{p:[93,4,2799],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[94,3,2828],t:7,e:"ui-button",a:{action:"PRG_terminate",icon:"gear",state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Unassigned"?"disabled":null'},p:[94,56,2881]}]},f:["Demote ",{t:2,r:"data.id_owner",p:[94,117,2942]}]}]}]}],n:50,r:"data.minor",p:[72,2,2415]},{t:4,n:51,f:[{p:[99,2,3007],t:7,e:"div",a:{"class":"item"},f:[{p:[100,4,3030],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[103,4,3089],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[104,3,3118],t:7,e:"ui-button",a:{action:"PRG_edit",icon:"pencil",params:'{"name" : "1"}'},f:[{t:2,r:"data.id_owner",p:[104,70,3185]}]}]}]}," ",{p:[108,2,3239],t:7,e:"div",a:{"class":"item"},f:[{p:[109,4,3262],t:7,e:"h2",f:["Assignment"]}]}," ",{p:[111,3,3294],t:7,e:"ui-button",a:{action:"PRG_togglea",icon:"gear"},f:[{t:2,x:{r:["data.assignments"],s:'_0?"Hide assignments":"Show assignments"'},p:[111,47,3338]}]}," ",{p:[112,2,3415],t:7,e:"div",a:{"class":"item"},f:[{p:[113,4,3438],t:7,e:"span",a:{id:"allvalue.jobsslot"},f:[]}]}," ",{p:[117,2,3495],t:7,e:"div",a:{"class":"item"},f:[{t:4,f:[{p:[119,4,3547],t:7,e:"div",a:{id:"all-value.jobs"},f:[{p:[120,3,3576],t:7,e:"table",f:[{p:[121,5,3589],t:7,e:"tr",f:[{p:[122,4,3598],t:7,e:"th",f:["Command"]}," ",{p:[123,4,3619],t:7,e:"td",f:[{p:[124,6,3630],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Captain"}',state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Captain"?"selected":null'},p:[124,83,3707]}]},f:["Captain"]}]}]}," ",{p:[127,5,3804],t:7,e:"tr",f:[{p:[128,4,3813],t:7,e:"th",f:["Special"]}," ",{p:[129,4,3834],t:7,e:"td",f:[{p:[130,6,3845],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Custom"}'},f:["Custom"]}]}]}," ",{p:[133,5,3959],t:7,e:"tr",f:[{p:[134,4,3968],t:7,e:"th",a:{style:"color: '#FFA500';"},f:["Engineering"]}," ",{p:[135,4,4019],t:7,e:"td",f:[{t:4,f:[{p:[137,5,4067],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[137,64,4126]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[137,82,4144]}]},f:[{t:2,r:"display_name",p:[137,127,4189]}]}],n:52,r:"data.engineering_jobs",p:[136,6,4030]}]}]}," ",{p:[141,5,4260],t:7,e:"tr",f:[{p:[142,4,4269],t:7,e:"th",a:{style:"color: '#008000';"},f:["Medical"]}," ",{p:[143,4,4316],t:7,e:"td",f:[{t:4,f:[{p:[145,5,4360],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[145,64,4419]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[145,82,4437]}]},f:[{t:2,r:"display_name",p:[145,127,4482]}]}],n:52,r:"data.medical_jobs",p:[144,6,4327]}]}]}," ",{p:[149,5,4553],t:7,e:"tr",f:[{p:[150,4,4562],t:7,e:"th",a:{style:"color: '#800080';"},f:["Science"]}," ",{p:[151,4,4609],t:7,e:"td",f:[{t:4,f:[{p:[153,5,4653],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[153,64,4712]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[153,82,4730]}]},f:[{t:2,r:"display_name",p:[153,127,4775]}]}],n:52,r:"data.science_jobs",p:[152,6,4620]}]}]}," ",{p:[157,5,4846],t:7,e:"tr",f:[{p:[158,4,4855],t:7,e:"th",a:{style:"color: '#DD0000';"},f:["Security"]}," ",{p:[159,4,4903],t:7,e:"td",f:[{t:4,f:[{p:[161,5,4948],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[161,64,5007]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[161,82,5025]}]},f:[{t:2,r:"display_name",p:[161,127,5070]}]}],n:52,r:"data.security_jobs",p:[160,6,4914]}]}]}," ",{p:[165,5,5141],t:7,e:"tr",f:[{p:[166,4,5150],t:7,e:"th",a:{style:"color: '#cc6600';"},f:["Cargo"]}," ",{p:[167,4,5195],t:7,e:"td",f:[{t:4,f:[{p:[169,5,5237],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[169,64,5296]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[169,82,5314]}]},f:[{t:2,r:"display_name",p:[169,127,5359]}]}],n:52,r:"data.cargo_jobs",p:[168,6,5206]}]}]}," ",{p:[173,5,5430],t:7,e:"tr",f:[{p:[174,4,5439],t:7,e:"th",a:{style:"color: '#808080';"},f:["Civilian"]}," ",{p:[175,4,5487],t:7,e:"td",f:[{t:4,f:[{p:[177,5,5532],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[177,64,5591]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[177,82,5609]}]},f:[{t:2,r:"display_name",p:[177,127,5654]}]}],n:52,r:"data.civilian_jobs",p:[176,6,5498]}]}]}," ",{t:4,f:[{p:[182,4,5757],t:7,e:"tr",f:[{p:[183,6,5768],t:7,e:"th",a:{style:"color: '#A52A2A';"},f:["CentCom"]}," ",{p:[184,6,5817],t:7,e:"td",f:[{t:4,f:[{p:[186,7,5862],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[186,66,5921]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[186,84,5939]}]},f:[{t:2,r:"display_name",p:[186,129,5984]}]}],n:52,r:"data.centcom_jobs",p:[185,5,5827]}]}]}],n:50,r:"data.centcom_access",p:[181,5,5725]}]}]}],n:50,r:"data.assignments",p:[118,4,3518]}]}],r:"data.minor"}," ",{t:4,f:[{p:[198,4,6153],t:7,e:"div",a:{"class":"item"},f:[{p:[199,3,6175],t:7,e:"h2",f:["Central Command"]}]}," ",{p:[201,4,6215],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[203,5,6296],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[204,5,6331],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[204,64,6390]},'", "allowed" : "',{t:2,r:"allowed",p:[204,87,6413]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[204,109,6435]}]},f:[{t:2,r:"desc",p:[204,140,6466]}]}]}],n:52,r:"data.all_centcom_access",p:[202,3,6257]}]}],n:50,r:"data.centcom_access",p:[197,2,6121]},{t:4,n:51,f:[{p:[209,4,6538],t:7,e:"div",a:{"class":"item"},f:[{p:[210,3,6560],t:7,e:"h2",f:[{t:2,r:"data.station_name",p:[210,7,6564]}]}]}," ",{p:[212,4,6606],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[214,5,6676],t:7,e:"div",a:{style:"float: left; width: 175px; min-height: 250px"},f:[{p:[215,4,6739],t:7,e:"div",a:{"class":"average"},f:[{p:[215,25,6760],t:7,e:"ui-button",a:{action:"PRG_regsel",state:[{t:2,x:{r:["selected"],s:'_0?"toggle":null'},p:[215,63,6798]}],params:['{"region" : "',{t:2,r:"regid",p:[215,116,6851]},'"}']},f:[{p:[215,129,6864],t:7,e:"b",f:[{t:2,r:"name",p:[215,132,6867]}]}]}]}," ",{p:[216,4,6902],t:7,e:"br"}," ",{t:4,f:[{p:[218,6,6938],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[219,5,6973],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[219,64,7032]},'", "allowed" : "',{t:2,r:"allowed",p:[219,87,7055]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[219,109,7077]}]},f:[{t:2,r:"desc",p:[219,140,7108]}]}]}],n:52,r:"accesses",p:[217,6,6913]}]}],n:52,r:"data.regions",p:[213,3,6648]}]}],r:"data.centcom_access"}],n:50,r:"data.has_id",p:[67,3,2340]}],n:50,r:"data.authenticated",p:[66,1,2310]}]}],x:{r:["data.mmode"],s:"!_0"}}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],419:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargeState:function(t){var e=this.get("data.battery.max");return t>e/2?"good":t>e/4?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,311],t:7,e:"ntosheader"}," ",{p:[17,1,328],t:7,e:"ui-display",f:[{p:[18,2,343],t:7,e:"i",f:["Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device."]},{p:[18,137,478],t:7,e:"hr"}," ",{p:[19,2,485],t:7,e:"ui-display",a:{title:"Power Supply"},f:[{p:[20,3,522],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"data.power_usage",p:[21,4,559]},"W"]}," ",{t:4,f:[{p:[25,4,630],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Active"]}," ",{p:[28,4,701],t:7,e:"ui-section",a:{label:"Battery Rating"},f:[{t:2,r:"data.battery.max",p:[29,5,742]}]}," ",{p:[31,4,785],t:7,e:"ui-section",a:{label:"Battery Charge"},f:[{p:[32,5,826],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.battery.max",p:[32,26,847]}],value:[{t:2,r:"adata.battery.charge",p:[32,56,877]}],state:[{t:2,x:{r:["chargeState","adata.battery.charge"],s:"_0(_1)"},p:[32,89,910]}]},f:[{t:2,x:{r:["adata.battery.charge"],s:"Math.round(_0)"},p:[32,128,949]},"/",{t:2,r:"adata.battery.max",p:[32,165,986]}]}]}],n:50,r:"data.battery",p:[24,3,605]},{t:4,n:51,f:[{p:[35,4,1051],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Not Available"]}],r:"data.battery"}]}," ",{p:[41,2,1156],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,3,1192],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,4,1231],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,25,1252]}],value:[{t:2,r:"adata.disk_used",p:[43,53,1280]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,87,1314]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,123,1350]},"GQ"]}]}]}," ",{p:[47,2,1419],t:7,e:"ui-display",a:{title:"Computer Components"},f:[{t:4,f:[{p:[49,4,1491],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[49,26,1513]}]},f:[{p:[50,5,1529],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"desc",p:[50,59,1583]}]}," ",{p:[52,5,1605],t:7,e:"ui-section",a:{label:"State"},f:[{p:[53,6,1638],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["critical"],s:'_0?"disabled":null'},p:[53,24,1656]}],action:"PC_toggle_component",params:['{"name": "',{t:2,r:"name",p:[53,105,1737]},'"}']},f:[{t:2,x:{r:["enabled"],s:'_0?"Enabled":"Disabled"'},p:[54,7,1757]}]}]}," ",{t:4,f:[{p:[59,6,1868],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"powerusage",p:[60,7,1908]},"W"]}],n:50,r:"powerusage",p:[58,5,1843]}]}," ",{p:[64,4,1985],t:7,e:"br"}],n:52,r:"data.hardware",p:[48,3,1463]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],420:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,3,103],t:7,e:"h2",f:["An error has occurred and this program can not continue."]}," Additional information: ",{t:2,r:"data.error",p:[8,27,196]},{p:[8,41,210],t:7,e:"br"}," ",{p:[9,3,218],t:7,e:"i",f:["Please try again. If the problem persists contact your system administrator for assistance."]}," ",{p:[10,3,320],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["Restart program"]}],n:50,r:"data.error",p:[6,2,81]},{t:4,n:51,f:[{t:4,f:[{p:[13,4,422],t:7,e:"h2",f:["Viewing file ",{t:2,r:"data.filename",p:[13,21,439]}]}," ",{p:[14,4,466],t:7,e:"div",a:{"class":"item"},f:[{p:[15,4,489],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["CLOSE"]}," ",{p:[16,4,545],t:7,e:"ui-button",a:{action:"PRG_edit"},f:["EDIT"]}," ",{p:[17,4,595],t:7,e:"ui-button",a:{action:"PRG_printfile"},f:["PRINT"]}," "]},{p:[18,10,657],t:7,e:"hr"}," ",{t:3,r:"data.filedata",p:[19,4,666]}],n:50,r:"data.filename",p:[12,3,396]},{t:4,n:51,f:[{p:[21,4,702],t:7,e:"h2",f:["Available files (local):"]}," ",{p:[22,4,740],t:7,e:"table",f:[{p:[23,5,753],t:7,e:"tr",f:[{p:[24,6,764],t:7,e:"th",f:["File name"]}," ",{p:[25,6,789],t:7,e:"th",f:["File type"]}," ",{p:[26,6,814],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[27,6,844],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[30,6,907],t:7,e:"tr",f:[{p:[31,7,919],t:7,e:"td",f:[{t:2,r:"name",p:[31,11,923]}]}," ",{p:[32,7,944],t:7,e:"td",f:[".",{t:2,r:"type",p:[32,12,949]}]}," ",{p:[33,7,970],t:7,e:"td",f:[{t:2,r:"size",p:[33,11,974]},"GQ"]}," ",{p:[34,7,997],t:7,e:"td",f:[{p:[35,8,1010],t:7,e:"ui-button",a:{action:"PRG_openfile",params:['{"name": "',{t:2,r:"name",p:[35,59,1061]},'"}']},f:["VIEW"]}," ",{p:[36,8,1098],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[36,26,1116]}],action:"PRG_deletefile",params:['{"name": "',{t:2,r:"name",p:[36,105,1195]},'"}']},f:["DELETE"]}," ",{p:[37,8,1234],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[37,26,1252]}],action:"PRG_rename",params:['{"name": "',{t:2,r:"name",p:[37,101,1327]},'"}']},f:["RENAME"]}," ",{p:[38,8,1366],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[38,26,1384]}],action:"PRG_clone",params:['{"name": "',{t:2,r:"name",p:[38,100,1458]},'"}']},f:["CLONE"]}," ",{t:4,f:[{p:[40,9,1531],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[40,27,1549]}],action:"PRG_copytousb",params:['{"name": "',{t:2,r:"name",p:[40,105,1627]},'"}']},f:["EXPORT"]}],n:50,r:"data.usbconnected",p:[39,8,1496]}]}]}],n:52,r:"data.files",p:[29,5,880]}]}," ",{t:4,f:[{p:[47,4,1761],t:7,e:"h2",f:["Available files (portable device):"]}," ",{p:[48,4,1809],t:7,e:"table",f:[{p:[49,5,1822],t:7,e:"tr",f:[{p:[50,6,1833],t:7,e:"th",f:["File name"]}," ",{p:[51,6,1858],t:7,e:"th",f:["File type"]}," ",{p:[52,6,1883],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[53,6,1913],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[56,6,1979],t:7,e:"tr",f:[{p:[57,7,1991],t:7,e:"td",f:[{t:2,r:"name",p:[57,11,1995]}]}," ",{p:[58,7,2016],t:7,e:"td",f:[".",{t:2,r:"type",p:[58,12,2021]}]}," ",{p:[59,7,2042],t:7,e:"td",f:[{t:2,r:"size",p:[59,11,2046]},"GQ"]}," ",{p:[60,7,2069],t:7,e:"td",f:[{p:[61,8,2082],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[61,26,2100]}],action:"PRG_usbdeletefile",params:['{"name": "',{t:2,r:"name",p:[61,108,2182]},'"}']},f:["DELETE"]}," ",{t:4,f:[{p:[63,9,2256],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[63,27,2274]}],action:"PRG_copyfromusb",params:['{"name": "',{t:2,r:"name",p:[63,107,2354]},'"}']},f:["IMPORT"]}],n:50,r:"data.usbconnected",p:[62,8,2221]}]}]}],n:52,r:"data.usbfiles",p:[55,5,1949]}]}],n:50,r:"data.usbconnected",p:[46,4,1731]}," ",{p:[70,4,2470],t:7,e:"ui-button",a:{action:"PRG_newtextfile"},f:["NEW DATA FILE"]}],r:"data.filename"}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],421:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[5,2,79],t:7,e:"i",f:["No program loaded. Please select program from list below."]}," ",{p:[6,2,146],t:7,e:"table",f:[{t:4,f:[{p:[8,4,185],t:7,e:"tr",f:[{p:[8,8,189],t:7,e:"td",f:[{p:[8,12,193],t:7,e:"ui-button",a:{action:"PC_runprogram",params:['{"name": "',{t:2,r:"name",p:[8,64,245]},'"}']},f:[{t:2,r:"desc",p:[9,5,263]}]}]},{p:[11,4,293],t:7,e:"td",f:[{p:[11,8,297],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["running"],s:'_0?null:"disabled"'},p:[11,26,315]}],icon:"close",action:"PC_killprogram",params:['{"name": "',{t:2,r:"name",p:[11,114,403]},'"}']}}]}]}],n:52,r:"data.programs",p:[7,3,157]}]}," ",{p:[14,2,454],t:7,e:"br"},{p:[14,6,458],t:7,e:"br"}," ",{t:4,f:[{p:[16,3,491],t:7,e:"ui-button",a:{action:"PC_toggle_light",style:[{t:2,x:{r:["data.light_on"],s:'_0?"selected":null'},p:[16,46,534]}]},f:["Toggle Flashlight"]},{p:[16,114,602],t:7,e:"br"}," ",{p:[17,3,610],t:7,e:"ui-button",a:{action:"PC_light_color"},f:["Change Flashlight Color ",{p:[17,62,669],t:7,e:"span",a:{style:["border:1px solid #161616; background-color: ",{t:2,r:"data.comp_light_color",p:[17,119,726]},";"]},f:[" "]}]}],n:50,r:"data.has_light",p:[15,2,465]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],422:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:[{p:[6,3,105],t:7,e:"h1",f:["ADMINISTRATIVE MODE"]}],n:50,r:"data.adminmode",p:[5,2,79]}," ",{t:4,f:[{p:[10,3,170],t:7,e:"div",a:{"class":"itemLabel"},f:["Current channel:"]}," ",{p:[13,3,229],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.title",p:[14,4,259]}]}," ",{p:[16,3,287],t:7,e:"div",a:{"class":"itemLabel"},f:["Operator access:"]}," ",{p:[19,3,346],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:[{p:[21,5,406],t:7,e:"b",f:["Enabled"]}],n:50,r:"data.is_operator",p:[20,4,376]},{t:4,n:51,f:[{p:[23,5,439],t:7,e:"b",f:["Disabled"]}],r:"data.is_operator"}]}," ",{p:[26,3,480],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[29,3,532],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[30,4,562],t:7,e:"table",f:[{p:[31,5,575],t:7,e:"tr",f:[{p:[31,9,579],t:7,e:"td",f:[{p:[31,13,583],t:7,e:"ui-button",a:{action:"PRG_speak"},f:["Send message"]}]}]},{p:[32,5,643],t:7,e:"tr",f:[{p:[32,9,647],t:7,e:"td",f:[{p:[32,13,651],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[33,5,719],t:7,e:"tr",f:[{p:[33,9,723],t:7,e:"td",f:[{p:[33,13,727],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]},{p:[34,5,807],t:7,e:"tr",f:[{p:[34,9,811],t:7,e:"td",f:[{p:[34,13,815],t:7,e:"ui-button",a:{action:"PRG_leavechannel"},f:["Leave channel"]}]}]},{p:[35,5,883],t:7,e:"tr",f:[{p:[35,9,887],t:7,e:"td",f:[{p:[35,13,891],t:7,e:"ui-button",a:{action:"PRG_savelog"},f:["Save log to local drive"]}," ",{t:4,f:[{p:[37,6,995],t:7,e:"tr",f:[{p:[37,10,999],t:7,e:"td",f:[{p:[37,14,1003],t:7,e:"ui-button",a:{action:"PRG_renamechannel"},f:["Rename channel"]}]}]},{p:[38,6,1074],t:7,e:"tr",f:[{p:[38,10,1078],t:7,e:"td",f:[{p:[38,14,1082],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}]}]},{p:[39,6,1149],t:7,e:"tr",f:[{p:[39,10,1153],t:7,e:"td",f:[{p:[39,14,1157],t:7,e:"ui-button",a:{action:"PRG_deletechannel"},f:["Delete channel"]}]}]}],n:50,r:"data.is_operator",p:[36,5,964]}]}]}]}]}," ",{p:[43,3,1263],t:7,e:"b",f:["Chat Window"]}," ",{p:[44,4,1286],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[45,4,1342],t:7,e:"div",a:{"class":"item"},f:[{p:[46,5,1366],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"msg",p:[48,7,1450]},{p:[48,14,1457],t:7,e:"br"}],n:52,r:"data.messages",p:[47,6,1419]}]}]}]}," ",{p:[53,3,1516],t:7,e:"b",f:["Connected Users"]},{p:[53,25,1538],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"name",p:[55,4,1573]},{p:[55,12,1581],t:7,e:"br"}],n:52,r:"data.clients",p:[54,3,1546]}],n:50,r:"data.title",p:[9,2,148]},{t:4,n:51,f:[{p:[58,3,1613],t:7,e:"b",f:["Controls:"]}," ",{p:[59,3,1633],t:7,e:"table",f:[{p:[60,4,1645],t:7,e:"tr",f:[{p:[60,8,1649],t:7,e:"td",f:[{p:[60,12,1653],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[61,4,1720],t:7,e:"tr",f:[{p:[61,8,1724],t:7,e:"td",f:[{p:[61,12,1728],t:7,e:"ui-button",a:{action:"PRG_newchannel"},f:["New Channel"]}]}]},{p:[62,4,1791],t:7,e:"tr",f:[{p:[62,8,1795],t:7,e:"td",f:[{p:[62,12,1799],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]}]}," ",{p:[64,3,1889],t:7,e:"b",f:["Available channels:"]}," ",{p:[65,3,1919],t:7,e:"table",f:[{t:4,f:[{p:[67,4,1964],t:7,e:"tr",f:[{p:[67,8,1968],t:7,e:"td",f:[{p:[67,12,1972],t:7,e:"ui-button",a:{action:"PRG_joinchannel",params:['{"id": "',{t:2,r:"id",p:[67,64,2024]},'"}']},f:[{t:2,r:"chan",p:[67,74,2034]}]},{p:[67,94,2054],t:7,e:"br"}]}]}],n:52,r:"data.all_channels",p:[66,3,1930]}]}],r:"data.title"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],423:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:["##SYSTEM ERROR: ",{t:2,r:"data.error",p:[6,19,117]},{p:[6,33,131],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["RESET"]}],n:50,r:"data.error",p:[5,2,79]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.target"],s:"_0"},f:["##DoS traffic generator active. Tx: ",{t:2,r:"data.speed",p:[8,39,243]},"GQ/s",{p:[8,57,261],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"nums",p:[10,4,300]},{p:[10,12,308],t:7,e:"br"}],n:52,r:"data.dos_strings",p:[9,3,269]}," ",{p:[12,3,329],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["ABORT"]}]},{t:4,n:50,x:{r:["data.target"],s:"!(_0)"},f:[" ##DoS traffic generator ready. Select target device.",{p:[14,55,443],t:7,e:"br"}," ",{t:4,f:["Targeted device ID: ",{t:2,r:"data.focus",p:[16,24,494]}],n:50,r:"data.focus",p:[15,3,451]},{t:4,n:51,f:["Targeted device ID: None"],r:"data.focus"}," ",{p:[20,3,564],t:7,e:"ui-button",a:{action:"PRG_execute"},f:["EXECUTE"]},{p:[20,54,615],t:7,e:"div",a:{style:"clear:both"}}," Detected devices on network:",{p:[21,31,677],t:7,e:"br"}," ",{t:4,f:[{p:[23,4,711],t:7,e:"ui-button",a:{action:"PRG_target_relay",params:['{"targid": "',{t:2,r:"id",p:[23,61,768]},'"}']},f:[{t:2,r:"id",p:[23,71,778]}]}],n:52,r:"data.relays",p:[22,3,685]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],424:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[5,2,79],t:7,e:"i",f:["Welcome to software download utility. Please select which software you wish to download."]},{p:[5,97,174],t:7,e:"hr"}," ",{t:4,f:[{p:[7,3,203],t:7,e:"ui-display",a:{title:"Download Error"},f:[{p:[8,4,243],t:7,e:"ui-section",a:{label:"Information"},f:[{t:2,r:"data.error",p:[9,5,281]}]}," ",{p:[11,4,318],t:7,e:"ui-section",a:{label:"Reset Program"},f:[{p:[12,5,358],t:7,e:"ui-button",a:{icon:"times",action:"PRG_reseterror"},f:["RESET"]}]}]}],n:50,r:"data.error",p:[6,2,181]},{t:4,n:51,f:[{t:4,f:[{p:[19,4,516],t:7,e:"ui-display",a:{title:"Download Running"},f:[{p:[20,5,559],t:7,e:"i",f:["Please wait..."]}," ",{p:[21,5,586],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"data.downloadname",p:[22,6,623]}]}," ",{p:[24,5,669],t:7,e:"ui-section",a:{label:"File description"},f:[{t:2,r:"data.downloaddesc",p:[25,6,713]}]}," ",{p:[27,5,759],t:7,e:"ui-section",a:{label:"File size"},f:[{t:2,r:"data.downloadsize",p:[28,6,796]},"GQ"]}," ",{p:[30,5,844],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{t:2,r:"data.downloadspeed",p:[31,6,885]}," GQ/s"]}," ",{p:[33,5,937],t:7,e:"ui-section",a:{label:"Download progress"},f:[{p:[34,6,982],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.downloadsize",p:[34,27,1003]}],value:[{t:2,r:"adata.downloadcompletion",p:[34,58,1034]}],state:"good"},f:[{t:2,x:{r:["adata.downloadcompletion"],s:"Math.round(_0)"},p:[34,101,1077]},"GQ / ",{t:2,r:"adata.downloadsize",p:[34,146,1122]},"GQ"]}]}]}],n:50,r:"data.downloadname",p:[18,3,486]}],r:"data.error"}," ",{t:4,f:[{t:4,f:[{p:[41,4,1270],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,5,1308],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,6,1349],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,27,1370]}],value:[{t:2,r:"adata.disk_used",p:[43,55,1398]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,89,1432]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,125,1468]},"GQ"]}]}]}," ",{p:[47,4,1545],t:7,e:"ui-display",a:{title:"Primary Software Repository"},f:[{t:4,f:[{p:[49,6,1642],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[49,28,1664]}]},f:[{p:[50,7,1686],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[50,61,1740]}]}," ",{p:[52,7,1774],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[53,8,1813]}," (",{t:2,r:"size",p:[53,22,1827]}," GQ)"]}," ",{p:[55,7,1868],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[56,8,1911]}]}," ",{p:[58,7,1957],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[58,80,2030]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[62,6,2113],t:7,e:"br"}],n:52,r:"data.downloadable_programs",p:[48,5,1599]}]}," ",{t:4,f:[{p:[67,5,2194],t:7,e:"ui-display",a:{title:"UNKNOWN Software Repository"},f:[{p:[68,6,2249],t:7,e:"i",f:["Please note that Nanotrasen does not recommend download of software from non-official servers."]}," ",{t:4,f:[{p:[70,7,2395],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[70,29,2417]}]},f:[{p:[71,8,2440],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[71,62,2494]}]}," ",{p:[73,8,2530],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[74,9,2570]}," (",{t:2,r:"size",p:[74,23,2584]}," GQ)"]}," ",{p:[76,8,2627],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[77,9,2671]}]}," ",{p:[79,8,2719],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",
-p:[79,81,2792]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[83,7,2879],t:7,e:"br"}],n:52,r:"data.hacked_programs",p:[69,6,2357]}]}],n:50,r:"data.hackedavailable",p:[66,4,2160]}],n:50,x:{r:["data.error"],s:"!_0"},p:[40,3,1246]}],n:50,x:{r:["data.downloadname"],s:"!_0"},p:[39,2,1216]}," ",{p:[89,2,2954],t:7,e:"br"},{p:[89,6,2958],t:7,e:"br"},{p:[89,10,2962],t:7,e:"hr"},{p:[89,14,2966],t:7,e:"i",f:["NTOS v2.0.4b Copyright Nanotrasen 2557 - 2559"]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],425:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[6,2,81],t:7,e:"ui-display",a:{title:"WIRELESS CONNECTIVITY"},f:[{p:[8,3,129],t:7,e:"ui-section",a:{label:"Active NTNetRelays"},f:[{p:[9,4,173],t:7,e:"b",f:[{t:2,r:"data.ntnetrelays",p:[9,7,176]}]}]}," ",{t:4,f:[{p:[12,4,250],t:7,e:"ui-section",a:{label:"System status"},f:[{p:[13,6,291],t:7,e:"b",f:[{t:2,x:{r:["data.ntnetstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[13,9,294]}]}]}," ",{p:[15,4,366],t:7,e:"ui-section",a:{label:"Control"},f:[{p:[17,4,401],t:7,e:"ui-button",a:{icon:"plus",action:"toggleWireless"},f:["TOGGLE"]}]}," ",{p:[21,4,500],t:7,e:"br"},{p:[21,8,504],t:7,e:"br"}," ",{p:[22,4,513],t:7,e:"i",f:["Caution - Disabling wireless transmitters when using wireless device may prevent you from re-enabling them again!"]}],n:50,r:"data.ntnetrelays",p:[11,3,221]},{t:4,n:51,f:[{p:[24,4,650],t:7,e:"br"},{p:[24,8,654],t:7,e:"p",f:["Wireless coverage unavailable, no relays are connected."]}],r:"data.ntnetrelays"}]}," ",{p:[29,2,750],t:7,e:"ui-display",a:{title:"FIREWALL CONFIGURATION"},f:[{p:[31,2,798],t:7,e:"table",f:[{p:[32,3,809],t:7,e:"tr",f:[{p:[33,4,818],t:7,e:"th",f:["PROTOCOL"]},{p:[34,4,835],t:7,e:"th",f:["STATUS"]},{p:[35,4,850],t:7,e:"th",f:["CONTROL"]}]},{p:[36,3,865],t:7,e:"tr",f:[" ",{p:[37,4,874],t:7,e:"td",f:["Software Downloads"]},{p:[38,4,901],t:7,e:"td",f:[{t:2,x:{r:["data.config_softwaredownload"],s:'_0?"ENABLED":"DISABLED"'},p:[38,8,905]}]},{p:[39,4,967],t:7,e:"td",f:[" ",{p:[39,9,972],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "1"}'},f:["TOGGLE"]}]}]},{p:[40,3,1051],t:7,e:"tr",f:[" ",{p:[41,4,1060],t:7,e:"td",f:["Peer to Peer Traffic"]},{p:[42,4,1089],t:7,e:"td",f:[{t:2,x:{r:["data.config_peertopeer"],s:'_0?"ENABLED":"DISABLED"'},p:[42,8,1093]}]},{p:[43,4,1149],t:7,e:"td",f:[{p:[43,8,1153],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "2"}'},f:["TOGGLE"]}]}]},{p:[44,3,1232],t:7,e:"tr",f:[" ",{p:[45,4,1241],t:7,e:"td",f:["Communication Systems"]},{p:[46,4,1271],t:7,e:"td",f:[{t:2,x:{r:["data.config_communication"],s:'_0?"ENABLED":"DISABLED"'},p:[46,8,1275]}]},{p:[47,4,1334],t:7,e:"td",f:[{p:[47,8,1338],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "3"}'},f:["TOGGLE"]}]}]},{p:[48,3,1417],t:7,e:"tr",f:[" ",{p:[49,4,1426],t:7,e:"td",f:["Remote System Control"]},{p:[50,4,1456],t:7,e:"td",f:[{t:2,x:{r:["data.config_systemcontrol"],s:'_0?"ENABLED":"DISABLED"'},p:[50,8,1460]}]},{p:[51,4,1519],t:7,e:"td",f:[{p:[51,8,1523],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "4"}'},f:["TOGGLE"]}]}]}]}]}," ",{p:[55,2,1630],t:7,e:"ui-display",a:{title:"SECURITY SYSTEMS"},f:[{t:4,f:[{p:[58,4,1699],t:7,e:"ui-notice",f:[{p:[59,5,1716],t:7,e:"h1",f:["NETWORK INCURSION DETECTED"]}]}," ",{p:[61,5,1774],t:7,e:"i",f:["An abnormal activity has been detected in the network. Please verify system logs for more information"]}],n:50,r:"data.idsalarm",p:[57,3,1673]}," ",{p:[64,3,1902],t:7,e:"ui-section",a:{label:"Intrusion Detection System"},f:[{p:[65,4,1954],t:7,e:"b",f:[{t:2,x:{r:["data.idsstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[65,7,1957]}]}]}," ",{p:[68,3,2029],t:7,e:"ui-section",a:{label:"Maximal Log Count"},f:[{p:[69,4,2072],t:7,e:"b",f:[{t:2,r:"data.ntnetmaxlogs",p:[69,7,2075]}]}]}," ",{p:[72,3,2125],t:7,e:"ui-section",a:{label:"Controls"},f:[]}," ",{p:[74,4,2176],t:7,e:"table",f:[{p:[75,4,2188],t:7,e:"tr",f:[{p:[75,8,2192],t:7,e:"td",f:[{p:[75,12,2196],t:7,e:"ui-button",a:{action:"resetIDS"},f:["RESET IDS"]}]}]},{p:[76,4,2251],t:7,e:"tr",f:[{p:[76,8,2255],t:7,e:"td",f:[{p:[76,12,2259],t:7,e:"ui-button",a:{action:"toggleIDS"},f:["TOGGLE IDS"]}]}]},{p:[77,4,2316],t:7,e:"tr",f:[{p:[77,8,2320],t:7,e:"td",f:[{p:[77,12,2324],t:7,e:"ui-button",a:{action:"updatemaxlogs"},f:["SET LOG LIMIT"]}]}]},{p:[78,4,2388],t:7,e:"tr",f:[{p:[78,8,2392],t:7,e:"td",f:[{p:[78,12,2396],t:7,e:"ui-button",a:{action:"purgelogs"},f:["PURGE LOGS"]}]}]}]}," ",{p:[81,3,2467],t:7,e:"ui-subdisplay",a:{title:"System Logs"},f:[{p:[82,3,2506],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[83,3,2561],t:7,e:"div",a:{"class":"item"},f:[{p:[84,4,2584],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"entry",p:[86,6,2667]},{p:[86,15,2676],t:7,e:"br"}],n:52,r:"data.ntnetlogs",p:[85,5,2636]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],426:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,2,102],t:7,e:"div",a:{"class":"item"},f:[{p:[8,3,124],t:7,e:"h2",f:["An error has occurred during operation..."]}," ",{p:[9,3,178],t:7,e:"b",f:["Additional information:"]},{t:2,r:"data.error",p:[9,34,209]},{p:[9,48,223],t:7,e:"br"}," ",{p:[10,3,231],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Clear"]}]}],n:50,r:"data.error",p:[6,2,81]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.downloading"],s:"_0"},f:[{p:[13,3,321],t:7,e:"h2",f:["Download in progress..."]}," ",{p:[14,3,357],t:7,e:"div",a:{"class":"itemLabel"},f:["Downloaded file:"]}," ",{p:[17,3,416],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_name",p:[18,4,446]}]}," ",{p:[20,3,483],t:7,e:"div",a:{"class":"itemLabel"},f:["Download progress:"]}," ",{p:[23,3,544],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_progress",p:[24,4,574]}," / ",{t:2,r:"data.download_size",p:[24,33,603]}," GQ"]}," ",{p:[26,3,642],t:7,e:"div",a:{"class":"itemLabel"},f:["Transfer speed:"]}," ",{p:[29,3,700],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_netspeed",p:[30,4,730]},"GQ/s"]}," ",{p:[32,3,774],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[35,3,826],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[36,4,856],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Abort download"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading"],s:"(!(_0))&&(_1)"},f:[" ",{p:[39,3,954],t:7,e:"h2",f:["Server enabled"]}," ",{p:[40,3,981],t:7,e:"div",a:{"class":"itemLabel"},f:["Connected clients:"]}," ",{p:[43,3,1042],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_clients",p:[44,4,1072]}]}," ",{p:[46,3,1109],t:7,e:"div",a:{"class":"itemLabel"},f:["Provided file:"]}," ",{p:[49,3,1166],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_filename",p:[50,4,1196]}]}," ",{p:[52,3,1234],t:7,e:"div",a:{"class":"itemLabel"},f:["Server password:"]}," ",{p:[55,3,1293],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ENABLED"],n:50,r:"data.upload_haspassword",p:[56,4,1323]},{t:4,n:51,f:["DISABLED"],r:"data.upload_haspassword"}]}," ",{p:[62,3,1420],t:7,e:"div",a:{"class":"itemLabel"},f:["Commands:"]}," ",{p:[65,3,1472],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[66,4,1502],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[67,4,1567],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Exit server"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(_2))"},f:[" ",{p:[70,3,1668],t:7,e:"h2",f:["File transfer server ready. Select file to upload:"]}," ",{p:[71,3,1732],t:7,e:"table",f:[{p:[72,3,1743],t:7,e:"tr",f:[{p:[72,7,1747],t:7,e:"th",f:["File name"]},{p:[72,20,1760],t:7,e:"th",f:["File size"]},{p:[72,33,1773],t:7,e:"th",f:["Controls ",{t:4,f:[{p:[74,4,1824],t:7,e:"tr",f:[{p:[74,8,1828],t:7,e:"td",f:[{t:2,r:"filename",p:[74,12,1832]}]},{p:[75,4,1849],t:7,e:"td",f:[{t:2,r:"size",p:[75,8,1853]},"GQ"]},{p:[76,4,1868],t:7,e:"td",f:[{p:[76,8,1872],t:7,e:"ui-button",a:{action:"PRG_uploadfile",params:['{"id": "',{t:2,r:"uid",p:[76,59,1923]},'"}']},f:["Select"]}]}]}],n:52,r:"data.upload_filelist",p:[73,3,1789]}]}]}]}," ",{p:[79,3,1981],t:7,e:"hr"}," ",{p:[80,3,1989],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[81,3,2053],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Return"]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(!(_2)))"},f:[" ",{p:[83,3,2116],t:7,e:"h2",f:["Available files:"]}," ",{p:[84,3,2145],t:7,e:"table",a:{border:"1",style:"border-collapse: collapse"},f:[{p:[84,55,2197],t:7,e:"tr",f:[{p:[84,59,2201],t:7,e:"th",f:["Server UID"]},{p:[84,73,2215],t:7,e:"th",f:["File Name"]},{p:[84,86,2228],t:7,e:"th",f:["File Size"]},{p:[84,99,2241],t:7,e:"th",f:["Password Protection"]},{p:[84,122,2264],t:7,e:"th",f:["Operations ",{t:4,f:[{p:[86,5,2311],t:7,e:"tr",f:[{p:[86,9,2315],t:7,e:"td",f:[{t:2,r:"uid",p:[86,13,2319]}]},{p:[87,5,2332],t:7,e:"td",f:[{t:2,r:"filename",p:[87,9,2336]}]},{p:[88,5,2354],t:7,e:"td",f:[{t:2,r:"size",p:[88,9,2358]},"GQ ",{t:4,f:[{p:[90,6,2400],t:7,e:"td",f:["Enabled"]}],n:50,r:"haspassword",p:[89,5,2374]}," ",{t:4,f:[{p:[93,6,2457],t:7,e:"td",f:["Disabled"]}],n:50,x:{r:["haspassword"],s:"!_0"},p:[92,5,2430]}]},{p:[96,5,2494],t:7,e:"td",f:[{p:[96,9,2498],t:7,e:"ui-button",a:{action:"PRG_downloadfile",params:['{"id": "',{t:2,r:"uid",p:[96,62,2551]},'"}']},f:["Download"]}]}]}],n:52,r:"data.servers",p:[85,4,2283]}]}]}]}," ",{p:[99,3,2612],t:7,e:"hr"}," ",{p:[100,3,2620],t:7,e:"ui-button",a:{action:"PRG_uploadmenu"},f:["Send file"]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],427:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[43,1,1082],t:7,e:"ntosheader"}," ",{p:[45,1,1099],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[47,5,1157],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[47,27,1179]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[49,38,1331]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[50,15,1387]}],yinc:"9"}}],n:50,r:"config.fancy",p:[46,3,1131]},{t:4,n:51,f:[{p:[52,5,1437],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[53,7,1475],t:7,e:"span",f:[{t:2,r:"data.supply",p:[53,13,1481]}]}]}," ",{p:[55,5,1528],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[56,9,1563],t:7,e:"span",f:[{t:2,r:"data.demand",p:[56,15,1569]}]}]}],r:"config.fancy"}]}," ",{p:[60,1,1638],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[61,3,1668],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[62,5,1693],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[63,5,1730],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[64,5,1769],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[65,5,1806],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[66,5,1845],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[67,5,1887],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[68,5,1928],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[71,5,2013],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[71,24,2032]}],nowrap:0},f:[{p:[72,7,2057],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[72,28,2078]}," %"]}," ",{p:[73,7,2136],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[73,28,2157]}]}," ",{p:[74,7,2199],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2220],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[74,41,2233]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[74,70,2262]}]}]}," ",{p:[75,7,2309],t:7,e:"div",a:{"class":"content"},f:[{p:[75,28,2330],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[75,41,2343]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[75,64,2366]}," [",{p:[75,87,2389],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[75,93,2395]}]},"]"]}]}," ",{p:[76,7,2444],t:7,e:"div",a:{"class":"content"},f:[{p:[76,28,2465],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[76,41,2478]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[76,64,2501]}," [",{p:[76,87,2524],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[76,93,2530]}]},"]"]}]}," ",{p:[77,7,2579],t:7,e:"div",a:{"class":"content"},f:[{p:[77,28,2600],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[77,41,2613]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[77,64,2636]}," [",{p:[77,87,2659],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[77,93,2665]}]},"]"]}]}]}],n:52,r:"data.areas",p:[70,3,1987]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],428:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{p:[4,1,64],t:7,e:"ui-display",f:[{p:[5,2,79],t:7,e:"div",a:{"class":"item"},f:[{p:[6,3,101],t:7,e:"div",a:{"class":"itemLabel"},f:["Payload status:"]}," ",{p:[9,3,158],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ARMED"],n:50,r:"data.armed",p:[10,4,188]},{t:4,n:51,f:["DISARMED"],r:"data.armed"}]}," ",{p:[16,3,270],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[19,3,321],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[20,4,351],t:7,e:"table",f:[{p:[21,4,363],t:7,e:"tr",f:[{p:[21,8,367],t:7,e:"td",f:[{p:[21,12,371],t:7,e:"ui-button",a:{action:"PRG_obfuscate"},f:["OBFUSCATE PROGRAM NAME"]}]}]},{p:[22,4,444],t:7,e:"tr",f:[{p:[22,8,448],t:7,e:"td",f:[{p:[22,12,452],t:7,e:"ui-button",a:{action:"PRG_arm",state:[{t:2,x:{r:["data.armed"],s:'_0?"danger":null'},p:[22,47,487]}]},f:[{t:2,x:{r:["data.armed"],s:'_0?"DISARM":"ARM"'},p:[22,81,521]}]}," ",{p:[23,4,571],t:7,e:"ui-button",a:{icon:"radiation",state:[{t:2,x:{r:["data.armed"],s:'_0?null:"disabled"'},p:[23,39,606]}],action:"PRG_activate"},f:["ACTIVATE"]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],429:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,47],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,3,95],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[5,22,114]}," Alarms"]},f:[{p:[6,5,138],t:7,e:"ul",f:[{t:4,f:[{p:[8,9,171],t:7,e:"li",f:[{t:2,r:".",p:[8,13,175]}]}],n:52,r:".",p:[7,7,150]},{t:4,n:51,f:[{p:[10,9,211],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[4,1,64]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],430:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{integState:function(t){var e=100;return t==e?"good":t>e/2?"average":"bad"},bigState:function(t,e,n){return charge>n?"bad":t>e?"average":"good"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[23,1,421],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[27,2,462],t:7,e:"ui-button",a:{action:"PRG_clear"},f:["Back to Menu"]},{p:[27,56,516],t:7,e:"br"}," ",{p:[28,3,524],t:7,e:"ui-display",a:{title:"Supermatter Status:"},f:[{p:[29,3,568],t:7,e:"ui-section",a:{label:"Core Integrity"},f:[{p:[30,5,609],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"adata.SM_integrity",p:[30,38,642]}],state:[{t:2,x:{r:["integState","adata.SM_integrity"],s:"_0(_1)"},p:[30,69,673]}]},f:[{t:2,r:"data.SM_integrity",p:[30,105,709]},"%"]}]}," ",{p:[32,3,761],t:7,e:"ui-section",a:{label:"Relative EER"},f:[{p:[33,5,800],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_power"],s:"_0(_1,150,300)"},p:[33,18,813]}]},f:[{t:2,r:"data.SM_power",p:[33,55,850]}," MeV/cm3"]}]}," ",{p:[35,3,903],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[36,5,941],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambienttemp"],s:"_0(_1,4000,5000)"},p:[36,18,954]}]},f:[{t:2,r:"data.SM_ambienttemp",p:[36,63,999]}," K"]}]}," ",{p:[38,3,1052],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[39,5,1087],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambientpressure"],s:"_0(_1,5000,10000)"},p:[39,18,1100]}]},f:[{t:2,r:"data.SM_ambientpressure",p:[39,68,1150]}," kPa"]}]}]}," ",{p:[42,3,1227],t:7,e:"hr"},{p:[42,7,1231],t:7,e:"br"}," ",{p:[43,3,1239],t:7,e:"ui-display",a:{title:"Gas Composition:"},f:[{t:4,f:[{p:[45,5,1307],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[45,24,1326]}]},f:[{t:2,r:"amount",p:[46,6,1343]}," %"]}],n:52,r:"data.gases",p:[44,4,1281]}]}],n:50,r:"data.active",p:[26,1,440]},{t:4,n:51,f:[{p:[51,2,1418],t:7,e:"ui-button",a:{action:"PRG_refresh"},f:["Refresh"]},{p:[51,53,1469],t:7,e:"br"}," ",{p:[52,2,1476],t:7,e:"ui-display",a:{title:"Detected Supermatters"},f:[{t:4,f:[{p:[54,3,1552],t:7,e:"ui-section",a:{label:"Area"},f:[{t:2,r:"area_name",p:[55,5,1583]}," - (#",{t:2,r:"uid",p:[55,23,1601]},")"]}," ",{p:[57,3,1630],t:7,e:"ui-section",a:{label:"Integrity"},f:[{t:2,r:"integrity",p:[58,5,1666]}," %"]}," ",{p:[60,3,1702],t:7,e:"ui-section",a:{label:"Options"},f:[{p:[61,5,1736],t:7,e:"ui-button",a:{action:"PRG_set",params:['{"target" : "',{t:2,r:"uid",p:[61,54,1785]},'"}']},f:["View Details"]}]}],n:52,r:"data.supermatters",p:[53,2,1521]}]}],r:"data.active"}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],431:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"item",style:"float: left"},f:[{p:[2,2,41],t:7,e:"table",f:[{p:[2,9,48],t:7,e:"tr",f:[{t:4,f:[{p:[4,3,113],t:7,e:"td",f:[{p:[4,7,117],t:7,e:"img",a:{src:[{t:2,r:"data.PC_batteryicon",p:[4,17,127]}]}}]}],n:50,x:{r:["data.PC_batteryicon","data.PC_showbatteryicon"],s:"_0&&_1"},p:[3,2,55]}," ",{t:4,f:[{p:[7,3,226],t:7,e:"td",f:[{p:[7,7,230],t:7,e:"b",f:[{t:2,r:"data.PC_batterypercent",p:[7,10,233]}]}]}],n:50,x:{r:["data.PC_batterypercent","data.PC_showbatteryicon"],s:"_0&&_1"},p:[6,2,165]}," ",{t:4,f:[{p:[10,3,305],t:7,e:"td",f:[{p:[10,7,309],t:7,e:"img",a:{src:[{t:2,r:"data.PC_ntneticon",p:[10,17,319]}]}}]}],n:50,r:"data.PC_ntneticon",p:[9,2,276]}," ",{t:4,f:[{p:[13,3,386],t:7,e:"td",f:[{p:[13,7,390],t:7,e:"img",a:{src:[{t:2,r:"data.PC_apclinkicon",p:[13,17,400]}]}}]}],n:50,r:"data.PC_apclinkicon",p:[12,2,355]}," ",{t:4,f:[{p:[16,3,469],t:7,e:"td",f:[{p:[16,7,473],t:7,e:"b",f:[{t:2,r:"data.PC_stationtime",p:[16,10,476]}]}]}],n:50,r:"data.PC_stationtime",p:[15,2,438]}," ",{t:4,f:[{p:[19,3,552],t:7,e:"td",f:[{p:[19,7,556],t:7,e:"img",a:{src:[{t:2,r:"icon",p:[19,17,566]}]}}]}],n:52,r:"data.PC_programheaders",p:[18,2,516]}]}]}]}," ",{p:[23,1,609],t:7,e:"div",a:{style:"float: right; margin-top: 5px"},f:[{p:[24,2,655],t:7,e:"ui-button",a:{action:"PC_shutdown"},f:["Shutdown"]}," ",{t:4,f:[{p:[26,3,745],t:7,e:"ui-button",a:{action:"PC_exit"},f:["EXIT PROGRAM"]}," ",{p:[27,3,801],t:7,e:"ui-button",a:{action:"PC_minimize"},f:["Minimize Program"]}],n:50,r:"data.PC_showexitprogram",p:[25,2,710]}]}," ",{p:[30,1,881],t:7,e:"div",a:{style:"clear: both"}}]},e.exports=a.extend(r.exports)},{341:341}],432:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Auth. Disk:"},f:[{t:4,f:[{p:[3,7,69],t:7,e:"ui-button",a:{icon:"eject",style:"selected",action:"eject_disk"},f:["++++++++++"]}],n:50,r:"data.disk_present",p:[2,3,36]},{t:4,n:51,f:[{p:[5,7,172],t:7,e:"ui-button",a:{icon:"plus",action:"insert_disk"},f:["----------"]}],r:"data.disk_present"}]}," ",{p:[8,1,266],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[9,3,297],t:7,e:"span",f:[{t:2,r:"data.status1",p:[9,9,303]},"-",{t:2,r:"data.status2",p:[9,26,320]}]}]}," ",{p:[11,1,360],t:7,e:"ui-display",a:{title:"Timer"},f:[{p:[12,3,390],t:7,e:"ui-section",a:{label:"Time to Detonation"},f:[{p:[13,5,435],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[13,11,441]}]}]}," ",{t:4,f:[{p:[16,5,540],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[17,7,581],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_default"],s:'_0&&_1&&_2?null:"disabled"'},p:[17,40,614]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[19,7,786],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_min"],s:'_0&&_1&&_2?null:"disabled"'},p:[19,38,817]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[21,7,991],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[21,39,1023]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[22,7,1155],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_max"],s:'_0&&_1&&_2?null:"disabled"'},p:[22,37,1185]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[15,3,518]}," ",{p:[26,3,1394],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[27,5,1426],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[27,38,1459]}],action:"toggle_timer",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.safety"],s:'_0&&_1&&!_2?null:"disabled"'},p:[29,14,1542]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[30,7,1631]}]}]}]}," ",{p:[34,1,1713],t:7,e:"ui-display",a:{title:"Anchoring"},f:[{p:[35,3,1747],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[36,12,1770]}],icon:[{t:2,x:{r:["data.anchored"],s:'_0?"lock":"unlock"'},p:[37,11,1846]}],style:[{t:2,x:{r:["data.anchored"],s:'_0?null:"caution"'},p:[38,12,1897]}],action:"anchor"},f:[{t:2,x:{r:["data.anchored"],s:'_0?"Engaged":"Off"'},p:[39,21,1956]}]}]}," ",{p:[41,1,2022],t:7,e:"ui-display",a:{title:"Safety"},f:[{p:[42,3,2053],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[43,12,2076]}],icon:[{t:2,x:{r:["data.safety"],s:'_0?"lock":"unlock"'},p:[44,11,2152]}],action:"safety",style:[{t:2,x:{r:["data.safety"],s:'_0?"caution":"danger"'},p:[45,12,2217]}]},f:[{p:[46,7,2265],t:7,e:"span",f:[{t:2,x:{r:["data.safety"],s:'_0?"On":"Off"'},p:[46,13,2271]}]}]}]}," ",{p:[49,1,2341],t:7,e:"ui-display",a:{title:"Code"},f:[{p:[50,3,2370],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.message",p:[50,31,2398]}]}," ",{p:[51,3,2431],t:7,e:"ui-section",a:{label:"Keypad"},f:[{p:[52,5,2464],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[52,39,2498]}],params:'{"digit":"1"}'},f:["1"]}," ",{p:[53,5,2583],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[53,39,2617]}],params:'{"digit":"2"}'},f:["2"]}," ",{p:[54,5,2702],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[54,39,2736]}],params:'{"digit":"3"}'},f:["3"]}," ",{p:[55,5,2821],t:7,e:"br"}," ",{p:[56,5,2831],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[56,39,2865]}],params:'{"digit":"4"}'},f:["4"]}," ",{p:[57,5,2950],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[57,39,2984]}],params:'{"digit":"5"}'},f:["5"]}," ",{p:[58,5,3069],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[58,39,3103]}],params:'{"digit":"6"}'},f:["6"]}," ",{p:[59,5,3188],t:7,e:"br"}," ",{p:[60,5,3198],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[60,39,3232]}],params:'{"digit":"7"}'},f:["7"]}," ",{p:[61,5,3317],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[61,39,3351]}],params:'{"digit":"8"}'},f:["8"]}," ",{p:[62,5,3436],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[62,39,3470]}],params:'{"digit":"9"}'},f:["9"]}," ",{p:[63,5,3555],t:7,e:"br"}," ",{p:[64,5,3565],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[64,39,3599]}],params:'{"digit":"R"}'},f:["R"]}," ",{p:[65,5,3684],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[65,39,3718]}],params:'{"digit":"0"}'},f:["0"]}," ",{p:[66,5,3803],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[66,39,3837]}],params:'{"digit":"E"}'},f:["E"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],433:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,25],t:7,e:"ui-button",a:{icon:"undo",action:"change_menu",params:'{"menu": "1"}'},f:["Return"]}," ",{p:[3,2,113],t:7,e:"ui-display",a:{title:"Advanced Surgery Procedures"},f:[{p:[4,3,165],t:7,e:"ui-button",a:{icon:"download",action:"sync"},f:["Sync with research database"]}," ",{t:4,f:[{p:[6,4,278],t:7,e:"ui-display",f:[{p:[7,6,297],t:7,e:"ui-section",f:[{p:[7,18,309],t:7,e:"b",f:[{t:2,r:"name",p:[7,21,312]}]}]}," ",{p:[8,6,344],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[8,18,356]}]}]}],n:52,r:"data.surgeries",p:[5,3,249]}]}],n:50,x:{r:["data.menu"],s:"_0==2"},p:[1,1,0]},{t:4,n:51,f:[{p:[13,2,437],t:7,e:"ui-button",a:{action:"change_menu",params:'{"menu": "2"}'},f:["View Surgery Procedures"]}," ",{t:4,f:[{p:[15,3,556],t:7,e:"ui-notice",f:["No table detected!"]}],n:51,r:"data.table",p:[14,2,530]}," ",{p:[19,2,623],t:7,e:"ui-display",f:[{p:[20,3,639],t:7,e:"ui-display",a:{title:"Patient State"},f:[{t:4,f:[{p:[22,5,704],t:7,e:"ui-section",a:{label:"State"},f:[{p:[23,6,737],t:7,e:"span",a:{"class":[{t:2,r:"data.patient.statstate",p:[23,19,750]}]},f:[{t:2,r:"data.patient.stat",p:[23,47,778]}]}]}," ",{p:[25,5,831],t:7,e:"ui-section",a:{label:"Blood Type"},f:[{p:[26,6,869],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.patient.blood_type",p:[26,28,891]}]}]}," ",{p:[28,5,950],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[29,6,984],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.patient.minHealth",p:[29,19,997]}],max:[{t:2,r:"data.patient.maxHealth",p:[29,52,1030]}],value:[{t:2,r:"data.patient.health",p:[29,87,1065]}],state:[{t:2,x:{r:["data.patient.health"],s:'_0>=0?"good":"average"'},p:[30,13,1103]}]},f:[{t:2,x:{r:["adata.patient.health"],s:"Math.round(_0)"},p:[30,64,1154]}]}]}," ",{t:4,f:[{p:[33,6,1389],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[33,25,1408]}]},f:[{p:[34,7,1427],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.patient.maxHealth",p:[34,28,1448]}],value:[{t:2,rx:{r:"data.patient",m:[{t:30,n:"type"}]},p:[34,63,1483]}],state:"bad"},f:[{t:2,x:{r:["type","adata.patient"],s:"Math.round(_1[_0])"},p:[34,99,1519]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"},{label:"Toxin",type:"toxLoss"},{label:"Respiratory",type:"oxyLoss"}]'},p:[32,5,1224]}],n:50,r:"data.patient",p:[21,4,678]},{t:4,n:51,f:["No patient detected."],r:"data.patient"}]}," ",{p:[41,3,1670],t:7,e:"ui-display",a:{title:"Initiated Procedures"},f:[{t:4,f:[{t:4,f:[{p:[44,6,1777],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[44,28,1799]}]},f:[{p:[45,7,1817],t:7,e:"ui-section",a:{label:"Next Step"},f:[{p:[46,8,1856],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"next_step",p:[46,30,1878]}]}," ",{t:4,f:[{p:[48,9,1937],t:7,e:"span",a:{"class":"content"},f:[{p:[48,31,1959],t:7,e:"b",f:["Required chemicals:"]},{p:[48,57,1985],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[48,62,1990]}]}],n:50,r:"chems_needed",p:[47,8,1907]}]}," ",{t:4,f:[{p:[52,8,2091],t:7,e:"ui-section",a:{label:"Alternative Step"},f:[{p:[53,9,2138],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"alternative_step",p:[53,31,2160]}]}," ",{t:4,f:[{p:[55,10,2232],t:7,e:"span",a:{"class":"content"},f:[{p:[55,32,2254],t:7,e:"b",f:["Required chemicals:"]},{p:[55,58,2280],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[55,63,2285]}]}],n:50,r:"alt_chems_needed",p:[54,9,2197]}]}],n:50,r:"alternative_step",p:[51,7,2058]}]}],n:52,r:"data.procedures",p:[43,5,1745]}],n:50,r:"data.procedures",p:[42,4,1716]},{t:4,n:51,f:["No active procedures."],r:"data.procedures"}]}]}],x:{r:["data.menu"],s:"_0==2"}}]},e.exports=a.extend(r.exports)},{341:341}],434:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"ui-section",f:["This machine only accepts ore. Gibtonite and Slag are not accepted."]}," ",{p:[5,2,117],t:7,e:"ui-section",f:["Current unclaimed points: ",{t:2,r:"data.unclaimedPoints",p:[6,29,159]}," ",{t:4,f:[{p:[8,4,220],t:7,e:"ui-button",a:{action:"Claim"},f:["Claim Points"]}],n:50,r:"data.unclaimedPoints",p:[7,3,187]}]}," ",{p:[13,2,311],t:7,e:"ui-section",f:[{t:4,f:[{p:[15,4,350],t:7,e:"ui-button",a:{action:"Eject"},f:["Eject ID"]}," You have ",{t:2,r:"data.claimedPoints",p:[18,13,421]}," mining points collected."],n:50,r:"data.hasID",p:[14,3,327]},{t:4,n:51,f:[{p:[20,4,485],t:7,e:"ui-button",a:{action:"Insert"},f:["Insert ID"]}],r:"data.hasID"}]}]}," ",{p:[26,1,588],t:7,e:"ui-display",f:[{t:4,f:[{p:[28,3,627],t:7,e:"ui-section",f:[{p:[29,4,644],t:7,e:"ui-button",a:{action:"diskEject",icon:"eject"},f:["Eject Disk"]}]}," ",{t:4,f:[{p:[34,4,772],t:7,e:"ui-section",a:{"class":"candystripe"},f:[{p:[35,5,808],t:7,e:"ui-button",a:{action:"diskUpload",state:[{t:2,x:{r:["canupload"],s:'(_0)?null:"disabled"'},p:[35,42,845]}],icon:"upload",align:"right",params:['{ "design" : "',{t:2,r:"index",p:[35,129,932]},'" }']},f:["Upload"]}," File ",{t:2,r:"index",p:[38,10,988]},": ",{t:2,r:"name",p:[38,21,999]}]}],n:52,r:"data.diskDesigns",p:[33,3,741]}],n:50,r:"data.hasDisk",p:[27,2,603]},{t:4,n:51,f:[{p:[42,3,1053],t:7,e:"ui-section",f:[{p:[43,4,1070],t:7,e:"ui-button",a:{action:"diskInsert",icon:"floppy-o"},f:["Insert Disk"]}]}],r:"data.hasDisk"}]}," ",{t:4,f:[{p:[50,2,1223],t:7,e:"ui-display",f:[{p:[51,3,1239],t:7,e:"ui-section",f:[{p:[52,4,1256],t:7,e:"b",f:["Warning"]},": ",{t:2,r:"data.disconnected",p:[52,20,1272]},". Please contact the quartermaster."]}]}],n:50,r:"data.disconnected",p:[49,1,1195]},{t:4,f:[{p:[57,2,1412],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[58,3,1445],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[59,5,1480],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[62,5,1538],t:7,e:"section",a:{"class":"cell"},f:["Sheets"]}," ",{p:[65,5,1595],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[67,5,1639],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[69,5,1683],t:7,e:"section",a:{"class":"cell"},f:["Ore Value"]}]}," ",{t:4,f:[{p:[74,4,1785],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[75,5,1820],t:7,e:"section",
-a:{"class":"cell"},f:[{t:2,r:"name",p:[76,6,1849]}]}," ",{p:[78,5,1879],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[79,6,1922]}]}," ",{p:[81,5,1954],t:7,e:"section",a:{"class":"cell"},f:[{p:[82,6,1983],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[82,19,1996]}],placeholder:"###","class":"number"}}]}," ",{p:[84,5,2063],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[85,6,2106],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[85,60,2160]}],params:['{ "id" : ',{t:2,r:"id",p:[85,115,2215]},', "sheets" : ',{t:2,r:"sheets",p:[85,134,2234]}," }"]},f:["Release"]}]}," ",{p:[89,5,2305],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"value",p:[90,6,2348]}]}]}],n:52,r:"data.materials",p:[73,3,1756]}," ",{t:4,f:[{p:[95,4,2431],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[96,5,2466],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[97,6,2495]}]}," ",{p:[99,5,2525],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[100,6,2568]}]}," ",{p:[102,5,2600],t:7,e:"section",a:{"class":"cell"},f:[{p:[103,6,2629],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[103,19,2642]}],placeholder:"###","class":"number"}}]}," ",{p:[105,5,2709],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[106,6,2752],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Smelt",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[106,58,2804]}],params:['{ "id" : ',{t:2,r:"id",p:[106,114,2860]},', "sheets" : ',{t:2,r:"sheets",p:[106,133,2879]}," }"]},f:["Smelt"]}]}," ",{p:[110,5,2947],t:7,e:"section",a:{"class":"cell",align:"right"},f:[]}]}],n:52,r:"data.alloys",p:[94,3,2405]}]}],n:50,x:{r:["data.materials","data.alloys"],s:"_0||_1"},p:[56,1,1372]}]},e.exports=a.extend(r.exports)},{341:341}],435:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,4,87],t:7,e:"ui-button",a:{icon:"remove",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[4,36,119]}],action:"empty_eject_beaker"},f:["Empty and eject"]}," ",{p:[7,4,231],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[7,35,262]}],action:"empty_beaker"},f:["Empty"]}," ",{p:[10,4,358],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[10,35,389]}],action:"eject_beaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{t:4,f:[{p:[15,4,528],t:7,e:"ui-section",f:[{t:4,f:[{p:[17,6,578],t:7,e:"span",a:{"class":"bad"},f:["The beaker is empty!"]}],n:50,r:"data.beaker_empty",p:[16,5,546]},{t:4,n:51,f:[{p:[19,6,644],t:7,e:"ui-subdisplay",a:{title:"Blood"},f:[{t:4,f:[{p:[21,8,712],t:7,e:"ui-section",a:{label:"Blood DNA"},f:[{t:2,r:"data.blood.dna",p:[21,38,742]}]}," ",{p:[22,8,782],t:7,e:"ui-section",a:{label:"Blood type"},f:[{t:2,r:"data.blood.type",p:[22,39,813]}]}],n:50,r:"data.has_blood",p:[20,7,681]},{t:4,n:51,f:[{p:[24,8,870],t:7,e:"ui-section",f:[{p:[25,9,892],t:7,e:"span",a:{"class":"average"},f:["No blood sample detected."]}]}],r:"data.has_blood"}]}],r:"data.beaker_empty"}]}],n:50,r:"data.has_beaker",p:[14,3,500]},{t:4,n:51,f:[{p:[32,4,1054],t:7,e:"ui-section",f:[{p:[33,5,1072],t:7,e:"span",a:{"class":"bad"},f:["No beaker loaded."]}]}],r:"data.has_beaker"}]}," ",{t:4,f:[{p:[38,3,1188],t:7,e:"ui-display",a:{title:"Diseases"},f:[{t:4,f:[{p:{button:[{t:4,f:[{p:[43,8,1343],t:7,e:"ui-button",a:{icon:"pencil",action:"rename_disease",state:[{t:2,x:{r:["can_rename"],s:'_0?"":"disabled"'},p:[43,64,1399]}],params:['{"index": ',{t:2,r:"index",p:[43,116,1451]},"}"]},f:["Name advanced disease"]}],n:50,r:"is_adv",p:[42,7,1320]}," ",{p:[47,7,1538],t:7,e:"ui-button",a:{icon:"flask",action:"create_culture_bottle",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[47,69,1600]}],params:['{"index": ',{t:2,r:"index",p:[47,124,1655]},"}"]},f:["Create virus culture bottle"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[40,24,1269]}],button:0},f:[" ",{p:[51,6,1749],t:7,e:"ui-section",a:{label:"Disease agent"},f:[{t:2,r:"agent",p:[51,40,1783]}]}," ",{p:[52,6,1812],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[52,38,1844]}]}," ",{p:[53,6,1879],t:7,e:"ui-section",a:{label:"Spread"},f:[{t:2,r:"spread",p:[53,33,1906]}]}," ",{p:[54,6,1936],t:7,e:"ui-section",a:{label:"Possible cure"},f:[{t:2,r:"cure",p:[54,40,1970]}]}," ",{t:4,f:[{p:[56,7,2021],t:7,e:"ui-section",a:{label:"Symptoms"},f:[{t:4,f:[{p:[58,9,2087],t:7,e:"ui-button",a:{action:"symptom_details",state:"",params:['{"picked_symptom": ',{t:2,r:"sym_index",p:[58,81,2159]},', "index": ',{t:2,r:"index",p:[58,105,2183]},"}"]},f:[{t:2,r:"name",p:[59,10,2206]}," "]},{p:[60,21,2236],t:7,e:"br"}],n:52,r:"symptoms",p:[57,8,2059]}]}," ",{p:[63,7,2289],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[63,38,2320]}]}," ",{p:[64,7,2355],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[64,35,2383]}]}," ",{p:[65,7,2415],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[65,39,2447]}]}," ",{p:[66,7,2483],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[66,44,2520]}]}],n:50,r:"is_adv",p:[55,6,1999]}]}],n:52,r:"data.viruses",p:[39,4,1222]},{t:4,n:51,f:[{p:[70,5,2601],t:7,e:"ui-section",f:[{p:[71,6,2620],t:7,e:"span",a:{"class":"average"},f:["No detectable virus in the blood sample."]}]}],r:"data.viruses"}]}," ",{p:[75,3,2743],t:7,e:"ui-display",a:{title:"Antibodies"},f:[{t:4,f:[{p:[77,5,2811],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[77,24,2830]}]},f:[{p:[78,7,2848],t:7,e:"ui-button",a:{icon:"eyedropper",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[78,43,2884]}],action:"create_vaccine_bottle",params:['{"index": ',{t:2,r:"id",p:[78,129,2970]},"}"]},f:["Create vaccine bottle"]}]}],n:52,r:"data.resistances",p:[76,4,2779]},{t:4,n:51,f:[{p:[83,5,3067],t:7,e:"ui-section",f:[{p:[84,6,3086],t:7,e:"span",a:{"class":"average"},f:["No antibodies detected in the blood sample."]}]}],r:"data.resistances"}]}],n:50,r:"data.has_blood",p:[37,2,1162]}],n:50,x:{r:["data.mode"],s:"_0==1"},p:[1,1,0]},{t:4,n:51,f:[{p:[90,2,3231],t:7,e:"ui-button",a:{icon:"undo",state:"",action:"back"},f:["Back"]}," ",{t:4,f:[{p:[94,4,3330],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[94,23,3349]}]},f:[{p:[95,4,3364],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[96,5,3382]}," ",{t:4,f:[{p:[98,5,3417],t:7,e:"br"}," ",{p:[99,5,3428],t:7,e:"b",f:["This symptom has been neutered, and has no effect. It will still affect the virus' statistics."]}],n:50,r:"neutered",p:[97,4,3395]}]}," ",{p:[102,4,3564],t:7,e:"ui-section",f:[{p:[103,5,3582],t:7,e:"ui-section",a:{label:"Level"},f:[{t:2,r:"level",p:[103,31,3608]}]}," ",{p:[104,5,3636],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[104,36,3667]}]}," ",{p:[105,5,3700],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[105,33,3728]}]}," ",{p:[106,5,3758],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[106,37,3790]}]}," ",{p:[107,5,3824],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[107,42,3861]}]}]}," ",{p:[109,4,3913],t:7,e:"ui-subdisplay",a:{title:"Effect Thresholds"},f:[{p:[110,5,3960],t:7,e:"ui-section",f:[{t:3,r:"threshold_desc",p:[110,17,3972]}]}]}]}],n:53,r:"data.symptom",p:[93,2,3303]}],x:{r:["data.mode"],s:"_0==1"}}]},e.exports=a.extend(r.exports)},{341:341}],436:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(484);e.exports={data:{filter:"",tooltiptext:function(t,e,n){var a="";return t&&(a+="REQUIREMENTS: "+t+" "),e&&(a+="CATALYSTS: "+e+" "),n&&(a+="TOOLS: "+n),a}},oninit:function(){var t=this;this.on({hover:function(t){this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}}),this.observe("filter",function(e,a,r){var i=null;i=t.get("data.display_compact")?t.findAll(".section"):t.findAll(".display:not(:first-child)"),(0,n.filterMulti)(i,t.get("filter").toLowerCase())},{init:!1})}}}(r),r.exports.template={v:3,t:[" ",{p:[48,1,1342],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[48,20,1361]},{t:4,f:[" : ",{t:2,r:"data.subcategory",p:[48,64,1405]}],n:50,r:"data.subcategory",p:[48,37,1378]}]},f:[{t:4,f:[{p:[50,3,1459],t:7,e:"ui-section",f:["Crafting... ",{p:[51,16,1488],t:7,e:"i",a:{"class":"fa-spin fa fa-spinner"}}]}],n:50,r:"data.busy",p:[49,2,1438]},{t:4,n:51,f:[{p:[54,3,1557],t:7,e:"ui-section",f:[{p:[55,4,1574],t:7,e:"table",a:{style:"width:100%"},f:[{p:[56,5,1606],t:7,e:"tr",f:[{p:[57,6,1617],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[58,7,1659],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardCat"},f:[{t:2,r:"data.prev_cat",p:[59,8,1718]}]}]}," ",{p:[62,6,1774],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[63,7,1816],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardCat"},f:[{t:2,r:"data.next_cat",p:[64,7,1874]}]}]}," ",{p:[67,6,1930],t:7,e:"td",a:{style:"float:right!important"},f:[{t:4,f:[{p:[69,7,2014],t:7,e:"ui-button",a:{icon:"lock",action:"toggle_recipes"},f:["Showing Craftable Recipes"]}],n:50,r:"data.display_craftable_only",p:[68,6,1971]},{t:4,n:51,f:[{p:[73,7,2138],t:7,e:"ui-button",a:{icon:"unlock",action:"toggle_recipes"},f:["Showing All Recipes"]}],r:"data.display_craftable_only"}]}," ",{p:[78,6,2268],t:7,e:"td",a:{style:"float:right!important"},f:[{p:[79,7,2310],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.display_compact"],s:'_0?"check-square-o":"square-o"'},p:[79,24,2327]}],action:"toggle_compact"},f:["Compact"]}]}]}," ",{p:[84,5,2474],t:7,e:"tr",f:[{t:4,f:[{p:[86,6,2515],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[87,7,2557],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardSubCat"},f:[{t:2,r:"data.prev_subcat",p:[88,8,2619]}]}]}," ",{p:[91,6,2678],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[92,7,2720],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardSubCat"},f:[{t:2,r:"data.next_subcat",p:[93,8,2782]}]}]}],n:50,r:"data.subcategory",p:[85,5,2484]}]}]}," ",{t:4,f:[{t:4,f:[" ",{p:[101,6,2992],t:7,e:"ui-input",a:{value:[{t:2,r:"filter",p:[101,23,3009]}],placeholder:"Filter.."}}],n:51,r:"data.display_compact",p:[100,5,2902]}],n:50,r:"config.fancy",p:[99,4,2876]}]}," ",{t:4,f:[{p:[106,5,3144],t:7,e:"ui-display",f:[{t:4,f:[{p:[108,6,3193],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[108,25,3212]}]},f:[{p:[109,7,3230],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[109,27,3250]}],"tooltip-side":"right",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[109,135,3358]},'"}'],icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.can_craft",p:[107,5,3162]}," ",{t:4,f:[{t:4,f:[{p:[116,7,3567],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[116,26,3586]}]},f:[{p:[117,8,3605],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[117,28,3625]}],"tooltip-side":"right",state:"disabled",icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.cant_craft",p:[115,6,3534]}],n:51,r:"data.display_craftable_only",p:[114,5,3495]}]}],n:50,r:"data.display_compact",p:[105,4,3110]},{t:4,n:51,f:[{t:4,f:[{p:[126,6,3947],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[126,25,3966]}]},f:[{t:4,f:[{p:[128,8,4009],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[129,9,4052]}]}],n:50,r:"req_text",p:[127,7,3984]}," ",{t:4,f:[{p:[133,8,4139],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[134,9,4179]}]}],n:50,r:"catalyst_text",p:[132,7,4109]}," ",{t:4,f:[{p:[138,8,4267],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[139,9,4303]}]}],n:50,r:"tool_text",p:[137,7,4241]}," ",{p:[142,7,4361],t:7,e:"ui-section",f:[{p:[143,8,4382],t:7,e:"ui-button",a:{icon:"gears",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[143,66,4440]},'"}']},f:["Craft"]}]}]}],n:52,r:"data.can_craft",p:[125,5,3916]}," ",{t:4,f:[{t:4,f:[{p:[151,7,4621],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[151,26,4640]}]},f:[{t:4,f:[{p:[153,9,4685],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[154,10,4729]}]}],n:50,r:"req_text",p:[152,8,4659]}," ",{t:4,f:[{p:[158,9,4820],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[159,10,4861]}]}],n:50,r:"catalyst_text",p:[157,8,4789]}," ",{t:4,f:[{p:[163,9,4953],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[164,10,4990]}]}],n:50,r:"tool_text",p:[162,8,4926]}]}],n:52,r:"data.cant_craft",p:[150,6,4588]}],n:51,r:"data.display_craftable_only",p:[149,5,4549]}],r:"data.display_compact"}],r:"data.busy"}]}]},e.exports=a.extend(r.exports)},{341:341,484:484}],437:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,15],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[2,23,35]}," connected to a tank."]}]}," ",{p:[4,1,113],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[5,3,151],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,5,186],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[6,11,192]}," kPa"]}]}," ",{p:[8,3,254],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[9,5,285],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[9,18,298]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[9,59,339]}]}]}]}," ",{p:[12,1,430],t:7,e:"ui-display",a:{title:"Pump"},f:[{p:[13,3,459],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,5,491],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[14,22,508]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[15,14,559]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[16,22,616]}]}]}," ",{p:[18,3,675],t:7,e:"ui-section",a:{label:"Direction"},f:[{p:[19,5,711],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"sign-out":"sign-in"'},p:[19,22,728]}],action:"direction"},f:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"Out":"In"'},p:[20,26,808]}]}]}," ",{p:[22,3,883],t:7,e:"ui-section",a:{label:"Target Pressure"},f:[{p:[23,5,925],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.min_pressure",p:[23,18,938]}],max:[{t:2,r:"data.max_pressure",p:[23,46,966]}],value:[{t:2,r:"data.target_pressure",p:[24,14,1003]}]},f:[{t:2,x:{r:["adata.target_pressure"],s:"Math.round(_0)"},p:[24,40,1029]}," kPa"]}]}," ",{p:[26,3,1100],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,1145],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.target_pressure","data.default_pressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,1178]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1328],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.target_pressure","data.min_pressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1359]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1500],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1595],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.target_pressure","data.max_pressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1625]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}," ",{p:{button:[{t:4,f:[{p:[39,7,1891],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[39,38,1922]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[38,5,1863]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[43,3,2042],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[44,4,2073]}]}," ",{p:[46,3,2115],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[47,4,2149]}," kPa"]}],n:50,r:"data.holding",p:[42,3,2018]},{t:4,n:51,f:[{p:[50,3,2223],t:7,e:"ui-section",f:[{p:[51,4,2240],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}]},e.exports=a.extend(r.exports)},{341:341}],438:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[3,1,69],t:7,e:"ui-notice",f:[{p:[4,3,84],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[4,23,104]}," connected to a tank."]}]}," ",{p:[6,1,182],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[7,3,220],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[8,5,255],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[8,11,261]}," kPa"]}]}," ",{p:[10,3,323],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[11,5,354],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[11,18,367]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[11,59,408]}]}]}]}," ",{p:[14,1,499],t:7,e:"ui-display",a:{title:"Filter"},f:[{p:[15,3,530],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[16,5,562],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[16,22,579]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[17,14,630]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[18,22,687]}]}]}]}," ",{p:{button:[{t:4,f:[{p:[24,7,856],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[24,38,887]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[23,5,828]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[28,3,1007],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[29,4,1038]}]}," ",{p:[31,3,1080],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[32,4,1114]}," kPa"]}],n:50,r:"data.holding",p:[27,3,983]},{t:4,n:51,f:[{p:[35,3,1188],t:7,e:"ui-section",f:[{p:[36,4,1205],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}," ",{p:[40,1,1293],t:7,e:"ui-display",a:{title:"Filters"},f:[{t:4,f:[{p:[42,5,1345],t:7,e:"filters"}],n:53,r:"data",p:[41,3,1325]}]}]},r.exports.components=r.exports.components||{};var i={filters:t(457)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,457:457}],439:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" ",{p:[42,1,1035],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[44,5,1093],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[44,27,1115]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[46,38,1267]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[47,15,1323]}],yinc:"9"}}],n:50,r:"config.fancy",p:[43,3,1067]},{t:4,n:51,f:[{p:[49,5,1373],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[50,7,1411],t:7,e:"span",f:[{t:2,r:"data.supply",p:[50,13,1417]}]}]}," ",{p:[52,5,1464],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[53,9,1499],t:7,e:"span",f:[{t:2,r:"data.demand",p:[53,15,1505]}]}]}],r:"config.fancy"}]}," ",{p:[57,1,1574],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[58,3,1604],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[59,5,1629],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[60,5,1666],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[61,5,1705],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[62,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[63,5,1781],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[64,5,1823],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[65,5,1864],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[68,5,1949],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[68,24,1968]}],nowrap:0},f:[{p:[69,7,1993],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[69,28,2014]}," %"]}," ",{p:[70,7,2072],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[70,28,2093]}]}," ",{p:[71,7,2135],t:7,e:"div",a:{"class":"content"},f:[{p:[71,28,2156],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[71,41,2169]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[71,70,2198]}]}]}," ",{p:[72,7,2245],t:7,e:"div",a:{"class":"content"},f:[{p:[72,28,2266],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[72,41,2279]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[72,64,2302]}," [",{p:[72,87,2325],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[72,93,2331]}]},"]"]}]}," ",{p:[73,7,2380],t:7,e:"div",a:{"class":"content"},f:[{p:[73,28,2401],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[73,41,2414]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[73,64,2437]}," [",{p:[73,87,2460],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[73,93,2466]}]},"]"]}]}," ",{p:[74,7,2515],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2536],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[74,41,2549]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[74,64,2572]}," [",{p:[74,87,2595],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[74,93,2601]}]},"]"]}]}]}],n:52,r:"data.areas",p:[67,3,1923]}]}]},e.exports=a.extend(r.exports)},{341:341}],440:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{readableFrequency:function(){return Math.round(this.get("adata.frequency"))/10}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,177],t:7,e:"ui-display",a:{title:"Settings"},f:[{t:4,f:[{p:[13,5,236],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,7,270],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[14,24,287]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[14,75,338]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"On":"Off"'},p:[16,9,413]}]}]}],n:50,r:"data.headset",p:[12,3,210]},{t:4,n:51,f:[{p:[19,5,494],t:7,e:"ui-section",a:{label:"Microphone"},f:[{p:[20,7,533],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.broadcasting"],s:'_0?"power-off":"close"'},p:[20,24,550]}],style:[{t:2,x:{r:["data.broadcasting"],s:'_0?"selected":null'},p:[20,78,604]}],action:"broadcast"},f:[{t:2,x:{r:["data.broadcasting"],s:'_0?"Engaged":"Disengaged"'},p:[22,9,685]}]}]}," ",{p:[24,5,769],t:7,e:"ui-section",a:{label:"Speaker"},f:[{p:[25,7,805],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[25,24,822]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[25,75,873]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"Engaged":"Disengaged"'},p:[27,9,948]}]}]}],r:"data.headset"}," ",{t:4,f:[{p:[31,5,1064],t:7,e:"ui-section",a:{label:"High Volume"},f:[{p:[32,7,1104],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.useCommand"],s:'_0?"power-off":"close"'},p:[32,24,1121]}],style:[{t:2,x:{r:["data.useCommand"],s:'_0?"selected":null'},p:[32,76,1173]}],action:"command"},f:[{t:2,x:{r:["data.useCommand"],s:'_0?"On":"Off"'},p:[34,9,1250]}]}]}],n:50,r:"data.command",p:[30,3,1038]}]}," ",{p:[38,1,1342],t:7,e:"ui-display",a:{title:"Channel"},f:[{p:[39,3,1374],t:7,e:"ui-section",a:{label:"Frequency"},f:[{t:4,f:[{p:[41,7,1439],t:7,e:"span",f:[{t:2,r:"readableFrequency",p:[41,13,1445]}]}],n:50,r:"data.freqlock",p:[40,5,1410]},{t:4,n:51,f:[{p:[43,7,1495],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[43,46,1534]}],action:"frequency",params:'{"adjust": -1}'}}," ",{p:[44,7,1646],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[44,41,1680]}],action:"frequency",params:'{"adjust": -.2}'}}," ",{p:[45,7,1793],t:7,e:"ui-button",a:{icon:"pencil",action:"frequency",params:'{"tune": "input"}'},f:[{t:2,r:"readableFrequency",p:[45,78,1864]}]}," ",{p:[46,7,1905],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[46,40,1938]}],action:"frequency",params:'{"adjust": .2}'}}," ",{p:[47,7,2050],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[47,45,2088]}],action:"frequency",params:'{"adjust": 1}'}}],r:"data.freqlock"}]}," ",{t:4,f:[{p:[51,5,2262],t:7,e:"ui-section",a:{label:"Subspace Transmission"},f:[{p:[52,7,2312],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.subspace"],s:'_0?"power-off":"close"'},p:[52,24,2329]}],style:[{t:2,x:{r:["data.subspace"],s:'_0?"selected":null'},p:[52,74,2379]}],action:"subspace"},f:[{t:2,x:{r:["data.subspace"],s:'_0?"Active":"Inactive"'},p:[53,29,2447]}]}]}],n:50,r:"data.subspaceSwitchable",p:[50,3,2225]}," ",{t:4,f:[{p:[57,5,2578],t:7,e:"ui-section",a:{label:"Channels"},f:[{t:4,f:[{p:[59,9,2656],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["."],s:'_0?"check-square-o":"square-o"'},p:[59,26,2673]}],style:[{t:2,x:{r:["."],s:'_0?"selected":null'},p:[60,18,2730]}],action:"channel",params:['{"channel": "',{t:2,r:"channel",p:[61,49,2806]},'"}']},f:[{t:2,r:"channel",p:[62,11,2833]}]},{p:[62,34,2856],t:7,e:"br"}],n:52,i:"channel",r:"data.channels",p:[58,7,2615]}]}],n:50,x:{r:["data.subspace","data.channels"],s:"_0&&_1"},p:[56,3,2534]}]}]},e.exports=a.extend(r.exports)},{341:341}],441:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," "," "," "," "," "," ",{p:[11,1,560],t:7,e:"rdheader"}," ",{t:4,f:[{p:[13,2,595],t:7,e:"ui-display",a:{title:"CONSOLE LOCKED"},f:[{p:[14,3,634],t:7,e:"ui-button",a:{action:"Unlock"},f:["Unlock"]}]}],n:50,r:"data.locked",p:[12,1,573]},{t:4,f:[{p:[18,2,729],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[18,17,744]}]},f:[{p:[19,3,763],t:7,e:"tab",a:{name:"Technology"},f:[{p:[20,4,791],t:7,e:"techweb"}]}," ",{p:[22,3,815],t:7,e:"tab",a:{name:"View Node"},f:[{p:[23,4,842],t:7,e:"nodeview"}]}," ",{p:[25,3,867],t:7,e:"tab",a:{name:"View Design"},f:[{p:[26,4,896],t:7,e:"designview"}]}," ",{p:[28,3,923],t:7,e:"tab",a:{name:"Disk Operations - Design"},f:[{p:[29,4,965],t:7,e:"diskopsdesign"}]}," ",{p:[31,3,995],t:7,e:"tab",a:{name:"Disk Operations - Technology"},f:[{p:[32,4,1041],t:7,e:"diskopstech"}]}," ",{p:[34,3,1069],t:7,e:"tab",a:{name:"Deconstructive Analyzer"},f:[{p:[35,4,1110],t:7,e:"destruct"}]}," ",{p:[37,3,1135],t:7,e:"tab",a:{name:"Protolathe"},f:[{p:[38,4,1163],t:7,e:"protolathe"}]}," ",{p:[40,3,1190],t:7,e:"tab",a:{name:"Circuit Imprinter"},f:[{p:[41,4,1225],t:7,e:"circuit"}]}," ",{p:[43,3,1249],t:7,e:"tab",a:{name:"Settings"},f:[{p:[44,4,1275],t:7,e:"settings"}]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[17,1,706]}]},r.exports.components=r.exports.components||{};var i={settings:t(450),circuit:t(442),protolathe:t(448),destruct:t(444),diskopsdesign:t(445),diskopstech:t(446),designview:t(443),nodeview:t(447),techweb:t(451),rdheader:t(449)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451}],442:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-display",a:{title:"Circuit Imprinter Busy!"}}],n:50,r:"data.circuitbusy",p:[2,2,30]},{t:4,n:51,f:[{p:[5,3,130],t:7,e:"ui-display",f:[{p:[6,4,147],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,189],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,202]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,261],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "circuit", "inputText" : ',{t:2,r:"textsearch",p:[8,84,340]},"}"]},f:["Search"]}]}," ",{p:[10,4,398],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.circuitmats",p:[10,27,421]}," / ",{t:2,r:"data.circuitmaxmats",p:[10,50,444]}]}," ",{p:[11,4,485],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.circuitchems",p:[11,26,507]}," / ",{t:2,r:"data.circuitmaxchems",p:[11,50,531]}]}," ",{p:[12,3,572],t:7,e:"ui-display",f:[{p:[14,3,590],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,605]}]},f:[{p:[15,4,631],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,696],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.circuitcat"],s:'_0=="{{name}}"?"selected":null'},p:[17,43,733]}],params:['{"type" : "circuit", "cat" : "',{t:2,r:"name",p:[17,135,825]},'"}']},f:[{t:2,r:"name",p:[17,147,837]}]}],n:52,r:"data.circuitcats",p:[16,5,663]}]}," ",{p:[20,4,888],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,956],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,968]},{t:2,r:"matstring",p:[22,26,976]}," ",{p:[23,7,997],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[23,40,1030]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[23,119,1109]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitdes",p:[21,5,924]}]}," ",{p:[27,4,1187],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[29,6,1254],t:7,e:"ui-section",f:[{t:2,r:"name",p:[29,18,1266]},{t:2,r:"matstring",p:[29,26,1274]}," ",{p:[30,7,1295],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[30,40,1328]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[30,119,1407]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitmatch",p:[28,5,1220]}]}," ",{p:[34,4,1485],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[36,6,1550],t:7,e:"ui-section",f:[{t:2,r:"name",p:[36,18,1562]}," : ",{t:2,r:"amount",p:[36,29,1573]}," cm3 - ",{t:4,f:[{p:[38,7,1623],t:7,e:"input",a:{value:[{t:2,r:"number",p:[38,20,1636]}],placeholder:["1-",{t:2,r:"sheets",p:[38,46,1662]}],"class":"number"}}," ",{p:[39,7,1698],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "circuit", "mat_id" : ',{t:2,r:"mat_id",p:[39,84,1775]},', "sheets" : ',{t:2,r:"number",p:[39,107,1798]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[37,6,1597]}]}],n:52,r:"data.circuitmat_list",p:[35,5,1513]}]}," ",{p:[44,4,1895],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[46,6,1961],t:7,e:"ui-section",f:[{t:2,r:"name",p:[46,18,1973]}," : ",{t:2,r:"amount",p:[46,29,1984]}," - ",{p:[47,7,2005],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "circuit", "name" : ',{t:2,r:"name",p:[47,80,2078]},', "id" : ',{t:2,r:"reagentid",p:[47,97,2095]},"}"]},f:["Purge"]}]}],n:52,r:"data.circuitchem_list",p:[45,5,1923]}]}]}]}]}],r:"data.circuitbusy"}],n:50,r:"data.circuit_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[55,2,2216],t:7,e:"ui-display",a:{title:"No Linked Circuit Imprinter"}}],r:"data.circuit_linked"}]},e.exports=a.extend(r.exports)},{341:341}],443:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,31],t:7,e:"ui-display",a:{title:[{t:2,r:"data.sdesign_name",p:[2,21,50]}]},f:[{p:[3,3,77],t:7,e:"ui-section",a:{title:"Description"},f:[{t:2,r:"data.sdesign_desc",p:[3,35,109]}]}]}," ",{p:[5,2,162],t:7,e:"ui-display",a:{title:"Lathe Types"},f:[{t:4,f:[{p:[7,4,239],t:7,e:"ui-section",a:{title:"Circuit Imprinter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&1"},p:[6,3,198]}," ",{t:4,f:[{p:[10,4,346],t:7,e:"ui-section",a:{title:"Protolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&2"},p:[9,3,305]}," ",{t:4,f:[{p:[13,4,446],t:7,e:"ui-section",a:{title:"Autolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&4"},p:[12,3,405]}," ",{t:4,f:[{p:[16,4,545],t:7,e:"ui-section",a:{title:"Crafting Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&8"},p:[15,3,504]}," ",{t:4,f:[{p:[19,4,655],t:7,e:"ui-section",a:{title:"Exosuit Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],
-s:"_0&16"},p:[18,3,613]}," ",{t:4,f:[{p:[22,4,764],t:7,e:"ui-section",a:{title:"Biogenerator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&32"},p:[21,3,722]}," ",{t:4,f:[{p:[25,4,867],t:7,e:"ui-section",a:{title:"Limb Grower"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&64"},p:[24,3,825]}," ",{t:4,f:[{p:[28,4,970],t:7,e:"ui-section",a:{title:"Ore Smelter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&128"},p:[27,3,927]}]}," ",{p:[31,2,1045],t:7,e:"ui-display",a:{title:"Materials"},f:[{t:4,f:[{p:[33,4,1116],t:7,e:"ui-section",a:{title:[{t:2,r:"matname",p:[33,23,1135]}]},f:[{t:2,r:"matamt",p:[33,36,1148]}," cm^3"]}],n:52,r:"data.sdesign_materials",p:[32,3,1079]}]}],n:50,r:"data.design_selected",p:[1,1,0]},{t:4,f:[{p:[38,2,1248],t:7,e:"ui-display",a:{title:"No Design Selected."}}],n:50,x:{r:["data.design_selected"],s:"!_0"},p:[37,1,1216]}]},e.exports=a.extend(r.exports)},{341:341}],444:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[4,3,60],t:7,e:"ui-display",a:{title:"Destructive Analyzer Busy!"}}],n:50,r:"data.destroybusy",p:[3,2,32]},{t:4,n:51,f:[{t:4,f:[{p:[7,4,168],t:7,e:"ui-display",a:{title:"Destructive Analyzer Unloaded"}}],n:50,x:{r:["data.destroy_loaded"],s:"!_0"},p:[6,3,135]},{t:4,n:51,f:[{p:[9,4,248],t:7,e:"ui-display",a:{title:"Loaded Item"},f:[{p:[10,4,285],t:7,e:"ui-section",a:{title:"Name"},f:[{t:2,r:"data.destroy_name",p:[10,29,310]}]}]}," ",{p:[12,4,367],t:7,e:"ui-display",a:{title:"Boost Nodes"},f:[{t:4,f:[{p:[14,6,438],t:7,e:"ui-section",a:{title:[{t:2,r:"name",p:[14,25,457]}," | ",{t:2,r:"value",p:[14,36,468]}]},f:[{p:[15,7,487],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["allow"],s:'_0?null:"disabled"'},p:[15,25,505]}],action:"deconstruct",params:['{"id":',{t:2,r:"id",p:[15,90,570]},"}"]},f:["Deconstruct and Boost"]}]}],n:52,r:"data.boost_paths",p:[13,5,405]}]}," ",{p:[19,4,670],t:7,e:"ui-button",a:{action:"eject_da"},f:["Eject Item"]}],x:{r:["data.destroy_loaded"],s:"!_0"}}],r:"data.destroybusy"}],n:50,r:"data.destroy_linked",p:[2,1,2]},{t:4,n:51,f:[{p:[23,2,755],t:7,e:"ui-display",a:{title:"No Linked Destructive Analyzer"}}],r:"data.destroy_linked"}]},e.exports=a.extend(r.exports)},{341:341}],445:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,24],t:7,e:"ui-display",a:{title:"No Design Disk Loaded"}}],n:50,x:{r:["data.ddisk"],s:"!_0"},p:[2,1,2]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,121],t:7,e:"ui-display",a:{title:"Design Disk Updating"}}],n:50,r:"data.ddisk_update",p:[5,2,92]},{t:4,n:51,f:[{t:4,f:[{p:[9,4,221],t:7,e:"ui-display",a:{title:"Design Disk"},f:[{p:[10,5,259],t:7,e:"ui-section",a:{title:"Disk Space"},f:["Disk Capacity: ",{t:2,r:"data.ddisk_size",p:[10,51,305]}," blueprints."]}," ",{p:[11,5,355],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[11,33,383],t:7,e:"ui-button",a:{action:"ddisk_upall"},f:["Upload all designs"]}]}," ",{p:[12,5,464],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[12,36,495],t:7,e:"ui-button",a:{action:"clear_designdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[13,5,591],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[13,36,622],t:7,e:"ui-button",a:{action:"eject_designdisk"},f:["Eject Disk"]}]}]}," ",{p:[15,4,717],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[17,6,792],t:7,e:"ui-section",a:{title:"Number"},f:["#",{t:2,r:"pos",p:[17,34,820]},": ",{t:4,f:[{p:[19,8,866],t:7,e:"ui-button",a:{action:"upload_empty_ddisk_slot",params:['{"slot": "',{t:2,r:"pos",p:[19,70,928]},'"}']},f:["Upload to Empty Slot"]}],n:50,x:{r:["id"],s:'_0=="null"'},p:[18,7,837]},{t:4,n:51,f:[{p:[21,8,996],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[21,58,1046]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[21,75,1063]}]},f:[{t:2,r:"name",p:[21,122,1110]}]}," ",{p:[22,8,1139],t:7,e:"ui-button",a:{action:"ddisk_erasepos",style:"danger",params:['{"id": "',{t:2,r:"id",p:[22,74,1205]},'"}'],state:[{t:2,x:{r:["id"],s:'_0=="null"?"disabled":null'},p:[22,91,1222]}]},f:["Delete Slot"]}],x:{r:["id"],s:'_0=="null"'}}]}],n:52,r:"data.ddisk_designs",p:[16,5,757]}]}],n:50,x:{r:["data.ddisk_upload"],s:"!_0"},p:[8,3,190]},{t:4,n:51,f:[{p:[28,4,1367],t:7,e:"ui-display",a:{title:"Upload Design to Disk"},f:[{p:[28,46,1409],t:7,e:"ui-section",f:["Available Designs:"]}]}," ",{t:4,f:[{p:[30,5,1513],t:7,e:"ui-section",f:[{p:[30,17,1525],t:7,e:"ui-button",a:{action:"ddisk_uploaddesign",params:['{"id": "',{t:2,r:"id",p:[30,72,1580]},'"}']},f:[{t:2,r:"name",p:[30,82,1590]}]}]}],n:52,r:"data.ddisk_possible_designs",p:[29,4,1470]}],x:{r:["data.ddisk_upload"],s:"!_0"}}],r:"data.ddisk_update"}],x:{r:["data.ddisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],446:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,24],t:7,e:"ui-display",a:{title:"No Technology Disk Loaded"}}],n:50,x:{r:["data.tdisk"],s:"!_0"},p:[2,1,2]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,125],t:7,e:"ui-display",a:{title:"Technology Disk Updating"}}],n:50,r:"data.tdisk_update",p:[5,2,96]},{t:4,n:51,f:[{p:[8,3,198],t:7,e:"ui-display",a:{title:"Technology Disk"},f:[{p:[9,4,239],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[9,32,267],t:7,e:"ui-button",a:{action:"tdisk_down"},f:["Download Research to Disk"]},{p:[9,100,335],t:7,e:"ui-button",a:{action:"tdisk_up"},f:["Upload Research from Disk"]}," ",{p:[10,4,406],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[10,35,437],t:7,e:"ui-button",a:{action:"clear_techdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[11,4,530],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[11,35,561],t:7,e:"ui-button",a:{action:"eject_techdisk"},f:["Eject Disk"]}]}]}]}," ",{p:[13,3,652],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[15,5,723],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,53,771]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,70,788]}]},f:[{t:2,r:"display_name",p:[15,115,833]}]}],n:52,r:"data.tdisk_nodes",p:[14,4,691]}]}],r:"data.tdisk_update"}],x:{r:["data.tdisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],447:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,29],t:7,e:"ui-display",a:{title:[{t:2,r:"data.snode_name",p:[2,21,48]}]},f:[{p:[3,3,73],t:7,e:"ui-section",a:{title:"Description"},f:["Description: ",{t:2,r:"data.snode_desc",p:[3,48,118]}]}," ",{p:[4,3,154],t:7,e:"ui-section",a:{title:"Point Cost"},f:["Point Cost: ",{t:2,r:"data.snode_cost",p:[4,46,197]}]}," ",{p:[5,3,233],t:7,e:"ui-section",a:{title:"Export Price"},f:["Export Price: ",{t:2,r:"data.snode_export",p:[5,50,280]}]}," ",{p:[6,3,318],t:7,e:"ui-button",a:{action:"research_node",params:['{"id"="',{t:2,r:"id",p:[6,52,367]},'"}'],state:[{t:2,x:{r:["data.snode_researched"],s:'_0?"disabled":null'},p:[6,69,384]}]},f:[{t:2,x:{r:["data.snode_researched"],s:'_0?"Researched":"Research Node"'},p:[6,115,430]}]}]}," ",{p:[8,2,518],t:7,e:"ui-display",a:{title:"Prerequisites"},f:[{t:4,f:[{p:[10,4,588],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[10,52,636]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[10,69,653]}]},f:[{t:2,r:"display_name",p:[10,114,698]}]}],n:52,r:"data.node_prereqs",p:[9,3,556]}]}," ",{p:[13,2,759],t:7,e:"ui-display",a:{title:"Unlocks"},f:[{t:4,f:[{p:[15,4,823],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,52,871]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,69,888]}]},f:[{t:2,r:"display_name",p:[15,114,933]}]}],n:52,r:"data.node_unlocks",p:[14,3,791]}]}," ",{p:[18,2,994],t:7,e:"ui-display",a:{title:"Designs"},f:[{t:4,f:[{p:[20,4,1058],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[20,54,1108]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[20,71,1125]}]},f:[{t:2,r:"name",p:[20,118,1172]}]}],n:52,r:"data.node_designs",p:[19,3,1026]}]}],n:50,r:"data.node_selected",p:[1,1,0]},{t:4,f:[{p:[25,2,1263],t:7,e:"ui-display",a:{title:"No Node Selected."}}],n:50,x:{r:["data.node_selected"],s:"!_0"},p:[24,1,1233]}]},e.exports=a.extend(r.exports)},{341:341}],448:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,59],t:7,e:"ui-display",a:{title:"Protolathe Busy!"}}],n:50,r:"data.protobusy",p:[2,2,33]},{t:4,n:51,f:[{p:[5,3,124],t:7,e:"ui-display",f:[{p:[6,4,141],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,183],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,196]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,255],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "proto", "inputText" : ',{t:2,r:"textsearch",p:[8,82,332]},"}"]},f:["Search"]}]}," ",{p:[10,4,390],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.protomats",p:[10,27,413]}," / ",{t:2,r:"data.protomaxmats",p:[10,48,434]}]}," ",{p:[11,4,473],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.protochems",p:[11,26,495]}," / ",{t:2,r:"data.protomaxchems",p:[11,48,517]}]}," ",{p:[12,3,556],t:7,e:"ui-display",f:[{p:[14,3,574],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,589]}]},f:[{p:[15,4,615],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,678],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.protocat","name"],s:'_0==_1?"selected":null'},p:[17,43,715]}],params:['{"type" : "proto", "cat" : "',{t:2,r:"name",p:[17,125,797]},'"}']},f:[{t:2,r:"name",p:[17,137,809]}]}],n:52,r:"data.protocats",p:[16,5,647]}]}," ",{p:[20,4,860],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,926],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,938]},{t:2,r:"matstring",p:[22,26,946]}," ",{t:4,f:[{p:[24,8,996],t:7,e:"input",a:{value:[{t:2,r:"number",p:[24,21,1009]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[24,47,1035]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[23,7,967]}," ",{p:[26,7,1108],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[26,40,1141]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[26,117,1218]},'", "amount" : "',{t:2,r:"number",p:[26,138,1239]},'"}']},f:["Print"]}]}],n:52,r:"data.protodes",p:[21,5,896]}]}," ",{p:[30,4,1321],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[32,6,1386],t:7,e:"ui-section",f:[{t:2,r:"name",p:[32,18,1398]},{t:2,r:"matstring",p:[32,26,1406]}," ",{t:4,f:[{p:[34,8,1456],t:7,e:"input",a:{value:[{t:2,r:"number",p:[34,21,1469]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[34,47,1495]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[33,7,1427]}," ",{p:[36,7,1568],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[36,40,1601]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[36,117,1678]},'", "amount" : "',{t:2,r:"number",p:[36,138,1699]},'"}']},f:["Print"]}]}],n:52,r:"data.protomatch",p:[31,5,1354]}]}," ",{p:[40,4,1781],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[42,6,1844],t:7,e:"ui-section",f:[{t:2,r:"name",p:[42,18,1856]}," : ",{t:2,r:"amount",p:[42,29,1867]}," cm3 - ",{t:4,f:[{p:[44,7,1917],t:7,e:"input",a:{value:[{t:2,r:"number",p:[44,20,1930]}],placeholder:["1-",{t:2,r:"sheets",p:[44,46,1956]}],"class":"number"}}," ",{p:[45,7,1992],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "proto", "mat_id" : ',{t:2,r:"mat_id",p:[45,82,2067]},', "sheets" : ',{t:2,r:"number",p:[45,105,2090]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[43,6,1891]}]}],n:52,r:"data.protomat_list",p:[41,5,1809]}]}," ",{p:[50,4,2187],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[52,6,2251],t:7,e:"ui-section",f:[{t:2,r:"name",p:[52,18,2263]}," : ",{t:2,r:"amount",p:[52,29,2274]}," - ",{p:[53,7,2295],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "proto", "name" : ',{t:2,r:"name",p:[53,78,2366]},', "id" : ',{t:2,r:"reagentid",p:[53,95,2383]},"}"]},f:["Purge"]}]}],n:52,r:"data.protochem_list",p:[51,5,2215]}]}]}]}]}],r:"data.protobusy"}],n:50,r:"data.protolathe_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[61,2,2504],t:7,e:"ui-display",a:{title:"No Linked Protolathe"}}],r:"data.protolathe_linked"}]},e.exports=a.extend(r.exports)},{341:341}],449:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,1,14],t:7,e:"span",a:{"class":"memoedit"},f:["Nanotrasen R&D Console"]},{p:[2,53,66],t:7,e:"br"}," Available Points: ",{p:[3,19,91],t:7,e:"ui-section",a:{title:"Research Points"},f:[{t:2,r:"data.research_points_stored",p:[3,55,127]}]}," ",{p:[4,1,173],t:7,e:"ui-section",a:{title:["Page Selection - ",{t:2,r:"page",p:[4,37,209]}]},f:[{p:[4,47,219],t:7,e:"input",a:{value:[{t:2,r:"pageselect",p:[4,60,232]}],placeholder:"1","class":"number"}}," Select Page: ",{p:[5,14,294],t:7,e:"ui-button",a:{action:"page",params:['{"num" : "',{t:2,r:"pageselect",p:[5,57,337]},'"}']},f:["[Go]"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],450:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"span",a:{"class":"bad"},f:["Settings"]},{p:[1,34,33],t:7,e:"br"},{p:[1,39,38],t:7,e:"br"}," ",{p:[2,1,45],t:7,e:"ui-button",a:{action:"Resync"},f:["RESYNC MACHINERY"]},{p:[2,56,100],t:7,e:"br"}," ",{p:[3,1,107],t:7,e:"ui-button",a:{action:"Lock"},f:["LOCK"]}," ",{p:[4,1,150],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "destroy"}',state:[{t:2,x:{r:["data.destroy_linked"],s:'_0?null:"disabled"'},p:[4,71,220]}]},f:["Disconnect Destructive Analyzer"]}," ",{p:[5,1,309],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "lathe"}',state:[{t:2,x:{r:["data.protolathe_linked"],s:'_0?null:"disabled"'},p:[5,69,377]}]},f:["Disconnect Protolathe"]}," ",{p:[6,1,459],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "imprinter"}',state:[{t:2,x:{r:["data.circuit_linked"],s:'_0?null:"disabled"'},p:[6,73,531]}]},f:["Disconnect Circuit Imprinter"]}]},e.exports=a.extend(r.exports)},{341:341}],451:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Available for Research"},f:[{t:4,f:[{p:[3,3,78],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[3,51,126]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[3,68,143]}]},f:[{t:2,r:"display_name",p:[3,113,188]}]}],n:52,r:"data.techweb_avail",p:[2,2,46]}]}," ",{p:[6,1,245],t:7,e:"ui-display",a:{title:"Locked Nodes"},f:[{t:4,f:[{p:[8,3,314],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[8,51,362]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[8,68,379]}]},f:[{t:2,r:"display_name",p:[8,113,424]}]}],n:52,r:"data.techweb_locked",p:[7,2,281]}]}," ",{p:[11,1,482],t:7,e:"ui-display",a:{title:"Researched Nodes"},f:[{t:4,f:[{p:[13,3,559],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[13,51,607]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[13,68,624]}]},f:[{t:2,r:"display_name",p:[13,113,669]}]}],n:52,r:"data.techweb_researched",p:[12,2,522]}]}]},e.exports=a.extend(r.exports)},{341:341}],452:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,25],t:7,e:"ui-notice",f:[{p:[3,3,40],t:7,e:"span",f:["The grinder is currently processing and cannot be used."]}]}],n:50,r:"data.processing",p:[1,1,0]},{p:{button:[{p:[8,5,208],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[8,36,239]}],action:"eject"},f:["Eject Contents"]}]},t:7,e:"ui-display",a:{title:"Processing Chamber",button:0},f:[" ",{p:[10,3,364],t:7,e:"ui-section",a:{label:"Grinding"},f:[{p:[11,5,399],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.operating"],s:'_0?"average":"good"'},p:[11,18,412]}]},f:[{t:2,x:{r:["data.operating"],s:'_0?"Busy":"Ready"'},p:[11,59,453]}]}," ",{p:[12,2,500],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[12,35,533]}],action:"grind"},f:["Activate"]}]}," ",{p:[14,3,653],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[17,9,755],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["The ",{t:2,r:"name",p:[17,56,802]}]},{p:[17,71,817],t:7,e:"br"}],n:52,r:"adata.contentslist",p:[16,7,717]},{t:4,n:51,f:[{p:[19,9,848],t:7,e:"span",f:["No Contents"]}],r:"adata.contentslist"}],n:50,r:"data.contents",p:[15,5,688]},{t:4,n:51,f:[{p:[22,7,911],t:7,e:"span",f:["No Contents"]}],r:"data.contents"}]}]}," ",{p:{button:[{p:[28,5,1047],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.isBeakerLoaded"],s:'(_0==0)&&_1?null:"disabled"'},p:[28,36,1078]}],action:"detach"},f:["Detach"]}]},t:7,e:"ui-display",a:{title:"Container",button:0},f:[" ",{p:[30,3,1202],t:7,e:"ui-section",a:{label:"Reagents"},f:[{t:4,f:[{p:[32,7,1272],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[32,13,1278]},"/",{t:2,r:"data.beakerMaxVolume",p:[32,55,1320]}," Units"]}," ",{p:[33,7,1365],t:7,e:"br"}," ",{t:4,f:[{p:[35,9,1418],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[35,52,1461]}," units of ",{t:2,r:"name",p:[35,87,1496]}]},{p:[35,102,1511],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[34,7,1378]},{t:4,n:51,f:[{p:[37,9,1542],t:7,e:"span",a:{"class":"bad"},f:["Container Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[31,5,1237]},{t:4,n:51,f:[{p:[40,7,1621],t:7,e:"span",a:{"class":"average"},f:["No Container"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],453:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,105],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,123]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,195]},', "flipped": ',{t:2,r:"flipped",p:[6,42,215]},"}"]},f:[{p:[6,56,229],t:7,e:"span",a:{"class":["pipes32x32 ",{t:2,r:"dir",p:[6,80,253]},"-",{t:2,r:"icon_state",p:[6,88,261]}],title:[{t:2,r:"dir_name",p:[6,111,284]}]}}]}],n:52,r:"previews",p:[4,4,81]}]}],n:52,r:"data.preview_rows",p:[2,2,33]}]}," ",{t:4,f:[{p:[12,2,406],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[14,4,468],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["@key","data.selected_color"],s:'_0==_1?"selected":null'},p:[14,22,486]}],action:"color",params:['{"paint_color": ',{t:2,r:"@key",p:[15,44,583]},"}"]},f:[{t:2,r:"@key",p:[15,55,594]}]}],n:52,r:"data.paint_colors",p:[13,3,436]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[11,1,377]},{p:[19,1,654],t:7,e:"ui-display",a:{title:"Utilities"},f:[{p:[20,2,687],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&1?"check-square-o":"square-o"'},p:[20,19,704]}],action:"mode",params:'{"mode": 1}'},f:["Build"]}," ",{p:[22,2,813],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&2?"check-square-o":"square-o"'},p:[22,19,830]}],action:"mode",params:'{"mode": 2}'},f:["Wrench"]}," ",{p:[24,2,940],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&4?"check-square-o":"square-o"'},p:[24,19,957]}],action:"mode",params:'{"mode": 4}'},f:["Destroy"]}," ",{t:4,f:[{p:[27,3,1098],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&8?"check-square-o":"square-o"'},p:[27,20,1115]}],action:"mode",params:'{"mode": 8}'},f:["Paint"]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[26,2,1068]}]}," ",{p:[31,1,1249],t:7,e:"ui-display",a:{title:"Category"},f:[{p:[32,2,1281],t:7,e:"ui-section",f:[{p:[33,3,1297],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==0?"check-square-o":"square-o"'},p:[33,20,1314]}],state:[{t:2,x:{r:["data.category"],s:'_0<=0?"selected":null'},p:[33,83,1377]}],action:"category",params:'{"category": 0}'},f:["Atmospherics"]}," ",{p:[35,3,1496],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==1?"check-square-o":"square-o"'},p:[35,20,1513]}],state:[{t:2,x:{r:["data.category"],s:'_0==1?"selected":null'},p:[35,83,1576]}],action:"category",params:'{"category": 1}'},f:["Disposals"]}," ",{p:[37,3,1692],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==2?"check-square-o":"square-o"'},p:[37,20,1709]}],state:[{t:2,x:{r:["data.category"],s:'_0==2?"selected":null'},p:[37,83,1772]}],action:"category",params:'{"category": 2}'},f:["Transit Tubes"]}]}," ",{t:4,f:[{p:[41,3,1937],t:7,e:"ui-section",a:{label:"Piping Layer"},f:[{p:[42,4,1975],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==1?"selected":null'},p:[42,22,1993]}],action:"piping_layer",params:'{"piping_layer": 1}'},f:["1"]}," ",{p:[44,4,2115],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==2?"selected":null'},p:[44,22,2133]}],action:"piping_layer",params:'{"piping_layer": 2}'},f:["2"]}," ",{p:[46,4,2255],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==3?"selected":null'},p:[46,22,2273]}],action:"piping_layer",params:'{"piping_layer": 3}'},f:["3"]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[40,2,1907]}]}," ",{t:4,f:[{p:[52,2,2462],t:7,e:"ui-display",a:{title:[{t:2,r:"cat_name",p:[52,21,2481]}]},f:[{t:4,f:[{p:[54,4,2521],t:7,e:"ui-section",f:[{p:[55,5,2539],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[55,23,2557]}],action:"pipe_type",params:['{"pipe_type": ',{t:2,r:"pipe_index",p:[56,28,2638]},', "category": ',{t:2,r:"cat_name",p:[56,56,2666]},"}"]},f:[{t:2,r:"pipe_name",p:[56,71,2681]}]}]}],n:52,r:"recipes",p:[53,3,2499]}]}],n:52,r:"data.categories",p:[51,1,2434]}]},e.exports=a.extend(r.exports)},{341:341}],454:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[3,3,60],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[3,21,78]}],action:"color",params:['{"paint_color": ',{t:2,r:"color_name",p:[4,28,155]},"}"]},f:[{t:2,r:"color_name",p:[4,45,172]}]}],n:52,r:"data.paint_colors",p:[2,2,29]}]}]},e.exports=a.extend(r.exports)},{341:341}],455:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,105],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,123]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,195]},', "flipped": ',{t:2,r:"flipped",p:[6,42,215]},"}"]},f:[{p:[6,56,229],t:7,e:"img",a:{src:["pipe.",{t:2,r:"dir",p:[6,71,244]},".",{t:2,r:"icon_state",p:[6,79,252]},".png"],title:[{t:2,r:"dir_name",p:[6,106,279]}]}}]}],n:52,r:"previews",p:[4,4,81]}]}],n:52,r:"data.preview_rows",p:[2,2,33]}]}]},e.exports=a.extend(r.exports)},{341:341}],456:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,40]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,82],t:7,e:"ui-display",a:{title:"Satellite Network Control",button:0},f:[{t:4,f:[{p:[8,4,168],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[9,9,209],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[9,31,231]}]}," ",{p:[10,9,253],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"mode",p:[10,30,274]}]}," ",{p:[11,9,298],t:7,e:"div",a:{"class":"content"},f:[{p:[12,11,331],t:7,e:"ui-button",a:{action:"toggle",params:['{"id": "',{t:2,r:"id",p:[12,54,374]},'"}']},f:[{t:2,x:{r:["active"],s:'_0?"Deactivate":"Activate"'},p:[12,64,384]}]}]}]}],n:52,r:"data.satellites",p:[7,2,138]}]}," ",{t:4,f:[{p:[18,1,528],t:7,e:"ui-display",a:{title:"Station Shield Coverage"},f:[{p:[19,3,576],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.meteor_shield_coverage_max",p:[19,24,597]}],value:[{t:2,r:"data.meteor_shield_coverage",p:[19,68,641]}]},f:[{t:2,x:{r:["data.meteor_shield_coverage","data.meteor_shield_coverage_max"],s:"100*_0/_1"},p:[19,101,674]}," %"]}," ",{p:[20,1,758],t:7,e:"ui-display",f:[]}]}],n:50,r:"data.meteor_shield",p:[17,1,500]}]},e.exports=a.extend(r.exports)},{341:341}],457:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,26],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[2,20,43]}],style:[{t:2,x:{r:["enabled"],s:'_0?"selected":null'},p:[2,72,95]}],action:"toggle_filter",params:['{"id_tag": "',{t:2,r:"id_tag",p:[3,48,176]},'", "val": ',{t:2,r:"gas_id",p:[3,68,196]},"}"]},f:[{t:2,r:"gas_name",p:[3,81,209]}]}],n:52,r:"filter_types",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],458:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," ",{p:[5,1,200],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[5,16,215]}]},f:[{p:[6,2,233],t:7,e:"tab",a:{name:"Status"},f:[{p:[7,3,256],t:7,e:"status"}]}," ",{p:[9,2,277],t:7,e:"tab",a:{name:"Templates"},f:[{p:[10,3,303],t:7,e:"templates"}]}," ",{p:[12,2,327],t:7,e:"tab",a:{name:"Modification"},f:[{t:4,f:[{p:[14,3,381],t:7,e:"modification"}],n:50,r:"data.selected",p:[13,3,356]}," ",{t:4,f:[{p:[17,3,437],t:7,e:"span",a:{"class":"bad"},f:["No shuttle selected."]}],n:50,x:{r:["data.selected"],s:"!_0"},p:[16,3,411]}]}]}]},r.exports.components=r.exports.components||{};var i={modification:t(459),templates:t(461),status:t(460)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,459:459,460:460,461:461}],459:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:["Selected: ",{t:2,r:"data.selected.name",p:[1,30,29]}]},f:[{t:4,f:[{p:[3,5,96],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.selected.description",p:[3,37,128]}]}],n:50,r:"data.selected.description",p:[2,3,57]}," ",{t:4,f:[{p:[6,5,224],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"data.selected.admin_notes",p:[6,37,256]}]}],n:50,r:"data.selected.admin_notes",p:[5,3,185]}]}," ",{t:4,f:[{p:[11,3,361],t:7,e:"ui-display",a:{title:["Existing Shuttle: ",{t:2,r:"data.existing_shuttle.name",p:[11,40,398]}]},f:["Status: ",{t:2,r:"data.existing_shuttle.status",p:[12,13,444]}," ",{t:4,f:["(",{t:2,r:"data.existing_shuttle.timeleft",p:[14,8,526]},")"],n:50,r:"data.existing_shuttle.timer",p:[13,5,482]}," ",{p:[16,5,580],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"data.existing_shuttle.id",p:[17,41,649]},'"}']},f:["Jump To"]}]}],n:50,r:"data.existing_shuttle",p:[10,1,328]},{t:4,f:[{p:[24,3,778],t:7,e:"ui-display",a:{title:"Existing Shuttle: None"}}],n:50,x:{r:["data.existing_shuttle"],s:"!_0"},p:[23,1,744]},{p:[27,1,847],t:7,e:"ui-button",a:{action:"preview",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[28,27,902]},'"}']},f:["Preview"]}," ",{p:[31,1,961],t:7,e:"ui-button",a:{action:"load",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[32,27,1013]},'"}'],style:"danger"},f:["Load"]}," ",{p:[37,1,1089],t:7,e:"ui-display",a:{title:"Status"},f:[]}]},e.exports=a.extend(r.exports)},{341:341}],460:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"table",a:{width:"100%"},f:[{t:4,f:[{p:[3,3,49],t:7,e:"tr",f:[{p:[4,5,59],t:7,e:"td",f:[{p:[5,7,71],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"id",p:[5,69,133]},'"}']},f:["JMP"]}]}," ",{p:[9,5,193],t:7,e:"td",f:[{p:[10,7,205],t:7,e:"ui-button",a:{action:"fly",params:['{"id": "',{t:2,r:"id",p:[10,47,245]},'"}'],state:[{t:2,x:{r:["can_fly"],s:'_0?null:"disabled"'},p:[10,64,262]}]},f:["Fly"]}]}," ",{p:[14,5,345],t:7,e:"td",f:[{t:2,r:"name",p:[15,7,357]}," (",{p:[15,17,367],t:7,e:"code",f:[{t:2,r:"id",p:[15,23,373]}]},")"]}," ",{p:[17,5,404],t:7,e:"td",f:[{t:2,r:"status",p:[18,7,416]}]}," ",{p:[20,5,443],t:7,e:"td",f:[{t:4,f:[{t:2,r:"mode",p:[22,9,477]}],n:50,r:"mode",p:[21,7,455]}," ",{t:4,f:["(",{t:2,r:"timeleft",p:[25,10,532]},") ",{p:[26,9,555],t:7,e:"ui-button",a:{action:"fast_travel",params:['{"id": "',{t:2,r:"id",p:[26,57,603]},'"}'],state:[{t:2,x:{r:["can_fast_travel"],s:'_0?null:"disabled"'},p:[26,74,620]}]},f:["Fast Travel"]}],n:50,r:"timer",p:[24,7,508]}]}]}],n:52,r:"data.shuttles",p:[2,1,22]}]}]},e.exports=a.extend(r.exports)},{341:341}],461:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.templates_tabs",p:[1,16,15]}]},f:[{t:4,f:[{p:[3,5,74],t:7,e:"tab",a:{name:[{t:2,r:"port_id",p:[3,16,85]}]},f:[{t:4,f:[{p:[5,9,135],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[5,28,154]}]},f:[{t:4,f:[{p:[7,13,209],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[7,45,241]}]}],n:50,r:"description",p:[6,11,176]}," ",{t:4,f:[{p:[10,13,333],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"admin_notes",p:[10,45,365]}]}],n:50,r:"admin_notes",p:[9,11,300]}," ",{p:[13,11,426],t:7,e:"ui-button",a:{action:"select_template",params:['{"shuttle_id": "',{t:2,r:"shuttle_id",p:[14,37,499]},'"}'],state:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"selected":null'},p:[15,20,537]}]},f:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"Selected":"Select"'},p:[17,13,630]}]}]}],n:52,r:"templates",p:[4,7,106]}]}],n:52,r:"data.templates",p:[2,3,44]}]}]},e.exports=a.extend(r.exports)},{341:341}],462:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,33],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,66],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,72]}]}]}," ",{t:4,f:[{p:[6,5,186],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,220],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,233]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,262]}]}]}," ",{p:[9,5,315],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[10,7,350],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[10,20,363]}],max:[{t:2,r:"data.occupant.maxHealth",p:[10,54,397]}],value:[{t:2,r:"data.occupant.health",p:[10,90,433]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[11,16,475]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[11,68,527]}]}]}," ",{t:4,f:[{p:[14,7,764],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[14,26,783]}]},f:[{p:[15,9,804],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[15,30,825]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[15,66,861]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[15,103,898]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[13,5,598]}," ",{t:4,f:[{p:[19,7,1020],t:7,e:"ui-section",a:{label:"Blood"},f:[{p:[20,9,1056],t:7,e:"ui-section",a:{label:"Volume"},f:[{p:[21,11,1095],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.blood.maxBloodVolume",p:[21,32,1116]}],value:[{t:2,r:"data.occupant.blood.currentBloodVolume",p:[21,79,1163]}],state:[{t:2,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"bad":"good"'},p:[21,130,1214]}]},f:[{t:3,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"LOW ":"OK"'},p:[21,232,1316]}," - ",{t:2,x:{r:["data.occupant.blood.currentBloodVolume"],s:"Math.round(_0)"},p:[21,342,1426]}," cl"]}]}," ",{p:[23,9,1525],t:7,e:"ui-section",a:{label:"Type"},f:[{p:[24,11,1562],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:"data.occupant.blood.bloodType",p:[24,35,1586]}]}]}]}],n:50,r:"data.occupant.blood",p:[18,5,985]}," ",{p:[28,5,1689],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[29,9,1725],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[29,22,1738]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[29,68,1784]}]}]}," ",{p:[31,5,1867],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[32,9,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],
-s:'_0?"bad":"good"'},p:[32,22,1916]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[32,68,1962]}]}]}," ",{p:[34,5,2046],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[36,11,2133],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[36,54,2176]}," units of ",{t:2,r:"name",p:[36,89,2211]}]},{p:[36,104,2226],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[35,9,2088]},{t:4,n:51,f:[{p:[38,11,2261],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[5,3,159]}]}," ",{p:[43,1,2357],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[44,2,2389],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[45,5,2420],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[45,22,2437]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[45,71,2486]}]}]}," ",{p:[47,3,2551],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[49,7,2612],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[49,38,2643]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[49,122,2727]},'"}']},f:[{t:2,r:"name",p:[49,132,2737]}]},{p:[49,152,2757],t:7,e:"br"}],n:52,r:"data.chems",p:[48,5,2584]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],463:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,25],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[2,22,44]}],labelcolor:[{t:2,r:"htmlcolor",p:[2,44,66]}],candystripe:0,right:0},f:[{p:[3,5,105],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,32,132],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0=="Dead"?"bad bold":_0=="Unconscious"?"average bold":"good"'},p:[3,45,145]}]},f:[{t:2,r:"status",p:[3,132,232]}]}]}," ",{p:[4,5,268],t:7,e:"ui-section",a:{label:"Jelly"},f:[{t:2,r:"exoticblood",p:[4,31,294]}]}," ",{p:[5,5,328],t:7,e:"ui-section",a:{label:"Location"},f:[{t:2,r:"area",p:[5,34,357]}]}," ",{p:[7,5,386],t:7,e:"ui-button",a:{state:[{t:2,r:"swap_button_state",p:[8,14,411]}],action:"swap",params:['{"ref": "',{t:2,r:"ref",p:[9,38,472]},'"}']},f:[{t:4,f:["You Are Here"],n:50,x:{r:["occupied"],s:'_0=="owner"'},p:[10,7,491]},{t:4,n:51,f:[{t:4,f:["Occupied"],n:50,x:{r:["occupied"],s:'_0=="stranger"'},p:[13,9,566]},{t:4,n:51,f:["Swap"],x:{r:["occupied"],s:'_0=="stranger"'}}],x:{r:["occupied"],s:'_0=="owner"'}}]}]}],n:52,r:"data.bodies",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],464:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,23,82],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.drying"],s:'_0?"stop":"tint"'},p:[4,40,99]}],action:"Dry"},f:[{t:2,x:{r:["data.drying"],s:'_0?"Stop drying":"Dry"'},p:[4,88,147]}]}],n:50,r:"data.isdryer",p:[4,3,62]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[7,3,258],t:7,e:"ui-notice",f:[{p:[8,5,275],t:7,e:"span",f:["Unfortunately, this ",{t:2,r:"data.name",p:[8,31,301]}," is empty."]}]}],n:50,x:{r:["data.contents.length"],s:"_0==0"},p:[6,1,221]},{t:4,n:51,f:[{p:[11,1,359],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[12,2,391],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[13,4,425],t:7,e:"section",a:{"class":"cell bold"},f:["Item"]}," ",{p:[16,4,482],t:7,e:"section",a:{"class":"cell bold"},f:["Quantity"]}," ",{p:[19,4,543],t:7,e:"section",a:{"class":"cell bold",align:"center"},f:[{t:4,f:[{t:2,r:"data.verb",p:[20,22,608]}],n:50,r:"data.verb",p:[20,5,591]},{t:4,n:51,f:["Dispense"],r:"data.verb"}]}]}," ",{t:4,f:[{p:[24,3,703],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[25,4,737],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[26,5,765]}]}," ",{p:[28,4,793],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[29,5,835]}]}," ",{p:[31,4,865],t:7,e:"section",a:{"class":"table",alight:"right"},f:[{p:[32,5,909],t:7,e:"section",a:{"class":"cell"}}," ",{p:[33,5,947],t:7,e:"section",a:{"class":"cell"},f:[{p:[34,6,976],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[34,45,1015]}],params:['{ "name" : ',{t:2,r:"name",p:[34,102,1072]},', "amount" : 1 }']},f:["One"]}]}," ",{p:[38,5,1151],t:7,e:"section",a:{"class":"cell"},f:[{p:[39,6,1180],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>1)?null:"disabled"'},p:[39,45,1219]}],params:['{ "name" : ',{t:2,r:"name",p:[39,101,1275]}," }"]},f:["Many"]}]}]}]}],n:52,r:"data.contents",p:[23,2,676]}]}],x:{r:["data.contents.length"],s:"_0==0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],465:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{capacityPercentState:function(){var t=this.get("data.capacityPercent");return t>50?"good":t>15?"average":"bad"},inputState:function(){return this.get("data.capacityPercent")>=100?"good":this.get("data.inputting")?"average":"bad"},outputState:function(){return this.get("data.outputting")?"good":this.get("data.charge")>0?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[24,1,663],t:7,e:"ui-display",a:{title:"Storage"},f:[{p:[25,3,695],t:7,e:"ui-section",a:{label:"Stored Energy"},f:[{p:[26,5,735],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.capacityPercent",p:[26,38,768]}],state:[{t:2,r:"capacityPercentState",p:[26,71,801]}]},f:[{t:2,x:{r:["adata.capacityPercent"],s:"Math.fixed(_0)"},p:[26,97,827]},"%"]}]}]}," ",{p:[29,1,908],t:7,e:"ui-display",a:{title:"Input"},f:[{p:[30,3,938],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{p:[31,5,976],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"refresh":"close"'},p:[31,22,993]}],style:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"selected":null'},p:[31,74,1045]}],action:"tryinput"},f:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"Auto":"Off"'},p:[32,25,1113]}]}," [",{p:[34,6,1182],t:7,e:"span",a:{"class":[{t:2,r:"inputState",p:[34,19,1195]}]},f:[{t:2,x:{r:["data.capacityPercent","data.inputting"],s:'_0>=100?"Fully Charged":_1?"Charging":"Not Charging"'},p:[34,35,1211]}]},"]"]}," ",{p:[36,3,1335],t:7,e:"ui-section",a:{label:"Target Input"},f:[{p:[37,5,1374],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.inputLevelMax",p:[37,26,1395]}],value:[{t:2,r:"data.inputLevel",p:[37,57,1426]}]},f:[{t:2,r:"adata.inputLevel_text",p:[37,78,1447]}]}]}," ",{p:[39,3,1501],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1540],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1579]}],action:"input",params:'{"target": "min"}'}}," ",{p:[41,5,1674],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1708]}],action:"input",params:'{"adjust": -10000}'}}," ",{p:[42,5,1804],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"target": "input"}'},f:["Set"]}," ",{p:[43,5,1894],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[43,38,1927]}],action:"input",params:'{"adjust": 10000}'}}," ",{p:[44,5,2039],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[44,43,2077]}],action:"input",params:'{"target": "max"}'}}]}," ",{p:[46,3,2204],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2238],t:7,e:"span",f:[{t:2,r:"adata.inputAvailable",p:[47,9,2244]}]}]}]}," ",{p:[50,1,2308],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2339],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2377],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2394]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2449]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2519]}]}," [",{p:[55,6,2587],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2600]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2617]}]},"]"]}," ",{p:[57,3,2724],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2764],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2785]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2817]}]},f:[{t:2,r:"adata.outputLevel_text",p:[58,80,2839]}]}]}," ",{p:[60,3,2894],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2934],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2973]}],action:"output",params:'{"target": "min"}'}}," ",{p:[62,5,3070],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3104]}],action:"output",params:'{"adjust": -10000}'}}," ",{p:[63,5,3202],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"target": "input"}'},f:["Set"]}," ",{p:[64,5,3293],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[64,38,3326]}],action:"output",params:'{"adjust": 10000}'}}," ",{p:[65,5,3441],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[65,43,3479]}],action:"output",params:'{"target": "max"}'}}]}," ",{p:[67,3,3609],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3644],t:7,e:"span",f:[{t:2,r:"adata.outputUsed",p:[68,9,3650]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],466:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,33],t:7,e:"ui-display",a:{title:"Dispersal Tank"},f:[{p:[3,3,73],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[4,4,104],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.active"],s:'_0?"power-off":"close"'},p:[4,21,121]}],style:[{t:2,x:{r:["data.active"],s:'_0?"selected":null'},p:[5,12,174]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[6,12,223]}],action:"power"},f:[{t:2,x:{r:["data.active"],s:'_0?"On":"Off"'},p:[7,20,286]}]}]}," ",{p:[10,3,354],t:7,e:"ui-section",a:{label:"Smoke Radius Setting"},f:[{p:[11,5,401],t:7,e:"div",a:{"class":"content",style:"float:left"},f:[{p:[12,6,448],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=1?null:"disabled"'},p:[12,36,478]}],style:[{t:2,x:{r:["data.setting"],s:'_0==1?"selected":null'},p:[12,89,531]}],action:"setting",params:'{"amount": 1}'},f:["3"]}," ",{p:[13,6,634],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=2?null:"disabled"'},p:[13,36,664]}],style:[{t:2,x:{r:["data.setting"],s:'_0==2?"selected":null'},p:[13,89,717]}],action:"setting",params:'{"amount": 2}'},f:["6"]}," ",{p:[14,6,820],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=3?null:"disabled"'},p:[14,36,850]}],style:[{t:2,x:{r:["data.setting"],s:'_0==3?"selected":null'},p:[14,89,903]}],action:"setting",params:'{"amount": 3}'},f:["9"]}," ",{p:[15,6,1006],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=4?null:"disabled"'},p:[15,36,1036]}],style:[{t:2,x:{r:["data.setting"],s:'_0==4?"selected":null'},p:[15,89,1089]}],action:"setting",params:'{"amount": 4}'},f:["12"]}," ",{p:[16,6,1193],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=5?null:"disabled"'},p:[16,36,1223]}],style:[{t:2,x:{r:["data.setting"],s:'_0==5?"selected":null'},p:[16,89,1276]}],action:"setting",params:'{"amount": 5}'},f:["15"]}]}]}," ",{p:[19,3,1410],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[21,6,1476],t:7,e:"span",f:[{t:2,x:{r:["adata.TankCurrentVolume"],s:"Math.round(_0)"},p:[21,12,1482]},"/",{t:2,r:"data.TankMaxVolume",p:[21,52,1522]}," Units"]}," ",{p:[22,6,1564],t:7,e:"br"}," ",{p:[23,5,1575],t:7,e:"br"}," ",{t:4,f:[{p:[25,7,1623],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[25,50,1666]}," units of ",{t:2,r:"name",p:[25,85,1701]}]},{p:[25,100,1716],t:7,e:"br"}],n:52,r:"adata.TankContents",p:[24,6,1587]}],n:50,r:"data.isTankLoaded",p:[20,4,1444]},{t:4,n:51,f:[{p:[28,6,1757],t:7,e:"span",a:{"class":"bad"},f:["Tank Empty"]}],r:"data.isTankLoaded"}," ",{p:[30,4,1809],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Eject":"Close"'},p:[30,21,1826]}],style:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"selected":null'},p:[31,12,1881]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[32,12,1936]}],action:"purge"},f:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Purge Contents":"No chemicals detected"'},p:[33,20,1999]}]}]}]}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]}]},e.exports=a.extend(r.exports)},{341:341}],467:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,31],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{t:2,x:{r:["adata.generated"],s:"Math.round(_0)"},p:[3,5,73]},"W"]}," ",{p:[5,3,126],t:7,e:"ui-section",a:{label:"Orientation"},f:[{p:[6,5,164],t:7,e:"span",f:[{t:2,x:{r:["adata.angle"],s:"Math.round(_0)"},p:[6,11,170]},"° (",{t:2,r:"data.direction",p:[6,45,204]},")"]}]}," ",{p:[8,3,251],t:7,e:"ui-section",a:{label:"Adjust Angle"},f:[{p:[9,5,290],t:7,e:"ui-button",a:{icon:"step-backward",action:"angle",params:'{"adjust": -15}'},f:["15°"]}," ",{p:[10,5,387],t:7,e:"ui-button",a:{icon:"backward",action:"angle",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[11,5,477],t:7,e:"ui-button",a:{icon:"forward",action:"angle",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[12,5,565],t:7,e:"ui-button",a:{icon:"step-forward",action:"angle",params:'{"adjust": 15}'},f:["15°"]}]}]}," ",{p:[15,1,687],t:7,e:"ui-display",a:{title:"Tracking"},f:[{p:[16,3,720],t:7,e:"ui-section",a:{label:"Tracker Mode"},f:[{p:[17,5,759],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==0?"selected":null'},p:[17,36,790]}],action:"tracking",params:'{"mode": 0}'},f:["Off"]}," ",{p:[19,5,907],t:7,e:"ui-button",a:{icon:"clock-o",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==1?"selected":null'},p:[19,38,940]}],action:"tracking",params:'{"mode": 1}'},f:["Timed"]}," ",{p:[21,5,1059],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.connected_tracker","data.tracking_state"],s:'_0?_1==2?"selected":null:"disabled"'},p:[21,38,1092]}],action:"tracking",params:'{"mode": 2}'},f:["Auto"]}]}," ",{p:[24,3,1262],t:7,e:"ui-section",a:{label:"Tracking Rate"},f:[{p:[25,3,1300],t:7,e:"span",f:[{t:2,x:{r:["adata.tracking_rate"],s:"Math.round(_0)"},p:[25,9,1306]},"°/h (",{t:2,r:"data.rotating_way",p:[25,53,1350]},")"]}]}," ",{p:[27,3,1399],t:7,e:"ui-section",a:{label:"Adjust Rate"},f:[{p:[28,5,1437],t:7,e:"ui-button",a:{icon:"fast-backward",action:"rate",params:'{"adjust": -180}'},f:["180°"]}," ",{p:[29,5,1535],t:7,e:"ui-button",a:{icon:"step-backward",action:"rate",params:'{"adjust": -30}'},f:["30°"]}," ",{p:[30,5,1631],t:7,e:"ui-button",a:{icon:"backward",action:"rate",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[31,5,1720],t:7,e:"ui-button",a:{icon:"forward",action:"rate",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[32,5,1807],t:7,e:"ui-button",a:{icon:"step-forward",action:"rate",params:'{"adjust": 30}'},f:["30°"]}," ",{p:[33,5,1901],t:7,e:"ui-button",a:{icon:"fast-forward",action:"rate",params:'{"adjust": 180}'},f:["180°"]}]}]}," ",{p:{button:[{p:[38,5,2088],t:7,e:"ui-button",a:{icon:"refresh",action:"refresh"},f:["Refresh"]}]},t:7,e:"ui-display",a:{title:"Devices",button:0},f:[" ",{p:[40,2,2169],t:7,e:"ui-section",a:{label:"Solar Tracker"},f:[{p:[41,5,2209],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_tracker"],s:'_0?"good":"bad"'},p:[41,18,2222]}]},f:[{t:2,x:{r:["data.connected_tracker"],s:'_0?"":"Not "'},p:[41,63,2267]},"Found"]}]}," ",{p:[43,2,2338],t:7,e:"ui-section",a:{label:"Solar Panels"},f:[{p:[44,3,2375],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_panels"],s:'_0?"good":"bad"'},p:[44,16,2388]}]},f:[{t:2,x:{r:["adata.connected_panels"],s:"Math.round(_0)"},p:[44,60,2432]}," Panels Connected"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],468:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,7,87],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[4,38,118]}],action:"eject"},f:["Eject"]}],n:50,r:"data.open",p:[3,5,62]}]},t:7,e:"ui-display",a:{title:"Power",button:0},f:[" ",{p:[7,3,226],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[8,5,258],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[8,22,275]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[9,14,326]}],state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[9,54,366]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[10,22,431]}]}]}," ",{p:[12,3,490],t:7,e:"ui-section",a:{label:"Cell"},f:[{t:4,f:[{p:[14,7,554],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerLevel",p:[14,40,587]}]},f:[{t:2,x:{r:["adata.powerLevel"],s:"Math.fixed(_0)"},p:[14,61,608]},"%"]}],n:50,r:"data.hasPowercell",p:[13,5,521]},{t:4,n:51,f:[{p:[16,4,667],t:7,e:"span",a:{"class":"bad"},f:["No Cell"]}],r:"data.hasPowercell"}]}]}," ",{p:[20,1,744],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[21,3,779],t:7,e:"ui-section",a:{label:"Current Temperature"},f:[{p:[22,3,823],t:7,e:"span",f:[{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[22,9,829]},"°C"]}]}," ",{p:[24,2,894],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[25,3,937],t:7,e:"span",f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[25,9,943]},"°C"]}]}," ",{t:4,f:[{p:[28,5,1031],t:7,e:"ui-section",a:{label:"Adjust Target"},f:[{p:[29,7,1073],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[29,46,1112]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[30,7,1218],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[30,41,1252]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[31,7,1357],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:["Set"]}," ",{p:[32,7,1450],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[32,40,1483]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[33,7,1587],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[33,45,1625]}],action:"target",params:'{"adjust": 20}'}}]}],n:50,r:"data.open",p:[27,3,1008]}," ",{p:[36,3,1754],t:7,e:"ui-section",a:{label:"Mode"},f:[{t:4,f:[{p:[38,7,1808],t:7,e:"ui-button",a:{icon:"long-arrow-up",state:[{t:2,x:{r:["data.mode"],s:'_0=="heat"?"selected":null'},p:[38,46,1847]}],action:"mode",params:'{"mode": "heat"}'},f:["Heat"]}," ",{p:[39,7,1956],t:7,e:"ui-button",a:{icon:"long-arrow-down",state:[{t:2,x:{r:["data.mode"],s:'_0=="cool"?"selected":null'},p:[39,48,1997]}],action:"mode",params:'{"mode": "cool"}'},f:["Cool"]}," ",{p:[40,7,2106],t:7,e:"ui-button",a:{icon:"arrows-v",state:[{t:2,x:{r:["data.mode"],s:'_0=="auto"?"selected":null'},p:[40,41,2140]}],action:"mode",params:'{"mode": "auto"}'},f:["Auto"]}],n:50,r:"data.open",p:[37,3,1783]},{t:4,n:51,f:[{p:[42,4,2258],t:7,e:"span",f:[{t:2,x:{r:["text","data.mode"],s:"_0.titleCase(_1)"},p:[42,10,2264]}]}],r:"data.open"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],469:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,8,97],t:7,e:"ui-button",a:{action:"jump",params:['{"name" : ',{t:2,r:"name",p:[4,51,140]},"}"]},f:["Jump"]}," ",{p:[7,9,195],t:7,e:"ui-button",a:{action:"spawn",params:['{"name" : ',{t:2,r:"name",p:[7,53,239]},"}"]},f:["Spawn"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[2,22,46]}],button:0},f:[" ",{p:[11,3,308],t:7,e:"ui-section",a:{label:"Description"},f:[{p:[12,5,346],t:7,e:"span",f:[{t:3,r:"desc",p:[12,11,352]}]}]}," ",{p:[14,3,390],t:7,e:"ui-section",a:{label:"Spawners left"},f:[{p:[15,5,430],t:7,e:"span",f:[{t:2,r:"amount_left",p:[15,11,436]}]}]}]}],n:52,r:"data.spawners",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],470:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,31],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[2,22,50]}," Alarms"]},f:[{p:[3,5,74],t:7,e:"ul",f:[{t:4,f:[{p:[5,9,107],t:7,e:"li",f:[{t:2,r:".",p:[5,13,111]}]}],n:52,r:".",p:[4,7,86]},{t:4,n:51,f:[{p:[7,9,147],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],471:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,42],t:7,e:"ui-notice",f:[{p:[3,5,59],t:7,e:"span",f:["Biological entity detected in contents. Please remove."]}]}],n:50,x:{r:["data.occupied","data.safeties"],s:"_0&&_1"},p:[1,1,0]},{t:4,f:[{p:[7,3,179],t:7,e:"ui-notice",f:[{p:[8,5,196],t:7,e:"span",f:["Contents are being disinfected. Please wait."]}]}],n:50,r:"data.uv_active",p:[6,1,153]},{t:4,n:51,f:[{p:{button:[{t:4,f:[{p:[13,25,369],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,42,386]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[13,93,437]}]}],n:50,x:{r:["data.open"],s:"!_0"},p:[13,7,351]}," ",{t:4,f:[{p:[14,27,519],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"sign-out":"sign-in"'},p:[14,44,536]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Close":"Open"'},p:[14,98,590]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[14,7,499]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[17,7,692],t:7,e:"ui-notice",f:[{p:[18,9,713],t:7,e:"span",f:["Unit Locked"]}]}],n:50,r:"data.locked",p:[16,5,665]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.open"],s:"_0"},f:[{p:[21,9,793],t:7,e:"ui-section",a:{label:"Helmet"},f:[{p:[22,11,832],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.helmet"],s:'_0?"square":"square-o"'},p:[22,28,849]}],state:[{t:2,x:{r:["data.helmet"],s:'_0?null:"disabled"'},p:[22,75,896]}],action:"dispense",params:'{"item": "helmet"}'},f:[{t:2,x:{r:["data.helmet"],s:'_0||"Empty"'},p:[23,59,992]}]}]}," ",{p:[25,9,1063],t:7,e:"ui-section",a:{label:"Suit"},f:[{p:[26,11,1100],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.suit"],s:'_0?"square":"square-o"'},p:[26,28,1117]}],state:[{t:2,x:{r:["data.suit"],s:'_0?null:"disabled"'},p:[26,74,1163]}],action:"dispense",params:'{"item": "suit"}'},f:[{t:2,x:{r:["data.suit"],s:'_0||"Empty"'},p:[27,57,1255]}]}]}," ",{p:[29,9,1324],t:7,e:"ui-section",a:{label:"Mask"},f:[{p:[30,11,1361],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mask"],s:'_0?"square":"square-o"'},p:[30,28,1378]}],state:[{t:2,x:{r:["data.mask"],s:'_0?null:"disabled"'},p:[30,74,1424]}],action:"dispense",params:'{"item": "mask"}'},f:[{t:2,x:{r:["data.mask"],s:'_0||"Empty"'},p:[31,57,1516]}]}]}," ",{p:[33,9,1585],t:7,e:"ui-section",a:{label:"Storage"},f:[{p:[34,11,1625],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.storage"],s:'_0?"square":"square-o"'},p:[34,28,1642]}],state:[{t:2,x:{r:["data.storage"],s:'_0?null:"disabled"'},p:[34,77,1691]}],action:"dispense",params:'{"item": "storage"}'},f:[{t:2,x:{r:["data.storage"],s:'_0||"Empty"'},p:[35,60,1789]}]}]}]},{t:4,n:50,x:{r:["data.open"],s:"!(_0)"},f:[" ",{p:[38,7,1873],t:7,e:"ui-button",a:{icon:"recycle",state:[{t:2,x:{r:["data.occupied","data.safeties"],s:'_0&&_1?"disabled":null'},p:[38,40,1906]}],action:"uv"},f:["Disinfect"]}]}],r:"data.locked"}]}],r:"data.uv_active"}]},e.exports=a.extend(r.exports)},{341:341}],472:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,5,18],t:7,e:"ui-section",a:{label:"Dispense"},f:[{p:[3,9,57],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.plasma"],s:'_0?"square":"square-o"'},p:[3,26,74]}],state:[{t:2,x:{r:["data.plasma"],s:'_0?null:"disabled"'},p:[3,74,122]}],action:"plasma"},f:["Plasma (",{t:2,x:{r:["adata.plasma"],s:"Math.round(_0)"},p:[4,37,196]},")"]}," ",{p:[5,9,247],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oxygen"],s:'_0?"square":"square-o"'},p:[5,26,264]}],state:[{t:2,x:{r:["data.oxygen"],s:'_0?null:"disabled"'},p:[5,74,312]}],action:"oxygen"},f:["Oxygen (",{t:2,x:{r:["adata.oxygen"],s:"Math.round(_0)"},p:[6,37,386]},")"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],473:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tankPressureState:function(){var t=this.get("data.tankPressure");return t>=200?"good":t>=100?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,295],t:7,e:"ui-notice",f:[{p:[15,3,310],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.connected"],s:'_0?"is":"is not"'},p:[15,23,330]}," connected to a mask."]}]}," ",{p:[17,1,409],t:7,e:"ui-display",f:[{p:[18,3,425],t:7,e:"ui-section",a:{label:"Tank Pressure"},f:[{p:[19,7,467],t:7,e:"ui-bar",a:{min:"0",max:"1013",value:[{t:2,r:"data.tankPressure",p:[19,41,501]}],state:[{t:2,r:"tankPressureState",p:[20,16,540]}]},f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[20,39,563]}," kPa"]}]}," ",{p:[22,3,631],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[23,5,674],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[23,18,687]}],max:[{t:2,r:"data.maxReleasePressure",p:[23,52,721]}],value:[{t:2,r:"data.releasePressure",p:[24,14,764]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[24,40,790]}," kPa"]}]}," ",{p:[26,3,861],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,906],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,939]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1095],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1126]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1273],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1368],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1398]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],474:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,5,33],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[3,9,75],t:7,e:"span",f:[{t:2,x:{r:["adata.temperature"],s:"Math.fixed(_0,2)"},p:[3,15,81]}," K"]}]}," ",{p:[5,5,151],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,9,190],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.fixed(_0,2)"},p:[6,15,196]}," kPa"]}]}]}," ",{p:[9,1,276],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[10,5,311],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,347],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[11,26,364]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[11,70,408]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[12,28,469]}]}]}," ",{p:[14,5,531],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[15,9,580],t:7,e:"ui-button",a:{icon:"fast-backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[15,48,619]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[17,9,733],t:7,e:"ui-button",a:{icon:"backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[17,43,767]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[19,9,880],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.target"],s:"Math.fixed(_0,2)"},p:[19,79,950]}]}," ",{p:[20,9,1003],t:7,e:"ui-button",a:{icon:"forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[20,42,1036]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[22,9,1148],t:7,e:"ui-button",a:{icon:"fast-forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[22,47,1186]}],action:"target",params:'{"adjust": 20}'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],475:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 1:return"good";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,173],t:7,e:"ui-notice",f:[{p:[14,2,187],t:7,e:"ui-section",a:{label:"Reconnect"},f:[{p:[15,3,221],t:7,e:"div",a:{style:"float:right"},f:[{p:[16,4,251],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]}]}]}," ",{p:[20,1,359],t:7,e:"ui-display",a:{title:"Turbine Controller"},f:[{p:[21,2,401],t:7,e:"ui-section",a:{label:"Status"},f:[{t:4,f:[{p:[23,4,456],t:7,e:"span",a:{"class":"bad"},f:["Broken"]}],n:50,r:"data.broken",p:[22,3,432]},{t:4,n:51,f:[{p:[25,4,504],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.online"],s:"_0(_1)"},p:[25,17,517]}]},f:[{t:2,x:{r:["data.online","data.compressor_broke","data.turbine_broke"],s:'_0&&!(_1||_2)?"Online":"Offline"'},p:[25,46,546]}]}],r:"data.broken"}," ",{p:[27,3,656],t:7,e:"div",a:{style:"float:right"},f:[{p:[28,4,686],t:7,e:"ui-button",a:{icon:"power-off",action:"power-on",state:[{t:2,r:"data.broken",p:[28,57,739]}],style:[{t:2,x:{r:["data.online"],s:'_0?"selected":""'},p:[28,81,763]}]},f:["On"]}," ",{p:[29,4,817],t:7,e:"ui-button",a:{icon:"close",action:"power-off",state:[{t:2,r:"data.broken",p:[29,54,867]}],style:[{t:2,x:{r:["data.online"],s:'_0?"":"selected"'},p:[29,78,891]}]},f:["Off"]}]}," ",{t:4,f:[{p:[32,4,989],t:7,e:"br"}," [ ",{p:[33,6,1e3],t:7,e:"span",a:{"class":"bad"},f:["Compressor is inoperable"]}," ]"],n:50,r:"data.compressor_broke",p:[31,3,955]}," ",{t:4,f:[{p:[36,4,1097],t:7,e:"br"}," [ ",{p:[37,6,1108],t:7,e:"span",a:{"class":"bad"},f:["Turbine is inoperable"]}," ]"],n:50,r:"data.turbine_broke",p:[35,3,1066]}]}]}," ",{p:[41,1,1200],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[42,2,1230],t:7,e:"ui-section",a:{label:"Turbine Speed"},f:[{p:[43,3,1268],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.rpm"],s:'_0?"--":_1'},p:[43,9,1274]}," RPM"]}]}," ",{p:[45,2,1337],t:7,e:"ui-section",a:{label:"Internal Temp"},f:[{p:[46,3,1375],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.temp"],s:'_0?"--":_1'},p:[46,9,1381]}," K"]}]}," ",{p:[48,2,1443],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{p:[49,3,1483],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.power"],s:'_0?"--":_1'},p:[49,9,1489]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],476:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{},oninit:function(){this.on({hover:function(t){var e=this.get("data.telecrystals");e>=t.context.params.cost&&this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}})}}}(r),r.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[23,7,482],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock"]}],n:50,r:"data.lockable",p:[22,5,453]}]},t:7,e:"ui-display",a:{title:"Uplink",button:0},f:[" ",{p:[26,3,568],t:7,e:"ui-section",a:{label:"Telecrystals",right:0},f:[{p:[27,5,613],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.telecrystals"],s:'_0>0?"good":"bad"'},p:[27,18,626]}]},f:[{t:2,r:"data.telecrystals",p:[27,62,670]}," TC"]}]}]}," ",{t:4,f:[{p:[31,3,764],t:7,e:"ui-display",f:[{p:[32,2,779],t:7,e:"ui-button",a:{action:"select",params:['{"category": "',{t:2,r:"name",p:[32,51,828]},'"}']},f:[{t:2,r:"name",p:[32,63,840]}]}," ",{t:4,f:[{p:[34,4,883],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[34,23,902]}],candystripe:0,right:0},f:[{p:[35,3,934],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"name",p:[35,23,954]},": ",{t:2,r:"desc",p:[35,33,964]}],"tooltip-side":"left",state:[{t:2,x:{r:["data.telecrystals","hovered.cost","cost","hovered.item","name"],s:'_0<_2||(_0-_1<_2&&_3!=_4)?"disabled":null'},p:[36,12,1006]}],action:"buy",params:['{"category": "',{t:2,r:"category",p:[37,40,1165]},'", "item": ',{t:2,r:"name",p:[37,63,1188]},', "cost": ',{t:2,r:"cost",p:[37,81,1206]},"}"]},v:{hover:"hover",unhover:"unhover"
-},f:[{t:2,r:"cost",p:[38,43,1260]}," TC"]}]}],n:52,r:"items",p:[33,2,863]}]}],n:52,r:"data.categories",p:[30,1,735]}]},e.exports=a.extend(r.exports)},{341:341}],477:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{healthState:function(t){var e=this.get("data.vr_avatar.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,292],t:7,e:"ui-display",f:[{t:4,f:[{p:[16,3,331],t:7,e:"ui-notice",f:[{p:[17,4,347],t:7,e:"span",f:["Safety restraints disabled."]}]}],n:50,r:"data.emagged",p:[15,2,307]}," ",{t:4,f:[{p:[21,3,442],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:[{p:[22,4,482],t:7,e:"ui-section",a:{label:"Name"},f:[{t:2,r:"data.vr_avatar.name",p:[23,5,513]}]}," ",{p:[25,4,559],t:7,e:"ui-section",a:{label:"Status"},f:[{t:2,r:"data.vr_avatar.status",p:[26,5,592]}]}," ",{p:[28,4,640],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[29,5,673],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.vr_avatar.maxhealth",p:[29,26,694]}],value:[{t:2,r:"adata.vr_avatar.health",p:[29,64,732]}],state:[{t:2,x:{r:["healthState","adata.vr_avatar.health"],s:"_0(_1)"},p:[29,99,767]}]},f:[{t:2,x:{r:["adata.vr_avatar.health"],s:"Math.round(_0)"},p:[29,140,808]},"/",{t:2,r:"adata.vr_avatar.maxhealth",p:[29,179,847]}]}]}]}],n:50,r:"data.vr_avatar",p:[20,2,416]},{t:4,n:51,f:[{p:[33,3,935],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:["No Virtual Avatar detected"]}],r:"data.vr_avatar"}," ",{p:[37,2,1031],t:7,e:"ui-display",a:{title:"VR Commands"},f:[{p:[38,3,1067],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.toggle_open"],s:'_0?"times":"plus"'},p:[38,20,1084]}],action:"toggle_open"},f:[{t:2,x:{r:["data.toggle_open"],s:'_0?"Close":"Open"'},p:[39,4,1151]}," the VR Sleeper"]}," ",{t:4,f:[{p:[42,4,1253],t:7,e:"ui-button",a:{icon:"signal",action:"vr_connect"},f:["Connect to VR"]}],n:50,r:"data.isoccupant",p:[41,3,1225]}," ",{t:4,f:[{p:[47,4,1376],t:7,e:"ui-button",a:{icon:"ban",action:"delete_avatar"},f:["Delete Virtual Avatar"]}],n:50,r:"data.vr_avatar",p:[46,3,1349]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],478:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{t:4,f:[{p:[3,5,42],t:7,e:"ui-section",a:{label:[{t:2,r:"color",p:[3,24,61]},{t:2,x:{r:["wire"],s:'_0?" ("+_0+")":""'},p:[3,33,70]}],labelcolor:[{t:2,r:"color",p:[3,80,117]}],candystripe:0,right:0},f:[{p:[4,7,154],t:7,e:"ui-button",a:{action:"cut",params:['{"wire":"',{t:2,r:"color",p:[4,48,195]},'"}']},f:[{t:2,x:{r:["cut"],s:'_0?"Mend":"Cut"'},p:[4,61,208]}]}," ",{p:[5,7,252],t:7,e:"ui-button",a:{action:"pulse",params:['{"wire":"',{t:2,r:"color",p:[5,50,295]},'"}']},f:["Pulse"]}," ",{p:[6,7,333],t:7,e:"ui-button",a:{action:"attach",params:['{"wire":"',{t:2,r:"color",p:[6,51,377]},'"}']},f:[{t:2,x:{r:["attached"],s:'_0?"Detach":"Attach"'},p:[6,64,390]}]}]}],n:52,r:"data.wires",p:[2,3,16]}]}," ",{t:4,f:[{p:[11,3,508],t:7,e:"ui-display",f:[{t:4,f:[{p:[13,7,555],t:7,e:"ui-section",f:[{t:2,r:".",p:[13,19,567]}]}],n:52,r:"data.status",p:[12,5,526]}]}],n:50,r:"data.status",p:[10,1,485]}]},e.exports=a.extend(r.exports)},{341:341}],479:[function(t,e,n){(function(e){"use strict";var n=t(341),a=e.interopRequireDefault(n);t(331),t(1),t(327),t(330);var r=t(480),i=e.interopRequireDefault(r),o=t(481),s=t(328),p=t(329),u=e.interopRequireDefault(p);a["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(485)),window.initialize=function(e){window.tgui=window.tgui||new i["default"]({el:"#container",data:function(){var n=JSON.parse(e);return{constants:t(482),text:t(486),config:n.config,data:n.data,adata:n.data}}})};var c=document.getElementById("data"),l=c.textContent,d=c.getAttribute("data-ref");"{}"!==l&&(window.initialize(l),c.remove()),(0,o.act)(d,"tgui:initialize"),(0,s.loadCSS)("font-awesome.min.css");var f=new u["default"]("FontAwesome");f.check("").then(function(){return document.body.classList.add("icons")})["catch"](function(){return document.body.classList.add("no-icons")})}).call(this,t("babel/external-helpers"))},{1:1,327:327,328:328,329:329,330:330,331:331,341:341,480:480,481:481,482:482,485:485,486:486,"babel/external-helpers":"babel/external-helpers"}],480:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={components:{"ui-bar":t(342),"ui-button":t(343),"ui-display":t(344),"ui-input":t(345),"ui-linegraph":t(346),"ui-notice":t(347),"ui-section":t(349),"ui-subdisplay":t(350),"ui-tabs":t(351)},events:{enter:t(339).enter,space:t(339).space},transitions:{fade:t(340)},onconfig:function(){var e=this.get("config.interface"),n={ai_airlock:t(355),airalarm:t(356),"airalarm/back":t(357),"airalarm/modes":t(358),"airalarm/scrubbers":t(359),"airalarm/status":t(360),"airalarm/thresholds":t(361),"airalarm/vents":t(362),airlock_electronics:t(363),apc:t(364),atmos_alert:t(365),atmos_control:t(366),atmos_filter:t(367),atmos_mixer:t(368),atmos_pump:t(369),borgopanel:t(370),brig_timer:t(371),bsa:t(372),canister:t(373),cargo:t(374),cargo_express:t(375),cellular_emporium:t(376),centcom_podlauncher:t(377),chem_dispenser:t(378),chem_heater:t(379),chem_master:t(380),chem_synthesizer:t(381),clockwork_slab:t(382),codex_gigas:t(383),computer_fabricator:t(384),crayon:t(385),crew:t(386),cryo:t(387),disposal_unit:t(388),dna_vault:t(389),dogborg_sleeper:t(390),eightball:t(391),emergency_shuttle_console:t(392),engraved_message:t(393),error:t(394),"exofab - Copia":t(395),exonet_node:t(396),firealarm:t(397),gps:t(398),gulag_console:t(399),gulag_item_reclaimer:t(400),holodeck:t(401),implantchair:t(402),intellicard:t(403),keycard_auth:t(404),labor_claim_console:t(405),language_menu:t(406),launchpad_remote:t(407),mech_bay_power_console:t(408),mulebot:t(409),nanite_chamber_control:t(410),nanite_cloud_control:t(411),nanite_program_hub:t(412),nanite_programmer:t(413),nanite_remote:t(414),notificationpanel:t(415),ntnet_relay:t(416),ntos_ai_restorer:t(417),ntos_card:t(418),ntos_configuration:t(419),ntos_file_manager:t(420),ntos_main:t(421),ntos_net_chat:t(422),ntos_net_dos:t(423),ntos_net_downloader:t(424),ntos_net_monitor:t(425),ntos_net_transfer:t(426),ntos_power_monitor:t(427),ntos_revelation:t(428),ntos_station_alert:t(429),ntos_supermatter_monitor:t(430),ntosheader:t(431),nuclear_bomb:t(432),operating_computer:t(433),ore_redemption_machine:t(434),pandemic:t(435),personal_crafting:t(436),portable_pump:t(437),portable_scrubber:t(438),power_monitor:t(439),radio:t(440),rdconsole:t(441),"rdconsole/circuit":t(442),"rdconsole/designview":t(443),"rdconsole/destruct":t(444),"rdconsole/diskopsdesign":t(445),"rdconsole/diskopstech":t(446),"rdconsole/nodeview":t(447),"rdconsole/protolathe":t(448),"rdconsole/rdheader":t(449),"rdconsole/settings":t(450),"rdconsole/techweb":t(451),reagentgrinder:t(452),rpd:t(453),"rpd/colorsel":t(454),"rpd/dirsel":t(455),sat_control:t(456),scrubbing_types:t(457),shuttle_manipulator:t(458),"shuttle_manipulator/modification":t(459),"shuttle_manipulator/status":t(460),"shuttle_manipulator/templates":t(461),sleeper:t(462),slime_swap_body:t(463),smartvend:t(464),smes:t(465),smoke_machine:t(466),solar_control:t(467),space_heater:t(468),spawners_menu:t(469),station_alert:t(470),suit_storage_unit:t(471),tank_dispenser:t(472),tanks:t(473),thermomachine:t(474),turbine_computer:t(475),uplink:t(476),vr_sleeper:t(477),wires:t(478)};e in n?this.components["interface"]=n[e]:this.components["interface"]=n.error},oninit:function(){this.observe("config.style",function(t,e,n){t&&document.body.classList.add(t),e&&document.body.classList.remove(e)})},oncomplete:function(){if(this.get("config.locked")){var t=(0,a.lock)(window.screenLeft,window.screenTop),e=t.x,r=t.y;(0,n.winset)(this.get("config.window"),"pos",e+","+r)}(0,n.winset)("mapwindow.map","focus",!0)}}}(r),r.exports.template={v:3,t:[" "," "," "," ",{p:[56,1,1874],t:7,e:"titlebar",f:[{t:3,r:"config.title",p:[56,11,1884]}]}," ",{p:[57,1,1915],t:7,e:"main",f:[{p:[58,3,1925],t:7,e:"warnings"}," ",{p:[59,3,1940],t:7,e:"interface"}]}," ",{t:4,f:[{p:[62,3,1990],t:7,e:"resize"}],n:50,r:"config.titlebar",p:[61,1,1963]}]},r.exports.components=r.exports.components||{};var i={warnings:t(354),titlebar:t(353),resize:t(348)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{339:339,340:340,341:341,342:342,343:343,344:344,345:345,346:346,347:347,348:348,349:349,350:350,351:351,353:353,354:354,355:355,356:356,357:357,358:358,359:359,360:360,361:361,362:362,363:363,364:364,365:365,366:366,367:367,368:368,369:369,370:370,371:371,372:372,373:373,374:374,375:375,376:376,377:377,378:378,379:379,380:380,381:381,382:382,383:383,384:384,385:385,386:386,387:387,388:388,389:389,390:390,391:391,392:392,393:393,394:394,395:395,396:396,397:397,398:398,399:399,400:400,401:401,402:402,403:403,404:404,405:405,406:406,407:407,408:408,409:409,410:410,411:411,412:412,413:413,414:414,415:415,416:416,417:417,418:418,419:419,420:420,421:421,422:422,423:423,424:424,425:425,426:426,427:427,428:428,429:429,430:430,431:431,432:432,433:433,434:434,435:435,436:436,437:437,438:438,439:439,440:440,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451,452:452,453:453,454:454,455:455,456:456,457:457,458:458,459:459,460:460,461:461,462:462,463:463,464:464,465:465,466:466,467:467,468:468,469:469,470:470,471:471,472:472,473:473,474:474,475:475,476:476,477:477,478:478,481:481,483:483}],481:[function(t,e,n){"use strict";function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"byond://"+e+"?"+Object.keys(t).map(function(e){return o(e)+"="+o(t[e])}).join("&")}function r(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};window.location.href=a(Object.assign({src:t,action:e},n))}function i(t,e,n){var r;window.location.href=a((r={},r[t+"."+e]=n,r),"winset")}n.__esModule=!0,n.href=a,n.act=r,n.winset=i;var o=encodeURIComponent},{}],482:[function(t,e,n){"use strict";n.__esModule=!0;n.UI_INTERACTIVE=2,n.UI_UPDATE=1,n.UI_DISABLED=0,n.UI_CLOSE=-1},{}],483:[function(t,e,n){"use strict";function a(t,e){return 0>t?t=0:t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth),0>e?e=0:e+window.innerHeight>window.screen.availHeight&&(e=window.screen.availHeight-window.innerHeight),{x:t,y:e}}function r(t){if(t.preventDefault(),this.get("drag")){if(this.get("x")){var e=t.screenX-this.get("x")+window.screenLeft,n=t.screenY-this.get("y")+window.screenTop;if(this.get("config.locked")){var r=a(e,n);e=r.x,n=r.y}(0,s.winset)(this.get("config.window"),"pos",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}function i(t,e){return t=Math.clamp(100,window.screen.width,t),e=Math.clamp(100,window.screen.height,e),{x:t,y:e}}function o(t){if(t.preventDefault(),this.get("resize")){if(this.get("x")){var e=t.screenX-this.get("x")+window.innerWidth,n=t.screenY-this.get("y")+window.innerHeight,a=i(e,n);e=a.x,n=a.y,(0,s.winset)(this.get("config.window"),"size",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}n.__esModule=!0,n.lock=a,n.drag=r,n.sane=i,n.resize=o;var s=t(481)},{481:481}],484:[function(t,e,n){"use strict";function a(t,e){for(var n=t,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var o;if(a){if(i>=n.length)break;o=n[i++]}else{if(i=n.next(),i.done)break;o=i.value}var s=o;s.textContent.toLowerCase().includes(e)?(s.style.display="",r(s,e)):s.style.display="none"}}function r(t,e){for(var n=t.queryAll("section"),a=t.query("header").textContent.toLowerCase().includes(e),r=n,i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;a||p.textContent.toLowerCase().includes(e)?p.style.display="":p.style.display="none"}}n.__esModule=!0,n.filterMulti=a,n.filter=r},{}],485:[function(t,e,n){"use strict";function a(t,e,n){return Math.max(t,Math.min(n,e))}function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return+(Math.round(t+"e"+e)+"e-"+e)}n.__esModule=!0,n.clamp=a,n.fixed=r},{}],486:[function(t,e,n){"use strict";function a(t){return t[0].toUpperCase()+t.slice(1).toLowerCase()}function r(t){return t.replace(/\w\S*/g,a)}function i(t,e){for(t=""+t;t.length1){for(var p=Array(o),u=0;o>u;u++)p[u]=arguments[u+3];n.children=p}return{$$typeof:t,type:e,key:void 0===a?null:""+a,ref:null,props:n,_owner:null}}}(),e.asyncIterator=function(t){if("function"==typeof Symbol){if(Symbol.asyncIterator){var e=t[Symbol.asyncIterator];if(null!=e)return e.call(t)}if(Symbol.iterator)return t[Symbol.iterator]()}throw new TypeError("Object is not async iterable")},e.asyncGenerator=function(){function t(t){this.value=t}function e(e){function n(t,e){return new Promise(function(n,r){var s={key:t,arg:e,resolve:n,reject:r,next:null};o?o=o.next=s:(i=o=s,a(t,e))})}function a(n,i){try{var o=e[n](i),s=o.value;s instanceof t?Promise.resolve(s.value).then(function(t){a("next",t)},function(t){a("throw",t)}):r(o.done?"return":"normal",o.value)}catch(p){r("throw",p)}}function r(t,e){switch(t){case"return":i.resolve({value:e,done:!0});break;case"throw":i.reject(e);break;default:i.resolve({value:e,done:!1})}i=i.next,i?a(i.key,i.arg):o=null}var i,o;this._invoke=n,"function"!=typeof e["return"]&&(this["return"]=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype["throw"]=function(t){return this._invoke("throw",t)},e.prototype["return"]=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),e.asyncGeneratorDelegate=function(t,e){function n(n,a){return r=!0,a=new Promise(function(e){e(t[n](a))}),{done:!1,value:e(a)}}var a={},r=!1;return"function"==typeof Symbol&&Symbol.iterator&&(a[Symbol.iterator]=function(){return this}),a.next=function(t){return r?(r=!1,t):n("next",t)},"function"==typeof t["throw"]&&(a["throw"]=function(t){if(r)throw r=!1,t;return n("throw",t)}),"function"==typeof t["return"]&&(a["return"]=function(t){return n("return",t)}),a},e.asyncToGenerator=function(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){function a(r,i){try{var o=e[r](i),s=o.value}catch(p){return void n(p)}return o.done?void t(s):Promise.resolve(s).then(function(t){a("next",t)},function(t){a("throw",t)})}return a("next")})}},e.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,a)&&(n[a]=t[a]);return n},e.possibleConstructorReturn=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},e.selfGlobal=void 0===t?self:t,e.set=function a(t,e,n,r){var i=Object.getOwnPropertyDescriptor(t,e);if(void 0===i){var o=Object.getPrototypeOf(t);null!==o&&a(o,e,n,r)}else if("value"in i&&i.writable)i.value=n;else{var s=i.set;void 0!==s&&s.call(r,n)}return n},e.slicedToArray=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),e.slicedToArrayLoose=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t)){for(var n,a=[],r=t[Symbol.iterator]();!(n=r.next()).done&&(a.push(n.value),!e||a.length!==e););return a}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.taggedTemplateLiteral=function(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))},e.taggedTemplateLiteralLoose=function(t,e){return t.raw=e,t},e.temporalRef=function(t,e,n){if(t===n)throw new ReferenceError(e+" is not defined - temporal dead zone");return t},e.temporalUndefined={},e.toArray=function(t){return Array.isArray(t)?t:Array.from(t)},e.toConsumableArray=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);ethis.end?(this.step&&this.step(1),this.complete&&this.complete(1),!1):(e=t-this.start,n=this.easing(e/this.duration),this.step&&this.step(n),!0):!1},stop:function(){this.abort&&this.abort(),this.running=!1}};var wf,kf,Sf,Ef,Cf,Pf,Af,Of,Tf=xf,Rf=RegExp("^-(?:"+ro.join("|")+")-"),Mf=function(t){return t.replace(Rf,"")},Lf=RegExp("^(?:"+ro.join("|")+")([A-Z])"),jf=function(t){var e;return t?(Lf.test(t)&&(t="-"+t),e=t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})):""},Df={},Nf={};Xi?(kf=co("div").style,function(){void 0!==kf.transition?(Sf="transition",Ef="transitionend",Cf=!0):void 0!==kf.webkitTransition?(Sf="webkitTransition",Ef="webkitTransitionEnd",Cf=!0):Cf=!1}(),Sf&&(Pf=Sf+"Duration",Af=Sf+"Property",Of=Sf+"TimingFunction"),wf=function(t,e,n,a,r){setTimeout(function(){var i,o,s,p,u;p=function(){o&&s&&(t.root.fire(t.name+":end",t.node,t.isIntro),r())},i=(t.node.namespaceURI||"")+t.node.tagName,t.node.style[Af]=a.map(bf).map(jf).join(","),t.node.style[Of]=jf(n.easing||"linear"),t.node.style[Pf]=n.duration/1e3+"s",u=function(e){var n;n=a.indexOf(mf(Mf(e.propertyName))),-1!==n&&a.splice(n,1),a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},t.node.addEventListener(Ef,u,!1),setTimeout(function(){for(var r,c,l,d,f,h=a.length,g=[];h--;)d=a[h],r=i+d,Cf&&!Nf[r]&&(t.node.style[bf(d)]=e[d],Df[r]||(c=t.getStyle(d),Df[r]=t.getStyle(d)!=e[d],Nf[r]=!Df[r],Nf[r]&&(t.node.style[bf(d)]=c))),(!Cf||Nf[r])&&(void 0===c&&(c=t.getStyle(d)),l=a.indexOf(d),-1===l?m("Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!",{node:t.node}):a.splice(l,1),f=/[^\d]*$/.exec(e[d])[0],g.push({name:bf(d),interpolator:Vo(parseFloat(c),parseFloat(e[d])),suffix:f}));g.length?new Tf({root:t.root,duration:n.duration,easing:mf(n.easing||""),step:function(e){var n,a;for(a=g.length;a--;)n=g[a],t.node.style[n.name]=n.interpolator(e)+n.suffix},complete:function(){o=!0,p()}}):o=!0,a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},0)},n.delay||0)}):wf=null;var Ff,If,Bf,Vf,qf,Uf=wf;if("undefined"!=typeof document){if(Ff="hidden",qf={},Ff in document)Bf="";else for(Vf=ro.length;Vf--;)If=ro[Vf],Ff=If+"Hidden",Ff in document&&(Bf=If);void 0!==Bf?(document.addEventListener(Bf+"visibilitychange",qa),qa()):("onfocusout"in document?(document.addEventListener("focusout",Ua),document.addEventListener("focusin",Ga)):(window.addEventListener("pagehide",Ua),window.addEventListener("blur",Ua),window.addEventListener("pageshow",Ga),window.addEventListener("focus",Ga)),qf.hidden=!1)}var Gf,zf,Wf,Hf=qf;Xi?(zf=window.getComputedStyle||Po.getComputedStyle,Gf=function(t,e,n){var a,r=this;if(4===arguments.length)throw Error("t.animateStyle() returns a promise - use .then() instead of passing a callback");if(Hf.hidden)return this.setStyle(t,e),Wf||(Wf=us.resolve());"string"==typeof t?(a={},a[t]=e):(a=t,n=e),n||(g('The "%s" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340',this.name),n=this);var i=new us(function(t){var e,i,o,s,p,u,c;if(!n.duration)return r.setStyle(a),void t();for(e=Object.keys(a),i=[],o=zf(r.node),p={},u=e.length;u--;)c=e[u],s=o[bf(c)],"0px"===s&&(s=0),s!=a[c]&&(i.push(c),r.node.style[bf(c)]=s);return i.length?void Uf(r,a,n,i,t):void t()});return i}):Gf=null;var Kf=Gf,Qf=function(t,e){return"number"==typeof t?t={duration:t}:"string"==typeof t?t="slow"===t?{duration:600}:"fast"===t?{duration:200}:{duration:400}:t||(t={}),r({},t,e)},Yf=za,$f=function(t,e,n){this.init(t,e,n)};$f.prototype={init:hf,start:Yf,getStyle:yf,setStyle:_f,animateStyle:Kf,processParams:Qf};var Jf,Xf,Zf=$f,th=Ha;Jf=function(){var t=this.node,e=this.fragment.toString(!1);if(window&&window.appearsToBeIELessEqual8&&(t.type="text/css"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}},Xf=function(){this.node.type&&"text/javascript"!==this.node.type||m("Script tag was updated. This does not cause the code to be re-evaluated!",{ractive:this.root}),this.node.text=this.fragment.toString(!1)};var eh=function(){var t,e;return this.template.y?"":(t="<"+this.template.e,t+=this.attributes.map(Xa).join("")+this.conditionalAttributes.map(Xa).join(""),"option"===this.name&&$a(this)&&(t+=" selected"),"input"===this.name&&Ja(this)&&(t+=" checked"),t+=">","textarea"===this.name&&void 0!==this.getAttribute("value")?t+=Se(this.getAttribute("value")):void 0!==this.getAttribute("contenteditable")&&(t+=this.getAttribute("value")||""),this.fragment&&(e="script"!==this.name&&"style"!==this.name,t+=this.fragment.toString(e)),ic.test(this.template.e)||(t+=""+this.template.e+">"),t)},nh=Za,ah=tr,rh=function(t){this.init(t)};rh.prototype={bubble:Tl,detach:Rl,find:Ml,findAll:Ll,findAllComponents:jl,findComponent:Dl,findNextNode:Nl,firstNode:Fl,getAttribute:Il,init:df,rebind:ff,render:th,toString:eh,unbind:nh,unrender:ah};var ih=rh,oh=/^\s*$/,sh=/^\s*/,ph=function(t){var e,n,a,r;return e=t.split("\n"),n=e[0],void 0!==n&&oh.test(n)&&e.shift(),a=D(e),void 0!==a&&oh.test(a)&&e.pop(),r=e.reduce(nr,null),r&&(t=e.map(function(t){return t.replace(r,"")}).join("\n")),t},uh=ar,ch=function(t,e){var n;return e?n=t.split("\n").map(function(t,n){return n?e+t:t}).join("\n"):t},lh='Could not find template for partial "%s"',dh=function(t){var e,n;e=this.parentFragment=t.parentFragment,this.root=e.root,this.type=Au,this.index=t.index,this.name=t.template.r,this.rendered=!1,this.fragment=this.fragmentToRender=this.fragmentToUnrender=null,Gc.init(this,t),this.keypath||((n=uh(this.root,this.name,e))?(_c.call(this),this.isNamed=!0,this.setTemplate(n)):g(lh,this.name))};dh.prototype={bubble:function(){this.parentFragment.bubble()},detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},firstNode:function(){return this.fragment.firstNode()},findNextNode:function(){return this.parentFragment.findNextNode(this)},getPartialName:function(){return this.isNamed&&this.name?this.name:void 0===this.value?this.name:this.value},getValue:function(){return this.fragment.getValue()},rebind:function(t,e){this.isNamed||Uc.call(this,t,e),this.fragment&&this.fragment.rebind(t,e)},render:function(){return this.docFrag=document.createDocumentFragment(),this.update(),this.rendered=!0,this.docFrag},resolve:Gc.resolve,setValue:function(t){var e;(void 0===t||t!==this.value)&&(void 0!==t&&(e=uh(this.root,""+t,this.parentFragment)),!e&&this.name&&(e=uh(this.root,this.name,this.parentFragment))&&(_c.call(this),this.isNamed=!0),e||g(lh,this.name,{ractive:this.root}),this.value=t,this.setTemplate(e||[]),this.bubble(),this.rendered&&bs.addView(this))},setTemplate:function(t){this.fragment&&(this.fragment.unbind(),this.rendered&&(this.fragmentToUnrender=this.fragment)),this.fragment=new rg({template:t,root:this.root,owner:this,pElement:this.parentFragment.pElement}),this.fragmentToRender=this.fragment},toString:function(t){var e,n,a,r;return e=this.fragment.toString(t),n=this.parentFragment.items[this.index-1],n&&n.type===ku?(a=n.text.split("\n").pop(),(r=/^\s+$/.exec(a))?ch(e,r[0]):e):e},unbind:function(){this.isNamed||_c.call(this),this.fragment&&this.fragment.unbind()},unrender:function(t){this.rendered&&(this.fragment&&this.fragment.unrender(t),this.rendered=!1)},update:function(){var t,e;this.fragmentToUnrender&&(this.fragmentToUnrender.unrender(!0),this.fragmentToUnrender=null),this.fragmentToRender&&(this.docFrag.appendChild(this.fragmentToRender.render()),this.fragmentToRender=null),this.rendered&&(t=this.parentFragment.getNode(),e=this.parentFragment.findNextNode(this),t.insertBefore(this.docFrag,e))}};var fh,hh,mh,gh=dh,vh=pr,bh=ur,yh=new is("detach"),_h=cr,xh=lr,wh=dr,kh=fr,Sh=hr,Eh=mr,Ch=function(t,e,n,a){var r=t.root,i=t.keypath;a?r.viewmodel.smartUpdate(i,e,a):r.viewmodel.mark(i)},Ph=[],Ah=["pop","push","reverse","shift","sort","splice","unshift"];Ah.forEach(function(t){var e=function(){for(var e=arguments.length,n=Array(e),a=0;e>a;a++)n[a]=arguments[a];var r,i,o,s;for(r=bp(this,t,n),i=Array.prototype[t].apply(this,arguments),bs.start(),this._ractive.setting=!0,s=this._ractive.wrappers.length;s--;)o=this._ractive.wrappers[s],bs.addRactive(o.root),Ch(o,this,t,r);return bs.end(),this._ractive.setting=!1,i};Eo(Ph,t,{value:e})}),fh={},fh.__proto__?(hh=function(t){t.__proto__=Ph},mh=function(t){t.__proto__=Array.prototype}):(hh=function(t){var e,n;for(e=Ah.length;e--;)n=Ah[e],Eo(t,n,{value:Ph[n],configurable:!0})},mh=function(t){var e;for(e=Ah.length;e--;)delete t[Ah[e]]}),hh.unpatch=mh;var Oh,Th,Rh,Mh=hh;Oh={filter:function(t){return i(t)&&(!t._ractive||!t._ractive.setting)},wrap:function(t,e,n){return new Th(t,e,n)}},Th=function(t,e,n){this.root=t,this.value=e,this.keypath=S(n),e._ractive||(Eo(e,"_ractive",{value:{wrappers:[],instances:[],setting:!1},configurable:!0}),Mh(e)),e._ractive.instances[t._guid]||(e._ractive.instances[t._guid]=0,e._ractive.instances.push(t)),e._ractive.instances[t._guid]+=1,e._ractive.wrappers.push(this)},Th.prototype={get:function(){return this.value},teardown:function(){var t,e,n,a,r;if(t=this.value,e=t._ractive,n=e.wrappers,a=e.instances,e.setting)return!1;if(r=n.indexOf(this),-1===r)throw Error(Rh);if(n.splice(r,1),n.length){if(a[this.root._guid]-=1,!a[this.root._guid]){if(r=a.indexOf(this.root),-1===r)throw Error(Rh);a.splice(r,1)}}else delete t._ractive,Mh.unpatch(this.value)}},Rh="Something went wrong in a rather interesting way";var Lh,jh,Dh=Oh,Nh=/^\s*[0-9]+\s*$/,Fh=function(t){return Nh.test(t)?[]:{}};try{Object.defineProperty({},"test",{value:0}),Lh={filter:function(t,e,n){var a,r;return e?(e=S(e),(a=n.viewmodel.wrapped[e.parent.str])&&!a.magic?!1:(r=n.viewmodel.get(e.parent),i(r)&&/^[0-9]+$/.test(e.lastKey)?!1:r&&("object"==typeof r||"function"==typeof r))):!1},wrap:function(t,e,n){return new jh(t,e,n)}},jh=function(t,e,n){var a,r,i;return n=S(n),this.magic=!0,this.ractive=t,this.keypath=n,this.value=e,this.prop=n.lastKey,a=n.parent,this.obj=a.isRoot?t.viewmodel.data:t.viewmodel.get(a),r=this.originalDescriptor=Object.getOwnPropertyDescriptor(this.obj,this.prop),r&&r.set&&(i=r.set._ractiveWrappers)?void(-1===i.indexOf(this)&&i.push(this)):void gr(this,e,r)},jh.prototype={get:function(){return this.value},reset:function(t){return this.updating?void 0:(this.updating=!0,this.obj[this.prop]=t,bs.addRactive(this.ractive),this.ractive.viewmodel.mark(this.keypath,{keepExistingWrapper:!0}),this.updating=!1,!0)},set:function(t,e){this.updating||(this.obj[this.prop]||(this.updating=!0,this.obj[this.prop]=Fh(t),this.updating=!1),this.obj[this.prop][t]=e)},teardown:function(){var t,e,n,a,r;return this.updating?!1:(t=Object.getOwnPropertyDescriptor(this.obj,this.prop),e=t&&t.set,void(e&&(a=e._ractiveWrappers,r=a.indexOf(this),-1!==r&&a.splice(r,1),a.length||(n=this.obj[this.prop],Object.defineProperty(this.obj,this.prop,this.originalDescriptor||{writable:!0,enumerable:!0,configurable:!0}),this.obj[this.prop]=n))))}}}catch(Ao){Lh=!1}var Ih,Bh,Vh=Lh;Vh&&(Ih={filter:function(t,e,n){return Vh.filter(t,e,n)&&Dh.filter(t)},wrap:function(t,e,n){return new Bh(t,e,n)}},Bh=function(t,e,n){this.value=e,this.magic=!0,this.magicWrapper=Vh.wrap(t,e,n),this.arrayWrapper=Dh.wrap(t,e,n)},Bh.prototype={get:function(){return this.value},teardown:function(){this.arrayWrapper.teardown(),this.magicWrapper.teardown()},reset:function(t){return this.magicWrapper.reset(t)}});var qh=Ih,Uh=vr,Gh={},zh=_r,Wh=xr,Hh=Sr,Kh=Or,Qh=Tr,Yh=function(t,e){this.computation=t,this.viewmodel=t.viewmodel,this.ref=e,this.root=this.viewmodel.ractive,this.parentFragment=this.root.component&&this.root.component.parentFragment};Yh.prototype={resolve:function(t){this.computation.softDeps.push(t),this.computation.unresolvedDeps[t.str]=null,this.viewmodel.register(t,this.computation,"computed")}};var $h=Yh,Jh=function(t,e){this.key=t,this.getter=e.getter,this.setter=e.setter,this.hardDeps=e.deps||[],this.softDeps=[],this.unresolvedDeps={},this.depValues={},this._dirty=this._firstRun=!0};Jh.prototype={constructor:Jh,init:function(t){var e,n=this;this.viewmodel=t,this.bypass=!0,e=t.get(this.key),t.clearCache(this.key.str),this.bypass=!1,this.setter&&void 0!==e&&this.set(e),this.hardDeps&&this.hardDeps.forEach(function(e){return t.register(e,n,"computed")})},invalidate:function(){this._dirty=!0},get:function(){var t,e,n=this,a=!1;if(this.getting){var r="The "+this.key.str+" computation indirectly called itself. This probably indicates a bug in the computation. It is commonly caused by `array.sort(...)` - if that's the case, clone the array first with `array.slice().sort(...)`";return h(r),this.value}if(this.getting=!0,this._dirty){if(this._firstRun||!this.hardDeps.length&&!this.softDeps.length?a=!0:[this.hardDeps,this.softDeps].forEach(function(t){var e,r,i;if(!a)for(i=t.length;i--;)if(e=t[i],r=n.viewmodel.get(e),!s(r,n.depValues[e.str]))return n.depValues[e.str]=r,void(a=!0)}),a){this.viewmodel.capture();try{this.value=this.getter()}catch(i){m('Failed to compute "%s"',this.key.str),d(i.stack||i),this.value=void 0}t=this.viewmodel.release(),e=this.updateDependencies(t),e&&[this.hardDeps,this.softDeps].forEach(function(t){t.forEach(function(t){n.depValues[t.str]=n.viewmodel.get(t)})})}this._dirty=!1}return this.getting=this._firstRun=!1,this.value},set:function(t){if(this.setting)return void(this.value=t);if(!this.setter)throw Error("Computed properties without setters are read-only. (This may change in a future version of Ractive!)");this.setter(t)},updateDependencies:function(t){var e,n,a,r,i;for(n=this.softDeps,e=n.length;e--;)a=n[e],-1===t.indexOf(a)&&(r=!0,this.viewmodel.unregister(a,this,"computed"));for(e=t.length;e--;)a=t[e],-1!==n.indexOf(a)||this.hardDeps&&-1!==this.hardDeps.indexOf(a)||(r=!0,Rr(this.viewmodel,a)&&!this.unresolvedDeps[a.str]?(i=new $h(this,a.str),t.splice(e,1),this.unresolvedDeps[a.str]=i,bs.addUnresolved(i)):this.viewmodel.register(a,this,"computed"));return r&&(this.softDeps=t.slice()),r}};var Xh=Jh,Zh=Mr,tm={FAILED_LOOKUP:!0},em=Lr,nm={},am=Dr,rm=Nr,im=function(t,e){this.localKey=t,this.keypath=e.keypath,this.origin=e.origin,this.deps=[],this.unresolved=[],this.resolved=!1};im.prototype={forceResolution:function(){this.keypath=this.localKey,this.setup()},get:function(t,e){return this.resolved?this.origin.get(this.map(t),e):void 0},getValue:function(){return this.keypath?this.origin.get(this.keypath):void 0},initViewmodel:function(t){this.local=t,this.setup()},map:function(t){return void 0===typeof this.keypath?this.localKey:t.replace(this.localKey,this.keypath)},register:function(t,e,n){this.deps.push({keypath:t,dep:e,group:n}),this.resolved&&this.origin.register(this.map(t),e,n)},resolve:function(t){void 0!==this.keypath&&this.unbind(!0),this.keypath=t,this.setup()},set:function(t,e){this.resolved||this.forceResolution(),this.origin.set(this.map(t),e)},setup:function(){var t=this;void 0!==this.keypath&&(this.resolved=!0,this.deps.length&&(this.deps.forEach(function(e){var n=t.map(e.keypath);if(t.origin.register(n,e.dep,e.group),e.dep.setValue)e.dep.setValue(t.origin.get(n));else{if(!e.dep.invalidate)throw Error("An unexpected error occurred. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");e.dep.invalidate()}}),this.origin.mark(this.keypath)))},setValue:function(t){if(!this.keypath)throw Error("Mapping does not have keypath, cannot set value. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");this.origin.set(this.keypath,t)},unbind:function(t){var e=this;t||delete this.local.mappings[this.localKey],this.resolved&&(this.deps.forEach(function(t){e.origin.unregister(e.map(t.keypath),t.dep,t.group)}),this.tracker&&this.origin.unregister(this.keypath,this.tracker))},unregister:function(t,e,n){var a,r;if(this.resolved){for(a=this.deps,r=a.length;r--;)if(a[r].dep===e){a.splice(r,1);break}this.origin.unregister(this.map(t),e,n)}}};var om=Fr,sm=function(t,e){var n,a,r,i;return n={},a=0,r=t.map(function(t,r){var o,s,p;s=a,p=e.length;do{if(o=e.indexOf(t,s),-1===o)return i=!0,-1;s=o+1}while(n[o]&&p>s);return o===a&&(a+=1),o!==r&&(i=!0),n[o]=!0,o})},pm=Ir,um={},cm=qr,lm=Gr,dm=zr,fm=Wr,hm=Kr,mm={implicit:!0},gm={noCascade:!0},vm=Yr,bm=$r,ym=function(t){var e,n,a=t.adapt,r=t.data,i=t.ractive,o=t.computed,s=t.mappings;this.ractive=i,this.adaptors=a,this.onchange=t.onchange,this.cache={},this.cacheMap=So(null),this.deps={computed:So(null),"default":So(null)},this.depsMap={computed:So(null),"default":So(null)},this.patternObservers=[],this.specials=So(null),this.wrapped=So(null),this.computations=So(null),this.captureGroups=[],this.unresolvedImplicitDependencies=[],this.changes=[],this.implicitChanges={},this.noCascade={},this.data=r,this.mappings=So(null);for(e in s)this.map(S(e),s[e]);if(r)for(e in r)(n=this.mappings[e])&&void 0===n.getValue()&&n.setValue(r[e]);for(e in o)s&&e in s&&l("Cannot map to a computed property ('%s')",e),this.compute(S(e),o[e]);this.ready=!0};ym.prototype={adapt:Uh,applyChanges:Hh,capture:Kh,clearCache:Qh,compute:Zh,get:em,init:am,map:rm,mark:om,merge:pm,register:cm,release:lm,reset:dm,set:fm,smartUpdate:hm,teardown:vm,unregister:bm};var _m=ym;Xr.prototype={constructor:Xr,begin:function(t){this.inProcess[t._guid]=!0},end:function(t){var e=t.parent;e&&this.inProcess[e._guid]?Zr(this.queue,e).push(t):ti(this,t),delete this.inProcess[t._guid]}};var xm=Xr,wm=ei,km=/\$\{([^\}]+)\}/g,Sm=new is("construct"),Em=new is("config"),Cm=new xm("init"),Pm=0,Am=["adaptors","components","decorators","easing","events","interpolators","partials","transitions"],Om=ii,Tm=ci;ci.prototype={bubble:function(){this.dirty||(this.dirty=!0,bs.addView(this))},update:function(){this.callback(this.fragment.getValue()),this.dirty=!1},rebind:function(t,e){this.fragment.rebind(t,e)},unbind:function(){this.fragment.unbind()}};var Rm=function(t,e,n,r,o){var s,p,u,c,l,d,f={},h={},g={},v=[];for(p=t.parentFragment,u=t.root,o=o||{},a(f,o),o.content=r||[],f[""]=o.content,e.defaults.el&&m("The <%s/> component has a default `el` property; it has been disregarded",t.name),c=p;c;){if(c.owner.type===Mu){l=c.owner.container;break}c=c.parent}return n&&Object.keys(n).forEach(function(e){var a,r,o=n[e];if("string"==typeof o)a=dc(o),h[e]=a?a.value:o;else if(0===o)h[e]=!0;else{if(!i(o))throw Error("erm wut");di(o)?(g[e]={origin:t.root.viewmodel,keypath:void 0},r=li(t,o[0],function(t){t.isSpecial?d?s.set(e,t.value):(h[e]=t.value,delete g[e]):d?s.viewmodel.mappings[e].resolve(t):g[e].keypath=t})):r=new Tm(t,o,function(t){d?s.set(e,t):h[e]=t}),v.push(r)}}),s=So(e.prototype),Om(s,{el:null,append:!0,data:h,partials:o,magic:u.magic||e.defaults.magic,modifyArrays:u.modifyArrays,adapt:u.adapt},{parent:u,component:t,container:l,mappings:g,inlinePartials:f,cssIds:p.cssIds}),d=!0,t.resolvers=v,s},Mm=fi,Lm=function(t){var e,n;for(e=t.root;e;)(n=e._liveComponentQueries["_"+t.name])&&n.push(t.instance),e=e.parent},jm=mi,Dm=gi,Nm=vi,Fm=bi,Im=yi,Bm=new is("teardown"),Vm=xi,qm=function(t,e){this.init(t,e)};qm.prototype={detach:bh,find:_h,findAll:xh,findAllComponents:wh,findComponent:kh,findNextNode:Sh,firstNode:Eh,init:jm,rebind:Dm,render:Nm,toString:Fm,unbind:Im,unrender:Vm};var Um=qm,Gm=function(t){this.type=Ou,this.value=t.template.c};Gm.prototype={detach:vc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createComment(this.value)),this.node},toString:function(){return""},unrender:function(t){t&&this.node.parentNode.removeChild(this.node)}};var zm=Gm,Wm=function(t){var e,n;this.type=Mu,this.container=e=t.parentFragment.root,this.component=n=e.component,this.container=e,this.containerFragment=t.parentFragment,this.parentFragment=n.parentFragment;var a=this.name=t.template.n||"",r=e._inlinePartials[a];r||(m('Could not find template for partial "'+a+'"',{ractive:t.root}),r=[]),this.fragment=new rg({owner:this,root:e.parent,template:r,pElement:this.containerFragment.pElement}),i(n.yielders[a])?n.yielders[a].push(this):n.yielders[a]=[this],bs.scheduleTask(function(){if(n.yielders[a].length>1)throw Error("A component template can only have one {{yield"+(a?" "+a:"")+"}} declaration at a time")})};Wm.prototype={detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},findNextNode:function(){return this.containerFragment.findNextNode(this)},firstNode:function(){return this.fragment.firstNode()},getValue:function(t){return this.fragment.getValue(t)},render:function(){return this.fragment.render()},unbind:function(){this.fragment.unbind()},unrender:function(t){this.fragment.unrender(t),N(this.component.yielders[this.name],this)},rebind:function(t,e){this.fragment.rebind(t,e)},toString:function(){return""+this.fragment}};var Hm=Wm,Km=function(t){this.declaration=t.template.a};Km.prototype={init:ko,render:ko,unrender:ko,teardown:ko,toString:function(){return""}};var Qm=Km,Ym=wi,$m=Si,Jm=Ei,Xm=Ci,Zm=Oi,tg=Ri,eg=function(t){this.init(t)};eg.prototype={bubble:cu,detach:lu,find:du,findAll:fu,findAllComponents:hu,findComponent:mu,findNextNode:gu,firstNode:vu,getArgsList:hc,getNode:mc,getValue:gc,init:Ym,rebind:$m,registerIndexRef:function(t){var e=this.registeredIndexRefs;-1===e.indexOf(t)&&e.push(t)},render:Jm,toString:Xm,unbind:Zm,unregisterIndexRef:function(t){var e=this.registeredIndexRefs;e.splice(e.indexOf(t),1)},unrender:tg};var ng,ag,rg=eg,ig=Mi,og=["template","partials","components","decorators","events"],sg=new is("reset"),pg=function(t,e){function n(e,a,r){r&&r.partials[t]||e.forEach(function(e){e.type===Au&&e.getPartialName()===t&&a.push(e),e.fragment&&n(e.fragment.items,a,r),i(e.fragments)?n(e.fragments,a,r):i(e.items)?n(e.items,a,r):e.type===Ru&&e.instance&&n(e.instance.fragment.items,a,e.instance),e.type===Pu&&(i(e.attributes)&&n(e.attributes,a,r),i(e.conditionalAttributes)&&n(e.conditionalAttributes,a,r))})}var a,r=[];return n(this.fragment.items,r),this.partials[t]=e,a=bs.start(this,!0),r.forEach(function(e){e.value=void 0,e.setValue(t)}),bs.end(),a},ug=Li,cg=_p("reverse"),lg=ji,dg=_p("shift"),fg=_p("sort"),hg=_p("splice"),mg=Ni,gg=Fi,vg=new is("teardown"),bg=Bi,yg=Vi,_g=qi,xg=new is("unrender"),wg=_p("unshift"),kg=Ui,Sg=new is("update"),Eg=Gi,Cg={add:Zo,animate:Ss,detach:Cs,find:As,findAll:Fs,findAllComponents:Is,findComponent:Bs,findContainer:Vs,findParent:qs,fire:Ws,get:Hs,insert:Qs,merge:$s,observe:lp,observeOnce:dp,off:mp,on:gp,once:vp,pop:xp,push:wp,render:Tp,reset:ig,resetPartial:pg,resetTemplate:ug,reverse:cg,set:lg,shift:dg,sort:fg,splice:hg,subtract:mg,teardown:gg,toggle:bg,toHTML:yg,toHtml:yg,unrender:_g,unshift:wg,update:kg,updateModel:Eg},Pg=function(t,e,n){return n||Wi(t,e)?function(){var n,a="_super"in this,r=this._super;return this._super=e,n=t.apply(this,arguments),a&&(this._super=r),n}:t},Ag=Hi,Og=$i,Tg=function(t){var e,n,a={};return t&&(e=t._ractive)?(a.ractive=e.root,a.keypath=e.keypath.str,a.index={},(n=Oc(e.proxy.parentFragment))&&(a.index=Oc.resolve(n)),a):a};ng=function(t){return this instanceof ng?void Om(this,t):new ng(t)},ag={DEBUG:{writable:!0,value:!0},DEBUG_PROMISES:{writable:!0,value:!0},extend:{value:Og},getNodeInfo:{value:Tg},parse:{value:Hp},Promise:{value:us},svg:{value:ao},magic:{value:eo},VERSION:{value:"0.7.3"},adaptors:{writable:!0,value:{}},components:{writable:!0,value:{}},decorators:{writable:!0,value:{}},easing:{writable:!0,value:po},events:{writable:!0,value:{}},interpolators:{writable:!0,value:Uo},partials:{writable:!0,value:{}},transitions:{writable:!0,value:{}}},Co(ng,ag),ng.prototype=a(Cg,so),ng.prototype.constructor=ng,ng.defaults=ng.prototype;var Rg="function";if(typeof Date.now!==Rg||typeof String.prototype.trim!==Rg||typeof Object.keys!==Rg||typeof Array.prototype.indexOf!==Rg||typeof Array.prototype.forEach!==Rg||typeof Array.prototype.map!==Rg||typeof Array.prototype.filter!==Rg||"undefined"!=typeof window&&typeof window.addEventListener!==Rg)throw Error("It looks like you're attempting to use Ractive.js in an older browser. You'll need to use one of the 'legacy builds' in order to continue - see http://docs.ractivejs.org/latest/legacy-builds for more information.");var Mg=ng;return Mg})},{}],342:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.observe("value",function(e,n,a){var r=t.get(),i=r.min,o=r.max,s=Math.clamp(i,o,e);t.animate("percentage",Math.round((s-i)/(o-i)*100))})}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,293],t:7,e:"div",a:{"class":"bar"},f:[{p:[14,3,313],t:7,e:"div",a:{"class":["barFill ",{t:2,r:"state",p:[14,23,333]}],style:["width: ",{t:2,r:"percentage",p:[14,48,358]},"%"]}}," ",{p:[15,3,384],t:7,e:"span",a:{"class":"barText"},f:[{t:16,p:[15,25,406]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],343:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(482),a=t(481);e.exports={computed:{clickable:function(){return!this.get("enabled")||this.get("state")&&"toggle"!=this.get("state")?!1:!0},enabled:function(){return this.get("config.status")===n.UI_INTERACTIVE?!0:!1},styles:function(){var t="";if(this.get("class")&&(t+=" "+this.get("class")),this.get("tooltip-side")&&(t=" tooltip-"+this.get("tooltip-side")),this.get("grid")&&(t+=" gridable"),this.get("enabled")){var e=this.get("state"),n=this.get("style");return e?"inactive "+e+" "+t:"active normal "+n+" "+t}return"inactive disabled "+t}},oninit:function(){var t=this;this.on("press",function(e){var n=t.get(),r=n.action,i=n.params;(0,a.act)(t.get("config.ref"),r,i),e.node.blur()})},data:{iconStackToHTML:function(t){var e="",n=t.split(",");if(n.length){e+='';for(var a=n,r=Array.isArray(a),i=0,a=r?a:a[Symbol.iterator]();;){var o;if(r){if(i>=a.length)break;o=a[i++]}else{if(i=a.next(),i.done)break;o=i.value}var s=o,p=/([\w\-]+)\s*(\dx)/g,u=p.exec(s),c=u[1],l=u[2];e+=' '}}return e&&(e+=" "),e}}}}(r),r.exports.template={v:3,t:[" ",{p:[70,1,1950],t:7,e:"span",a:{"class":["button ",{t:2,r:"styles",p:[70,21,1970]}],unselectable:"on","data-tooltip":[{t:2,r:"tooltip",p:[73,17,2052]}]},m:[{t:4,f:["tabindex='0'"],r:"clickable",p:[72,3,2004]}],v:{"mouseover-mousemove":"hover",mouseleave:"unhover","click-enter":{n:[{t:4,f:["press"],r:"clickable",p:[76,19,2142]}],d:[]}},f:[{t:4,f:[{p:[78,5,2188],t:7,e:"i",a:{"class":["fa fa-",{t:2,r:"icon",p:[78,21,2204]}]}}],n:50,r:"icon",p:[77,3,2171]}," ",{t:4,f:[{t:3,x:{r:["iconStackToHTML","icon_stack"],s:"_0(_1)"},p:[81,6,2255]}],n:50,r:"icon_stack",p:[80,3,2231]}," ",{t:16,p:[83,3,2301]}]}]},e.exports=a.extend(r.exports)},{341:341,481:481,482:482}],344:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"display"},f:[{t:4,f:[{p:[3,5,42],t:7,e:"header",f:[{p:[4,7,57],t:7,e:"h3",f:[{t:2,r:"title",p:[4,11,61]}]}," ",{t:4,f:[{p:[6,9,105],t:7,e:"div",a:{"class":"buttonRight"},f:[{t:16,n:"button",p:[6,34,130]}]}],n:50,r:"button",p:[5,7,82]}]}],n:50,r:"title",p:[2,3,24]}," ",{p:[10,3,193],t:7,e:"article",f:[{t:16,p:[11,5,207]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],345:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.on("clear",function(){t.set("value",""),t.find("input").focus()})}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,159],t:7,e:"input",a:{type:"text",value:[{t:2,r:"value",p:[12,27,185]}],placeholder:[{t:2,r:"placeholder",p:[12,51,209]}]}}," ",{p:[13,1,228],t:7,e:"ui-button",a:{icon:"refresh"},v:{press:"clear"}}]},e.exports=a.extend(r.exports)},{341:341}],346:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";e.exports={data:{graph:t(338),xaccessor:function(t){return t.x},yaccessor:function(t){return t.y}},computed:{size:function(){var t=this.get("points");return t[0].length},scale:function(){var t=this.get("points");return Math.max.apply(Math,Array.map(t,function(t){return Math.max.apply(Math,Array.map(t,function(t){return t.y}))}))},xaxis:function(){var t=this.get("xinc"),e=this.get("size");return Array.from(Array(e).keys()).filter(function(e){return e&&e%t==0})},yaxis:function(){var t=this.get("yinc"),e=this.get("scale");return Array.from(Array(t).keys()).map(function(t){return Math.round(e*(++t/100)*10)})}},oninit:function(){var t=this;this.on({enter:function(t){this.set("selected",t.index.count)},exit:function(t){this.set("selected")}}),window.addEventListener("resize",function(e){t.set("width",t.el.clientWidth)})},onrender:function(){this.set("width",this.el.clientWidth)}}}(r),r.exports.template={v:3,t:[" ",{p:[47,1,1223],t:7,e:"svg",a:{"class":"linegraph",width:"100%",height:[{t:2,x:{r:["height"],s:"_0+10"},p:[47,45,1267]}]},f:[{p:[48,3,1287],t:7,e:"g",a:{transform:"translate(0, 5)"},f:[{t:4,f:[{t:4,f:[{p:[51,9,1454],t:7,e:"line",a:{x1:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,19,1464]}],x2:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,38,1483]}],y1:"0",y2:[{t:2,r:"height",p:[51,64,1509]}],stroke:"darkgray"}}," ",{t:4,f:[{p:[53,11,1583],t:7,e:"text",a:{x:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[53,20,1592]}],y:[{t:2,x:{r:["height"],s:"_0-5"},p:[53,38,1610]}],"text-anchor":"middle",fill:"white"},f:[{t:2,x:{r:["size",".","xfactor"],s:"(_0-_1)*_2"},p:[53,88,1660]}," ",{t:2,r:"xunit",p:[53,113,1685]}]}],n:50,x:{r:["@index"],s:"_0%2==0"},p:[52,9,1549]}],n:52,r:"xaxis",p:[50,7,1430]}," ",{t:4,f:[{p:[57,9,1764],t:7,e:"line",a:{x1:"0",x2:[{t:2,r:"width",p:[57,26,1781]}],y1:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,41,1796]}],y2:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,60,1815]}],stroke:"darkgray"}}," ",{p:[58,9,1858],t:7,e:"text",a:{x:"0",y:[{t:2,x:{r:["yscale","."],s:"_0(_1)-5"},p:[58,24,1873]}],"text-anchor":"begin",fill:"white"},f:[{t:2,x:{r:[".","yfactor"],s:"_0*_1"},p:[58,76,1925]}," ",{t:2,r:"yunit",p:[58,92,1941]}]}],n:52,r:"yaxis",p:[56,7,1740]}," ",{t:4,f:[{p:[61,9,2011],t:7,e:"path",a:{d:[{t:2,x:{r:["area.path"],s:"_0.print()"},p:[61,18,2020]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[61,47,2049]}],opacity:"0.1"}}],n:52,i:"curve",r:"curves",p:[60,7,1980]}," ",{t:4,f:[{p:[64,9,2137],t:7,e:"path",a:{d:[{t:2,x:{r:["line.path"],s:"_0.print()"},p:[64,18,2146]}],stroke:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[64,49,2177]}],fill:"none"}}],n:52,
+i:"curve",r:"curves",p:[63,7,2106]}," ",{t:4,f:[{t:4,f:[{p:[68,11,2308],t:7,e:"circle",a:{transform:["translate(",{t:2,r:".",p:[68,40,2337]},")"],r:[{t:2,x:{r:["selected","count"],s:"_0==_1?10:4"},p:[68,51,2348]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[68,89,2386]}]},v:{mouseenter:"enter",mouseleave:"exit"}}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[67,9,2263]}],n:52,i:"curve",r:"curves",p:[66,7,2232]}," ",{t:4,f:[{t:4,f:[{t:4,f:[{p:[74,13,2605],t:7,e:"text",a:{transform:["translate(",{t:2,r:".",p:[74,40,2632]},") ",{t:2,x:{r:["count","size"],s:'_0<=_1/2?"translate(15, 4)":"translate(-15, 4)"'},p:[74,47,2639]}],"text-anchor":[{t:2,x:{r:["count","size"],s:'_0<=_1/2?"start":"end"'},p:[74,126,2718]}],fill:"white"},f:[{t:2,x:{r:["count","item","yfactor"],s:"_1[_0].y*_2"},p:[75,15,2787]}," ",{t:2,r:"yunit",p:[75,43,2815]}," @ ",{t:2,x:{r:["size","count","item","xfactor"],s:"(_0-_2[_1].x)*_3"},p:[75,55,2827]}," ",{t:2,r:"xunit",p:[75,92,2864]}]}],n:50,x:{r:["selected","count"],s:"_0==_1"},p:[73,11,2566]}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[72,9,2521]}],n:52,i:"curve",r:"curves",p:[71,7,2490]}," ",{t:4,f:[{p:[81,9,2983],t:7,e:"g",a:{transform:["translate(",{t:2,x:{r:["width","curves.length","@index"],s:"(_0/(_1+1))*(_2+1)"},p:[81,33,3007]},", 10)"]},f:[{p:[82,11,3073],t:7,e:"circle",a:{r:"4",fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[82,31,3093]}]}}," ",{p:[83,11,3124],t:7,e:"text",a:{x:"8",y:"4",fill:"white"},f:[{t:2,rx:{r:"legend",m:[{t:30,n:"curve"}]},p:[83,42,3155]}]}]}],n:52,i:"curve",r:"curves",p:[80,7,2952]}],x:{r:["graph","points","xaccessor","yaccessor","width","height"],s:"_0({data:_1,xaccessor:_2,yaccessor:_3,width:_4,height:_5})"},p:[49,5,1323]}]}]}]},e.exports=a.extend(r.exports)},{338:338,341:341}],347:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"notice"},f:[{t:16,p:[2,3,23]}]}]},e.exports=a.extend(r.exports)},{341:341}],348:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={oninit:function(){var t=this,e=a.resize.bind(this),r=function(){return t.set({resize:!1,x:null,y:null})};this.observe("config.fancy",function(a,i,o){(0,n.winset)(t.get("config.window"),"can-resize",!a),a?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r))}),this.on("resize",function(){return t.toggle("resize")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[28,3,739],t:7,e:"div",a:{"class":"resize"},v:{mousedown:"resize"}}],n:50,r:"config.fancy",p:[27,1,716]}]},e.exports=a.extend(r.exports)},{341:341,481:481,483:483}],349:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"section",a:{"class":[{t:4,f:["candystripe"],r:"candystripe",p:[1,17,16]}]},f:[{t:4,f:[{p:[3,5,82],t:7,e:"span",a:{"class":"label",style:[{t:4,f:["color:",{t:2,r:"labelcolor",p:[3,53,130]}],r:"labelcolor",p:[3,32,109]}]},f:[{t:2,r:"label",p:[3,84,161]},":"]}],n:50,r:"label",p:[2,3,64]}," ",{t:4,f:[{t:16,p:[6,5,210]}],n:50,r:"nowrap",p:[5,3,191]},{t:4,n:51,f:[{p:[8,5,235],t:7,e:"div",a:{"class":"content",style:[{t:4,f:["float:right;"],r:"right",p:[8,33,263]}]},f:[{t:16,p:[9,7,304]}]}],r:"nowrap"}]}]},e.exports=a.extend(r.exports)},{341:341}],350:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"subdisplay"},f:[{t:4,f:[{p:[3,5,45],t:7,e:"header",f:[{p:[4,7,60],t:7,e:"h4",f:[{t:2,r:"title",p:[4,11,64]}]}," ",{t:4,f:[{t:16,n:"button",p:[5,21,99]}],n:50,r:"button",p:[5,7,85]}]}],n:50,r:"title",p:[2,3,27]}," ",{p:[8,3,149],t:7,e:"article",f:[{t:16,p:[9,5,163]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],351:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.set("active",this.findComponent("tab").get("name")),this.on("switch",function(e){t.set("active",e.node.textContent.trim())}),this.observe("active",function(e,n,a){for(var r=t.findAllComponents("tab"),i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;p.set("shown",p.get("name")===e)}})}}}(r),r.exports.template={v:3,t:[" "," ",{p:[20,1,505],t:7,e:"header",f:[{t:4,f:[{p:[22,5,535],t:7,e:"ui-button",a:{pane:[{t:2,r:".",p:[22,22,552]}]},v:{press:"switch"},f:[{t:2,r:".",p:[22,47,577]}]}],n:52,r:"tabs",p:[21,3,516]}]}," ",{p:[25,1,617],t:7,e:"ui-display",f:[{t:8,r:"content",p:[26,3,632]}]}]},r.exports.components=r.exports.components||{};var i={tab:t(352)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,352:352}],352:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:16,p:[2,3,16]}],n:50,r:"shown",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],353:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(482),a=t(481),r=t(483);e.exports={computed:{visualStatus:function(){switch(this.get("config.status")){case n.UI_INTERACTIVE:return"good";case n.UI_UPDATE:return"average";case n.UI_DISABLED:return"bad";default:return"bad"}}},oninit:function(){var t=this,e=r.drag.bind(this),n=function(e){return t.set({drag:!1,x:null,y:null})};this.observe("config.fancy",function(r,i,o){(0,a.winset)(t.get("config.window"),"titlebar",!r&&t.get("config.titlebar")),r?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",n)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",n))}),this.on({drag:function(){this.toggle("drag")},close:function(){(0,a.winset)(this.get("config.window"),"is-visible",!1),window.location.href=(0,a.href)({command:"uiclose "+this.get("config.ref")},"winset")},minimize:function(){(0,a.winset)(this.get("config.window"),"is-minimized",!0)}})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[50,3,1391],t:7,e:"header",a:{"class":"titlebar"},v:{mousedown:"drag"},f:[{p:[51,5,1441],t:7,e:"i",a:{"class":["statusicon fa fa-eye fa-2x ",{t:2,r:"visualStatus",p:[51,42,1478]}]}}," ",{p:[52,5,1505],t:7,e:"span",a:{"class":"title"},f:[{t:16,p:[52,25,1525]}]}," ",{t:4,f:[{p:[54,7,1573],t:7,e:"i",a:{"class":"minimize fa fa-minus fa-2x"},v:{click:"minimize"}}," ",{p:[55,7,1642],t:7,e:"i",a:{"class":"close fa fa-close fa-2x"},v:{click:"close"}}],n:50,r:"config.fancy",p:[53,5,1546]}]}],n:50,r:"config.titlebar",p:[49,1,1365]}]},e.exports=a.extend(r.exports)},{341:341,481:481,482:482,483:483}],354:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";var e=[11,10,9,8];t.exports={data:{userAgent:navigator.userAgent},computed:{ie:function(){if(document.documentMode)return document.documentMode;for(var t in e){var n=document.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return t}}},oninit:function(){var t=this;this.on("debug",function(){return t.toggle("debug")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[27,3,636],t:7,e:"ui-notice",f:[{p:[28,5,652],t:7,e:"span",f:["You have an old (IE",{t:2,r:"ie",p:[28,30,677]},"), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed."]},{p:[28,137,784],t:7,e:"br"}," ",{p:[29,5,794],t:7,e:"span",f:["To upgrade, click 'Upgrade IE' to download IE11 from Microsoft."]},{p:[29,81,870],t:7,e:"br"}," ",{p:[30,5,880],t:7,e:"span",f:["If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft."]},{p:[30,122,997],t:7,e:"br"}," ",{p:[31,5,1007],t:7,e:"span",f:["Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message)."]}," ",{p:[32,5,1124],t:7,e:"hr"}," ",{p:[33,5,1134],t:7,e:"ui-button",a:{icon:"close",action:"tgui:nofrills"},f:["No Frills"]}," ",{p:[34,5,1207],t:7,e:"ui-button",a:{icon:"internet-explorer",action:"tgui:link",params:'{"url": "http://windows.microsoft.com/en-us/internet-explorer/download-ie"}'},f:["Upgrade IE"]}," ",{p:[36,5,1381],t:7,e:"ui-button",a:{icon:"edge",action:"tgui:link",params:'{"url": "https://dev.windows.com/en-us/microsoft-edge/tools/vms"}'},f:["IE VMs"]}," ",{p:[38,5,1528],t:7,e:"ui-button",a:{icon:"info",action:"tgui:link",params:'{"url": "https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer"}'},f:["EOL Info"]}," ",{p:[40,5,1699],t:7,e:"ui-button",a:{icon:"bug"},v:{press:"debug"},f:["Debug Info"]}," ",{t:4,f:[{p:[42,7,1785],t:7,e:"hr"}," ",{p:[43,7,1797],t:7,e:"span",f:["Detected: IE",{t:2,r:"ie",p:[43,25,1815]}]},{p:[43,38,1828],t:7,e:"br"}," ",{p:[44,7,1840],t:7,e:"span",f:["User Agent: ",{t:2,r:"userAgent",p:[44,25,1858]}]}],n:50,r:"debug",p:[41,5,1765]}]}],n:50,x:{r:["config.fancy","ie"],s:"_0&&_1&&_1<11"},p:[26,1,596]}]},e.exports=a.extend(r.exports)},{341:341}],355:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},shockState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[22,1,327],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[23,2,362],t:7,e:"ui-section",a:{label:"Main"},f:[{p:[24,3,390],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.main"],s:"_0(_1)"},p:[24,16,403]}]},f:[{t:2,x:{r:["data.power.main"],s:'_0?"Online":"Offline"'},p:[24,49,436]}]}," ",{t:4,f:["[ ",{p:[26,6,542],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"},p:[25,3,488]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.main_timeleft",p:[29,7,646]}," seconds left ]"],n:50,x:{r:["data.power.main_timeleft"],s:"_0>0"},p:[28,4,603]}],x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"}}," ",{p:[32,3,713],t:7,e:"div",a:{style:"float:right"},f:[{p:[33,4,742],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-main",state:[{t:2,x:{r:["data.power.main"],s:'_0?null:"disabled"'},p:[33,63,801]}]},f:["Disrupt"]}]}]}," ",{p:[36,2,887],t:7,e:"ui-section",a:{label:"Backup"},f:[{p:[37,3,917],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.backup"],s:"_0(_1)"},p:[37,16,930]}]},f:[{t:2,x:{r:["data.power.backup"],s:'_0?"Online":"Offline"'},p:[37,51,965]}]}," ",{t:4,f:["[ ",{p:[39,6,1077],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"},p:[38,3,1019]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.backup_timeleft",p:[42,7,1183]}," seconds left ]"],n:50,x:{r:["data.power.backup_timeleft"],s:"_0>0"},p:[41,4,1138]}],x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"}}," ",{p:[45,3,1252],t:7,e:"div",a:{style:"float:right"},f:[{p:[46,4,1281],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-backup",state:[{t:2,x:{r:["data.power.backup"],s:'_0?null:"disabled"'},p:[46,65,1342]}]},f:["Disrupt"]}]}]}," ",{p:[49,2,1430],t:7,e:"ui-section",a:{label:"Electrify"},f:[{p:[50,3,1463],t:7,e:"span",a:{"class":[{t:2,x:{r:["shockState","data.shock"],s:"_0(_1)"},p:[50,16,1476]}]},f:[{t:2,x:{r:["data.shock"],s:'_0==2?"Safe":"Electrified"'},p:[50,44,1504]}]}," ",{t:4,f:["[ ",{p:[52,6,1589],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.shock"],s:"!_0"},p:[51,3,1558]},{t:4,n:51,f:[{t:4,f:["[ ",{p:[55,7,1688],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"data.shock_timeleft",p:[55,25,1706]}," seconds left"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0>0"},p:[54,4,1650]}," ",{t:4,f:["[ ",{p:[58,7,1806],t:7,e:"span",a:{"class":"bad"},f:["Permanent"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0==-1"},p:[57,4,1766]}],x:{r:["data.wires.shock"],s:"!_0"}}," ",{p:[61,3,1866],t:7,e:"div",a:{style:"float:right"},f:[{p:[62,4,1895],t:7,e:"ui-button",a:{icon:"wrench",action:"shock-restore",state:[{t:2,x:{r:["data.wires.shock","data.shock"],s:'_0&&_1==0?null:"disabled"'},p:[62,59,1950]}]},f:["Restore"]}," ",{p:[63,4,2032],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-temp",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[63,54,2082]}]},f:["Set (Temporary)"]}," ",{p:[64,4,2136],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-perm",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[64,53,2185]}]},f:["Set (Permanent)"]}]}]}]}," ",{p:[68,1,2274],t:7,e:"ui-display",a:{title:"Access & Door Control"},f:[{p:[69,2,2318],t:7,e:"ui-section",a:{label:"ID Scan"},f:[{t:4,f:["[ ",{p:[71,6,2385],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[70,3,2349]}," ",{p:[73,3,2444],t:7,e:"div",a:{style:"float:right"},f:[{p:[74,4,2473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[74,22,2491]}],icon:"power-off",action:"idscan-on",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"selected":""'},p:[74,93,2562]}]},f:["Enabled"]}," ",{p:[75,4,2624],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[75,22,2642]}],icon:"close",action:"idscan-off",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"":"selected"'},p:[75,90,2710]}]},f:["Disabled"]}]}]}," ",{p:[78,2,2795],t:7,e:"ui-section",a:{label:"Emergency Access"},f:[{p:[79,3,2835],t:7,e:"div",a:{style:"float:right"},f:[{p:[80,4,2864],t:7,e:"ui-button",a:{icon:"power-off",action:"emergency-on",style:[{t:2,x:{r:["data.emergency"],s:'_0?"selected":""'},p:[80,61,2921]}]},f:["Enabled"]}," ",{p:[81,4,2982],t:7,e:"ui-button",a:{icon:"close",action:"emergency-off",style:[{t:2,x:{r:["data.emergency"],s:'_0?"":"selected"'},p:[81,58,3036]}]},f:["Disabled"]}]}]}," ",{p:[84,2,3120],t:7,e:"br"}," ",{p:[85,2,3128],t:7,e:"ui-section",a:{label:"Door bolts"},f:[{t:4,f:["[ ",{p:[87,6,3193],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.bolts"],s:"!_0"},p:[86,3,3162]}," ",{p:[89,3,3252],t:7,e:"div",a:{style:"float:right"},f:[{p:[90,4,3281],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[90,22,3299]}],icon:"unlock",action:"bolt-raise",style:[{t:2,x:{r:["data.locked"],s:'_0?"":"selected"'},p:[90,85,3362]}]},f:["Raised"]}," ",{p:[91,4,3419],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[91,22,3437]}],icon:"lock",action:"bolt-drop",style:[{t:2,x:{r:["data.locked"],s:'_0?"selected":""'},p:[91,82,3497]}]},f:["Dropped"]}]}]}," ",{p:[94,2,3577],t:7,e:"ui-section",a:{label:"Door bolt lights"},f:[{t:4,f:["[ ",{p:[96,6,3649],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.lights"],s:"!_0"},p:[95,3,3617]}," ",{p:[98,3,3708],t:7,e:"div",a:{style:"float:right"},f:[{p:[99,4,3737],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[99,22,3755]}],icon:"power-off",action:"light-on",style:[{t:2,x:{r:["data.lights"],s:'_0?"selected":""'},p:[99,88,3821]}]},f:["Enabled"]}," ",{p:[100,4,3879],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[100,22,3897]}],icon:"close",action:"light-off",style:[{t:2,x:{r:["data.lights"],s:'_0?"":"selected"'},p:[100,85,3960]}]},f:["Disabled"]}]}]}," ",{p:[103,2,4041],t:7,e:"ui-section",a:{label:"Door force sensors"},f:[{t:4,f:["[ ",{p:[105,6,4113],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.safe"],s:"!_0"},p:[104,3,4083]}," ",{p:[107,3,4172],t:7,e:"div",a:{style:"float:right"},f:[{p:[108,4,4201],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[108,22,4219]}],icon:"power-off",action:"safe-on",style:[{t:2,x:{r:["data.safe"],s:'_0?"selected":""'},p:[108,85,4282]}]},f:["Enabled"]}," ",{p:[109,4,4338],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[109,22,4356]}],icon:"close",action:"safe-off",style:[{t:2,x:{r:["data.safe"],s:'_0?"":"selected"'},p:[109,82,4416]}]},f:["Disabled"]}]}]}," ",{p:[112,2,4495],t:7,e:"ui-section",a:{label:"Door timing safety"},f:[{t:4,f:["[ ",{p:[114,6,4569],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.timing"],s:"!_0"},p:[113,3,4537]}," ",{p:[116,3,4628],t:7,e:"div",a:{style:"float:right"},f:[{p:[117,4,4657],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[117,22,4675]}],icon:"power-off",action:"speed-on",style:[{t:2,x:{r:["data.speed"],s:'_0?"selected":""'},p:[117,88,4741]}]},f:["Enabled"]}," ",{p:[118,4,4798],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[118,22,4816]}],icon:"close",action:"speed-off",style:[{t:2,x:{r:["data.speed"],s:'_0?"":"selected"'},p:[118,85,4879]}]},f:["Disabled"]}]}]}," ",{p:[121,2,4959],t:7,e:"br"}," ",{p:[122,2,4967],t:7,e:"ui-section",a:{label:"Door control"},f:[{t:4,f:["[ ",{p:[124,6,5043],t:7,e:"span",a:{"class":"bad"},f:["Door is ",{t:2,x:{r:["data.locked","data.welded"],s:'(_0?"bolted":"")+(_0&&_1?" and ":"")+(_1?"welded":"")'},p:[124,32,5069]}]}," ]"],n:50,x:{r:["data.locked","data.welded"],s:"_0||_1"},p:[123,3,5003]}," ",{p:[126,3,5202],t:7,e:"div",a:{style:"float:right"},f:[{p:[127,4,5231],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(_2&&"disabled")'},p:[127,22,5249]}],icon:"sign-out",action:"open-close"},f:["Open door"]}," ",{p:[128,4,5375],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(!_2&&"disabled")'},p:[128,22,5393]}],icon:"sign-in",action:"open-close"},f:["Close door"]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],356:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," ",{p:[7,1,261],t:7,e:"ui-notice",f:[{t:4,f:[{p:[9,5,304],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[10,7,346],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[10,24,363]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[10,75,414]}]}]}],n:50,r:"data.siliconUser",p:[8,3,275]},{t:4,n:51,f:[{p:[13,5,502],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,31,528]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[16,1,610],t:7,e:"status"}," ",{t:4,f:[{t:4,f:[{p:[19,7,701],t:7,e:"ui-display",a:{title:"Air Controls"},f:[{p:[20,9,743],t:7,e:"ui-section",f:[{p:[21,11,766],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"exclamation-triangle":"exclamation"'},p:[21,28,783]}],style:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"caution":null'},p:[21,98,853]}],action:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"reset":"alarm"'},p:[22,23,916]}]},f:["Area Atmosphere Alarm"]}]}," ",{p:[24,9,1022],t:7,e:"ui-section",f:[{p:[25,11,1045],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0==3?"exclamation-triangle":"exclamation"'},p:[25,28,1062]}],style:[{t:2,x:{r:["data.mode"],s:'_0==3?"danger":null'},p:[25,96,1130]}],action:"mode",params:['{"mode": ',{t:2,x:{r:["data.mode"],s:"_0==3?1:3"},p:[26,44,1211]},"}"]},f:["Panic Siphon"]}]}," ",{p:[28,9,1295],t:7,e:"br"}," ",{p:[29,9,1309],t:7,e:"ui-section",f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:"sign-out",action:"tgui:view",params:'{"screen": "vents"}'},f:["Vent Controls"]}]}," ",{p:[32,9,1463],t:7,e:"ui-section",f:[{p:[33,11,1486],t:7,e:"ui-button",a:{icon:"filter",action:"tgui:view",params:'{"screen": "scrubbers"}'},f:["Scrubber Controls"]}]}," ",{p:[35,9,1623],t:7,e:"ui-section",f:[{p:[36,11,1646],t:7,e:"ui-button",a:{icon:"cog",action:"tgui:view",params:'{"screen": "modes"}'},f:["Operating Mode"]}]}," ",{p:[38,9,1773],t:7,e:"ui-section",f:[{p:[39,11,1796],t:7,e:"ui-button",a:{icon:"bar-chart",action:"tgui:view",params:'{"screen": "thresholds"}'},f:["Alarm Thresholds"]}]}]}],n:50,x:{r:["config.screen"],s:'_0=="home"'},p:[18,3,663]},{t:4,n:51,f:[{t:4,n:50,x:{r:["config.screen"],s:'_0=="vents"'},f:[{p:[43,5,1990],t:7,e:"vents"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&(_0=="scrubbers")'},f:[" ",{p:[45,5,2045],t:7,e:"scrubbers"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&(_0=="modes"))'},f:[" ",{p:[47,5,2100],t:7,e:"modes"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&((!(_0=="modes"))&&(_0=="thresholds")))'},f:[" ",{p:[49,5,2156],t:7,e:"thresholds"}]}],x:{r:["config.screen"],s:'_0=="home"'}}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[17,1,620]}]},r.exports.components=r.exports.components||{};var i={vents:t(362),modes:t(358),thresholds:t(361),status:t(360),scrubbers:t(359)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,358:358,359:359,360:360,361:361,362:362}],357:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-button",a:{icon:"arrow-left",action:"tgui:view",params:'{"screen": "home"}'},f:["Back"]}]},e.exports=a.extend(r.exports)},{341:341}],358:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,111],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Operating Modes",button:0},f:[" ",{t:4,f:[{p:[8,5,161],t:7,e:"ui-section",f:[{p:[9,7,180],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["selected"],s:'_0?"check-square-o":"square-o"'},p:[9,24,197]}],state:[{t:2,x:{r:["selected","danger"],s:'_0?_1?"danger":"selected":null'},p:[10,16,258]}],action:"mode",params:['{"mode": ',{t:2,r:"mode",p:[11,40,351]},"}"]},f:[{t:2,r:"name",p:[11,51,362]}]}]}],n:52,r:"data.modes",p:[7,3,136]}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],359:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," ",{p:{button:[{p:[6,5,180],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Scrubber Controls",button:0},f:[" ",{t:4,f:[{p:[9,5,234],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[9,27,256]}]},f:[{p:[10,7,278],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,313],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[11,26,330]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[11,68,372]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[12,46,448]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[12,66,468]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[12,80,482]}]}]}," ",{p:[14,7,545],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[15,9,579],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["scrubbing"],s:'_0?"filter":"sign-in"'},p:[15,26,596]}],style:[{t:2,x:{r:["scrubbing"],s:'_0?null:"danger"'},p:[15,71,641]}],action:"scrubbing",params:['{"id_tag": "',{t:2,r:"id_tag",p:[16,50,723]},'", "val": ',{t:2,x:{r:["scrubbing"],s:"+!_0"},p:[16,70,743]},"}"]},f:[{t:2,x:{r:["scrubbing"],s:'_0?"Scrubbing":"Siphoning"'},p:[16,88,761]}]}]}," ",{p:[18,7,841],t:7,e:"ui-section",a:{label:"Range"},f:[{p:[19,9,876],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["widenet"],s:'_0?"expand":"compress"'},p:[19,26,893]}],style:[{t:2,x:{r:["widenet"],s:'_0?"selected":null'},p:[19,70,937]}],action:"widenet",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,1017]},'", "val": ',{t:2,x:{r:["widenet"],s:"+!_0"},p:[20,68,1037]},"}"]},f:[{t:2,x:{r:["widenet"],s:'_0?"Expanded":"Normal"'},p:[20,84,1053]}]}]}," ",{p:[22,7,1127],t:7,e:"ui-section",a:{label:"Filters"},f:[{p:[23,9,1164],t:7,e:"filters"}]}]}],n:52,r:"data.scrubbers",p:[8,3,205]},{t:4,n:51,f:[{p:[27,5,1231],t:7,e:"span",a:{"class":"bad"},f:["Error: No scrubbers connected."]}],r:"data.scrubbers"}]}]},r.exports.components=r.exports.components||{};var i={filters:t(457),back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357,457:457}],360:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Air Status"},f:[{t:4,f:[{t:4,f:[{p:[4,7,107],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[4,26,126]}]},f:[{p:[5,6,142],t:7,e:"span",a:{"class":[{t:2,x:{r:["danger_level"],s:'_0==2?"bad":_0==1?"average":"good"'},p:[5,19,155]}]},f:[{t:2,x:{r:["value"],s:"Math.fixed(_0,2)"},p:[6,5,232]},{t:2,r:"unit",p:[6,29,256]}]}]}],n:52,r:"adata.environment_data",p:[3,5,68]}," ",{p:[10,5,313],t:7,e:"ui-section",a:{label:"Local Status"},f:[{p:[11,7,353],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.danger_level"],s:'_0==2?"bad bold":_0==1?"average bold":"good"'},p:[11,20,366]}]},f:[{t:2,x:{r:["data.danger_level"],s:'_0==2?"Danger (Internals Required)":_0==1?"Caution":"Optimal"'},p:[12,6,464]}]}]}," ",{p:[15,5,605],t:7,e:"ui-section",a:{label:"Area Status"},f:[{p:[16,7,644],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.atmos_alarm","data.fire_alarm"],s:'_0||_1?"bad bold":"good"'},p:[16,20,657]}]},f:[{t:2,x:{r:["data.atmos_alarm","fire_alarm"],s:'_0?"Atmosphere Alarm":_1?"Fire Alarm":"Nominal"'},p:[17,8,728]}]}]}],n:50,r:"data.environment_data",p:[2,3,34]},{t:4,n:51,f:[{p:[21,5,856],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[22,7,891],t:7,e:"span",a:{"class":"bad bold"},f:["Cannot obtain air sample for analysis."]}]}],r:"data.environment_data"}," ",{t:4,f:[{p:[26,5,1015],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[27,7,1050],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[25,3,990]}]}]},e.exports=a.extend(r.exports)},{341:341}],361:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" th, td {\n padding-right: 16px;\n text-align: left;\n }",r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,112],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Alarm Thresholds",button:0},f:[" ",{p:[7,3,137],t:7,e:"table",f:[{p:[8,5,149],t:7,e:"thead",f:[{p:[8,12,156],t:7,e:"tr",f:[{p:[9,7,167],t:7,e:"th"}," ",{p:[10,7,183],t:7,e:"th",f:[{p:[10,11,187],t:7,e:"span",a:{"class":"bad"},f:["min2"]}]}," ",{p:[11,7,228],t:7,e:"th",f:[{p:[11,11,232],t:7,e:"span",a:{"class":"average"},f:["min1"]}]}," ",{p:[12,7,277],t:7,e:"th",f:[{p:[12,11,281],t:7,e:"span",a:{"class":"average"},f:["max1"]}]}," ",{p:[13,7,326],t:7,e:"th",f:[{p:[13,11,330],t:7,e:"span",a:{"class":"bad"},f:["max2"]}]}]}]}," ",{p:[15,5,387],t:7,e:"tbody",f:[{t:4,f:[{p:[16,32,426],t:7,e:"tr",f:[{p:[17,9,439],t:7,e:"th",f:[{t:3,r:"name",p:[17,13,443]}]}," ",{t:4,f:[{p:[18,27,485],t:7,e:"td",f:[{p:[19,11,500],t:7,e:"ui-button",a:{action:"threshold",params:['{"env": "',{t:2,r:"env",p:[19,58,547]},'", "var": "',{t:2,r:"val",p:[19,76,565]},'"}']},f:[{t:2,x:{r:["selected"],s:"Math.fixed(_0,2)"},p:[19,87,576]}]}]}],n:52,r:"settings",p:[18,9,467]}]}],n:52,r:"data.thresholds",p:[16,7,401]}]}," ",{p:[23,3,675],t:7,e:"table",f:[]}]}]}," "]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],362:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,109],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Vent Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,159],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,181]}]},f:[{p:[9,7,203],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,238],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,255]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,297]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,373]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,393]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,407]}]}]}," ",{p:[13,7,470],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,504],t:7,e:"span",f:[{t:2,x:{r:["direction"],s:'_0=="release"?"Pressurizing":"Siphoning"'},p:[14,15,510]}]}]}," ",{p:[16,7,601],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[17,9,649],t:7,e:"ui-button",a:{icon:"sign-in",style:[{t:2,x:{r:["incheck"],s:'_0?"selected":null'},p:[17,42,682]}],action:"incheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[18,48,762]},'", "val": ',{t:2,r:"checks",p:[18,68,782]},"}"]},f:["Internal"]}," ",{p:[19,9,824],t:7,e:"ui-button",a:{icon:"sign-out",style:[{t:2,x:{r:["excheck"],s:'_0?"selected":null'},p:[19,43,858]}],action:"excheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,938]},'", "val": ',{t:2,r:"checks",p:[20,68,958]},"}"]},f:["External"]}]}," ",{t:4,f:[{p:[23,9,1042],t:7,e:"ui-section",a:{label:"Internal Target Pressure"},f:[{p:[24,11,1098],t:7,e:"ui-button",a:{icon:"pencil",action:"set_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[25,33,1186]},'"}']},f:[{t:2,x:{r:["internal"],s:"Math.fixed(_0)"},p:[25,47,1200]}]}," ",{p:[26,11,1247],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["intdefault"],s:'_0?"disabled":null'},p:[26,44,1280]}],action:"reset_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[27,33,1381]},'"}']},f:["Reset"]}]}],n:50,r:"incheck",p:[22,7,1018]}," ",{t:4,f:[{p:[31,11,1481],t:7,e:"ui-section",a:{label:"External Target Pressure"},f:[{p:[32,13,1539],t:7,e:"ui-button",a:{icon:"pencil",action:"set_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[33,35,1629]},'"}']},f:[{t:2,x:{r:["external"],s:"Math.fixed(_0)"},p:[33,49,1643]}]}," ",{p:[34,13,1692],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["extdefault"],s:'_0?"disabled":null'},p:[34,46,1725]}],action:"reset_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[35,35,1828]},'"}']},f:["Reset"]}]}],n:50,r:"excheck",p:[30,7,1455]}]}],n:52,r:"data.vents",p:[7,3,134]},{t:4,n:51,f:[{p:[40,5,1934],t:7,e:"span",a:{"class":"bad"},f:["Error: No vents connected."]}],r:"data.vents"}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],363:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" table {\n width: 100%;\n border-spacing: 2px;\n }\n th {\n text-align: left;\n }\n td {\n vertical-align: top;\n }\n td .button {\n margin-top: 4px\n }",r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",f:[{p:[3,5,32],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oneAccess"],s:'_0?"unlock":"lock"'},p:[3,22,49]}],action:"one_access"},f:[{t:2,x:{r:["data.oneAccess"],s:'_0?"One":"All"'},p:[3,82,109]}," Required"]}," ",{p:[4,5,169],t:7,e:"ui-button",a:{icon:"refresh",action:"clear"},f:["Clear"]}]}," ",{p:[6,3,246],t:7,e:"hr"}," ",{p:[7,3,254],t:7,e:"table",f:[{p:[8,3,264],t:7,e:"thead",f:[{p:[9,4,275],t:7,e:"tr",f:[{t:4,f:[{p:[10,5,306],t:7,e:"th",f:[{p:[10,9,310],t:7,e:"span",a:{"class":"highlight bold"},f:[{t:2,r:"name",p:[10,38,339]}]}]}],n:52,r:"data.regions",p:[9,8,279]}]}]}," ",{p:[13,3,391],t:7,e:"tbody",f:[{p:[14,4,402],t:7,e:"tr",f:[{t:4,f:[{p:[15,5,433],t:7,e:"td",f:[{t:4,f:[{p:[16,11,466],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["req"],s:'_0?"check-square-o":"square-o"'},p:[16,28,483]}],style:[{t:2,x:{r:["req"],s:'_0?"selected":null'},p:[16,76,531]}],action:"set",params:['{"access": "',{t:2,r:"id",p:[17,46,605]},'"}']},f:[{t:2,r:"name",p:[17,56,615]}]}," ",{p:[18,9,644],t:7,e:"br"}],n:52,r:"accesses",p:[15,9,437]}]}],n:52,r:"data.regions",p:[14,8,406]}]}]}]}," ",{p:[23,2,709],t:7,e:"hr"}," ",{p:[24,2,716],t:7,e:"span",a:{"class":"highlight bold"},f:["Unrestricted Access:"]}," ",{p:[25,2,774],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"check-square-o":"square-o"'},p:[25,19,791]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"selected":null'},p:[25,88,860]}],action:"direc_set",params:'{"unres_direction": "1"}'},f:["North"]}," ",{p:[26,2,982],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"check-square-o":"square-o"'},p:[26,19,999]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"selected":null'},p:[26,88,1068]}],action:"direc_set",params:'{"unres_direction": "4"}'},f:["East"]}," ",{p:[27,2,1189],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"check-square-o":"square-o"'},p:[27,19,1206]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"selected":null'
+},p:[27,88,1275]}],action:"direc_set",params:'{"unres_direction": "2"}'},f:["South"]}," ",{p:[28,2,1397],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&8?"check-square-o":"square-o"'},p:[28,19,1414]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&8?"selected":null'},p:[28,88,1483]}],action:"direc_set",params:'{"unres_direction": "8"}'},f:["West"]}]}," "]},e.exports=a.extend(r.exports)},{341:341}],364:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}},computed:{malfAction:function(){switch(this.get("data.malfStatus")){case 1:return"hack";case 2:return"occupy";case 3:return"deoccupy"}},malfButton:function(){switch(this.get("data.malfStatus")){case 1:return"Override Programming";case 2:case 4:return"Shunt Core Process";case 3:return"Return to Main Core"}},malfIcon:function(){switch(this.get("data.malfStatus")){case 1:return"terminal";case 2:case 4:return"caret-square-o-down";case 3:return"caret-square-o-left"}},powerCellStatusState:function(){var t=this.get("data.powerCellStatus");return t>50?"good":t>25?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[46,2,1161],t:7,e:"ui-notice",f:[{p:[47,3,1175],t:7,e:"b",f:[{p:[47,6,1178],t:7,e:"h3",f:["SYSTEM FAILURE"]}]}," ",{p:[48,3,1208],t:7,e:"i",f:["I/O regulators malfunction detected! Waiting for system reboot..."]},{p:[48,75,1280],t:7,e:"br"}," Automatic reboot in ",{t:2,r:"data.failTime",p:[49,23,1307]}," seconds... ",{p:[50,3,1338],t:7,e:"ui-button",a:{icon:"refresh",action:"reboot"},f:["Reboot Now"]},{p:[50,67,1402],t:7,e:"br"},{p:[50,71,1406],t:7,e:"br"},{p:[50,75,1410],t:7,e:"br"}]}],n:50,r:"data.failTime",p:[45,1,1138]},{t:4,n:51,f:[{p:[53,2,1439],t:7,e:"ui-notice",f:[{t:4,f:[{p:[55,3,1481],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[56,5,1521],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[56,22,1538]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[56,73,1589]}]}]}],n:50,r:"data.siliconUser",p:[54,4,1454]},{t:4,n:51,f:[{p:[59,3,1674],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[59,29,1700]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[62,2,1785],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[63,4,1822],t:7,e:"ui-section",a:{label:"Main Breaker"},f:[{t:4,f:[{p:[65,5,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isOperating"],s:'_0?"good":"bad"'},p:[65,18,1916]}]},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[65,57,1955]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[64,3,1858]},{t:4,n:51,f:[{p:[67,5,2013],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[67,22,2030]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[67,75,2083]}],action:"breaker"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[68,21,2145]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}," ",{p:[71,4,2223],t:7,e:"ui-section",a:{label:"External Power"},f:[{p:[72,3,2261],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.externalPower"],s:"_0(_1)"},p:[72,16,2274]}]},f:[{t:2,x:{r:["data.externalPower"],s:'_0==2?"Good":_0==1?"Low":"None"'},p:[72,52,2310]}]}]}," ",{p:[74,4,2417],t:7,e:"ui-section",a:{label:"Power Cell"},f:[{t:4,f:[{p:[76,5,2492],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerCellStatus",p:[76,38,2525]}],state:[{t:2,r:"powerCellStatusState",p:[76,71,2558]}]},f:[{t:2,x:{r:["adata.powerCellStatus"],s:"Math.fixed(_0)"},p:[76,97,2584]},"%"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[75,3,2451]},{t:4,n:51,f:[{p:[78,5,2647],t:7,e:"span",a:{"class":"bad"},f:["Removed"]}],x:{r:["data.powerCellStatus"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[82,3,2749],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{t:4,f:[{p:[84,4,2830],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.chargeMode"],s:'_0?"good":"bad"'},p:[84,17,2843]}]},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[84,55,2881]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[83,5,2786]},{t:4,n:51,f:[{p:[86,4,2941],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.chargeMode"],s:'_0?"refresh":"close"'},p:[86,21,2958]}],style:[{t:2,x:{r:["data.chargeMode"],s:'_0?"selected":null'},p:[86,71,3008]}],action:"charge"},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[87,22,3070]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}," [",{p:[90,6,3147],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.chargingStatus"],s:"_0(_1)"},p:[90,19,3160]}]},f:[{t:2,x:{r:["data.chargingStatus"],s:'_0==2?"Fully Charged":_0==1?"Charging":"Not Charging"'},p:[90,56,3197]}]},"]"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[81,4,2710]}]}," ",{p:[94,2,3352],t:7,e:"ui-display",a:{title:"Power Channels"},f:[{t:4,f:[{p:[96,3,3422],t:7,e:"ui-section",a:{label:[{t:2,r:"title",p:[96,22,3441]}],nowrap:0},f:[{p:[97,5,3464],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.powerChannels",m:[{t:30,n:"@index"},"powerLoad"]},p:[97,26,3485]}]}," ",{p:[98,5,3537],t:7,e:"div",a:{"class":"content"},f:[{p:[98,26,3558],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0>=2?"good":"bad"'},p:[98,39,3571]}]},f:[{t:2,x:{r:["status"],s:'_0>=2?"On":"Off"'},p:[98,73,3605]}]}]}," ",{p:[99,5,3653],t:7,e:"div",a:{"class":"content"},f:["[",{p:[99,27,3675],t:7,e:"span",f:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"Auto":"Manual"'},p:[99,33,3681]}]},"]"]}," ",{p:[100,5,3750],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{t:4,f:[{p:[102,6,3841],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"selected":null'},p:[102,39,3874]}],action:"channel",params:[{t:2,r:"topicParams.auto",p:[103,30,3955]}]},f:["Auto"]}," ",{p:[104,6,3999],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["status"],s:'_0==2?"selected":null'},p:[104,41,4034]}],action:"channel",params:[{t:2,r:"topicParams.on",p:[105,13,4100]}]},f:["On"]}," ",{p:[106,6,4140],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["status"],s:'_0==0?"selected":null'},p:[106,37,4171]}],action:"channel",params:[{t:2,r:"topicParams.off",p:[107,13,4237]}]},f:["Off"]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[101,4,3795]}]}]}],n:52,r:"data.powerChannels",p:[95,4,3391]}," ",{p:[112,4,4328],t:7,e:"ui-section",a:{label:"Total Load"},f:[{p:[113,3,4362],t:7,e:"span",a:{"class":"bold"},f:[{t:2,r:"adata.totalLoad",p:[113,22,4381]}]}]}]}," ",{t:4,f:[{p:[117,4,4469],t:7,e:"ui-display",a:{title:"System Overrides"},f:[{p:[118,3,4509],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"overload"},f:["Overload"]}," ",{t:4,f:[{p:[120,5,4608],t:7,e:"ui-button",a:{icon:[{t:2,r:"malfIcon",p:[120,22,4625]}],state:[{t:2,x:{r:["data.malfStatus"],s:'_0==4?"disabled":null'},p:[120,43,4646]}],action:[{t:2,r:"malfAction",p:[120,97,4700]}]},f:[{t:2,r:"malfButton",p:[120,113,4716]}]}],n:50,r:"data.malfStatus",p:[119,3,4580]}]}],n:50,r:"data.siliconUser",p:[116,2,4441]}," ",{p:[124,2,4780],t:7,e:"ui-notice",f:[{p:[125,4,4795],t:7,e:"ui-section",a:{label:"Emergency Light Fallback"},f:[{t:4,f:[{p:[127,8,4894],t:7,e:"span",f:[{t:2,x:{r:["data.emergencyLights"],s:'_0?"Enabled":"Disabled"'},p:[127,14,4900]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[126,6,4846]},{t:4,n:51,f:[{p:[129,8,4978],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"emergency_lighting"},f:[{t:2,x:{r:["data.emergencyLights"],s:'_0?"Enabled":"Disabled"'},p:[129,66,5036]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}," ",{p:[133,2,5143],t:7,e:"ui-notice",f:[{p:[134,4,5158],t:7,e:"ui-section",a:{label:"Night Shift Lighting"},f:[{t:4,f:[{p:[136,8,5253],t:7,e:"span",f:[{t:2,x:{r:["data.nightshiftLights"],s:'_0?"Enabled":"Disabled"'},p:[136,14,5259]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[135,6,5205]},{t:4,n:51,f:[{p:[138,8,5338],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"toggle_nightshift"},f:[{t:2,x:{r:["data.nightshiftLights"],s:'_0?"Enabled":"Disabled"'},p:[138,65,5395]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}," ",{p:[142,2,5503],t:7,e:"ui-notice",f:[{p:[143,4,5518],t:7,e:"ui-section",a:{label:"Cover Lock"},f:[{t:4,f:[{p:[145,5,5597],t:7,e:"span",f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[145,11,5603]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[144,3,5552]},{t:4,n:51,f:[{p:[147,5,5673],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.coverLocked"],s:'_0?"lock":"unlock"'},p:[147,22,5690]}],action:"cover"},f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[147,79,5747]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}],r:"data.failTime"}]},e.exports=a.extend(r.exports)},{341:341}],365:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Alarms"},f:[{p:[2,3,30],t:7,e:"ul",f:[{t:4,f:[{p:[4,7,69],t:7,e:"li",f:[{p:[4,11,73],t:7,e:"ui-button",a:{icon:"close",style:"danger",action:"clear",params:['{"zone": "',{t:2,r:".",p:[4,83,145]},'"}']},f:[{t:2,r:".",p:[4,92,154]}]}]}],n:52,r:"data.priority",p:[3,5,39]},{t:4,n:51,f:[{p:[6,7,196],t:7,e:"li",f:[{p:[6,11,200],t:7,e:"span",a:{"class":"good"},f:["No Priority Alerts"]}]}],r:"data.priority"}," ",{t:4,f:[{p:[9,7,295],t:7,e:"li",f:[{p:[9,11,299],t:7,e:"ui-button",a:{icon:"close",style:"caution",action:"clear",params:['{"zone": "',{t:2,r:".",p:[9,84,372]},'"}']},f:[{t:2,r:".",p:[9,93,381]}]}]}],n:52,r:"data.minor",p:[8,5,268]},{t:4,n:51,f:[{p:[11,7,423],t:7,e:"li",f:[{p:[11,11,427],t:7,e:"span",a:{"class":"good"},f:["No Minor Alerts"]}]}],r:"data.minor"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],366:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.tank","data.sensors.0.long_name"],s:"_0?_1:null"},p:[1,20,19]}]},f:[{t:4,f:[{p:[3,5,100],t:7,e:"ui-subdisplay",a:{title:[{t:2,x:{r:["data.tank","long_name"],s:"!_0?_1:null"},p:[3,27,122]}]},f:[{p:[4,7,164],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[5,3,196],t:7,e:"span",f:[{t:2,x:{r:["pressure"],s:"Math.fixed(_0,2)"},p:[5,9,202]}," kPa"]}]}," ",{t:4,f:[{p:[8,9,295],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[9,11,338],t:7,e:"span",f:[{t:2,x:{r:["temperature"],s:"Math.fixed(_0,2)"},p:[9,17,344]}," K"]}]}],n:50,r:"temperature",p:[7,7,267]}," ",{t:4,f:[{p:[13,9,450],t:7,e:"ui-section",a:{label:[{t:2,r:"id",p:[13,28,469]}]},f:[{p:[14,5,482],t:7,e:"span",f:[{t:2,x:{r:["."],s:"Math.fixed(_0,2)"},p:[14,11,488]},"%"]}]}],n:52,i:"id",r:"gases",p:[12,4,423]}]}],n:52,r:"adata.sensors",p:[2,3,72]}]}," ",{t:4,f:[{p:{button:[{p:[23,5,682],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[25,5,768],t:7,e:"ui-section",a:{label:"Input Injector"},f:[{p:[26,7,810],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputting"],s:'_0?"power-off":"close"'},p:[26,24,827]}],style:[{t:2,x:{r:["data.inputting"],s:'_0?"selected":null'},p:[26,75,878]}],action:"input"},f:[{t:2,x:{r:["data.inputting"],s:'_0?"Injecting":"Off"'},p:[27,9,942]}]}]}," ",{p:[29,5,1016],t:7,e:"ui-section",a:{label:"Input Rate"},f:[{p:[30,7,1054],t:7,e:"span",f:[{t:2,x:{r:["adata.inputRate"],s:"Math.fixed(_0)"},p:[30,13,1060]}," L/s"]}]}," ",{p:[32,5,1125],t:7,e:"ui-section",a:{label:"Output Regulator"},f:[{p:[33,7,1169],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputting"],s:'_0?"power-off":"close"'},p:[33,24,1186]}],style:[{t:2,x:{r:["data.outputting"],s:'_0?"selected":null'},p:[33,76,1238]}],action:"output"},f:[{t:2,x:{r:["data.outputting"],s:'_0?"Open":"Closed"'},p:[34,9,1304]}]}]}," ",{p:[36,5,1377],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[37,7,1420],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure"},f:[{t:2,x:{r:["adata.outputPressure"],s:"Math.round(_0)"},p:[37,50,1463]}," kPa"]}]}]}],n:50,r:"data.tank",p:[20,1,599]}]},e.exports=a.extend(r.exports)},{341:341}],367:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{p:[6,3,218],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,259],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[8,5,353],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,383]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,510],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[9,11,516]}," kPa"]}]}," ",{p:[11,3,576],t:7,e:"ui-section",a:{label:"Filter"},f:[{t:4,f:[{p:[13,7,642],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[13,25,660]}],action:"filter",params:['{"mode": ',{t:2,r:"id",p:[14,42,735]},"}"]},f:[{t:2,r:"name",p:[14,51,744]}]}],n:52,r:"data.filter_types",p:[12,5,608]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],368:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{p:[6,3,218],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,259],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[8,5,353],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.set_pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,383]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,514],t:7,e:"span",f:[{t:2,x:{r:["adata.set_pressure"],s:"Math.round(_0)"},p:[9,11,520]}," kPa"]}]}," ",{p:[11,3,584],t:7,e:"ui-section",a:{label:"Node 1"},f:[{p:[12,5,616],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[12,44,655]}],action:"node1",params:'{"concentration": -0.1}'}}," ",{p:[14,5,770],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[14,39,804]}],action:"node1",params:'{"concentration": -0.01}'}}," ",{p:[16,5,920],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[16,38,953]}],action:"node1",params:'{"concentration": 0.01}'}}," ",{p:[18,5,1070],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[18,43,1108]}],action:"node1",params:'{"concentration": 0.1}'}}," ",{p:[20,5,1224],t:7,e:"span",f:[{t:2,x:{r:["adata.node1_concentration"],s:"Math.round(_0)"},p:[20,11,1230]},"%"]}]}," ",{p:[22,3,1298],t:7,e:"ui-section",a:{label:"Node 2"},f:[{p:[23,5,1330],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[23,44,1369]}],action:"node2",params:'{"concentration": -0.1}'}}," ",{p:[25,5,1484],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[25,39,1518]}],action:"node2",params:'{"concentration": -0.01}'}}," ",{p:[27,5,1634],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[27,38,1667]}],action:"node2",params:'{"concentration": 0.01}'}}," ",{p:[29,5,1784],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[29,43,1822]}],action:"node2",params:'{"concentration": 0.1}'}}," ",{p:[31,5,1938],t:7,e:"span",f:[{t:2,x:{r:["adata.node2_concentration"],s:"Math.round(_0)"},p:[31,11,1944]},"%"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],369:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{t:4,f:[{p:[7,5,244],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{p:[8,7,285],t:7,e:"ui-button",a:{icon:"pencil",action:"rate",params:'{"rate": "input"}'},f:["Set"]}," ",{p:[9,7,373],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.rate","data.max_rate"],s:'_0==_1?"disabled":null'},p:[9,37,403]}],action:"rate",params:'{"rate": "max"}'},f:["Max"]}," ",{p:[10,7,516],t:7,e:"span",f:[{t:2,x:{r:["adata.rate"],s:"Math.round(_0)"},p:[10,13,522]}," L/s"]}]}],n:50,r:"data.max_rate",p:[6,3,218]},{t:4,n:51,f:[{p:[13,5,593],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[14,7,636],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[15,7,732],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[15,37,762]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[16,7,891],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[16,13,897]}," kPa"]}]}],r:"data.max_rate"}]}]},e.exports=a.extend(r.exports)},{341:341}],370:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,70],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"data.borg.name",p:[1,20,19]}],button:0},f:[" ",{p:[5,2,145],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[6,4,176],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.emagged"],s:'_0?"check-square-o":"square-o"'},p:[6,21,193]}],style:[{t:2,x:{r:["data.borg.emagged"],s:'_0?"selected":null'},p:[6,83,255]}],action:"toggle_emagged"},f:["Emagged"]}," ",{p:[7,4,345],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.lockdown"],s:'_0?"check-square-o":"square-o"'},p:[7,21,362]}],style:[{t:2,x:{r:["data.borg.lockdown"],s:'_0?"selected":null'},p:[7,84,425]}],action:"toggle_lockdown"},f:["Locked down"]}," ",{p:[8,4,521],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.scrambledcodes"],s:'_0?"check-square-o":"square-o"'},p:[8,21,538]}],style:[{t:2,x:{r:["data.borg.scrambledcodes"],s:'_0?"selected":null'},p:[8,90,607]}],action:"toggle_scrambledcodes"},f:["Scrambled codes"]}]}," ",{p:[10,2,732],t:7,e:"ui-section",a:{label:"Charge"},f:[{t:4,f:[{p:[12,4,792],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.cell.maxcharge",p:[12,25,813]}],value:[{t:2,r:"data.cell.charge",p:[12,57,845]}]},f:[{t:2,x:{r:["data.cell.charge"],s:"Math.round(_0)"},p:[12,79,867]}," / ",{t:2,x:{r:["data.cell.maxcharge"],s:"Math.round(_0)"},p:[12,114,902]}]}],n:50,x:{r:["data.cell.missing"],s:"!_0"},p:[11,3,762]},{t:4,n:51,f:[{p:[14,4,961],t:7,e:"span",a:{"class":"warning"},f:["Cell missing"]},{p:[14,45,1002],t:7,e:"br"}],x:{r:["data.cell.missing"],s:"!_0"}}," ",{p:[16,3,1020],t:7,e:"ui-button",a:{icon:"pencil",action:"set_charge"},f:["Set"]},{p:[16,63,1080],t:7,e:"ui-button",a:{icon:"eject",action:"change_cell"},f:["Change"]},{p:[16,126,1143],t:7,e:"ui-button",a:{icon:"trash","class":"bad",action:"remove_cell"},f:["Remove"]}]}," ",{p:[18,2,1235],t:7,e:"ui-section",a:{label:"Radio channels"},f:[{t:4,f:[{p:[20,4,1300],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["installed"],s:'_0?"check-square-o":"square-o"'},p:[20,21,1317]}],style:[{t:2,x:{r:["installed"],s:'_0?"selected":null'},p:[20,75,1371]}],action:"toggle_radio",params:['{"channel": "',{t:2,r:"name",p:[20,154,1450]},'"}']},f:[{t:2,r:"name",p:[20,166,1462]}]}],n:52,r:"data.channels",p:[19,3,1273]}]}," ",{p:[23,2,1511],t:7,e:"ui-section",a:{label:"Module"},f:[{t:4,f:[{p:[25,4,1567],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.active_module","type"],s:'_0==_1?"check-square-o":"square-o"'},p:[25,21,1584]}],style:[{t:2,x:{r:["data.borg.active_module","type"],s:'_0==_1?"selected":null'},p:[25,97,1660]}],action:"setmodule",params:['{"module": "',{t:2,r:"type",p:[25,193,1756]},'"}']},f:[{t:2,r:"name",p:[25,205,1768]}]}],n:52,r:"data.modules",p:[24,3,1541]}]}," ",{p:[28,2,1817],t:7,e:"ui-section",a:{label:"Upgrades"},f:[{t:4,f:[{p:[30,4,1876],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["installed"],s:'_0?"check-square-o":"square-o"'},p:[30,21,1893]}],style:[{t:2,x:{r:["installed"],s:'_0?"selected":null'},p:[30,75,1947]}],action:"toggle_upgrade",params:['{"upgrade": "',{t:2,r:"type",p:[30,155,2027]},'"}']},f:[{t:2,r:"name",p:[30,167,2039]}]}],n:52,r:"data.upgrades",p:[29,3,1849]}]}," ",{p:[33,2,2088],t:7,e:"ui-section",a:{label:"Master AI"},f:[{t:4,f:[{p:[35,4,2143],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["connected"],s:'_0?"check-square-o":"square-o"'},p:[35,21,2160]}],style:[{t:2,x:{r:["connected"],s:'_0?"selected":null'},p:[35,75,2214]}],action:"slavetoai",params:['{"slavetoai": "',{t:2,r:"ref",p:[35,152,2291]},'"}']},f:[{t:2,r:"name",p:[35,163,2302]}]}],n:52,r:"data.ais",p:[34,3,2121]}]}]}," ",{p:{button:[{p:[41,3,2420],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.lawupdate"],s:'_0?"check-square-o":"square-o"'},p:[41,20,2437]}],style:[{t:2,x:{r:["data.borg.lawupdate"],s:'_0?"selected":null'},p:[41,84,2501]}],action:"toggle_lawupdate"},f:["Lawsync"]}]},t:7,e:"ui-display",a:{title:"Laws",button:0},f:[" ",{t:4,f:[{p:[44,3,2629],t:7,e:"p",f:[{t:2,r:".",p:[44,6,2632]}]}],n:52,r:"data.laws",p:[43,2,2607]}]}]},e.exports=a.extend(r.exports)},{341:341}],371:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,5,65],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"selected":null'},p:[3,38,98]}],action:[{t:2,x:{r:["data.timing"],s:'_0?"stop":"start"'},p:[3,83,143]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"Stop":"Start"'},p:[3,119,179]}]}," ",{p:[4,5,230],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"flash",style:[{t:2,x:{r:["data.flash_charging"],s:'_0?"disabled":null'},p:[4,57,282]}]},f:[{t:2,x:{r:["data.flash_charging"],s:'_0?"Recharging":"Flash"'},p:[4,102,327]}]}]},t:7,e:"ui-display",a:{title:"Cell Timer",button:0},f:[" ",{p:[6,3,405],t:7,e:"ui-section",f:[{p:[7,5,422],t:7,e:"ui-button",a:{icon:"fast-backward",action:"time",params:'{"adjust": -600}'}}," ",{p:[8,5,511],t:7,e:"ui-button",a:{icon:"backward",action:"time",params:'{"adjust": -100}'}}," ",{p:[9,5,595],t:7,e:"span",f:[{t:2,x:{r:["text","data.minutes"],s:"_0.zeroPad(_1,2)"},p:[9,11,601]},":",{t:2,x:{r:["text","data.seconds"],s:"_0.zeroPad(_1,2)"},p:[9,45,635]}]}," ",{p:[10,5,680],t:7,e:"ui-button",a:{icon:"forward",action:"time",params:'{"adjust": 100}'}}," ",{p:[11,5,762],t:7,e:"ui-button",a:{icon:"fast-forward",action:"time",params:'{"adjust": 600}'}}]}," ",{p:[13,3,863],t:7,e:"ui-section",f:[{p:[14,7,882],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "short"}'},f:["Short"]}," ",{p:[15,7,985],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "medium"}'},f:["Medium"]}," ",{p:[16,7,1090],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "long"}'},f:["Long"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],372:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,22],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,38]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,77],t:7,e:"ui-display",a:{title:"Bluespace Artillery Control",button:0},f:[{t:4,f:[{p:[8,3,160],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,5,192],t:7,e:"ui-button",a:{icon:"crosshairs",action:"recalibrate"},f:[{t:2,r:"data.target",p:[9,55,242]}]}]}," ",{p:[11,3,288],t:7,e:"ui-section",a:{label:"Controls"},f:[{t:4,f:[{p:[13,3,344],t:7,e:"ui-notice",f:[{p:[14,4,359],t:7,e:"span",f:["Bluespace Artillery firing protocols must be globally unlocked from two keycard authentication devices first!"]}]}],n:50,x:{r:["data.unlocked"],s:"!_0"},p:[12,2,319]},{t:4,n:51,f:[{p:[17,3,509],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.ready"],s:'_0?null:"disabled"'},p:[17,36,542]}],action:"fire"},f:["FIRE!"]}],x:{r:["data.unlocked"],s:"!_0"}}]}],n:50,r:"data.connected",p:[7,3,135]}," ",{t:4,f:[{p:[22,3,673],t:7,e:"ui-section",a:{label:"Maintenance"},f:[{p:[23,7,712],t:7,e:"ui-button",a:{icon:"wrench",action:"build"},f:["Complete Deployment."]}]}],n:50,x:{r:["data.connected"],s:"!_0"},p:[21,3,647]}]}]},e.exports=a.extend(r.exports)},{341:341}],373:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.hasHoldingTank"],s:'_0?"is":"is not"'},p:[2,23,34]}," connected to a tank."]}]}," ",{p:{button:[{p:[6,5,180],t:7,e:"ui-button",a:{icon:"pencil",action:"relabel"},f:["Relabel"]}]},t:7,e:"ui-display",a:{title:"Canister",button:0},f:[" ",{p:[8,3,259],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[9,5,293],t:7,e:"span",f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[9,11,299]}," kPa"]}]}," ",{p:[11,3,363],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[12,5,393],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.portConnected"],s:'_0?"good":"average"'},p:[12,18,406]}]},f:[{t:2,x:{r:["data.portConnected"],s:'_0?"Connected":"Not Connected"'},p:[12,63,451]}]}]}," ",{t:4,f:[{p:[15,3,559],t:7,e:"ui-section",a:{label:"Access"},f:[{p:[16,7,593],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.restricted"],s:'_0?"lock":"unlock"'},p:[16,24,610]}],style:[{t:2,x:{r:[],s:'"caution"'},p:[17,14,664]}],action:"restricted"},f:[{t:2,x:{r:["data.restricted"],s:'_0?"Restricted to Engineering":"Public"'},p:[18,27,705]}]}]}],n:50,r:"data.isPrototype",p:[14,3,531]}]}," ",{p:[22,1,818],t:7,e:"ui-display",a:{title:"Valve"},f:[{p:[23,3,847],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[24,5,889],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[24,18,902]}],max:[{t:2,r:"data.maxReleasePressure",p:[24,52,936]}],value:[{t:2,r:"data.releasePressure",p:[25,14,978]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[25,40,1004]}," kPa"]}]}," ",{p:[27,3,1073],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[28,5,1117],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[28,38,1150]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[30,5,1304],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[30,36,1335]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[32,5,1480],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[33,5,1574],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[33,35,1604]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}," ",{p:[36,3,1763],t:7,e:"ui-section",a:{label:"Valve"},f:[{p:[37,5,1794],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.valveOpen"],s:'_0?"unlock":"lock"'},p:[37,22,1811]}],style:[{t:2,x:{r:["data.valveOpen","data.hasHoldingTank"],s:'_0?_1?"caution":"danger":null'},p:[38,14,1864]}],action:"valve"},f:[{t:2,x:{r:["data.valveOpen"],s:'_0?"Open":"Closed"'},p:[39,22,1957]}]}]}]}," ",{t:4,f:[{p:[42,1,2049],t:7,e:"ui-display",a:{title:"Valve Toggle Timer"},f:[{t:4,f:[{p:[44,5,2112],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[45,7,2152],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.timer_is_not_default"],s:'_0?null:"disabled"'},p:[45,40,2185]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[47,7,2312],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.timer_is_not_min"],s:'_0?null:"disabled"'},p:[47,38,2343]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[49,7,2472],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:[],s:'"disabled"'},p:[49,39,2504]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[51,7,2587],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.timer_is_not_max"],s:'_0?null:"disabled"'},p:[51,37,2617]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[43,3,2091]}," ",{p:[55,3,2779],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[56,6,2811],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[56,39,2844]}],action:"toggle_timer"},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[57,30,2913]}]}," ",{p:[59,2,2959],t:7,e:"ui-section",a:{label:"Time until Valve Toggle"},f:[{p:[60,2,3005],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[60,8,3011]}]}]}]}]}],n:50,r:"data.isPrototype",p:[41,1,2022]},{p:{button:[{t:4,f:[{p:[69,7,3209],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.valveOpen"],s:'_0?"danger":null'},p:[69,38,3240]}],action:"eject"},f:["Eject"]}],n:50,r:"data.hasHoldingTank",p:[68,5,3175]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[73,3,3370],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holdingTank.name",p:[74,4,3400]}]}," ",{p:[76,3,3444],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holdingTank.tankPressure"],s:"Math.round(_0)"},p:[77,4,3477]}," kPa"]}],n:50,r:"data.hasHoldingTank",p:[72,3,3340]},{t:4,n:51,f:[{p:[80,3,3556],t:7,e:"ui-section",f:[{p:[81,4,3572],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.hasHoldingTank"}]}]},e.exports=a.extend(r.exports)},{341:341}],374:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,158],t:7,e:"ui-display",a:{title:"Cargo"},f:[{p:[12,3,188],t:7,e:"ui-section",a:{label:"Shuttle"},f:[{t:4,f:[{p:[14,7,270],t:7,e:"ui-button",a:{action:"send"},f:[{t:2,r:"data.location",p:[14,32,295]}]}],n:50,x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"},p:[13,5,222]},{t:4,n:51,f:[{p:[16,7,346],t:7,e:"span",f:[{t:2,r:"data.location",p:[16,13,352]}]}],x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"}}]}," ",{p:[19,3,410],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[20,5,444],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[20,11,450]}]}]}," ",{p:[22,3,506],t:7,e:"ui-section",a:{label:"CentCom Message"},f:[{p:[23,7,550],t:7,e:"span",f:[{t:2,r:"data.message",p:[23,13,556]}]}]}," ",{t:4,f:[{p:[26,5,644],t:7,e:"ui-section",a:{label:"Loan"},f:[{t:4,f:[{p:[28,9,716],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.away","data.docked"],s:'_0&&_1?null:"disabled"'},p:[29,17,744]}],action:"loan"},f:["Loan Shuttle"]}],n:50,x:{r:["data.loan_dispatched"],s:"!_0"},p:[27,7,677]},{t:4,n:51,f:[{p:[32,9,868],t:7,e:"span",a:{"class":"bad"},f:["Loaned to CentCom"]}],x:{r:["data.loan_dispatched"],s:"!_0"}}]}],n:50,x:{r:["data.loan","data.requestonly"],s:"_0&&!_1"},p:[25,3,600]}]}," ",{t:4,f:[{p:{button:[{p:[40,7,1066],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.cart.length"],s:'_0?null:"disabled"'},p:[40,38,1097]}],action:"clear"},f:["Clear"]}]},t:7,e:"ui-display",a:{title:"Cart",button:0},f:[" ",{t:4,f:[{p:[43,7,1222],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[44,9,1263],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[44,31,1285]}]}," ",{p:[45,9,1307],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[45,30,1328]}]}," ",{p:[46,9,1354],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[46,30,1375]}," Credits"]}," ",{p:[47,9,1407],t:7,e:"div",a:{"class":"content"},f:[{p:[48,11,1440],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"id": "',{t:2,r:"id",
+p:[48,67,1496]},'"}']}}]}]}],n:52,r:"data.cart",p:[42,5,1195]},{t:4,n:51,f:[{p:[52,7,1566],t:7,e:"span",f:["Nothing in Cart"]}],r:"data.cart"}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[37,1,972]},{p:{button:[{t:4,f:[{p:[59,7,1735],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.requests.length"],s:'_0?null:"disabled"'},p:[59,38,1766]}],action:"denyall"},f:["Clear"]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[58,5,1702]}]},t:7,e:"ui-display",a:{title:"Requests",button:0},f:[" ",{t:4,f:[{p:[63,5,1908],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[64,7,1947],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[64,29,1969]}]}," ",{p:[65,7,1989],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[65,28,2010]}]}," ",{p:[66,7,2034],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[66,28,2055]}," Credits"]}," ",{p:[67,7,2085],t:7,e:"div",a:{"class":"content"},f:["By ",{t:2,r:"orderer",p:[67,31,2109]}]}," ",{p:[68,7,2134],t:7,e:"div",a:{"class":"content"},f:["Comment: ",{t:2,r:"reason",p:[68,37,2164]}]}," ",{t:4,f:[{p:[70,9,2223],t:7,e:"div",a:{"class":"content"},f:[{p:[71,11,2256],t:7,e:"ui-button",a:{icon:"check",action:"approve",params:['{"id": "',{t:2,r:"id",p:[71,68,2313]},'"}']}}," ",{p:[72,11,2336],t:7,e:"ui-button",a:{icon:"close",action:"deny",params:['{"id": "',{t:2,r:"id",p:[72,65,2390]},'"}']}}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[69,7,2188]}]}],n:52,r:"data.requests",p:[62,3,1879]},{t:4,n:51,f:[{p:[77,7,2473],t:7,e:"span",f:["No Requests"]}],r:"data.requests"}]}," ",{p:[80,1,2529],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[80,16,2544]}]},f:[{t:4,f:[{p:[82,5,2587],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[82,16,2598]}]},f:[{t:4,f:[{p:[84,9,2641],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,28,2660]}],candystripe:0,right:0},f:[{p:[85,11,2700],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"desc",p:[85,31,2720]}],"tooltip-side":"left",action:"add",params:['{"id": "',{t:2,r:"id",p:[85,90,2779]},'"}']},f:[{t:2,r:"cost",p:[85,100,2789]}," Credits"]}]}],n:52,r:"packs",p:[83,7,2616]}]}],n:52,r:"data.supplies",p:[81,3,2558]}]}]},e.exports=a.extend(r.exports)},{341:341}],375:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,163],t:7,e:"ui-notice",f:[{t:4,f:[{p:[14,5,207],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[15,7,249],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[15,24,266]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[15,75,317]}]}]}],n:50,r:"data.siliconUser",p:[13,3,177]},{t:4,n:51,f:[{p:[18,5,405],t:7,e:"span",f:["Swipe a QM-Level ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[18,39,439]}," this interface."]}],r:"data.siliconUser"}]}," ",{t:4,f:[{p:[23,3,546],t:7,e:"ui-display",a:{title:"Express Cargo Console"},f:[{p:[25,5,594],t:7,e:"ui-section",a:{label:"Landing Location"},f:[{p:[26,7,638],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.usingBeacon"],s:'_0?null:"selected"'},p:[26,25,656]}],action:"LZCargo"},f:["Cargo Bay"]}," ",{p:[27,7,744],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.hasBeacon","data.usingBeacon"],s:'_0?_1?"selected":null:"disabled"'},p:[27,25,762]}],action:"LZBeacon"},f:[{t:2,r:"data.beaconzone",p:[27,116,853]}," (",{t:2,r:"data.beaconName",p:[27,137,874]},")"]}," ",{p:[28,7,913],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.canBuyBeacon"],s:'_0?null:"disabled"'},p:[28,25,931]}],action:"printBeacon"},f:[{t:2,r:"data.printMsg",p:[28,90,996]}]}]}," ",{p:[31,5,1049],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[32,7,1084],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[32,13,1090]}]}]}," ",{p:[35,5,1149],t:7,e:"ui-section",a:{label:"Notice"},f:[{p:[36,7,1183],t:7,e:"span",f:[{t:2,r:"data.message",p:[36,13,1189]}]}]}]}," ",{p:[39,3,1249],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[39,18,1264]}]},f:[{t:4,f:[{p:[41,7,1309],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[41,18,1320]}]},f:[{t:4,f:[{p:[43,11,1365],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[43,30,1384]}],candystripe:0,right:0},f:[{p:[44,13,1425],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.canBeacon"],s:'_0?null:"disabled"'},p:[44,31,1443]}],tooltip:[{t:2,r:"desc",p:[44,80,1492]}],"tooltip-side":"left",action:"add",params:['{"id": "',{t:2,r:"id",p:[44,139,1551]},'"}']},f:[{t:2,r:"cost",p:[44,149,1561]}," Credits ",{t:2,r:"data.beaconError",p:[44,166,1578]}]}]}],n:52,r:"packs",p:[42,9,1339]}]}],n:52,r:"data.supplies",p:[40,5,1279]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[22,1,522]}]},e.exports=a.extend(r.exports)},{341:341}],376:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Cellular Emporium",button:0},f:[{p:[2,3,48],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.can_readapt"],s:'_0?null:"disabled"'},p:[2,36,81]}],action:"readapt"},f:["Readapt"]}," ",{p:[4,3,166],t:7,e:"ui-section",a:{label:"Genetic Points Remaining",right:0},f:[{t:2,r:"data.genetic_points_remaining",p:[5,5,222]}]}]}," ",{p:[8,1,286],t:7,e:"ui-display",f:[{t:4,f:[{p:[10,3,326],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[10,22,345]}],candystripe:0,right:0},f:[{p:[11,5,378],t:7,e:"span",f:[{t:2,r:"desc",p:[11,11,384]}]}," ",{p:[12,5,404],t:7,e:"span",f:[{t:2,r:"helptext",p:[12,11,410]}]}," ",{p:[13,5,434],t:7,e:"span",f:["Cost: ",{t:2,r:"dna_cost",p:[13,17,446]}]}," ",{p:[14,5,470],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["owned","can_purchase"],s:'_0?"selected":_1?null:"disabled"'},p:[15,14,494]}],action:"evolve",params:['{"name": "',{t:2,r:"name",p:[17,25,599]},'"}']},f:[{t:2,x:{r:["owned"],s:'_0?"Evolved":"Evolve"'},p:[18,7,618]}]}]}],n:52,r:"data.abilities",p:[9,1,299]},{t:4,f:[{p:[23,3,716],t:7,e:"span",a:{"class":"warning"},f:["No abilities available."]}],n:51,r:"data.abilities",p:[22,1,694]}]}]},e.exports=a.extend(r.exports)},{341:341}],377:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,16],t:7,e:"span",f:["To use this, simply spawn the atoms you want in one of the four Centcom Supplypod Bays. Items in the bay will then be launched inside your supplypod, one turf-full at a time! You can optionally use the following buttons to configure how the supplypod acts."]}]}," ",{p:[5,1,300],t:7,e:"ui-display",a:{title:"Centcom Pod Customization (to be used against helen weinstein)"},f:[{p:[6,4,387],t:7,e:"ui-section",a:{label:"Which supplypod bay will you use?"},f:[{p:[7,9,452],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bay"],s:'_0==1?"selected":null'},p:[7,27,470]}],action:"bay1"},f:["Bay #1"]}," ",{p:[8,9,550],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bay"],s:'_0==2?"selected":null'},p:[8,27,568]}],action:"bay2"},f:["Bay #2"]}," ",{p:[9,9,648],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bay"],s:'_0==3?"selected":null'},p:[9,27,666]}],action:"bay3"},f:["Bay #3"]}," ",{p:[10,9,746],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bay"],s:'_0==4?"selected":null'},p:[10,27,764]}],action:"bay4"},f:["Bay #4"]}]}," ",{p:[13,5,859],t:7,e:"ui-section",a:{label:"Useful teleport tools!"},f:[{p:[14,9,913],t:7,e:"ui-button",a:{action:"teleportCentcom"},f:["Teleport to Centcom's Supplypod Loading Bay"]}," ",{p:[15,9,1013],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.oldArea"],s:'_0?null:"disabled"'},p:[15,27,1031]}],action:"teleportBack"},f:["Teleport Back to ",{t:2,x:{r:["data.oldArea"],s:'_0?_0:"where you were"'},p:[15,103,1107]}]}]}," ",{p:[18,5,1193],t:7,e:"ui-section",a:{label:"Keep stuff after launching?"},f:[{p:[19,9,1250],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchClone"],s:'_0?"selected":null'},p:[19,27,1268]}],action:"launchClone","tooltip-side":"left",tooltip:"Choosing this will create a duplicate of the item to be launched in Centcom, allowing you to send one type of item multiple times. Either way, the atoms are forceMoved into the supplypod after it lands (but before it opens)."},f:["Clone and Launch"]}]}," ",{p:[23,5,1646],t:7,e:"ui-section",a:{label:"Launch all at once?"},f:[{p:[24,9,1695],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchChoice"],s:'_0==1?"selected":null'},p:[24,27,1713]}],action:"launchOrdered","tooltip-side":"left",tooltip:'Instead of launching everything in the bay at once, this will "scan" things (one turf-full at a time) in order, left to right and top to bottom. Refreshing will reset the "scanner" to the top-leftmost position.'},f:["Ordered"]}," ",{p:[26,9,2061],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchChoice"],s:'_0==2?"selected":null'},p:[26,27,2079]}],action:"launchRandom","tooltip-side":"left",tooltip:"Instead of launching everything in the bay at once, this will launch one random turf of items at a time."},f:["Random"]}]}," ",{p:[30,5,2333],t:7,e:"ui-section",a:{label:"Add an explosion?"},f:[{p:[31,9,2380],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.explosionChoice"],s:'_0==1?"selected":null'},p:[31,27,2398]}],action:"explosionCustom","tooltip-side":"left",tooltip:"This will cause an explosion of whatever size you like (including flame range) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!"},f:["Custom Size"]}," ",{p:[33,9,2708],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.explosionChoice"],s:'_0==2?"selected":null'},p:[33,27,2726]}],action:"explosionBus","tooltip-side":"left",tooltip:"This will cause a maxcap explosion (dependent on server config) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!"},f:["Adminbus"]}]}," ",{p:[37,5,3030],t:7,e:"ui-section",a:{label:"Extra damage?","(default":"None)"},f:[{p:[38,9,3090],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.damageChoice"],s:'_0==1?"selected":null'},p:[38,27,3108]}],action:"damageCustom","tooltip-side":"left",tooltip:"Anyone caught under the pod when it lands will be dealt this amount of brute damage. Sucks to be them!"},f:["Custom Damage"]}," ",{p:[40,9,3353],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.damageChoice"],s:'_0==2?"selected":null'},p:[40,27,3371]}],action:"damageGib","tooltip-side":"left",tooltip:"This will attempt to gib any mob caught under the pod when it lands, as well as dealing a nice 5000 brute damage. Ya know, just to be sure!"},f:["Gib"]}]}," ",{p:[44,5,3655],t:7,e:"ui-section",a:{label:"Extra effects?"},f:[{p:[45,9,3699],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectStun"],s:'_0?"selected":null'},p:[45,27,3717]}],action:"effectStun","tooltip-side":"left",tooltip:"Anyone who is on the turf when the supplypod is launched will be stunned until the supplypod lands. They cant get away that easy!"},f:["Stun"]}," ",{p:[47,9,3971],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectLimb"],s:'_0?"selected":null'},p:[47,27,3989]}],action:"effectLimb","tooltip-side":"left",tooltip:"This will cause anyone caught under the pod to lose a limb, excluding their head."},f:["Delimb"]}," ",{p:[49,9,4197],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectBluespace"],s:'_0?"selected":null'},p:[49,27,4215]}],action:"effectBluespace","tooltip-side":"left",tooltip:"Gives the supplypod an advanced Bluespace Recyling Device. After opening, the supplypod will be warped directly to the surface of a nearby NT-designated trash planet (/r/ss13)."},f:["Bluespace"]}," ",{p:[51,9,4531],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectStealth"],s:'_0?"selected":null'},p:[51,27,4549]}],action:"effectStealth","tooltip-side":"left",tooltip:'This hides the red target icon from appearing when you launch the supplypod. Combos well with the "Invisible" style. Sneak attack, go!'},f:["Stealth"]}," ",{p:[53,9,4817],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectQuiet"],s:'_0?"selected":null'},p:[53,27,4835]}],action:"effectQuiet","tooltip-side":"left",tooltip:"This will keep the supplypod from making any sounds, except for those specifically set by admins in the Sound section."},f:["Quiet Landing"]}," ",{p:[55,9,5089],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectReverse"],s:'_0?"selected":null'},p:[55,27,5107]}],action:"effectReverse","tooltip-side":"left",tooltip:"This pod will not send any items. Instead, after landing, the supplypod will close (similar to a normal closet closing), and then launch back to the right centcom bay to drop off any new contents."},f:["Reverse Mode"]}," ",{p:[57,9,5442],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectMissile"],s:'_0?"selected":null'},p:[57,27,5460]}],action:"effectMissile","tooltip-side":"left",tooltip:"This pod will not send any items. Instead, it will immediatley delete after landing (Similar visually to setting openDelay & departDelay to 0, but this looks nicer). Useful if you just wanna fuck some shit up. Combos well with the Missile style."},f:["Missile Mode"]}," ",{p:[59,9,5844],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectCircle"],s:'_0?"selected":null'},p:[59,27,5862]}],action:"effectCircle","tooltip-side":"left",tooltip:"This will make the supplypod come in from any angle. Im not sure why this feature exists, but here it is."},f:["Any Descent Angle"]}," ",{p:[61,9,6109],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectBurst"],s:'_0?"selected":null'},p:[61,27,6127]}],action:"effectBurst","tooltip-side":"left",tooltip:"This will make each click launch 5 supplypods inaccuratly around the target turf (a 3x3 area). Combos well with the Missle Mode if you dont want shit lying everywhere after."},f:["Machine Gun Mode"]}," ",{p:[63,9,6439],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectTarget"],s:'_0?"selected":null'},p:[63,27,6457]}],action:"effectTarget","tooltip-side":"left",tooltip:"This will make the supplypod target a specific atom, instead of the mouses position. Smiting does this automatically!"},f:["Specific Target"]}," ",{p:[65,9,6714],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectName"],s:'_0?"selected":null'},p:[65,27,6732]}],action:"effectName","tooltip-side":"left",tooltip:"Allows you to add a custom name and description."},f:["Custom Name/Desc"]}]}," ",{p:[69,5,6932],t:7,e:"ui-section",a:{label:"Sound?"},f:[{p:[70,9,6968],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.landingSound"],s:'_0?"selected":null'},p:[70,27,6986]}],action:"landingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod lands."},f:["Custom Landing Sound"]}," ",{p:[72,10,7174],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.openingSound"],s:'_0?"selected":null'},p:[72,28,7192]}],action:"openingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod opens."},f:["Custom Opening Sound"]}," ",{p:[74,9,7379],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.leavingSound"],s:'_0?"selected":null'},p:[74,27,7397]}],action:"leavingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod departs (whether that be delection in the case of a bluespace pod, or leaving for centcom for a reversing pod)."},f:["Custom Leaving Sound"]}," ",{p:[76,9,7689],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.soundVolume"],s:'_0?"selected":null'},p:[76,27,7707]}],action:"soundVolume","tooltip-side":"left",tooltip:"Choose the volume for the sound to play at. Default values are between 1 and 100, but hey, do whatever. Im a tooltip, not a cop."},f:["Admin Sound Volume"]}]}," ",{p:[80,5,7991],t:7,e:"ui-section",a:{label:"Delay timers?"},f:[{p:[81,9,8034],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.landingDelay"],s:'_0!=5?"selected":null'},p:[81,27,8052]}],action:"landingDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to hit the station. By default this value is 0.5 seconds."},f:["Custom Landing Time"]}," ",{p:[83,10,8312],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.openingDelay"],s:'_0!=30?"selected":null'},p:[83,28,8330]}],action:"openingDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to open after landing. Useful for giving whatevers inside the pod a nice dramatic entrance! By default this value is 3 seconds."},f:["Custom Opening Time"]}," ",{p:[85,9,8660],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.departureDelay"],s:'_0!=30?"selected":null'},p:[85,27,8678]}],action:"departureDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to leave after landing. By default this value is 3 seconds."},f:["Custom Leaving Time"]}]}," ",{p:[89,5,8959],t:7,e:"ui-section",a:{label:"Style?"},f:[{p:[90,9,8995],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==1?"selected":null'},p:[90,27,9013]}],action:"styleStandard","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to your standard Nanotrasen black and orange. Same color scheme as the normal station-used supplypods."},f:["Standard"]}," ",{p:[92,9,9314],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==2?"selected":null'},p:[92,27,9332]}],action:"styleBluespace","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to the same as the stations upgraded blue-and-white Bluespace Supplypods."},f:["Advanced"]}," ",{p:[94,9,9605],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==4?"selected":null'},p:[94,27,9623]}],action:"styleSyndie","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a menacing black and blood-red. Great for sending meme-ops in style!"},f:["Syndicate"]}," ",{p:[96,9,9892],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==5?"selected":null'},p:[96,27,9910]}],action:"styleBlue","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a menacing black and dark blue. Great for sending deathsquads in style!"},f:["Deathsquad"]}," ",{p:[98,10,10182],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==6?"selected":null'},p:[98,28,10200]}],action:"styleCult","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a blood and rune covered cult pod!"},f:["Cult Pod"]}," ",{p:[100,9,10425],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==7?"selected":null'},p:[100,27,10443]}],action:"styleMissile","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large missile. Combos well with a missile mode, so the missile doesnt stick around after landing."},f:["Missile"]}," ",{p:[102,9,10735],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==8?"selected":null'},p:[102,27,10753]}],action:"styleSMissile","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large blood-red missile. Combos well with missile mode, so the missile doesnt stick around after landing."},f:["Syndicate Missile"]}," ",{p:[104,9,11064],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==9?"selected":null'},p:[104,27,11082]}],action:"styleBox","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large, dark-green military supply crate."},f:["Supply Crate"]}," ",{p:[106,9,11318],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==10?"selected":null'},p:[106,27,11336]}],action:"styleHONK","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a colorful, clown inspired look."},f:["HONK"]}," ",{p:[108,9,11563],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==11?"selected":null'},p:[108,27,11581]}],action:"styleFruit","tooltip-side":"left",tooltip:"for when an orange is angry"},f:["Fruit~"]}," ",{p:[110,9,11742],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==12?"selected":null'},p:[110,27,11760]}],action:"styleInvisible","tooltip-side":"left",tooltip:'Makes the supplypod invisible! Useful for when you want to use this feature with a gateway or something. Combos well with the "Stealth" and "Quiet Landing" effects.'},f:["Invisible"]}," ",{p:[112,9,12064],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==13?"selected":null'},p:[112,27,12082]}],action:"styleGondola","tooltip-side":"left",tooltip:"this gondola can control when he wants to deliver his supplies if he has a smart enough mind, so offer up his body to ghosts for maximum enjoyment. (Make sure to turn off bluespace and set a arbitrarily high open-time if you do!)"},f:["Gondola (alive)"]}]}]}," ",{p:[117,1,12481],t:7,e:"ui-display",f:[{p:[118,5,12498],t:7,e:"ui-section",a:{label:[{t:2,r:"data.numObjects",p:[118,26,12519]}," turfs with launchable atoms found in Bay #",{t:2,r:"data.bay",p:[118,88,12581]}]},f:[{p:[119,9,12604],t:7,e:"ui-button",a:{action:"refresh","tooltip-side":"right",tooltip:"Manually refreshes the possible things to launch in the pod bay."},f:["Refresh Pod Bay"]}]}," ",{p:[123,5,12787],t:7,e:"ui-section",f:[{p:[124,9,12808],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.giveLauncher"],s:'_0?"selected":null'},p:[124,27,12826]}],action:"giveLauncher","tooltip-side":"right",tooltip:"THE CODEX ASTARTES CALLS THIS MANEUVER: STEEL RAIN!!"},f:["Enter Launch Mode"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],378:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,31],t:7,e:"ui-section",a:{label:"Energy"},f:[{p:[3,5,64],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.maxEnergy",p:[3,26,85]}],value:[{t:2,r:"data.energy",p:[3,53,112]}]},f:[{t:2,x:{r:["adata.energy"],s:"Math.fixed(_0)"},p:[3,70,129]}," Units"]}]}]}," ",{p:[6,1,206],t:7,e:"ui-display",a:{title:"Saved Recipes",button:0},f:[{p:[7,3,251],t:7,e:"ui-section",f:[{p:[8,5,269],t:7,e:"ui-button",a:{icon:"plus",action:"add_recipe"},f:["Add Recipe"]}," ",{p:[9,2,337],t:7,e:"ui-button",a:{icon:"minus",action:"clear_recipes"},f:["Clear Recipes"]}," ",{t:4,f:[{p:[11,7,445],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense_recipe",params:['{"recipe": "',{t:2,r:"contents",p:[11,80,518]},'"}']},f:[{t:2,r:"recipe_name",p:[11,96,534]}]}],n:52,r:"data.recipes",p:[10,5,415]}]}]}," ",{p:{button:[{t:4,f:[{p:[18,7,719],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.amount","."],s:'_0==_1?"selected":null'},p:[18,37,749]}],action:"amount",params:['{"target": ',{t:2,r:".",p:[18,114,826]},"}"]},f:[{t:2,r:".",p:[18,122,834]}]}],n:52,r:"data.beakerTransferAmounts",p:[17,5,675]}]},t:7,e:"ui-display",a:{title:"Dispense",button:0},f:[" ",{p:[21,3,886],t:7,e:"ui-section",f:[{t:4,f:[{p:[23,7,936],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense",params:['{"reagent": "',{t:2,r:"id",p:[23,74,1003]},'"}']},f:[{t:2,r:"title",p:[23,84,1013]}]}],n:52,r:"data.chemicals",p:[22,5,904]}]}]}," ",{p:{button:[{t:4,f:[{p:[30,7,1190],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"amount": ',{t:2,r:".",p:[30,66,1249]},"}"]},f:[{t:2,r:".",p:[30,74,1257]}]}],n:52,r:"data.beakerTransferAmounts",p:[29,5,1146]}," ",{p:[32,5,1295],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[32,36,1326]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[34,3,1423],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[36,7,1493],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[36,13,1499]},"/",{t:2,r:"data.beakerMaxVolume",p:[36,55,1541]}," Units"]}," ",{p:[37,4,1583],t:7,e:"span",f:["pH: ",{t:2,x:{r:["adata.beakerCurrentpH","adata.partRating"],s:"Math.round(_0*_1)/_1"},p:[37,14,1593]}]}," ",{p:[38,7,1679],t:7,e:"br"}," ",{t:4,f:[{p:[40,9,1732],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[40,52,1775]}," units of ",{t:2,r:"name",p:[40,87,1810]}]},{p:[40,102,1825],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[39,7,1692]},{t:4,n:51,f:[{p:[42,9,1856],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[35,5,1458]},{t:4,n:51,f:[{p:[45,7,1932],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],379:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[2,3,35],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,67],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isActive"],s:'_0?"power-off":"close"'},p:[3,22,84]}],style:[{t:2,x:{r:["data.isActive"],s:'_0?"selected":null'},p:[4,10,137]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,10,186]}],action:"power"},f:[{t:2,x:{r:["data.isActive"],s:'_0?"On":"Off"'},p:[6,18,249]}]}]}," ",{p:[8,3,314],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,4,346],t:7,e:"ui-button",a:{icon:"pencil",action:"temperature",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[9,79,421]}," K"]}]}]}," ",{p:{button:[{p:[14,5,564],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[14,36,595]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[16,3,692],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[18,7,762],t:7,e:"span",f:["Temperature: ",{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[18,26,781]}," K"]}," ",{p:[19,4,828],t:7,e:"br"}," ",{p:[20,7,842],t:7,e:"span",f:["pH: ",{t:2,x:{r:["adata.currentpH","adata.partRating"],s:"Math.round(_0*_1)/_1"},p:[20,17,852]}]}," ",{p:[21,7,932],t:7,e:"br"}," ",{t:4,f:[{p:[23,3,980],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[23,46,1023]}," units of ",{t:2,r:"name",p:[23,81,1058]}]},{p:[23,96,1073],t:7,e:"br"}," ",{t:4,f:[{p:[25,4,1111],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["Purity: ",{t:2,x:{r:["purity"],s:"Math.fixed(_0,2)"},p:[25,55,1162]}]},{p:[25,87,1194],t:7,e:"br"}],n:50,r:"data.showPurity",p:[24,3,1083]}],n:52,r:"adata.beakerContents",p:[22,7,946]},{t:4,n:51,f:[{p:[28,9,1237],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[17,5,727]},{t:4,n:51,f:[{p:[31,7,1313],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],380:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,33],t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[{p:[3,3,71],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"close"'},p:[3,20,88]}],style:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"selected":null'},p:[4,11,144]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,11,200]}],action:"eject"},f:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"No beaker"'},p:[7,5,269]}]}," ",{p:[10,3,341],t:7,e:"ui-section",f:[{t:4,f:[{t:4,f:[{p:[13,6,427],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[13,25,446]}," units of ",{t:2,r:"name",p:[13,60,481]}],nowrap:0},f:[{p:[14,7,506],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[15,8,556],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[15,61,609]},'", "amount": 1}']},f:["1"]}," ",{p:[16,8,654],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[16,61,707]},'", "amount": 5}']},f:["5"]}," ",{p:[17,8,752],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[17,61,805]},'", "amount": 10}']},f:["10"]}," ",{p:[18,8,852],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[18,61,905]},'", "amount": 1000}']},f:["All"]}," ",{p:[19,8,955],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[19,61,1008]},'", "amount": -1}']},f:["Custom"]}," ",{p:[20,8,1059],t:7,e:"ui-button",a:{action:"analyzeBeak",params:['{"id": "',{t:2,r:"id",p:[20,56,1107]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.beakerContents",p:[12,5,391]},{t:4,n:51,f:[{p:[24,5,1189],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"data.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,4,358]},{t:4,n:51,f:[{p:[27,5,1260],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}," ",{p:[32,2,1348],t:7,e:"ui-display",a:{title:"Buffer"},f:[{p:[33,3,1379],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?null:"selected"'},p:[33,41,1417]}]},f:["Destroy"]}," ",{p:[34,3,1475],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?"selected":null'},p:[34,41,1513]}]},f:["Transfer to Beaker"]}," ",{p:[35,3,1582],t:7,e:"ui-section",f:[{t:4,f:[{p:[37,5,1634],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[37,24,1653]}," units of ",{t:2,r:"name",p:[37,59,1688]}],nowrap:0},f:[{p:[38,6,1712],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[39,7,1761],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[39,62,1816]},'", "amount": 1}']},f:["1"]}," ",{p:[40,7,1860],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[40,62,1915]},'", "amount": 5}']},f:["5"]}," ",{p:[41,7,1959],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[41,62,2014]},'", "amount": 10}']},f:["10"]}," ",{p:[42,7,2060],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[42,62,2115]},'", "amount": 1000}']},f:["All"]}," ",{p:[43,7,2164],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[43,62,2219]},'", "amount": -1}']},f:["Custom"]}," ",{p:[44,7,2269],t:7,e:"ui-button",a:{action:"analyzeBuff",params:['{"id": "',{t:2,r:"id",p:[44,55,2317]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.bufferContents",p:[36,4,1599]}]}]}," ",{t:4,f:[{p:[52,3,2453],t:7,e:"ui-display",a:{title:"Pills, Bottles and Patches"},f:[{t:4,f:[{p:[54,5,2537],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["id","data.chosenPillStyle"],s:'_0==_1?"selected":null'},p:[54,23,2555]}],action:"pillStyle",params:['{"id": "',{t:2,r:"id",p:[54,108,2640]},'"}']},f:[{t:3,r:"htmltag",p:[54,118,2650]}]}],n:52,r:"data.pillStyles",p:[53,4,2506]}," ",{p:[56,4,2694],t:7,e:"br"}," ",{t:4,f:[{p:[58,5,2740],t:7,e:"ui-button",a:{action:"ejectp",state:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?null:"disabled"'},p:[58,39,2774]}]},f:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?"Eject":"No Pill bottle loaded"'},p:[58,88,2823]}]}," ",{p:[59,5,2904],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.pillBotContent",p:[59,27,2926]},"/",{t:2,r:"data.pillBotMaxContent",p:[59,51,2950]}]}],n:50,r:"data.isPillBottleLoaded",p:[57,4,2703]},{t:4,n:51,f:[{p:[61,5,3002],t:7,e:"span",a:{"class":"average"},f:["No Pillbottle"]}],r:"data.isPillBottleLoaded"}," ",{p:[64,4,3063],t:7,e:"br"}," ",{p:[65,4,3073],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[65,63,3132]}]},f:["Create Pill (max 50µ)"]}," ",{p:[66,4,3216],t:7,e:"br"}," ",{p:[67,4,3226],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[67,63,3285]}]},f:["Create Multiple Pills"]}," ",{p:[68,4,3369],t:7,e:"br"}," ",{p:[69,4,3379],t:7,e:"br"}," ",{p:[70,4,3389],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[70,64,3449]}]},f:["Create Patch (max 40µ)"]}," ",{p:[71,4,3534],t:7,e:"br"}," ",{p:[72,4,3544],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[72,64,3604]}]},f:["Create Multiple Patches"]}," ",{p:[73,4,3690],t:7,e:"br"}," ",{p:[74,4,3700],t:7,e:"br"}," ",{p:[75,4,3710],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[75,65,3771]}]},f:["Create Bottle (max 30µ)"]}," ",{p:[76,4,3857],t:7,e:"br"}," ",{p:[77,4,3867],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 1}',
+state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[77,65,3928]}]},f:["Dispense Buffer to Bottles"]}," ",{p:[78,4,4017],t:7,e:"br"}," ",{p:[79,4,4027],t:7,e:"br"}," ",{p:[80,4,4037],t:7,e:"ui-button",a:{action:"createVial",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[80,63,4096]}]},f:["Create Hypo Vial (max 60µ)"]}," ",{p:[81,4,4185],t:7,e:"br"}," ",{p:[82,4,4195],t:7,e:"ui-button",a:{action:"createVial",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[82,63,4254]}]},f:["Dispense Buffer to Hypo vials"]}," ",{p:[83,4,4347],t:7,e:"br"}]}],n:50,x:{r:["data.condi"],s:"!_0"},p:[51,2,2430]},{t:4,n:51,f:[{p:[88,3,4390],t:7,e:"ui-display",a:{title:"Condiments bottles and packs"},f:[{p:[89,4,4445],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[89,63,4504]}]},f:["Create Pack (max 10µ)"]}," ",{p:[90,4,4588],t:7,e:"br"}," ",{p:[91,4,4598],t:7,e:"br"}," ",{p:[92,4,4608],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[92,65,4669]}]},f:["Create Bottle (max 50µ)"]}]}],x:{r:["data.condi"],s:"!_0"}}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.screen"],s:'_0=="analyze"'},f:[{p:[96,2,4817],t:7,e:"ui-display",a:{title:[{t:2,r:"data.analyzeVars.name",p:[96,20,4835]}]},f:[{p:[97,3,4866],t:7,e:"span",a:{"class":"highlight"},f:["Description:"]}," ",{p:[98,3,4914],t:7,e:"span",a:{"class":"content",style:"float:center"},f:[{t:2,r:"data.analyzeVars.description",p:[98,46,4957]}]}," ",{p:[99,3,5e3],t:7,e:"br"}," ",{p:[100,3,5009],t:7,e:"span",a:{"class":"highlight"},f:["Color:"]}," ",{p:[101,3,5051],t:7,e:"span",a:{style:["color: ",{t:2,r:"data.analyzeVars.color",p:[101,23,5071]},"; background-color: ",{t:2,r:"data.analyzeVars.color",p:[101,69,5117]}]},f:[{t:2,r:"data.analyzeVars.color",p:[101,97,5145]}]}," ",{p:[102,3,5182],t:7,e:"br"}," ",{p:[103,3,5191],t:7,e:"span",a:{"class":"highlight"},f:["State:"]}," ",{p:[104,3,5233],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.state",p:[104,25,5255]}]}," ",{p:[105,3,5292],t:7,e:"br"}," ",{p:[106,3,5301],t:7,e:"span",a:{"class":"highlight"},f:["Metabolization Rate:"]}," ",{p:[107,3,5357],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.metaRate",p:[107,25,5379]},"µ/minute"]}," ",{p:[108,3,5427],t:7,e:"br"}," ",{p:[109,3,5436],t:7,e:"span",a:{"class":"highlight"},f:["Overdose Threshold:"]}," ",{p:[110,3,5491],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.overD",p:[110,25,5513]}]}," ",{p:[111,3,5550],t:7,e:"br"}," ",{p:[112,3,5559],t:7,e:"span",a:{"class":"highlight"},f:["Addiction Threshold:"]}," ",{p:[113,3,5615],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.addicD",p:[113,25,5637]}]}," ",{p:[114,3,5675],t:7,e:"br"}," ",{t:4,f:[{p:[116,4,5714],t:7,e:"span",a:{"class":"highlight"},f:["Minumum Reaction Temperature:"]}," ",{p:[117,4,5780],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.minTemp",p:[117,26,5802]},"K"]}," ",{p:[118,4,5843],t:7,e:"br"}," ",{p:[119,4,5853],t:7,e:"span",a:{"class":"highlight"},f:["Optimal Reaction Temperature:"]}," ",{p:[120,4,5919],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.maxTemp",p:[120,26,5941]},"K"]}," ",{p:[121,4,5982],t:7,e:"br"}," ",{p:[122,4,5992],t:7,e:"span",a:{"class":"highlight"},f:["Explosion Reaction Temperature:"]}," ",{p:[123,4,6060],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.eTemp",p:[123,26,6082]},"K"]}," ",{p:[124,4,6121],t:7,e:"br"}," ",{p:[125,4,6131],t:7,e:"span",a:{"class":"highlight"},f:["Optimal reaction pH:"]}," ",{p:[126,4,6188],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.pHpeak",p:[126,26,6210]}]}," ",{p:[127,4,6249],t:7,e:"br"}," ",{p:[128,4,6259],t:7,e:"span",a:{"class":"highlight"},f:["Current Purity:"]}," ",{p:[129,4,6311],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.purityF",p:[129,26,6333]}]}," ",{p:[130,4,6373],t:7,e:"br"}," ",{p:[131,4,6383],t:7,e:"span",a:{"class":"highlight"},f:["Inverse Purity Threshold:"]}," ",{p:[132,4,6445],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.inverseRatioF",p:[132,26,6467]}]}," ",{p:[133,4,6513],t:7,e:"br"}," ",{p:[134,4,6523],t:7,e:"span",a:{"class":"highlight"},f:["Explosion Purity Threshold:"]}," ",{p:[135,4,6587],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.purityE",p:[135,26,6609]}]}," ",{p:[136,4,6649],t:7,e:"br"}],n:50,r:"data.fermianalyze",p:[115,3,5684]}," ",{p:[138,3,6669],t:7,e:"br"}," ",{p:[139,3,6678],t:7,e:"ui-button",a:{action:"goScreen",params:'{"screen": "home"}'},f:["Back"]}]}]}],x:{r:["data.screen"],s:'_0=="home"'}}]},e.exports=a.extend(r.exports)},{341:341}],381:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Recipient Contents"},f:[{p:[2,2,41],t:7,e:"ui-section",f:[{p:[3,3,56],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[3,34,87]}],action:"ejectBeaker"},f:["Eject"]}," ",{p:[4,3,173],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[4,35,205]}],action:"input"},f:["Input"]}," ",{p:[5,3,285],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,35,317]}],action:"amount"},f:[{t:2,r:"data.amount",p:[5,96,378]},"U"]}," ",{p:[6,3,409],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"disabled":null'},p:[6,33,439]}],action:"makecup"},f:["Create Beaker"]}]}]}," ",{p:[9,1,556],t:7,e:"ui-display",a:{title:"Recipient"},f:[{p:[10,2,588],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[12,4,651],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[12,10,657]},"/",{t:2,r:"data.beakerMaxVolume",p:[12,52,699]}," Units"]}," ",{t:4,f:[{p:[14,5,775],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[14,48,818]}," units of ",{t:2,r:"name",p:[14,83,853]}]},{p:[14,98,868],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[13,4,740]},{t:4,n:51,f:[{p:[16,5,890],t:7,e:"span",a:{"class":"bad"},f:["Recipient Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,3,620]},{t:4,n:51,f:[{p:[19,4,958],t:7,e:"span",a:{"class":"average"},f:["No Recipient"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],382:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-button",a:{action:"toggle"},f:[{t:2,x:{r:["data.recollection"],s:'_0?"Recital":"Recollection"'},p:[2,30,42]}]}]}," ",{t:4,f:[{p:[5,3,145],t:7,e:"ui-display",f:[{t:3,r:"data.rec_text",p:[6,3,160]}," ",{t:4,f:[{p:[8,4,224],t:7,e:"br"},{p:[8,8,228],t:7,e:"ui-button",a:{action:"rec_category",params:['{"category": "',{t:2,r:"name",p:[8,63,283]},'"}']},f:[{t:3,r:"name",p:[8,75,295]}," - ",{t:3,r:"desc",p:[8,88,308]}]}],n:52,r:"data.recollection_categories",p:[7,3,182]}," ",{t:3,r:"data.rec_section",p:[10,3,345]}," ",{t:3,r:"data.rec_binds",p:[11,3,370]}]}],n:50,r:"data.recollection",p:[4,1,117]},{t:4,n:51,f:[{p:[14,2,418],t:7,e:"ui-display",a:{title:"Power",button:0},f:[{p:[15,4,455],t:7,e:"ui-section",f:[{t:3,r:"data.power",p:[16,6,473]}]}]}," ",{p:[19,2,523],t:7,e:"ui-display",f:[{p:[20,3,538],t:7,e:"ui-section",f:[{p:[21,4,554],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Driver"?"selected":null'},p:[21,22,572]}],action:"select",params:'{"category": "Driver"}'},f:["Driver"]}," ",{p:[22,4,694],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Script"?"selected":null'},p:[22,22,712]}],action:"select",params:'{"category": "Script"}'},f:["Scripts"]}," ",{p:[23,4,835],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Application"?"selected":null'},p:[23,22,853]}],action:"select",params:'{"category": "Application"}'},f:["Applications"]}," ",{p:[24,4,991],t:7,e:"br"},{t:3,r:"data.tier_info",p:[24,8,995]}]}," ",{p:[26,3,1034],t:7,e:"ui-section",f:[{t:3,r:"data.scripturecolors",p:[27,4,1050]}]},{p:[28,16,1092],t:7,e:"hr"}," ",{p:[29,3,1099],t:7,e:"ui-section",f:[{t:4,f:[{p:[31,4,1142],t:7,e:"div",f:[{p:[31,9,1147],t:7,e:"ui-button",a:{tooltip:[{t:3,r:"tip",p:[31,29,1167]}],"tooltip-side":"right",action:"recite",params:['{"category": "',{t:2,r:"type",p:[31,99,1237]},'"}']},f:["Recite ",{t:3,r:"required",p:[31,118,1256]}]}," ",{t:4,f:[{t:4,f:[{p:[34,6,1329],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[34,53,1376]},'"}']},f:["Unbind ",{t:3,r:"bound",p:[34,72,1395]}]}],n:50,r:"bound",p:[33,5,1310]},{t:4,n:51,f:[{p:[36,6,1437],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[36,53,1484]},'"}']},f:["Quickbind"]}],r:"bound"}],n:50,r:"quickbind",p:[32,6,1288]}," ",{t:3,r:"name",p:[39,6,1548]}," ",{t:3,r:"descname",p:[39,17,1559]}," ",{t:3,r:"invokers",p:[39,32,1574]}]}],n:52,r:"data.scripture",p:[30,3,1114]}]}]}],r:"data.recollection"}]},e.exports=a.extend(r.exports)},{341:341}],383:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Codex Gigas"},f:[{p:[2,2,34],t:7,e:"ui-section",f:[{t:2,r:"data.name",p:[3,3,49]}]}," ",{p:[5,5,82],t:7,e:"ui-section",a:{label:"Prefix"},f:[{p:[6,3,112],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[6,22,131]}],action:"Dark "},f:["Dark"]}," ",{p:[7,3,215],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[7,22,234]}],action:"Hellish "},f:["Hellish"]}," ",{p:[8,3,324],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[8,22,343]}],action:"Fallen "},f:["Fallen"]}," ",{p:[9,3,431],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[9,22,450]}],action:"Fiery "},f:["Fiery"]}," ",{p:[10,3,536],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[10,22,555]}],action:"Sinful "},f:["Sinful"]}," ",{p:[11,3,643],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[11,22,662]}],action:"Blood "},f:["Blood"]}," ",{p:[12,3,748],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[12,22,767]}],action:"Fluffy "},f:["Fluffy"]}]}," ",{p:[14,5,875],t:7,e:"ui-section",a:{label:"Title"},f:[{p:[15,3,904],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[15,22,923]}],action:"Lord "},f:["Lord"]}," ",{p:[16,3,1007],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[16,22,1026]}],action:"Prelate "},f:["Prelate"]}," ",{p:[17,3,1116],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[17,22,1135]}],action:"Count "},f:["Count"]}," ",{p:[18,3,1221],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[18,22,1240]}],action:"Viscount "},f:["Viscount"]}," ",{p:[19,3,1332],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[19,22,1351]}],action:"Vizier "},f:["Vizier"]}," ",{p:[20,3,1439],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[20,22,1458]}],action:"Elder "},f:["Elder"]}," ",{p:[21,3,1544],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[21,22,1563]}],action:"Adept "},f:["Adept"]}]}," ",{p:[23,5,1669],t:7,e:"ui-section",a:{label:"Name"},f:[{p:[24,3,1697],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[24,22,1716]}],action:"hal"},f:["hal"]}," ",{p:[25,3,1797],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[25,22,1816]}],action:"ve"},f:["ve"]}," ",{p:[26,3,1895],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[26,22,1914]}],action:"odr"},f:["odr"]}," ",{p:[27,3,1995],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[27,22,2014]}],action:"neit"},f:["neit"]}," ",{p:[28,3,2097],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[28,22,2116]}],action:"ci"},f:["ci"]}," ",{p:[29,3,2195],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[29,22,2214]}],action:"quon"},f:["quon"]}," ",{p:[30,3,2297],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[30,22,2316]}],action:"mya"},f:["mya"]}," ",{p:[31,3,2397],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[31,22,2416]}],action:"folth"},f:["folth"]}," ",{p:[32,3,2501],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[32,22,2520]}],action:"wren"},f:["wren"]}," ",{p:[33,3,2603],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[33,22,2622]}],action:"geyr"},f:["geyr"]}," ",{p:[34,3,2705],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[34,22,2724]}],action:"hil"},f:["hil"]}," ",{p:[35,3,2805],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[35,22,2824]}],action:"niet"},f:["niet"]}," ",{p:[36,3,2907],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[36,22,2926]}],action:"twou"},f:["twou"]}," ",{p:[37,3,3009],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[37,22,3028]}],action:"phi"},f:["phi"]}," ",{p:[38,3,3109],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[38,22,3128]}],action:"coa"},f:["coa"]}]}," ",{p:[40,5,3229],t:7,e:"ui-section",a:{label:"suffix"},f:[{p:[41,3,3259],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[41,22,3278]}],action:" the Red"},f:["the Red"]}," ",{p:[42,3,3368],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[42,22,3387]}],action:" the Soulless"},f:["the Soulless"]}," ",{p:[43,3,3487],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[43,22,3506]}],action:" the Master"},f:["the Master"]}," ",{p:[44,3,3602],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[44,22,3621]}],action:", the Lord of all things"},f:["the Lord of all things"]}," ",{p:[45,3,3742],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[45,22,3761]}],action:", Jr."},f:["jr"]}]}," ",{p:[47,5,3863],t:7,e:"ui-section",a:{label:"submit"},f:[{p:[48,3,3894],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0>=4?null:"disabled"'},p:[48,21,3912]}],action:"search"},f:["search"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],384:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[2,1,1],t:7,e:"ui-button",a:{icon:"circle",action:"clean_order"},f:["Clear Order"]},{p:[2,70,70],t:7,e:"br"},{p:[2,74,74],t:7,e:"br"}," ",{p:[3,1,79],t:7,e:"i",f:["Your new computer device you always dreamed of is just four steps away..."]},{p:[3,81,159],t:7,e:"hr"}," ",{t:4,f:[" ",{p:[5,1,219],t:7,e:"div",a:{"class":"item"},f:[{p:[6,2,239],t:7,e:"h2",f:["Step 1: Select your device type"]}," ",{p:[7,2,281],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "1"}'},f:["Laptop"]}," ",{p:[8,2,370],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "2"}'},f:["LTablet"]}]}],n:50,x:{r:["data.state"],s:"_0==0"},p:[4,1,164]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.state"],s:"_0==1"},f:[{p:[11,1,492],t:7,e:"div",a:{"class":"item"},f:[{p:[12,2,512],t:7,e:"h2",f:["Step 2: Personalise your device"]}," ",{p:[13,2,554],t:7,e:"table",f:[{p:[14,3,564],t:7,e:"tr",f:[{p:[15,4,572],t:7,e:"td",f:[{p:[15,8,576],t:7,e:"b",f:["Current Price:"]}]},{p:[16,4,601],t:7,e:"td",f:[{t:2,r:"data.totalprice",p:[16,8,605]},"C"]}]}," ",{p:[18,3,636],t:7,e:"tr",f:[{p:[19,4,645],t:7,e:"td",f:[{p:[19,8,649],t:7,e:"b",f:["Battery:"]}]},{p:[20,4,668],t:7,e:"td",f:[{p:[20,8,672],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "1"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==1?"selected":null'},p:[20,73,737]}]},f:["Standard"]}]},{p:[21,4,807],t:7,e:"td",f:[{p:[21,8,811],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "2"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==2?"selected":null'},p:[21,73,876]}]},f:["Upgraded"]}]},{p:[22,4,946],t:7,e:"td",f:[{p:[22,8,950],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "3"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==3?"selected":null'},p:[22,73,1015]}]},f:["Advanced"]}]}]}," ",{p:[24,3,1092],t:7,e:"tr",f:[{p:[25,4,1100],t:7,e:"td",f:[{p:[25,8,1104],t:7,e:"b",f:["Hard Drive:"]}]},{p:[26,4,1126],t:7,e:"td",f:[{p:[26,8,1130],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "1"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==1?"selected":null'},p:[26,67,1189]}]},f:["Standard"]}]},{p:[27,4,1256],t:7,e:"td",f:[{p:[27,8,1260],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "2"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==2?"selected":null'},p:[27,67,1319]}]},f:["Upgraded"]}]},{p:[28,4,1386],t:7,e:"td",f:[{p:[28,8,1390],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "3"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==3?"selected":null'},p:[28,67,1449]}]},f:["Advanced"]}]}]}," ",{p:[30,3,1523],t:7,e:"tr",f:[{p:[31,4,1531],t:7,e:"td",f:[{p:[31,8,1535],t:7,e:"b",f:["Network Card:"]}]},{p:[32,4,1559],t:7,e:"td",f:[{p:[32,8,1563],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "0"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==0?"selected":null'},p:[32,73,1628]}]},f:["None"]}]},{p:[33,4,1694],t:7,e:"td",f:[{p:[33,8,1698],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "1"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==1?"selected":null'},p:[33,73,1763]}]},f:["Standard"]}]},{p:[34,4,1833],t:7,e:"td",f:[{p:[34,8,1837],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "2"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==2?"selected":null'},p:[34,73,1902]}]},f:["Advanced"]}]}]}," ",{p:[36,3,1979],t:7,e:"tr",f:[{p:[37,4,1987],t:7,e:"td",f:[{p:[37,8,1991],t:7,e:"b",f:["Nano Printer:"]}]},{p:[38,4,2015],t:7,e:"td",f:[{p:[38,8,2019],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "0"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==0?"selected":null'},p:[38,73,2084]}]},f:["None"]}]},{p:[39,4,2152],t:7,e:"td",f:[{p:[39,8,2156],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "1"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==1?"selected":null'},p:[39,73,2221]}]},f:["Standard"]}]}]}," ",{p:[41,3,2300],t:7,e:"tr",f:[{p:[42,4,2308],t:7,e:"td",f:[{p:[42,8,2312],t:7,e:"b",f:["Card Reader:"]}]},{p:[43,4,2335],t:7,e:"td",f:[{p:[43,8,2339],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "0"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==0?"selected":null'},p:[43,67,2398]}]},f:["None"]}]},{p:[44,4,2461],t:7,e:"td",f:[{p:[44,8,2465],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "1"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==1?"selected":null'},p:[44,67,2524]}]},f:["Standard"]}]}]}]}," ",{t:4,f:[" ",{p:[49,4,2658],t:7,e:"table",f:[{p:[50,5,2670],t:7,e:"tr",f:[{p:[51,6,2680],t:7,e:"td",f:[{p:[51,10,2684],t:7,e:"b",f:["Processor Unit:"]}]},{p:[52,6,2712],t:7,e:"td",f:[{p:[52,10,2716],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "1"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==1?"selected":null'},p:[52,67,2773]}]},f:["Standard"]}]},{p:[53,6,2841],t:7,e:"td",f:[{p:[53,10,2845],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "2"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==2?"selected":null'},p:[53,67,2902]}]},f:["Advanced"]}]}]}," ",{p:[55,5,2979],t:7,e:"tr",f:[{p:[56,6,2989],t:7,e:"td",f:[{p:[56,10,2993],t:7,e:"b",f:["Tesla Relay:"]}]},{p:[57,6,3018],t:7,e:"td",f:[{p:[57,10,3022],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "0"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==0?"selected":null'},p:[57,71,3083]}]},f:["None"]}]},{p:[58,6,3149],t:7,e:"td",f:[{p:[58,10,3153],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "1"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==1?"selected":null'},p:[58,71,3214]}]},f:["Standard"]}]}]}]}],n:50,x:{r:["data.devtype"],s:"_0!=2"},p:[48,3,2612]}," ",{p:[62,3,3313],t:7,e:"table",f:[{p:[63,4,3324],t:7,e:"tr",f:[{p:[64,5,3333],t:7,e:"td",f:[{p:[64,9,3337],t:7,e:"b",f:["Confirm Order:"]}]},{p:[65,5,3363],t:7,e:"td",f:[{p:[65,9,3367],t:7,e:"ui-button",a:{action:"confirm_order"},f:["CONFIRM"]}]}]}]}," ",{p:[69,2,3444],t:7,e:"hr"}," ",{p:[70,2,3450],t:7,e:"b",f:["Battery"]}," allows your device to operate without external utility power source. Advanced batteries increase battery life.",{p:[70,127,3575],t:7,e:"br"}," ",{p:[71,2,3581],t:7,e:"b",f:["Hard Drive"]}," stores file on your device. Advanced drives can store more files, but use more power, shortening battery life.",{p:[71,130,3709],t:7,e:"br"}," ",{p:[72,2,3715],t:7,e:"b",f:["Network Card"]}," allows your device to wirelessly connect to stationwide NTNet network. Basic cards are limited to on-station use, while advanced cards can operate anywhere near the station, which includes the asteroid outposts.",{p:[72,233,3946],t:7,e:"br"}," ",{p:[73,2,3952],t:7,e:"b",f:["Processor Unit"]}," is critical for your device's functionality. It allows you to run programs from your hard drive. Advanced CPUs use more power, but allow you to run more programs on background at once.",{p:[73,208,4158],t:7,e:"br"}," ",{p:[74,2,4164],t:7,e:"b",f:["Tesla Relay"]}," is an advanced wireless power relay that allows your device to connect to nearby area power controller to provide alternative power source. This component is currently unavailable on tablet computers due to size restrictions.",{p:[74,246,4408],t:7,e:"br"}," ",{p:[75,2,4414],t:7,e:"b",f:["Nano Printer"]}," is device that allows for various paperwork manipulations, such as, scanning of documents or printing new ones. This device was certified EcoFriendlyPlus and is capable of recycling existing paper for printing purposes.",{p:[75,241,4653],t:7,e:"br"}," ",{p:[76,2,4659],t:7,e:"b",f:["Card Reader"]}," adds a slot that allows you to manipulate RFID cards. Please note that this is not necessary to allow the device to read your identification, it is just necessary to manipulate other cards."]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&(_0==2)"},f:[" ",{p:[79,2,4903],t:7,e:"h2",f:["Step 3: Payment"]}," ",{p:[80,2,4929],t:7,e:"b",f:["Your device is now ready for fabrication.."]},{p:[80,51,4978],t:7,e:"br"}," ",{p:[81,2,4984],t:7,e:"i",f:["Please ensure the required amount of credits are in the machine, then press purchase."]},{p:[81,94,5076],t:7,e:"br"}," ",{p:[82,2,5082],t:7,e:"i",f:["Current credits: ",{p:[82,22,5102],t:7,e:"b",f:[{t:2,r:"data.credits",p:[82,25,5105]},"C"]}]},{p:[82,50,5130],t:7,e:"br"}," ",{p:[83,2,5136],t:7,e:"i",f:["Total price: ",{p:[83,18,5152],t:7,e:"b",f:[{t:2,r:"data.totalprice",p:[83,21,5155]},"C"]}]},{p:[83,49,5183],t:7,e:"br"},{p:[83,53,5187],t:7,e:"br"}," ",{p:[84,2,5193],t:7,e:"ui-button",a:{action:"purchase",state:[{t:2,x:{r:["data.credits","data.totalprice"],s:'_0>=_1?null:"disabled"'},p:[84,38,5229]}]},f:["PURCHASE"]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&((!(_0==2))&&(_0==3))"},f:[" ",{p:[87,2,5337],t:7,e:"h2",f:["Step 4: Thank you for your purchase"]},{p:[87,46,5381],t:7,e:"br"}," ",{p:[88,2,5387],t:7,e:"b",f:["Should you experience any issues with your new device, contact your local network admin for assistance."]}]}],x:{r:["data.state"],s:"_0==0"}}]},e.exports=a.extend(r.exports)},{341:341}],385:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,22],t:7,e:"ui-display",f:[{p:[3,2,37],t:7,e:"ui-section",a:{label:"Cap"},f:[{p:[4,3,65],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.is_capped"],s:'_0?"power-off":"close"'},p:[4,20,82]}],style:[{t:2,x:{r:["data.is_capped"],s:'_0?null:"selected"'},p:[4,71,133]}],action:"toggle_cap"},f:[{t:2,x:{r:["data.is_capped"],s:'_0?"On":"Off"'},p:[6,4,202]}]}]}]}],n:50,r:"data.has_cap",p:[1,1,0]},{p:[10,1,288],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,2,419],t:7,e:"ui-section",f:[{p:[15,3,435],t:7,e:"ui-button",a:{action:"select_colour"},f:["Select New Colour"]}]}],n:50,r:"data.can_change_colour",p:[13,1,386]}]}," ",{p:[19,1,540],t:7,e:"ui-display",a:{title:"Stencil"},f:[{t:4,f:[{p:[21,2,599],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[21,21,618]}]},f:[{t:4,f:[{p:[23,7,655],t:7,e:"ui-button",a:{action:"select_stencil",params:['{"item":"',{t:2,r:"item",p:[23,59,707]},'"}'],style:[{t:2,x:{r:["item","data.selected_stencil"],s:'_0==_1?"selected":null'},p:[24,12,731]}]},f:[{t:2,r:"item",p:[25,4,791]}]}],n:52,r:"items",p:[22,3,632]}]}],n:52,r:"data.drawables",p:[20,3,572]}]}," ",{p:[31,1,874],t:7,e:"ui-display",a:{title:"Text Mode"},f:[{p:[32,2,907],t:7,e:"ui-section",a:{label:"Current Buffer"},f:[{t:2,r:"data.text_buffer",p:[32,37,942]}]}," ",{p:[34,2,981],t:7,e:"ui-section",f:[{p:[34,14,993],t:7,e:"ui-button",a:{action:"enter_text"},f:["New Text"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],386:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{isHead:function(t){return t%10==0},dept_class:function(t){return 0==t?"dept-cap":t>=10&&20>t?"dept-sec":t>=20&&30>t?"dept-med":t>=30&&40>t?"dept-sci":t>=40&&50>t?"dept-eng":t>=50&&60>t?"dept-cargo":t>=200&&230>t?"dept-cent":"dept-other"},health_state:function(t,e,n,a){var r=t+e+n+a;return 0>=r?"health-5":25>=r?"health-4":50>=r?"health-3":75>=r?"health-2":"health-0"}}}}(r),r.exports.css=" .health {\n width: 16px;\n height: 16px;\n background-color: #FFF;\n border: 1px solid #434343;\n position: relative;\n top: 2px;\n display: inline-block;\n }\n .health-5 { background-color: #17d568; }\n .health-4 { background-color: #2ecc71; }\n .health-3 { background-color: #e67e22; }\n .health-2 { background-color: #ed5100; }\n .health-1 { background-color: #e74c3c; }\n .health-0 { background-color: #ed2814; }\n\n .dept-cap {color : #C06616;}\n .dept-sec {color : #E74C3C;}\n .dept-med {color : #3498DB;}\n .dept-sci {color : #9B59B6;}\n .dept-eng {color : #F1C40F;}\n .dept-cargo {color : #F39C12;}\n .dept-cent {color : #00C100;}\n .dept-other {color: #C38312;}\n\n .oxy { color : #3498db; }\n .toxin { color : #2ecc71; }\n .burn { color : #e67e22; }\n .brute { color : #e74c3c; }\n\n table.crew{\n border-collapse: collapse;\n }\n\n table.crew td {\n padding : 0px 10px;\n }",r.exports.template={v:3,t:[" ",{p:[27,1,1004],t:7,e:"ui-display",f:[{p:[28,2,1018],t:7,e:"ui-section",f:[{p:[29,3,1033],t:7,e:"table",a:{"class":"crew"},f:[{p:[30,3,1056],t:7,e:"thead",f:[{p:[31,3,1066],t:7,e:"tr",f:[{p:[32,4,1074],t:7,e:"th",f:["Name"]}," ",{p:[33,4,1091],t:7,e:"th",f:["Status"]}," ",{p:[34,4,1110],t:7,e:"th",f:["Vitals"]}," ",{p:[35,4,1129],t:7,e:"th",f:["Position"]}," ",{t:4,f:[{p:[37,5,1180],t:7,e:"th",f:["Tracking"]}],n:50,r:"data.link_allowed",p:[36,4,1150]}]}]}," ",{p:[41,3,1230],t:7,e:"tbody",f:[{t:4,f:[{p:[43,4,1266],t:7,e:"tr",f:[{p:[44,5,1275],t:7,e:"td",f:[{p:[45,6,1285],t:7,e:"span",a:{"class":[{t:2,x:{r:["isHead","ijob"],s:'_0(_1)?"bold ":""'},p:[45,19,1298]},{t:2,x:{r:["dept_class","ijob"],s:"_0(_1)"},p:[45,49,1328]}]},f:[{t:2,r:"name",p:[46,7,1357]}," (",{t:2,r:"assignment",p:[46,17,1367]},") ",{p:[47,6,1388],t:7,e:"span",f:[]}]}]}," ",{p:[49,5,1409],t:7,e:"td",f:[{t:4,f:[{p:[51,7,1448],t:7,e:"span",a:{"class":["health ",{t:2,x:{r:["health_state","oxydam","toxdam","burndam","brutedam"],s:"_0(_1,_2,_3,_4)"},p:[51,27,1468]}]}}],n:50,x:{r:["oxydam"],s:"_0!=null"},p:[50,6,1419]},{t:4,n:51,f:[{t:4,f:[{p:[54,8,1573],t:7,e:"span",a:{"class":"health health-5"}}],n:50,r:"life_status",p:[53,7,1546]},{t:4,n:51,f:[{p:[56,8,1633],t:7,e:"span",a:{"class":"health health-0"}}],r:"life_status"}],x:{r:["oxydam"],s:"_0!=null"}}]}," ",{p:[60,5,1712],t:7,e:"td",f:[{t:4,f:[{p:[62,7,1751],t:7,e:"span",f:["( ",{p:[64,8,1773],t:7,e:"span",a:{"class":"oxy"},f:[{t:2,r:"oxydam",p:[64,26,1791]}]}," / ",{p:[66,8,1825],t:7,e:"span",a:{"class":"toxin"},f:[{t:2,r:"toxdam",p:[66,28,1845]}]}," / ",{p:[68,8,1879],t:7,e:"span",a:{"class":"burn"},f:[{t:2,r:"burndam",p:[68,27,1898]}]}," / ",{p:[70,8,1933],t:7,e:"span",a:{"class":"brute"},f:[{t:2,r:"brutedam",p:[70,28,1953]}]}," )"]}],n:50,x:{r:["oxydam"],s:"_0!=null"},p:[61,6,1722]},{t:4,n:51,f:[{t:4,f:[{p:[75,8,2042],t:7,e:"span",f:["Alive"]}],n:50,r:"life_status",p:[74,7,2015]},{t:4,n:51,f:[{p:[77,8,2083],t:7,e:"span",f:["Dead"]}],r:"life_status"}],x:{r:["oxydam"],s:"_0!=null"}}]}," ",{p:[81,5,2142],t:7,e:"td",f:[{t:4,f:[{p:[83,6,2178],t:7,e:"span",f:[{t:2,r:"area",p:[83,12,2184]}]}],n:50,x:{r:["pos_x"],s:"_0!=null"},p:[82,5,2151]},{t:4,n:51,f:[{p:[85,6,2218],t:7,e:"span",f:["N/A"]}],x:{r:["pos_x"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[89,6,2293],t:7,e:"td",f:[{p:[90,7,2304],t:7,e:"ui-button",a:{action:"select_person",state:[{t:2,x:{r:["can_track"],s:'_0?null:"disabled"'},p:[90,48,2345]}],params:['{"name":"',{t:2,r:"name",p:[90,100,2397]},'"}']},f:["Track"]}]}],n:50,r:"data.link_allowed",p:[88,5,2261]}]}],n:52,r:"data.sensors",p:[42,3,1240]}]}]}]}]}," "]},e.exports=a.extend(r.exports)},{341:341}],387:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,32],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,64],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,70]}]}]}," ",{t:4,f:[{p:[6,5,184],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,217],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,230]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,259]}]}]}," ",{p:[9,4,309],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[10,6,347],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.temperaturestatus",p:[10,19,360]}]},f:[{t:2,r:"data.occupant.bodyTemperature",p:[10,56,397]}," K"]}]}," ",{p:[12,5,461],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[13,7,495],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[13,20,508]}],max:[{t:2,r:"data.occupant.maxHealth",p:[13,54,542]}],value:[{t:2,r:"data.occupant.health",p:[13,90,578]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[14,16,619]}]},f:[{t:2,r:"data.occupant.health",p:[14,68,671]}]}]}," ",{t:4,f:[{p:[17,7,892],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[17,26,911]}]},f:[{p:[18,9,931],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[18,30,952]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,66,988]}],state:"bad"},f:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,103,1025]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[16,5,727]}],n:50,r:"data.hasOccupant",p:[5,3,155]}]}," ",{p:[23,1,1116],t:7,e:"ui-display",a:{title:"Cell"},f:[{p:[24,3,1144],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[25,5,1175],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[25,22,1192]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[26,14,1251]}],state:[{t:2,x:{r:["data.isOpen"],s:'_0?"disabled":null'},p:[27,14,1306]}],action:"power"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[28,22,1364]}]}]}," ",{p:[30,3,1430],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[31,3,1465],t:7,e:"span",a:{"class":[{t:2,r:"data.temperaturestatus",p:[31,16,1478]}]},f:[{t:2,r:"data.cellTemperature",p:[31,44,1506]}," K"]}]}," ",{p:[33,2,1556],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[34,5,1586],t:7,
+e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOpen"],s:'_0?"unlock":"lock"'},p:[34,22,1603]}],action:"door"},f:[{t:2,x:{r:["data.isOpen"],s:'_0?"Open":"Closed"'},p:[34,73,1654]}]}," ",{p:[35,5,1706],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoEject"],s:'_0?"sign-out":"sign-in"'},p:[35,22,1723]}],action:"autoeject"},f:[{t:2,x:{r:["data.autoEject"],s:'_0?"Auto":"Manual"'},p:[35,86,1787]}]}]}]}," ",{p:{button:[{p:[40,5,1928],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[40,36,1959]}],action:"ejectbeaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[42,3,2060],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[45,9,2167],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,r:"volume",p:[45,52,2210]}," units of ",{t:2,r:"name",p:[45,72,2230]}]},{p:[45,87,2245],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[44,7,2128]},{t:4,n:51,f:[{p:[47,9,2274],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[43,5,2094]},{t:4,n:51,f:[{p:[50,7,2347],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],388:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,14],t:7,e:"ui-section",a:{label:"State"},f:[{t:4,f:[{p:[4,4,73],t:7,e:"span",a:{"class":"good"},f:["Ready"]}],n:50,r:"data.full_pressure",p:[3,3,43]},{t:4,n:51,f:[{t:4,f:[{p:[7,5,147],t:7,e:"span",a:{"class":"bad"},f:["Power Disabled"]}],n:50,r:"data.panel_open",p:[6,4,119]},{t:4,n:51,f:[{t:4,f:[{p:[10,6,239],t:7,e:"span",a:{"class":"average"},f:["Pressurizing"]}],n:50,r:"data.pressure_charging",p:[9,5,203]},{t:4,n:51,f:[{p:[12,6,299],t:7,e:"span",a:{"class":"bad"},f:["Off"]}],r:"data.pressure_charging"}],r:"data.panel_open"}],r:"data.full_pressure"}]}," ",{p:[17,2,377],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[18,3,409],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.per",p:[18,36,442]}],state:"good"},f:[{t:2,r:"data.per",p:[18,63,469]},"%"]}]}," ",{p:[20,5,511],t:7,e:"ui-section",a:{label:"Handle"},f:[{p:[21,9,547],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.flush"],s:'_0?"toggle-on":"toggle-off"'},p:[22,10,568]}],state:[{t:2,x:{r:["data.isai","data.panel_open"],s:'_0||_1?"disabled":null'},p:[23,11,625]}],action:[{t:2,x:{r:["data.flush"],s:'_0?"handle-0":"handle-1"'},p:[24,12,691]}]},f:[{t:2,x:{r:["data.flush"],s:'_0?"Disengage":"Engage"'},p:[25,5,739]}]}]}," ",{p:[27,2,811],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[28,3,840],t:7,e:"ui-button",a:{icon:"sign-out",state:[{t:2,x:{r:["data.isai"],s:'_0?"disabled":null'},p:[28,37,874]}],action:"eject"},f:["Eject Contents"]},{p:[28,114,951],t:7,e:"br"}]}," ",{p:[30,2,973],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,3,1002],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["data.panel_open"],s:'_0?"disabled":null'},p:[31,38,1037]}],action:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"pump-0":"pump-1"'},p:[31,87,1086]}],style:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"selected":null'},p:[31,145,1144]}]}},{p:[31,206,1205],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],389:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"DNA Vault Database"},f:[{p:[2,3,42],t:7,e:"ui-section",a:{label:"Human DNA"},f:[{p:[3,7,79],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.dna_max",p:[3,28,100]}],value:[{t:2,r:"data.dna",p:[3,53,125]}]},f:[{t:2,r:"data.dna",p:[3,67,139]},"/",{t:2,r:"data.dna_max",p:[3,80,152]}," Samples"]}]}," ",{p:[5,3,204],t:7,e:"ui-section",a:{label:"Plant Data"},f:[{p:[6,5,240],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.plants_max",p:[6,26,261]}],value:[{t:2,r:"data.plants",p:[6,54,289]}]},f:[{t:2,r:"data.plants",p:[6,71,306]},"/",{t:2,r:"data.plants_max",p:[6,87,322]}," Samples"]}]}," ",{p:[8,3,377],t:7,e:"ui-section",a:{label:"Animal Data"},f:[{p:[9,5,414],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.animals_max",p:[9,26,435]}],value:[{t:2,r:"data.animals",p:[9,55,464]}]},f:[{t:2,r:"data.animals",p:[9,73,482]},"/",{t:2,r:"data.animals_max",p:[9,90,499]}," Samples"]}]}]}," ",{t:4,f:[{p:[13,1,604],t:7,e:"ui-display",a:{title:"Personal Gene Therapy"},f:[{p:[14,3,650],t:7,e:"ui-section",f:[{p:[15,2,664],t:7,e:"span",f:["Applicable gene therapy treatments:"]}]}," ",{p:[17,3,731],t:7,e:"ui-section",f:[{p:[18,2,745],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceA",p:[18,47,790]},'"}']},f:[{t:2,r:"data.choiceA",p:[18,67,810]}]}," ",{p:[19,2,840],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceB",p:[19,47,885]},'"}']},f:[{t:2,r:"data.choiceB",p:[19,67,905]}]}]}]}],n:50,x:{r:["data.completed","data.used"],s:"_0&&!_1"},p:[12,1,567]}]},e.exports=a.extend(r.exports)},{341:341}],390:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,32],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,64],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,70]}]}]}," ",{t:4,f:[{p:[6,5,178],t:7,e:"ui-section",a:{label:"Items in storage"},f:[{p:[7,4,219],t:7,e:"span",f:[{t:2,r:"data.items",p:[7,10,225]}]}]}],n:50,r:"data.items",p:[5,3,155]}," ",{t:4,f:[{p:[11,5,300],t:7,e:"ui-section",a:{label:"State"},f:[{p:[12,7,333],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[12,20,346]}]},f:[{t:2,r:"data.occupant.stat",p:[12,49,375]}]}]}," ",{p:[14,5,426],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[15,7,460],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[15,20,473]}],max:[{t:2,r:"data.occupant.maxHealth",p:[15,54,507]}],value:[{t:2,r:"data.occupant.health",p:[15,90,543]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[16,16,584]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[16,68,636]}]}]}," ",{t:4,f:[{p:[19,7,870],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[19,26,889]}]},f:[{p:[20,9,909],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[20,30,930]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[20,66,966]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[20,103,1003]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[18,5,705]}," ",{p:[23,5,1087],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[24,9,1122],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[24,22,1135]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[24,68,1181]}]}]}," ",{p:[26,5,1262],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[27,9,1297],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[27,22,1310]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[27,68,1356]}]}]}," ",{p:[29,5,1438],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[31,11,1523],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[31,54,1566]}," units of ",{t:2,r:"name",p:[31,89,1601]}]},{p:[31,104,1616],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[30,9,1479]},{t:4,n:51,f:[{p:[33,11,1649],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[10,3,274]}]}," ",{p:[38,1,1740],t:7,e:"ui-display",a:{title:"Operations"},f:[{p:[39,3,1774],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[41,7,1832],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied"],s:'_0?null:"disabled"'},p:[41,38,1863]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[41,111,1936]},'"}']},f:[{t:2,r:"name",p:[41,121,1946]}]},{p:[41,141,1966],t:7,e:"br"}],n:52,r:"data.chem",p:[40,5,1806]}]}," ",{p:[44,2,2003],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[45,6,2035],t:7,e:"ui-button",a:{icon:"sign-out",action:"eject"},f:["Eject Contents"]}]}," ",{p:[47,2,2120],t:7,e:"ui-section",a:{label:"Self Cleaning"},f:[{p:[48,3,2157],t:7,e:"ui-button",a:{icon:"recycle",action:"cleaning"},f:["Self-Clean Cycle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],391:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-display",a:{title:[{t:2,r:"data.question",p:[2,21,41]}]},f:[{p:[3,5,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,9,114],t:7,e:"ui-button",a:{action:"vote",params:['{"answer": "',{t:2,r:"answer",p:[6,45,169]},'"}'],style:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[7,18,200]}]},f:[{t:2,r:"answer",p:[7,53,235]}," (",{t:2,r:"amount",p:[7,65,247]},")"]}],n:52,r:"data.answers",p:[4,7,83]}]}]}],n:50,r:"data.shaking",p:[1,1,0]},{t:4,n:51,f:[{p:[13,3,341],t:7,e:"ui-notice",f:["The eightball is not currently being shaken."]}],r:"data.shaking"}]},e.exports=a.extend(r.exports)},{341:341}],392:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,16],t:7,e:"span",f:["Time Until Launch: ",{t:2,r:"data.timer_str",p:[2,30,41]}]}]}," ",{p:[4,1,80],t:7,e:"ui-notice",f:[{p:[5,3,94],t:7,e:"span",f:["Engines: ",{t:2,x:{r:["data.engines_started"],s:'_0?"Online":"Idle"'},p:[5,18,109]}]}]}," ",{p:[7,1,174],t:7,e:"ui-display",a:{title:"Early Launch"},f:[{p:[8,2,209],t:7,e:"span",f:["Authorizations Remaining: ",{t:2,x:{r:["data.emagged","data.authorizations_remaining"],s:'_0?"ERROR":_1'},p:[9,2,242]}]}," ",{p:[10,2,309],t:7,e:"ui-button",a:{icon:"exclamation-triangle",action:"authorize",style:"danger",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[12,10,393]}]},f:["AUTHORIZE"]}," ",{p:[15,2,459],t:7,e:"ui-button",a:{icon:"minus",action:"repeal",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[16,10,508]}]},f:["Repeal"]}," ",{p:[19,2,571],t:7,e:"ui-button",a:{icon:"close",action:"abort",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[20,10,619]}]},f:["Repeal All"]}]}," ",{p:[24,1,699],t:7,e:"ui-display",a:{title:"Authorizations"},f:[{t:4,f:[{p:[26,3,768],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{t:2,r:"name",p:[26,34,799]}," (",{t:2,r:"job",p:[26,44,809]},")"]}],n:52,r:"data.authorizations",p:[25,2,736]},{t:4,n:51,f:[{p:[28,3,843],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:["No authorizations."]}],r:"data.authorizations"}]}]},e.exports=a.extend(r.exports)},{341:341}],393:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.hidden_message",p:[3,5,48]}]}," ",{p:[5,3,90],t:7,e:"ui-section",a:{label:"Created On"},f:[{t:2,r:"data.realdate",p:[6,5,126]}]}," ",{p:[8,3,162],t:7,e:"ui-section",a:{label:"Approval"},f:[{p:[9,5,196],t:7,e:"ui-button",a:{icon:"arrow-up",state:[{t:2,x:{r:["data.is_creator","data.has_liked"],s:'_0?"disabled":_1?"selected":null'},p:[11,14,242]}],action:"like"},f:[{t:2,r:"data.num_likes",p:[12,21,333]}]}," ",{p:[13,5,368],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.is_creator","data.has_liked","data.has_disliked"],s:'_0?"disabled":!_1&&!_2?"selected":null'},p:[15,14,412]}],action:"neutral"}}," ",{p:[17,5,546],t:7,e:"ui-button",a:{icon:"arrow-down",state:[{t:2,x:{r:["data.is_creator","data.has_disliked"],s:'_0?"disabled":_1?"selected":null'},p:[19,14,594]}],action:"dislike"},f:[{t:2,r:"data.num_dislikes",p:[20,24,691]}]}]}]}," ",{t:4,f:[{p:[24,3,782],t:7,e:"ui-display",a:{title:"Admin Panel"},f:[{p:[25,5,819],t:7,e:"ui-section",a:{label:"Creator Ckey"},f:[{t:2,r:"data.creator_key",p:[25,38,852]}]}," ",{p:[26,5,890],t:7,e:"ui-section",a:{label:"Creator Character Name"},f:[{t:2,r:"data.creator_name",p:[26,48,933]}]}," ",{p:[27,5,972],t:7,e:"ui-button",a:{icon:"remove",action:"delete",style:"danger"},f:["Delete"]}]}],n:50,r:"data.admin_mode",p:[23,1,756]}]},e.exports=a.extend(r.exports)},{341:341}],394:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The requested interface (",{t:2,r:"config.interface",p:[2,34,45]},") was not found. Does it exist?"]}]}]},e.exports=a.extend(r.exports)},{341:341}],395:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,19],t:7,e:"ui-notice",f:["Currently syncing with the database"]}],n:50,r:"data.sync",p:[1,1,0]},{t:4,n:51,f:[{p:{button:[{p:[8,4,156],t:7,e:"ui-button",a:{icon:"eject",action:"eject_all"},f:["Eject all"]}," ",{p:[9,4,224],t:7,e:"ui-button",a:{icon:["toggle-",{t:2,x:{r:["data.show_materials"],s:'_0?"off":"on"'},p:[9,28,248]}],action:"toggle_materials_visibility"},f:[{t:2,x:{r:["data.show_materials"],s:'_0?"Hide":"Show"'},p:[10,5,330]}]}]},t:7,e:"ui-display",a:{title:"Materials",button:0},f:[" ",{t:4,f:[{p:[14,4,436],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[15,5,470],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[16,6,505],t:7,e:"section",a:{"class":"cell"}}," ",{p:[17,6,543],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[20,6,601],t:7,e:"section",a:{"class":"cell"},f:["Amount"]}," ",{p:[23,6,658],t:7,e:"section",a:{"class":"cell"}}," ",{p:[24,6,696],t:7,e:"section",a:{"class":"cell"}}]}," ",{t:4,f:[{p:[27,6,782],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[28,7,818],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[29,8,848]}]}," ",{p:[31,7,880],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"amount",p:[32,8,910]}]}," ",{p:[34,7,944],t:7,e:"section",a:{"class":"cell"},f:[{p:[35,8,974],t:7,e:"ui-button",a:{icon:"eject"},f:["Release amount"]}]}," ",{p:[37,7,1048],t:7,e:"section",a:{"class":"cell",style:"width: 40px;"},f:[{p:[38,8,1099],t:7,e:"ui-button",a:{icon:"eject"},f:["Release all"]}]}]}],n:52,r:"data.all_materials",p:[26,5,748]}]}],n:50,r:"data.show_materials",p:[13,3,405]}]}," ",{p:[45,2,1230],t:7,e:"ui-display",a:{title:"Categories"},f:[{t:4,f:[{p:[47,4,1288],t:7,e:"ui-button",f:[{t:2,r:".",p:[47,15,1299]}]}],r:"data.categories",p:[46,3,1264]}]}],r:"data.sync"}]},e.exports=a.extend(r.exports)},{341:341}],396:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,5,47],t:7,e:"ui-button",a:{action:"toggle_power",style:[{t:2,x:{r:["data.toggle"],s:'_0?"selected":null'},p:[5,18,107]}]},f:["Turn ",{t:2,x:{r:["data.toggle"],s:'_0?"off":"on"'},p:[6,16,161]}]}]}," ",{p:[9,3,227],t:7,e:"ui-display",a:{title:"Logging"},f:[{t:4,f:[{p:[11,3,282],t:7,e:"ui-section",a:{label:">"},f:[{t:2,r:".",p:[11,25,304]},{p:[11,30,309],t:7,e:"ui-section",f:[]}]}],n:52,r:"data.logs",p:[10,5,260]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],397:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{seclevelState:function(){switch(this.get("data.seclevel")){case"blue":return"average";case"red":return"bad";case"delta":return"bad bold";default:return"good"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[16,1,308],t:7,e:"ui-display",f:[{p:[17,5,325],t:7,e:"ui-section",a:{label:"Alert Level"},f:[{p:[18,9,366],t:7,e:"span",a:{"class":[{t:2,r:"seclevelState",p:[18,22,379]}]},f:[{t:2,x:{r:["text","data.seclevel"],s:"_0.titleCase(_1)"},p:[18,41,398]}]}]}," ",{p:[20,5,461],t:7,e:"ui-section",a:{label:"Controls"},f:[{p:[21,9,499],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.alarm"],s:'_0?"close":"bell-o"'},p:[21,26,516]}],action:[{t:2,x:{r:["data.alarm"],s:'_0?"reset":"alarm"'},p:[21,71,561]}]},f:[{t:2,x:{r:["data.alarm"],s:'_0?"Reset":"Activate"'},p:[22,13,610]}]}]}," ",{t:4,f:[{p:[25,7,709],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[26,9,746],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[24,5,682]}]}]},e.exports=a.extend(r.exports)},{341:341}],398:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[2,1,30],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,2,58],t:7,e:"ui-button",a:{icon:"power-off",style:[{t:2,x:{r:["data.power"],s:'_0?"selected":"danger"'},p:[3,37,93]}],action:"power"},f:[{t:2,x:{r:["data.power"],s:'_0?"Enabled":"Disabled"'},p:[3,92,148]}]}]}," ",{p:[5,1,214],t:7,e:"ui-section",a:{label:"Tag"},f:[{p:[6,2,240],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:[{t:2,r:"data.tag",p:[6,43,281]}]}]}," ",{p:[8,1,320],t:7,e:"ui-section",a:{label:"Scanning mode"},f:[{p:[9,2,356],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.updating"],s:'_0?"unlock":"lock"'},p:[9,18,372]}],style:[{t:2,x:{r:["data.updating"],s:'_0?null:"danger"'},p:[9,63,417]}],action:"updating",tooltip:"Toggle between automatic scanning or scan only when a button is pressed.","tooltip-side":"right"},f:[{t:2,x:{r:["data.updating"],s:'_0?"AUTO":"MANUAL"'},p:[9,221,575]}]}]}," ",{p:[11,1,639],t:7,e:"ui-section",a:{label:"Detection range"},f:[{p:[12,2,677],t:7,e:"ui-button",a:{icon:"refresh",style:[{t:2,x:{r:["data.globalmode"],s:'_0?null:"selected"'},p:[12,35,710]}],action:"globalmode",tooltip:"Local sector or whole region scanning.","tooltip-side":"right"},f:[{t:2,x:{r:["data.globalmode"],s:'_0?"MAXIMUM":"LOCAL"'},p:[12,165,840]}]}]}]}," ",{t:4,f:[{p:[16,2,942],t:7,e:"ui-display",a:{title:"Current Location"},f:[{p:[17,3,982],t:7,e:"span",f:[{t:2,r:"data.current",p:[17,9,988]}]}]}," ",{p:[20,2,1029],t:7,e:"ui-display",a:{title:"Detected Signals"},f:[{t:4,f:[{p:[22,3,1093],t:7,e:"ui-section",a:{label:[{t:2,r:"entrytag",p:[22,21,1111]}]},f:[{p:[23,3,1127],t:7,e:"span",f:[{t:2,r:"area",p:[23,9,1133]}," (",{t:2,r:"coord",p:[23,19,1143]},")"]}," ",{t:4,f:[{p:[25,4,1185],t:7,e:"span",f:["Dist: ",{t:2,r:"dist",p:[25,16,1197]},"m Dir: ",{t:2,r:"degrees",p:[25,31,1212]},"° (",{t:2,r:"direction",p:[25,45,1226]},")"]}],n:50,r:"direction",p:[24,3,1164]}]}],n:52,r:"data.signals",p:[21,2,1068]}]}],n:50,r:"data.power",p:[15,1,922]}]},e.exports=a.extend(r.exports)},{341:341}],399:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Labor Camp Teleporter"},f:[{p:[2,2,44],t:7,e:"ui-section",a:{label:"Teleporter Status"},f:[{p:[3,3,85],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.teleporter"],s:'_0?"good":"bad"'},p:[3,16,98]}]},f:[{t:2,x:{r:["data.teleporter"],s:'_0?"Connected":"Not connected"'},p:[3,54,136]}]}]}," ",{t:4,f:[{p:[6,4,239],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[7,5,273],t:7,e:"span",f:[{t:2,r:"data.teleporter_location",p:[7,11,279]}]}]}," ",{p:[9,4,335],t:7,e:"ui-section",a:{label:"Locked status"},f:[{p:[10,5,374],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"lock":"unlock"'},p:[10,22,391]}],action:"teleporter_lock"},f:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"Locked":"Unlocked"'},p:[10,93,462]}]}," ",{p:[11,5,527],t:7,e:"ui-button",a:{action:"toggle_open"},f:[{t:2,x:{r:["data.teleporter_state_open"],s:'_0?"Open":"Closed"'},p:[11,37,559]}]}]}],n:50,r:"data.teleporter",p:[5,3,212]},{t:4,n:51,f:[{p:[14,4,653],t:7,e:"span",f:[{p:[14,10,659],t:7,e:"ui-button",a:{action:"scan_teleporter"},f:["Scan Teleporter"]}]}],r:"data.teleporter"}]}," ",{p:[17,1,754],t:7,e:"ui-display",a:{title:"Labor Camp Beacon"},f:[{p:[18,2,794],t:7,e:"ui-section",a:{label:"Beacon Status"},f:[{p:[19,3,831],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.beacon"],s:'_0?"good":"bad"'},p:[19,16,844]}]},f:[{t:2,x:{r:["data.beacon"],s:'_0?"Connected":"Not connected"'},p:[19,50,878]}]}]}," ",{t:4,f:[{p:[22,3,971],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[23,4,1004],t:7,e:"span",f:[{t:2,r:"data.beacon_location",p:[23,10,1010]}]}]}],n:50,r:"data.beacon",p:[21,2,949]},{t:4,n:51,f:[{p:[26,4,1072],t:7,e:"span",f:[{p:[26,10,1078],t:7,e:"ui-button",a:{action:"scan_beacon"},f:["Scan Beacon"]}]}],r:"data.beacon"}]}," ",{p:[29,1,1165],t:7,e:"ui-display",a:{title:"Prisoner details"},f:[{p:[30,2,1204],t:7,e:"ui-section",a:{label:"Prisoner ID"},f:[{p:[31,3,1239],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[31,33,1269]}]}]}," ",{t:4,f:[{p:[34,2,1359],t:7,e:"ui-section",a:{label:"Set ID goal"},f:[{p:[35,4,1395],t:7,e:"ui-button",a:{action:"set_goal"},f:[{t:2,r:"data.goal",p:[35,33,1424]}]}]}],n:50,r:"data.id",p:[33,2,1342]}," ",{p:[38,2,1475],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[39,3,1507],t:7,e:"span",f:[{t:2,x:{r:["data.prisoner.name"],s:'_0?_0:"No Occupant"'},p:[39,9,1513]}]}]}," ",{t:4,f:[{p:[42,3,1620],t:7,e:"ui-section",a:{label:"Criminal Status"},f:[{p:[43,4,1660],t:7,e:"span",f:[{t:2,r:"data.prisoner.crimstat",p:[43,10,1666]}]}]}],n:50,r:"data.prisoner",p:[41,2,1596]}]}," ",{p:[47,1,1739],t:7,e:"ui-display",f:[{p:[48,2,1753],t:7,e:"center",f:[{p:[48,10,1761],t:7,e:"ui-button",a:{action:"teleport",state:[{t:2,x:{r:["data.can_teleport"],s:'_0?null:"disabled"'},p:[48,45,1796]}]},f:["Process Prisoner"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],400:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Stored Items"},f:[{t:4,f:[{p:[3,3,59],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,22,78]}]},f:[{p:[4,4,93],t:7,e:"ui-button",a:{action:"release_items",params:['{"mobref":',{t:2,r:"mob",p:[4,56,145]},"}"],state:[{t:2,x:{r:["data.can_reclaim"],s:'_0?null:"disabled"'},p:[4,72,161]}]},f:["Drop Items"]}]}],n:52,r:"data.mobs",p:[2,2,36]}]}]},e.exports=a.extend(r.exports)},{341:341}],401:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,68],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.emagged"],s:'_0?"un":null'},p:[3,20,85]},"lock"],state:[{t:2,x:{r:["data.can_toggle_safety"],s:'_0?null:"disabled"'},p:[3,63,128]}],action:"safety"},f:["Safeties: ",{p:[4,14,206],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.emagged"],s:'_0?"bad":"good"'},p:[4,27,219]}]},f:[{t:2,x:{r:["data.emagged"],s:'_0?"OFF":"ON"'},p:[4,62,254]}]}]}]},t:7,e:"ui-display",a:{title:"Default Programs",button:0},f:[" ",{t:4,f:[{p:[8,2,356],t:7,e:"ui-button",a:{action:"load_program",params:['{"type": ',{t:2,r:"type",p:[8,52,406]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[8,70,424]}]},f:[{t:2,r:"name",p:[9,5,475]}," "]},{p:[10,14,497],t:7,e:"br"}],n:52,r:"data.default_programs",p:[7,2,323]}]}," ",{t:4,f:[{p:[14,2,549],t:7,e:"ui-display",a:{title:"Dangerous Programs"},f:[{t:4,f:[{p:[16,4,623],t:7,e:"ui-button",a:{icon:"warning",action:"load_program",params:['{"type": ',{t:2,r:"type",p:[16,69,688]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[16,87,706]}]},f:[{t:2,r:"name",p:[17,5,757]}," "]},{p:[18,16,781],t:7,e:"br"}],n:52,r:"data.emag_programs",p:[15,3,591]}]}],n:50,r:"data.emagged",p:[13,1,527]}]},e.exports=a.extend(r.exports)},{341:341}],402:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[15,1,266],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[16,3,298],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[17,3,330],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[17,9,336]}]}]}," ",{t:4,f:[{p:[20,5,447],t:7,e:"ui-section",a:{label:"State"},f:[{p:[21,7,480],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[21,20,493]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[21,43,516]}]}]}],n:50,r:"data.occupied",p:[19,3,421]}]}," ",{p:[25,1,656],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[26,2,687],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[27,5,717],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[27,22,734]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[27,71,783]}]}]}," ",{p:[29,3,846],t:7,e:"ui-section",a:{label:"Uses"},f:[{t:2,r:"data.ready_implants",p:[30,5,876]}," ",{t:4,f:[{p:[32,7,938],t:7,e:"span",a:{"class":"fa fa-cog fa-spin"}}],n:50,r:"data.replenishing",p:[31,5,906]}]}," ",{p:[35,3,1002],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[36,7,1038],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","data.ready_implants","data.ready"],s:'_0&&_1>0&&_2?null:"disabled"'},p:[36,25,1056]}],action:"implant"},f:[{t:2,x:{r:["data.ready","data.special_name"],s:'_0?(_1?_1:"Implant"):"Recharging"'},p:[37,9,1162]}," "]},{p:[38,19,1265],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],403:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[15,3,282],t:7,e:"ui-notice",f:[{p:[16,5,298],t:7,e:"span",f:["Wipe in progress!"]}]}],n:50,r:"data.wiping",p:[14,1,260]},{p:{button:[{t:4,f:[{p:[22,7,458],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.isDead"],s:'_0?"disabled":null'},p:[22,38,489]}],action:"wipe"},f:[{t:2,x:{r:["data.wiping"],s:'_0?"Stop Wiping":"Wipe"'},p:[22,89,540]}," AI"]}],n:50,r:"data.name",p:[21,5,434]}]},t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.name"],s:'_0||"Empty Card"'},p:[19,19,370]}],button:0},f:[" ",{t:4,f:[{p:[26,5,647],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[27,9,683],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"bad":"good"'},p:[27,22,696]}]},f:[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"Offline":"Operational"'},p:[27,76,750]}]}]}," ",{p:[29,5,843],t:7,e:"ui-section",a:{label:"Software Integrity"},f:[{p:[30,7,889],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[30,40,922]}],state:[{t:2,r:"healthState",p:[30,64,946]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[30,81,963]},"%"]}]}," ",{p:[32,5,1024],t:7,e:"ui-section",a:{label:"Laws"},f:[{t:4,f:[{p:[34,9,1084],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[34,33,1108]}]},{p:[34,45,1120],t:7,e:"br"}],n:52,r:"data.laws",p:[33,7,1056]}]}," ",{p:[37,5,1164],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[38,7,1200],t:7,e:"ui-button",a:{icon:"signal",style:[{t:2,x:{r:["data.wireless"],s:'_0?"selected":null'},p:[38,39,1232]}],action:"wireless"},f:["Wireless Activity"]}," ",{p:[39,7,1325],t:7,e:"ui-button",a:{icon:"microphone",style:[{t:2,x:{r:["data.radio"],s:'_0?"selected":null'},p:[39,43,1361]}],action:"radio"},f:["Subspace Radio"]}]}],n:50,r:"data.name",p:[25,3,625]}]}]},e.exports=a.extend(r.exports)},{341:341}],404:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,22],t:7,e:"ui-notice",f:[{p:[3,3,36],t:7,e:"span",f:["Waiting for another device to confirm your request..."]}]}],n:50,r:"data.waiting",p:[1,1,0]},{t:4,n:51,f:[{p:[6,2,127],t:7,e:"ui-display",f:[{p:[7,3,142],t:7,e:"ui-section",f:[{t:4,f:[{p:[9,5,189],t:7,e:"ui-button",a:{icon:"check",action:"auth_swipe"},f:["Authorize ",{t:2,r:"data.auth_required",p:[9,59,243]}]}],n:50,r:"data.auth_required",p:[8,4,158]},{t:4,n:51,f:[{p:[11,5,294],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.red_alert"],s:'_0?"disabled":null'},p:[11,38,327]}],action:"red_alert"},f:["Red Alert"]}," ",{p:[12,5,412],t:7,e:"ui-button",a:{icon:"wrench",state:[{t:2,x:{r:["data.emergency_maint"],s:'_0?"disabled":null'},p:[12,37,444]}],action:"emergency_maint"},f:["Emergency Maintenance Access"]}," ",{p:[13,5,560],t:7,e:"ui-button",a:{icon:"warning",state:"null",action:"bsa_unlock"},f:["Bluespace Artillery Unlock"]}],r:"data.auth_required"}]}]}],r:"data.waiting"}]},e.exports=a.extend(r.exports)},{341:341}],405:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ore values"},f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-section",a:{label:[{t:2,r:"ore",p:[3,22,76]}]},f:[{p:[4,4,90],t:7,e:"span",f:[{t:2,r:"value",p:[4,10,96]}]}]}],n:52,r:"data.ores",p:[2,2,34]}]}," ",{p:[8,1,158],t:7,e:"ui-display",a:{title:"Points"},f:[{p:[9,2,188],t:7,e:"ui-section",a:{label:"Unclaimed points"},f:[{p:[10,3,229],t:7,e:"span",f:[{t:2,r:"data.unclaimed_points",p:[10,9,235]}]}," ",{p:[11,3,271],t:7,e:"ui-button",a:{action:"claim_points",state:[{t:2,x:{r:["data.unclaimed_points"],s:'_0?null:"disabled"'},p:[11,42,310]}]},f:["Claim points"]}]}]}," ",{p:[14,1,413],t:7,e:"ui-display",f:[{p:[15,2,428],t:7,e:"span",f:["Points: ",{t:2,r:"data.id_points",p:[15,16,442]}]}," ",{p:[16,2,470],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[17,3,501],t:7,e:"span",f:[{t:2,r:"data.status_info",p:[17,9,507]}]}," ",{p:[18,3,538],t:7,e:"ui-button",a:{action:"move_shuttle",state:[{t:2,x:{r:["data.can_go_home"],s:'_0?null:"disabled"'},p:[18,42,577]}]},f:["Move shuttle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],406:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Known Languages"},f:[{t:4,f:[{p:[3,5,68],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,23,86]}]},f:[{p:[4,7,102],t:7,e:"span",f:[{t:2,r:"desc",p:[4,13,108]}]}," ",{p:[5,7,130],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[5,19,142]}]}," ",{t:4,f:[{p:[7,9,186],t:7,e:"span",f:["(gained from mob)"]}],n:50,r:"shadow",p:[6,7,163]}," ",{p:[9,7,237],t:7,e:"span",f:[{t:2,x:{r:["can_speak"],s:'_0?"Can Speak":"Cannot Speak"'},p:[9,13,243]}]}," ",{t:4,f:[{p:[11,9,332],t:7,e:"ui-button",a:{action:"select_default",params:['{"language_name":"',{t:2,r:"name",p:[13,37,413]},'"}'],style:[{t:2,x:{r:["is_default","can_speak"],s:'_0?"selected":_1?null:"disabled"'},p:[14,18,442]}]},f:[{t:2,x:{r:["is_default"],s:'_0?"Default Language":"Select as Default"'},p:[15,10,512]}]}],n:50,r:"data.is_living",p:[10,7,301]}," ",{t:4,f:[{t:4,f:[{p:[20,11,666],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[20,72,727]},'"}']},f:["Grant"]}],n:50,r:"shadow",p:[19,9,641]},{t:4,n:51,f:[{p:[22,11,784],t:7,e:"ui-button",a:{action:"remove_language",params:['{"language_name":"',{t:2,r:"name",p:[22,73,846]},'"}']},f:["Remove"]}],r:"shadow"}],n:50,r:"data.admin_mode",p:[18,7,609]}]}],n:52,r:"data.languages",p:[2,3,39]}]}," ",{t:4,f:[{t:4,f:[{p:[30,5,1004],t:7,e:"ui-button",a:{action:"toggle_omnitongue",style:[{t:2,x:{r:["data.omnitongue"],s:'_0?"selected":null'},p:[32,14,1061]}]},f:["Omnitongue ",{t:2,x:{r:["data.omnitongue"],s:'_0?"Enabled":"Disabled"'},p:[33,19,1120]}]}],n:50,r:"data.is_living",p:[29,3,977]}," ",{p:[36,3,1196],t:7,e:"ui-display",a:{title:"Unknown Languages"},f:[{t:4,f:[{p:[38,7,1278],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[38,25,1296]}]},f:[{p:[39,9,1314],t:7,e:"span",f:[{t:2,r:"desc",p:[39,15,1320]}]}," ",{p:[40,9,1344],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[40,21,1356]}]}," ",{p:[41,9,1379],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[43,37,1460]},'"}']},f:["Grant"]}]}],n:52,r:"data.unknown_languages",p:[37,5,1239]}]}],n:50,r:"data.admin_mode",p:[28,1,951]}]},e.exports=a.extend(r.exports)},{341:341}],407:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{t:4,f:[{t:4,f:[{p:[4,4,81],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[5,5,114],t:7,e:"span",f:["Launchpad closed."]}]}],n:50,r:"data.pad_closed",p:[3,3,54]},{t:4,n:51,f:[{p:[8,4,176],t:7,e:"ui-section",a:{label:"Launchpad"},f:[{p:[9,4,210],t:7,e:"span",f:[{p:[9,10,216],t:7,e:"b",f:[{t:2,r:"data.pad_name",p:[9,13,219]}]}]},{p:[9,41,247],t:7,e:"br"}," ",{p:[10,4,255],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}," ",{p:[11,4,318],t:7,e:"ui-button",a:{icon:"remove",style:"danger",action:"remove"},f:["Remove"]}]}," ",{p:[14,4,414],t:7,e:"ui-section",a:{label:"Set Target"},f:[{p:[15,4,449],t:7,e:"table",f:[{p:[16,4,460],t:7,e:"tr",f:[{p:[17,5,469],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[17,38,502],t:7,e:"ui-button",a:{action:"up-left"},f:["↖"]}]}," ",{p:[18,5,553],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[18,57,605],t:7,e:"ui-button",a:{action:"up"
+},f:["↑"]}]}," ",{p:[19,5,651],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[19,56,702],t:7,e:"ui-button",a:{action:"up-right"},f:["↗"]}]}]}," ",{p:[21,4,762],t:7,e:"tr",f:[{p:[22,5,771],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[22,38,804],t:7,e:"ui-button",a:{action:"left",style:"width:35px!important"},f:["←"]}]}," ",{p:[23,5,881],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[23,57,933],t:7,e:"ui-button",a:{action:"reset"},f:["R"]}]}," ",{p:[24,5,982],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[24,56,1033],t:7,e:"ui-button",a:{action:"right"},f:["→"]}]}]}," ",{p:[26,4,1090],t:7,e:"tr",f:[{p:[27,5,1099],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[27,38,1132],t:7,e:"ui-button",a:{action:"down-left"},f:["↙"]}]}," ",{p:[28,5,1185],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[28,57,1237],t:7,e:"ui-button",a:{action:"down"},f:["↓"]}]}," ",{p:[29,5,1285],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[29,56,1336],t:7,e:"ui-button",a:{action:"down-right"},f:["↘"]}]}]}]}]}," ",{p:[33,4,1427],t:7,e:"ui-section",a:{label:"Current Target"},f:[{p:[34,5,1467],t:7,e:"span",f:[{t:2,r:"data.abs_y",p:[34,11,1473]}," ",{t:2,r:"data.north_south",p:[34,26,1488]}]},{p:[34,53,1515],t:7,e:"br"}," ",{p:[35,5,1524],t:7,e:"span",f:[{t:2,r:"data.abs_x",p:[35,11,1530]}," ",{t:2,r:"data.east_west",p:[35,26,1545]}]}]}," ",{p:[37,4,1591],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[38,5,1625],t:7,e:"ui-button",a:{action:"launch",tooltip:"Teleport everything on the pad to the target.","tooltip-side":"down"},f:["Launch"]}," ",{p:[39,5,1751],t:7,e:"ui-button",a:{action:"pull",tooltip:"Teleport everything from the target to the pad.","tooltip-side":"down"},f:["Pull"]}]}],r:"data.pad_closed"}],n:50,r:"data.has_pad",p:[2,2,31]},{t:4,n:51,f:[{p:[45,3,1912],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[46,4,1944],t:7,e:"span",f:["No launchpad found. Link the remote to a launchpad."]}]}],r:"data.has_pad"}]}]},e.exports=a.extend(r.exports)},{341:341}],408:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{mechChargeState:function(t){var e=this.get("data.recharge_port.mech.cell.maxcharge");return t>=e/1.5?"good":t>=e/3?"average":"bad"},mechHealthState:function(t){var e=this.get("data.recharge_port.mech.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[20,1,526],t:7,e:"ui-display",a:{title:"Mech Status"},f:[{t:4,f:[{t:4,f:[{p:[23,4,624],t:7,e:"ui-section",a:{label:"Integrity"},f:[{p:[24,6,660],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,27,681]}],value:[{t:2,r:"adata.recharge_port.mech.health",p:[24,74,728]}],state:[{t:2,x:{r:["mechHealthState","adata.recharge_port.mech.health"],s:"_0(_1)"},p:[24,117,771]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.health"],s:"Math.round(_0)"},p:[24,171,825]},"/",{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,219,873]}]}]}," ",{t:4,f:[{t:4,f:[{p:[28,5,1034],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[28,31,1060],t:7,e:"span",a:{"class":"bad"},f:["Cell Critical Failure"]}]}],n:50,r:"data.recharge_port.mech.cell.critfail",p:[27,3,984]},{t:4,n:51,f:[{p:[30,11,1141],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,13,1180],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.cell.maxcharge",p:[31,34,1201]}],value:[{t:2,r:"adata.recharge_port.mech.cell.charge",p:[31,86,1253]}],state:[{t:2,x:{r:["mechChargeState","adata.recharge_port.mech.cell.charge"],s:"_0(_1)"},p:[31,134,1301]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.cell.charge"],s:"Math.round(_0)"},p:[31,193,1360]},"/",{t:2,x:{r:["adata.recharge_port.mech.cell.maxcharge"],s:"Math.round(_0)"},p:[31,246,1413]}]}]}],r:"data.recharge_port.mech.cell.critfail"}],n:50,r:"data.recharge_port.mech.cell",p:[26,4,945]},{t:4,n:51,f:[{p:[35,3,1524],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[35,29,1550],t:7,e:"span",a:{"class":"bad"},f:["Cell Missing"]}]}],r:"data.recharge_port.mech.cell"}],n:50,r:"data.recharge_port.mech",p:[22,2,589]},{t:4,n:51,f:[{p:[38,4,1625],t:7,e:"ui-section",f:["Mech Not Found"]}],r:"data.recharge_port.mech"}],n:50,r:"data.recharge_port",p:[21,3,561]},{t:4,n:51,f:[{p:[41,5,1689],t:7,e:"ui-section",f:["Recharging Port Not Found"]}," ",{p:[42,2,1741],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}],r:"data.recharge_port"}]}]},e.exports=a.extend(r.exports)},{341:341}],409:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{t:4,f:[{p:[3,5,43],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[4,7,85],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[4,24,102]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[4,75,153]}]}]}],n:50,r:"data.siliconUser",p:[2,3,14]},{t:4,n:51,f:[{p:[7,5,241],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[7,31,267]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[10,1,349],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[11,3,379],t:7,e:"ui-section",a:{label:"Power"},f:[{t:4,f:[{p:[13,7,458],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[13,24,475]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[13,68,519]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[13,116,567]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[12,5,410]},{t:4,n:51,f:[{p:[15,7,625],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.on"],s:'_0?"good":"bad"'},p:[15,20,638]}],state:[{t:2,x:{r:["data.cell"],s:'_0?null:"disabled"'},p:[15,57,675]}]},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[15,92,710]}]}],x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"}}]}," ",{p:[18,3,774],t:7,e:"ui-section",a:{label:"Cell"},f:[{p:[19,5,804],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.cell"],s:'_0?null:"bad"'},p:[19,18,817]}]},f:[{t:2,x:{r:["data.cell","data.cellPercent"],s:'_0?_1+"%":"No Cell"'},p:[19,48,847]}]}]}," ",{p:[21,3,923],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[22,5,953],t:7,e:"span",a:{"class":[{t:2,r:"data.modeStatus",p:[22,18,966]}]},f:[{t:2,r:"data.mode",p:[22,39,987]}]}]}," ",{p:[24,3,1026],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[25,5,1056],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.load"],s:'_0?"good":"average"'},p:[25,18,1069]}]},f:[{t:2,x:{r:["data.load"],s:'_0?_0:"None"'},p:[25,54,1105]}]}]}," ",{p:[27,3,1165],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[28,5,1202],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.destination"],s:'_0?"good":"average"'},p:[28,18,1215]}]},f:[{t:2,x:{r:["data.destination"],s:'_0?_0:"None"'},p:[28,60,1257]}]}]}]}," ",{t:4,f:[{p:{button:[{t:4,f:[{p:[35,9,1479],t:7,e:"ui-button",a:{icon:"eject",action:"unload"},f:["Unload"]}],n:50,r:"data.load",p:[34,7,1453]}," ",{t:4,f:[{p:[38,9,1586],t:7,e:"ui-button",a:{icon:"eject",action:"ejectpai"},f:["Eject PAI"]}],n:50,r:"data.haspai",p:[37,7,1558]}," ",{p:[40,7,1670],t:7,e:"ui-button",a:{icon:"pencil",action:"setid"},f:["Set ID"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[42,5,1750],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[43,7,1789],t:7,e:"ui-button",a:{icon:"pencil",action:"destination"},f:["Set Destination"]}," ",{p:[44,7,1869],t:7,e:"ui-button",a:{icon:"stop",action:"stop"},f:["Stop"]}," ",{p:[45,7,1929],t:7,e:"ui-button",a:{icon:"play",action:"go"},f:["Go"]}]}," ",{p:[47,5,2001],t:7,e:"ui-section",a:{label:"Home"},f:[{p:[48,7,2033],t:7,e:"ui-button",a:{icon:"home",action:"home"},f:["Go Home"]}," ",{p:[49,7,2096],t:7,e:"ui-button",a:{icon:"pencil",action:"sethome"},f:["Set Home"]}]}," ",{p:[51,5,2181],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[52,7,2217],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoReturn"],s:'_0?"check-square-o":"square-o"'},p:[52,24,2234]}],style:[{t:2,x:{r:["data.autoReturn"],s:'_0?"selected":null'},p:[52,84,2294]}],action:"autoret"},f:["Auto-Return Home"]}," ",{p:[54,7,2396],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoPickup"],s:'_0?"check-square-o":"square-o"'},p:[54,24,2413]}],style:[{t:2,x:{r:["data.autoPickup"],s:'_0?"selected":null'},p:[54,84,2473]}],action:"autopick"},f:["Auto-Pickup Crate"]}," ",{p:[56,7,2577],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"check-square-o":"square-o"'},p:[56,24,2594]}],style:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"selected":null'},p:[56,88,2658]}],action:"report"},f:["Report Deliveries"]}]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[31,1,1343]}]},e.exports=a.extend(r.exports)},{341:341}],410:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Chamber Console"},f:[{p:[2,1,44],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,2,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,63,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,3,195],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[6,36,228]}]}," ",{p:[7,3,262],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[7,35,294]}]}," ",{p:[8,3,328],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[8,41,366]}]}," ",{t:4,f:[{p:[10,4,468],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[10,41,505]}]}],n:50,r:"data.disk.activation_delay",p:[9,3,430]}," ",{t:4,f:[{p:[13,4,588],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[13,30,614]}]}," ",{p:[14,4,650],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[14,36,682]}]}],n:50,r:"data.disk.timer",p:[12,3,561]}," ",{t:4,f:[{p:[17,4,769],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[17,40,805]}]}],n:50,r:"data.disk.activation_code",p:[16,3,732]}," ",{t:4,f:[{p:[20,4,899],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[20,42,937]}]}],n:50,r:"data.disk.deactivation_code",p:[19,3,860]}," ",{t:4,f:[{p:[23,4,1025],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[23,34,1055]}]}],n:50,r:"data.disk.kill_code",p:[22,3,994]}," ",{t:4,f:[{p:[26,4,1138],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[26,37,1171]}]}],n:50,r:"data.disk.trigger_code",p:[25,3,1104]}," ",{t:4,f:[{t:4,f:[{p:[30,6,1303],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[30,25,1322]}]},f:[{t:2,r:"value",p:[30,35,1332]}]}],n:52,r:"data.disk.extra_settings",p:[29,4,1263]}],n:50,r:"data.disk.has_extra_settings",p:[28,3,1223]}],n:50,r:"data.has_program",p:[5,2,168]},{t:4,n:51,f:[{p:[34,3,1390],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,1,78]},{t:4,n:51,f:[{p:[37,2,1453],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[40,1,1511],t:7,e:"br"}," ",{t:4,f:[{p:[42,2,1541],t:7,e:"ui-notice",f:[{t:2,r:"data.status_msg",p:[42,13,1552]}]}],n:50,r:"data.status_msg",p:[41,1,1516]},{t:4,n:51,f:[{p:[44,2,1594],t:7,e:"ui-display",a:{title:"Chamber"},f:[{p:[45,2,1624],t:7,e:"ui-section",f:[{p:[45,14,1636],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock-open":"lock"'},p:[45,30,1652]}],action:"toggle_lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[45,90,1712]}," Chamber"]},{p:[45,146,1768],t:7,e:"br"}]}," ",{p:[46,2,1787],t:7,e:"ui-section",f:[{p:[46,14,1799],t:7,e:"b",f:["Occupant:"]}," ",{t:2,r:"data.occupant_name",p:[46,31,1816]}]}," ",{t:4,f:[{p:[48,4,1882],t:7,e:"ui-section",f:[{p:[48,16,1894],t:7,e:"ui-notice",f:["No nanites detected."]}]}," ",{p:[49,4,1954],t:7,e:"ui-section",f:[{p:[49,16,1966],t:7,e:"ui-button",a:{icon:"syringe",action:"nanite_injection"},f:["Implant Nanites"]}]}],n:50,x:{r:["data.has_nanites"],s:"!_0"},p:[47,2,1853]},{t:4,n:51,f:[{p:[51,3,2071],t:7,e:"ui-display",a:{title:"Nanites"},f:[{t:4,f:[{p:[53,5,2129],t:7,e:"ui-button",a:{icon:"download",action:"add_program"},f:["Install Program From Disk"]},{p:[53,90,2214],t:7,e:"br"}," ",{p:[54,5,2223],t:7,e:"br"}],n:50,r:"data.has_disk",p:[52,4,2103]}," ",{p:[56,4,2242],t:7,e:"ui-section",f:[{p:[57,5,2259],t:7,e:"ui-section",a:{label:"Nanite Volume"},f:[{t:2,r:"data.nanite_volume",p:[57,39,2293]}]}," ",{p:[58,5,2333],t:7,e:"ui-section",a:{label:"Growth Rate"},f:[{t:2,r:"data.regen_rate",p:[58,37,2365]}]}," ",{p:[59,5,2402],t:7,e:"ui-section",a:{label:"Safety Threshold"},f:[{t:2,r:"data.safety_threshold",p:[59,42,2439]}," ",{p:[59,68,2465],t:7,e:"ui-button",a:{icon:"pencil",action:"set_safety"},f:["Set"]}]}," ",{p:[60,5,2544],t:7,e:"ui-section",a:{label:"Cloud ID"},f:[{t:2,x:{r:["data.cloud_id"],s:'_0?_0:"No Cloud"'},p:[60,34,2573]}," ",{p:[60,82,2621],t:7,e:"ui-button",a:{icon:"pencil",action:"set_cloud"},f:["Set"]}]}]}," ",{p:[62,4,2715],t:7,e:"ui-display",a:{title:"Programs"},f:[{t:4,f:[{p:[64,6,2782],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[64,25,2801]}],button:0},f:[{p:[65,6,2824],t:7,e:"ui-button",a:{icon:"minus",action:"remove_program",params:['{"program_id": "',{t:2,r:"id",p:[65,78,2896]},'"}']},f:["Uninstall"]}," ",{p:[66,6,2933],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[66,38,2965]}]}," ",{t:4,f:[{p:[68,7,3027],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[68,45,3065]}]}," ",{p:[69,7,3123],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[69,44,3160]},"/s"]}," ",{t:4,f:[{p:[71,8,3221],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[71,41,3254]}]}," ",{p:[72,8,3291],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[72,45,3328]}," seconds"]}],n:50,r:"can_trigger",p:[70,7,3194]}," ",{t:4,f:[{t:4,f:[{p:[76,9,3459],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,46,3496]}]}],n:50,r:"activation_delay",p:[75,8,3426]}," ",{t:4,f:[{p:[79,9,3574],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,35,3600]}]}," ",{p:[80,9,3631],t:7,e:"ui-section",a:{label:"Timer Type"},f:[{t:2,r:"timer_type",p:[80,40,3662]}]}],n:50,r:"timer",p:[78,8,3552]}," ",{t:4,f:[{t:4,f:[{p:[84,11,3782],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,30,3801]}]},f:[{t:2,r:"value",p:[84,40,3811]}]}],n:52,r:"extra_settings",p:[83,9,3747]}],n:50,r:"has_extra_settings",p:[82,8,3712]}," ",{t:4,f:[{t:4,f:[{p:[89,10,3944],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[89,46,3980]}]}],n:50,r:"activation_code",p:[88,9,3911]}," ",{t:4,f:[{p:[92,10,4072],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[92,48,4110]}]}],n:50,r:"deactivation_code",p:[91,9,4037]}," ",{t:4,f:[{p:[95,10,4196],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[95,40,4226]}]}],n:50,r:"kill_code",p:[94,9,4169]}," ",{t:4,f:[{p:[98,10,4307],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[98,43,4340]}]}],n:50,r:"trigger_code",p:[97,9,4277]}],n:50,x:{r:["data.scan_level"],s:"_0>=4"},p:[87,8,3874]}],n:50,x:{r:["data.scan_level"],s:"_0>=3"},p:[74,7,3390]}],n:50,x:{r:["data.scan_level"],s:"_0>=2"},p:[67,6,2992]}]}],n:52,r:"data.mob_programs",p:[63,5,2749]}]}]}],x:{r:["data.has_nanites"],s:"!_0"}}]}],r:"data.status_msg"}]}]},e.exports=a.extend(r.exports)},{341:341}],411:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Cloud Console"},f:[{p:[2,1,42],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,3,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,64,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,4,197],t:7,e:"ui-section",f:[{p:[7,5,214],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[7,38,247]}]}," ",{p:[8,5,283],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[8,37,315]}]}," ",{p:[9,5,351],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[9,43,389]}]}," ",{t:4,f:[{p:[11,6,495],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[11,43,532]}]}],n:50,r:"data.disk.activation_delay",p:[10,5,455]}," ",{t:4,f:[{p:[14,6,621],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[14,32,647]}]}," ",{p:[15,6,685],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[15,38,717]}]}],n:50,r:"data.disk.timer",p:[13,5,592]}," ",{t:4,f:[{p:[18,6,810],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[18,42,846]}]}],n:50,r:"data.disk.activation_code",p:[17,5,771]}," ",{t:4,f:[{p:[21,6,946],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[21,44,984]}]}],n:50,r:"data.disk.deactivation_code",p:[20,5,905]}," ",{t:4,f:[{p:[24,6,1078],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[24,36,1108]}]}],n:50,r:"data.disk.kill_code",p:[23,5,1045]}," ",{t:4,f:[{p:[27,6,1197],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[27,39,1230]}]}],n:50,r:"data.disk.trigger_code",p:[26,5,1161]}," ",{t:4,f:[{t:4,f:[{p:[31,8,1370],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[31,27,1389]}]},f:[{t:2,r:"value",p:[31,37,1399]}]}],n:52,r:"data.disk.extra_settings",p:[30,6,1328]}],n:50,r:"data.disk.has_extra_settings",p:[29,5,1286]}]}],n:50,r:"data.has_program",p:[5,3,169]},{t:4,n:51,f:[{p:[36,4,1480],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,2,77]},{t:4,n:51,f:[{p:[39,3,1546],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[42,1,1605],t:7,e:"ui-display",a:{title:"Cloud Storage"},f:[{t:4,f:[{p:[44,3,1670],t:7,e:"ui-button",a:{icon:"plus-circle",action:"create_backup"},f:["Create New Backup"]}," ",{p:[45,3,1755],t:7,e:"ui-display",a:{title:"Active Backups"},f:[{t:4,f:[{p:[47,5,1827],t:7,e:"ui-button",a:{action:"set_view",params:['{"view": "',{t:2,r:"cloud_id",p:[47,52,1874]},'"}']},f:["Backup #",{t:2,r:"cloud_id",p:[47,76,1898]}]}],n:52,r:"data.cloud_backups",p:[46,4,1794]}]}],n:50,x:{r:["data.current_view"],s:"!_0"},p:[43,2,1641]},{t:4,n:51,f:[{p:[51,3,1964],t:7,e:"ui-button",a:{icon:"undo",action:"set_view",params:'{"view": "0"}'},f:["Return"]}," ",{t:4,f:[{p:[53,4,2079],t:7,e:"ui-notice",f:["ERROR: Backup not found."]}],n:50,x:{r:["data.cloud_backup"],s:"!_0"},p:[52,3,2049]},{t:4,n:51,f:[{p:[55,4,2141],t:7,e:"ui-display",a:{title:["Backup #",{t:2,r:"data.current_view",p:[55,31,2168]}]},f:[{t:4,f:[{p:[57,6,2226],t:7,e:"ui-button",a:{icon:"upload",action:"upload_program",style:"selected"},f:["Upload Program From Disk"]},{p:[57,108,2328],t:7,e:"br"}],n:50,r:"data.has_program",p:[56,5,2196]}," ",{t:4,f:[{p:[60,6,2384],t:7,e:"hr"}," ",{p:[61,6,2394],t:7,e:"ui-section",f:[{p:[62,7,2413],t:7,e:"h3",f:[{t:2,r:"name",p:[62,11,2417]}]}," ",{p:[63,7,2437],t:7,e:"div",a:{style:"float:right"},f:[{p:[64,8,2470],t:7,e:"ui-button",a:{icon:"minus-circle",action:"remove_program",style:"danger",params:['{"program_id": "',{t:2,r:"id",p:[64,102,2564]},'"}']},f:["Uninstall"]}]}]}," ",{p:[67,6,2633],t:7,e:"ui-section",f:[{p:[68,7,2652],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[68,39,2684]}]}," ",{p:[69,7,2712],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[69,45,2750]}]}," ",{p:[70,7,2808],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[70,44,2845]},"/s"]}," ",{t:4,f:[{p:[72,8,2906],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[72,41,2939]},"/s"]}," ",{p:[73,8,2978],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[73,45,3015]},"/s"]}],n:50,r:"can_trigger",p:[71,7,2879]}," ",{t:4,f:[{p:[76,8,3103],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,45,3140]}]}],n:50,r:"activation_delay",p:[75,7,3071]}," ",{t:4,f:[{p:[79,8,3215],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,34,3241]}]}," ",{p:[80,8,3271],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"timer_type",p:[80,40,3303]}]}],n:50,r:"timer",p:[78,7,3194]}," ",{t:4,f:[{p:[83,8,3382],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[83,44,3418]}]}],n:50,r:"activation_code",p:[82,7,3351]}," ",{t:4,f:[{p:[86,8,3504],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[86,46,3542]}]}],n:50,r:"deactivation_code",p:[85,7,3471]}," ",{t:4,f:[{p:[89,8,3622],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[89,38,3652]}]}],n:50,r:"kill_code",p:[88,7,3597]}," ",{t:4,f:[{p:[92,8,3727],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[92,41,3760]}]}],n:50,r:"trigger_code",p:[91,7,3699]}," ",{t:4,f:[{t:4,f:[{p:[96,10,3878],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[96,29,3897]}]},f:[{t:2,r:"value",p:[96,39,3907]}]}],n:52,r:"extra_settings",p:[95,8,3844]}],n:50,r:"has_extra_settings",p:[94,7,3810]}]}],n:52,r:"data.cloud_programs",p:[59,5,2349]}]}],x:{r:["data.cloud_backup"],s:"!_0"}}],x:{r:["data.current_view"],s:"!_0"}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],412:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Program Hub"},f:[{t:4,f:[{p:[3,2,63],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{p:[4,3,99],t:7,e:"ui-section",f:[{p:[5,4,115],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{p:[6,4,180],t:7,e:"ui-button",a:{icon:"minus-circle",action:"clear"},f:["Delete Program"]}]}," ",{t:4,f:[{p:[9,4,299],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[9,37,332]}]}," ",{p:[10,4,367],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[10,36,399]}]}],n:50,r:"data.has_program",p:[8,3,271]},{t:4,n:51,f:[{p:[12,4,445],t:7,e:"ui-notice",f:["No program installed."]}],r:"data.has_program"}]}],n:50,r:"data.has_disk",p:[2,1,40]},{t:4,n:51,f:[{p:[16,2,525],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"},{p:[18,1,569],t:7,e:"br"}," ",{p:[19,1,574],t:7,e:"ui-display",a:{title:"Programs"},f:[{p:[20,2,605],t:7,e:"ui-section",f:[{p:[21,3,620],t:7,e:"ui-button",a:{icon:"undo",action:"set_category",params:'{"category": "Main"}'},f:["Return"]}," ",{p:[22,3,716],t:7,e:"ui-button",a:{icon:"align-justify ",action:"toggle_details"},f:[{t:2,x:{r:["data.detail_view"],s:'_0?"Compact View":"Detailed View"'},p:[22,60,773]}]}]}," ",{t:4,f:[{p:[25,3,892],t:7,e:"ui-display",f:[{t:4,f:[{p:[27,5,938],t:7,e:"ui-section",f:[{p:[27,17,950],t:7,e:"ui-button",a:{action:"set_category",params:['{"category": "',{t:2,r:"name",p:[27,72,1005]},'"}']},f:[{t:2,r:"name",p:[27,84,1017]}]}]}],n:52,r:"data.categories",p:[26,4,908]}]}],n:50,x:{r:["data.category"],s:'_0=="Main"'},p:[24,2,858]},{t:4,n:51,f:[{p:[31,3,1092],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[31,22,1111]}]},f:[{t:4,f:[{t:4,f:[{p:[34,6,1196],t:7,e:"ui-display",f:[{p:[35,7,1215],t:7,e:"ui-section",f:[{p:[35,19,1227],t:7,e:"b",f:[{t:2,r:"name",p:[35,22,1230]}]}]}," ",{p:[36,7,1262],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[36,19,1274]}]}," ",{p:[37,7,1302],t:7,e:"ui-section",f:[{p:[38,8,1322],t:7,e:"ui-button",a:{icon:"download",action:"download",params:['{"program_id": "',{t:2,r:"id",p:[38,77,1391]},'"}'],state:[{t:2,x:{r:["data.has_disk"],s:'_0?null:"disabled"'},p:[38,94,1408]}]},f:["Download"]}]}]}],n:50,r:"data.detail_view",p:[33,5,1166]},{t:4,n:51,f:[{p:[44,6,1542],t:7,e:"ui-section",f:[{p:[44,18,1554],t:7,e:"ui-button",a:{action:"download",params:['{"program_id": "',{t:2,r:"id",p:[44,71,1607]},'"}']},f:[{t:2,r:"name",p:[44,81,1617]}]}]}],r:"data.detail_view"}],n:52,r:"data.program_list",p:[32,4,1134]}]}],x:{r:["data.category"],s:'_0=="Main"'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],413:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Programming"},f:[{t:4,f:[{p:[3,3,65],t:7,e:"ui-notice",f:["Insert a nanite program disk."]}],n:50,x:{r:["data.has_disk"],s:"!_0"},p:[2,1,40]},{t:4,n:51,f:[{p:[5,3,129],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{t:4,f:[{p:[7,5,223],t:7,e:"ui-notice",f:["No program detected."]}],n:50,x:{r:["data.has_program"],s:"!_0"},p:[6,3,193]},{t:4,n:51,f:[{p:[9,5,282],t:7,e:"ui-section",f:[{p:[10,7,301],t:7,e:"ui-display",a:{title:[{t:2,r:"data.name",p:[10,26,320]}]},f:[{t:2,r:"data.desc",p:[11,9,344]}]}]}," ",{p:[14,5,400],t:7,e:"ui-section",f:[{p:[15,7,419],t:7,e:"ui-section",a:{label:"Program Info"},f:["Nanites Consumed: ",{t:2,r:"data.use_rate",p:[16,26,478]},{p:[16,43,495],t:7,e:"br"}," ",{t:4,f:["Trigger Cost: ",{t:2,r:"data.trigger_cost",p:[18,25,557]},"u",{p:[18,47,579],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[17,9,508]}]}," ",{p:[22,7,627],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[23,9,663],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.activated"],s:'_0?"toggle-on":"toggle-off"'},p:[24,17,690]}],action:"toggle_active"},f:[{t:2,x:{r:["data.activated"],s:'_0?"Active":"Inactive"'},p:[26,11,784]}]}]}," ",{p:[30,7,876],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[31,9,914],t:7,e:"ui-button",a:{icon:"pencil",action:"set_activation_delay"}}," Activation Delay: ",{t:2,r:"data.activation_delay",p:[31,95,1e3]}," ",{p:[31,121,1026],t:7,e:"br"}," ",{p:[32,9,1039],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer"}}," Timer: ",{t:2,r:"data.timer",p:[32,73,1103]}," ",{p:[32,88,1118],t:7,e:"br"}," ",{p:[33,9,1131],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer_type"}}," Timer Type: ",{t:2,r:"data.timer_type",p:[33,83,1205]}," ",{p:[33,103,1225],t:7,e:"br"}]}," ",{p:[36,7,1257],t:7,e:"ui-section",a:{label:"Codes"},f:[{p:[37,9,1292],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "activation"}'}}," Activation Code: ",{t:2,r:"data.activation_code",p:[37,121,1404]}," ",{p:[37,146,1429],t:7,e:"br"}," ",{p:[38,9,1442],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "deactivation"}'}}," Deactivation Code: ",{t:2,r:"data.deactivation_code",p:[38,125,1558]}," ",{p:[38,152,1585],t:7,e:"br"}," ",{p:[39,9,1598],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "kill"}'}}," Kill Code: ",{t:2,r:"data.kill_code",p:[39,109,1698]}," ",{p:[39,128,1717],t:7,e:"br"}," ",{t:4,f:[{p:[41,11,1765],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "trigger"}'}}," Trigger Code: ",{t:2,r:"data.trigger_code",p:[41,117,1871]}," ",{p:[41,139,1893],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[40,9,1730]}]}," ",{t:4,f:[{p:[46,9,1981],t:7,e:"ui-section",a:{label:"Special"},f:[{t:4,f:[{p:[48,13,2062],t:7,e:"ui-button",a:{icon:"pencil",action:"set_extra_setting",params:['{"target_setting": "',{t:2,r:"name",p:[48,93,2142]},'"}']}}," ",{t:2,r:"name",p:[48,118,2167]},": ",{t:2,r:"value",p:[48,128,2177]}," ",{p:[48,138,2187],t:7,e:"br"}],n:52,r:"data.extra_settings",p:[47,11,2020]}]}],n:50,r:"data.has_extra_settings",p:[45,7,1941]}]}],x:{r:["data.has_program"],s:"!_0"}}],x:{r:["data.has_disk"],s:"!_0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],414:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Control"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-notice",f:["The interface is locked."]}],n:50,r:"data.locked",p:[2,1,36]},{t:4,n:51,f:[{p:[5,3,117],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock Interface"]}," ",{p:[6,3,183],t:7,e:"ui-button",a:{icon:"save",action:"save"},f:["Save Current Setting"]}," ",{p:[7,3,255],t:7,e:"ui-section",a:{label:"Signal Code"},f:[{p:[8,5,292],t:7,e:"span",f:[{t:2,r:"data.code",p:[8,11,298]}]}," ",{p:[9,4,322],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code"},f:["Set"]}]}," ",{t:4,f:[{p:[12,5,432],t:7,e:"ui-section",a:{label:"Relay Code"},f:[{p:[13,7,470],t:7,e:"span",f:[{t:2,r:"data.relay_code",p:[13,13,476]}]}," ",{p:[14,5,507],t:7,e:"ui-button",a:{icon:"pencil",action:"set_relay_code"},f:["Set"]}]}],n:50,x:{r:["data.mode"],s:'_0=="Relay"'},p:[11,3,399]}," ",{p:[17,3,602],t:7,e:"ui-section",a:{label:"Signal Mode"},f:[{p:[18,5,639],t:7,e:"span",f:[{t:2,r:"data.mode",p:[18,11,645]}]}," ",{p:[19,5,670],t:7,e:"br"}," ",{p:[20,4,678],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Off"}'},f:["Off"]}," ",{p:[21,5,755],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Local"}'},f:["Local"]}," ",{p:[22,5,836],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Targeted"}'},f:["Targeted"]}," ",{p:[23,5,923],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Area"}'},f:["Area"]}," ",{p:[24,5,1002],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Relay"}'},f:["Relay"]}]}],r:"data.locked"}]}," ",{p:[28,1,1117],t:7,e:"ui-display",a:{title:"Saved Settings"},f:[{t:4,f:[{p:[30,3,1186],t:7,e:"ui-button",a:{icon:"load",action:"load",params:['{"save_id": "',{t:2,r:"id",p:[30,61,1244]},'"}']},f:[{t:2,r:"name",p:[30,71,1254]}]}," ",{t:4,f:[{p:[32,4,1301],t:7,e:"ui-button",a:{icon:"remove",action:"remove_save",params:['{"save_id": "',{t:2,r:"id",p:[32,71,1368]},'"}']},f:["Remove"]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[31,3,1277]}," ",{p:[34,3,1409],t:7,e:"br"}],n:52,r:"data.saved_settings",p:[29,2,1154]}]}]},e.exports=a.extend(r.exports)},{341:341}],415:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ghost roles"},f:[{p:[2,2,34],t:7,e:"ui-section",a:{label:"Ignored roles"},f:[{t:4,f:[{p:[4,4,96],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[4,21,113]}],style:[{t:2,x:{r:["enabled"],s:'_0?"danger":null'},p:[4,73,165]}],action:"toggle_ignore",params:['{"key": "',{t:2,r:"key",p:[4,144,236]},'"}']},f:[{t:2,r:"desc",p:[4,155,247]}]}],n:52,r:"data.ignore",p:[3,3,71]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],416:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Relay"},f:[{t:4,f:[{p:[3,3,55],t:7,e:"h2",f:["NETWORK BUFFERS OVERLOADED"]}," ",{p:[4,3,93],t:7,e:"h3",f:["Overload Recovery Mode"]}," ",{p:[5,3,127],t:7,e:"i",f:["This system is suffering temporary outage due to overflow of traffic buffers. Until buffered traffic is processed, all further requests will be dropped. Frequent occurences of this error may indicate insufficient hardware capacity of your network. Please contact your network planning department for instructions on how to resolve this issue."]}," ",{p:[6,3,479],t:7,e:"h3",f:["ADMINISTRATIVE OVERRIDE"]}," ",{p:[7,3,514],t:7,e:"b",f:["CAUTION - Data loss may occur"]}," ",{p:[8,3,555],t:7,e:"ui-button",a:{icon:"signal",action:"restart"},f:["Purge buffered traffic"]}],n:50,r:"data.dos_crashed",p:[2,2,28]},{t:4,n:51,f:[{p:[12,3,652],t:7,e:"ui-section",a:{label:"Relay status"},f:[{p:[13,4,689],t:7,e:"ui-button",a:{icon:"power-off",action:"toggle"},f:[{t:2,x:{r:["data.enabled"],s:'_0?"ENABLED":"DISABLED"'},p:[14,6,739]}]}]}," ",{p:[18,3,819],t:7,e:"ui-section",a:{label:"Network buffer status"},f:[{t:2,r:"data.dos_overload",p:[19,4,865]}," / ",{t:2,r:"data.dos_capacity",p:[19,28,889]}," GQ"]}],r:"data.dos_crashed"}]}]},e.exports=a.extend(r.exports)},{341:341}],417:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,306],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[18,3,346],t:7,e:"ui-notice",f:[{p:[19,5,362],t:7,e:"span",f:["Reconstruction in progress!"]}]}],n:50,r:"data.restoring",p:[17,1,321]},{p:[24,1,428],t:7,e:"ui-display",f:[{p:[26,1,442],t:7,e:"div",a:{"class":"item"},f:[{p:[27,3,463],t:7,e:"div",a:{"class":"itemLabel"},f:["Inserted AI:"]}," ",{p:[30,3,512],t:7,e:"div",a:{"class":"itemContent"
+},f:[{p:[31,2,539],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",state:[{t:2,x:{r:["data.nocard"],s:'_0?"disabled":null'},p:[31,52,589]}]},f:[{t:2,x:{r:["data.name"],s:'_0?_0:"---"'},p:[31,89,626]}]}]}]}," ",{t:4,f:[{p:[36,2,709],t:7,e:"b",f:["ERROR: ",{t:2,r:"data.error",p:[36,12,719]}]}],n:50,r:"data.error",p:[35,1,689]},{t:4,n:51,f:[{p:[38,2,748],t:7,e:"h2",f:["System Status"]}," ",{p:[39,2,772],t:7,e:"div",a:{"class":"item"},f:[{p:[40,3,793],t:7,e:"div",a:{"class":"itemLabel"},f:["Current AI:"]}," ",{p:[43,3,843],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.name",p:[44,4,872]}]}," ",{p:[46,3,897],t:7,e:"div",a:{"class":"itemLabel"},f:["Status:"]}," ",{p:[49,3,943],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["Nonfunctional"],n:50,r:"data.isDead",p:[50,4,972]},{t:4,n:51,f:["Functional"],r:"data.isDead"}]}," ",{p:[56,3,1059],t:7,e:"div",a:{"class":"itemLabel"},f:["System Integrity:"]}," ",{p:[59,3,1115],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[60,4,1144],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[60,37,1177]}],state:[{t:2,r:"healthState",p:[61,11,1204]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[61,28,1221]},"%"]}]}," ",{p:[63,3,1274],t:7,e:"div",a:{"class":"itemLabel"},f:["Active Laws:"]}," ",{p:[66,3,1325],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[67,4,1354],t:7,e:"table",f:[{t:4,f:[{p:[69,6,1394],t:7,e:"tr",f:[{p:[69,10,1398],t:7,e:"td",f:[{p:[69,14,1402],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[69,38,1426]}]}]}]}],n:52,r:"data.ai_laws",p:[68,5,1366]}]}]}," ",{p:[73,2,1475],t:7,e:"ui-section",a:{label:"Operations"},f:[{p:[74,3,1509],t:7,e:"ui-button",a:{icon:"plus",style:[{t:2,x:{r:["data.restoring"],s:'_0?"disabled":null'},p:[74,33,1539]}],action:"PRG_beginReconstruction"},f:["Begin Reconstruction"]}]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],418:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,1,87],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"home",params:'{"target" : "mod"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==1?"disabled":null'},p:[5,80,166]}]},f:["Access Modification"]}],n:50,r:"data.have_id_slot",p:[4,1,61]},{p:[7,1,247],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manage"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==2?"disabled":null'},p:[7,90,336]}]},f:["Job Management"]}," ",{p:[8,1,404],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manifest"}',state:[{t:2,x:{r:["data.mmode"],s:'!_0?"disabled":null'},p:[8,92,495]}]},f:["Crew Manifest"]}," ",{t:4,f:[{p:[10,1,584],t:7,e:"ui-button",a:{action:"PRG_print",icon:"print",state:[{t:2,x:{r:["data.has_id","data.mmode"],s:'!_1||_0&&_1==1?null:"disabled"'},p:[10,51,634]}]},f:["Print"]}],n:50,r:"data.have_printer",p:[9,1,558]},{t:4,f:[{p:[14,1,753],t:7,e:"div",a:{"class":"item"},f:[{p:[15,3,774],t:7,e:"h2",f:["Crew Manifest"]}," ",{p:[16,3,799],t:7,e:"br"},"Please use security record computer to modify entries.",{p:[16,61,857],t:7,e:"br"},{p:[16,65,861],t:7,e:"br"}]}," ",{t:4,f:[{p:[19,2,898],t:7,e:"div",a:{"class":"item"},f:[{t:2,r:"name",p:[20,2,918]}," - ",{t:2,r:"rank",p:[20,13,929]}]}],n:52,r:"data.manifest",p:[18,1,873]}],n:50,x:{r:["data.mmode"],s:"!_0"},p:[13,1,733]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.mmode"],s:"_0==2"},f:[{p:[25,1,984],t:7,e:"div",a:{"class":"item"},f:[{p:[26,3,1005],t:7,e:"h2",f:["Job Management"]}]}," ",{p:[28,1,1036],t:7,e:"table",f:[{p:[29,1,1044],t:7,e:"tr",f:[{p:[29,5,1048],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,27,1070],t:7,e:"b",f:["Job"]}]},{p:[29,42,1085],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,64,1107],t:7,e:"b",f:["Slots"]}]},{p:[29,81,1124],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,103,1146],t:7,e:"b",f:["Open job"]}]},{p:[29,123,1166],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,145,1188],t:7,e:"b",f:["Close job"]}]}]}," ",{t:4,f:[{p:[32,2,1238],t:7,e:"tr",f:[{p:[32,6,1242],t:7,e:"td",f:[{t:2,r:"title",p:[32,10,1246]}]},{p:[32,24,1260],t:7,e:"td",f:[{t:2,r:"current",p:[32,28,1264]},"/",{t:2,r:"total",p:[32,40,1276]}]},{p:[32,54,1290],t:7,e:"td",f:[{p:[32,58,1294],t:7,e:"ui-button",a:{action:"PRG_open_job",params:['{"target" : "',{t:2,r:"title",p:[32,112,1348]},'"}'],state:[{t:2,x:{r:["status_open"],s:'_0?null:"disabled"'},p:[32,132,1368]}]},f:[{t:2,r:"desc_open",p:[32,169,1405]}]},{p:[32,194,1430],t:7,e:"br"}]},{p:[32,203,1439],t:7,e:"td",f:[{p:[32,207,1443],t:7,e:"ui-button",a:{action:"PRG_close_job",params:['{"target" : "',{t:2,r:"title",p:[32,262,1498]},'"}'],state:[{t:2,x:{r:["status_close"],s:'_0?null:"disabled"'},p:[32,282,1518]}]},f:[{t:2,r:"desc_close",p:[32,320,1556]}]}]}]}],n:52,r:"data.slots",p:[30,1,1215]}]}]},{t:4,n:50,x:{r:["data.mmode"],s:"!(_0==2)"},f:[" ",{p:[40,1,1626],t:7,e:"div",a:{"class":"item"},f:[{p:[41,3,1647],t:7,e:"h2",f:["Access Modification"]}]}," ",{t:4,f:[{p:[45,3,1707],t:7,e:"span",a:{"class":"alert"},f:[{p:[45,23,1727],t:7,e:"i",f:["Please insert the ID into the terminal to proceed."]}]},{p:[45,87,1791],t:7,e:"br"}],n:50,x:{r:["data.has_id"],s:"!_0"},p:[44,1,1684]},{p:[48,1,1805],t:7,e:"div",a:{"class":"item"},f:[{p:[49,3,1826],t:7,e:"div",a:{"class":"itemLabel"},f:["Target Identity:"]}," ",{p:[52,3,1879],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[53,2,1906],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "id"}'},f:[{t:2,r:"data.id_name",p:[53,72,1976]}]}]}]}," ",{p:[56,1,2021],t:7,e:"div",a:{"class":"item"},f:[{p:[57,3,2042],t:7,e:"div",a:{"class":"itemLabel"},f:["Auth Identity:"]}," ",{p:[60,3,2093],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[61,2,2120],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "auth"}'},f:[{t:2,r:"data.auth_name",p:[61,74,2192]}]}]}]}," ",{p:[64,1,2239],t:7,e:"hr"}," ",{t:4,f:[{t:4,f:[{p:[68,2,2295],t:7,e:"div",a:{"class":"item"},f:[{p:[69,4,2317],t:7,e:"h2",f:["Details"]}]}," ",{t:4,f:[{p:[73,2,2364],t:7,e:"div",a:{"class":"item"},f:[{p:[74,4,2386],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[77,4,2442],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_owner",p:[78,3,2470]}]}]}," ",{p:[81,2,2507],t:7,e:"div",a:{"class":"item"},f:[{p:[82,4,2529],t:7,e:"div",a:{"class":"itemLabel"},f:["Rank:"]}," ",{p:[85,4,2574],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_rank",p:[86,3,2602]}]}]}," ",{p:[89,2,2638],t:7,e:"div",a:{"class":"item"},f:[{p:[90,4,2660],t:7,e:"div",a:{"class":"itemLabel"},f:["Demote:"]}," ",{p:[93,4,2707],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[94,3,2735],t:7,e:"ui-button",a:{action:"PRG_terminate",icon:"gear",state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Unassigned"?"disabled":null'},p:[94,56,2788]}]},f:["Demote ",{t:2,r:"data.id_owner",p:[94,117,2849]}]}]}]}],n:50,r:"data.minor",p:[72,2,2344]},{t:4,n:51,f:[{p:[99,2,2909],t:7,e:"div",a:{"class":"item"},f:[{p:[100,4,2931],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[103,4,2987],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[104,3,3015],t:7,e:"ui-button",a:{action:"PRG_edit",icon:"pencil",params:'{"name" : "1"}'},f:[{t:2,r:"data.id_owner",p:[104,70,3082]}]}]}]}," ",{p:[108,2,3132],t:7,e:"div",a:{"class":"item"},f:[{p:[109,4,3154],t:7,e:"h2",f:["Assignment"]}]}," ",{p:[111,3,3184],t:7,e:"ui-button",a:{action:"PRG_togglea",icon:"gear"},f:[{t:2,x:{r:["data.assignments"],s:'_0?"Hide assignments":"Show assignments"'},p:[111,47,3228]}]}," ",{p:[112,2,3304],t:7,e:"div",a:{"class":"item"},f:[{p:[113,4,3326],t:7,e:"span",a:{id:"allvalue.jobsslot"},f:[]}]}," ",{p:[117,2,3379],t:7,e:"div",a:{"class":"item"},f:[{t:4,f:[{p:[119,4,3429],t:7,e:"div",a:{id:"all-value.jobs"},f:[{p:[120,3,3457],t:7,e:"table",f:[{p:[121,5,3469],t:7,e:"tr",f:[{p:[122,4,3477],t:7,e:"th",f:["Command"]}," ",{p:[123,4,3497],t:7,e:"td",f:[{p:[124,6,3507],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Captain"}',state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Captain"?"selected":null'},p:[124,83,3584]}]},f:["Captain"]}]}]}," ",{p:[127,5,3678],t:7,e:"tr",f:[{p:[128,4,3686],t:7,e:"th",f:["Special"]}," ",{p:[129,4,3706],t:7,e:"td",f:[{p:[130,6,3716],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Custom"}'},f:["Custom"]}]}]}," ",{p:[133,5,3827],t:7,e:"tr",f:[{p:[134,4,3835],t:7,e:"th",a:{style:"color: '#FFA500';"},f:["Engineering"]}," ",{p:[135,4,3885],t:7,e:"td",f:[{t:4,f:[{p:[137,5,3931],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[137,64,3990]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[137,82,4008]}]},f:[{t:2,r:"display_name",p:[137,127,4053]}]}],n:52,r:"data.engineering_jobs",p:[136,6,3895]}]}]}," ",{p:[141,5,4120],t:7,e:"tr",f:[{p:[142,4,4128],t:7,e:"th",a:{style:"color: '#008000';"},f:["Medical"]}," ",{p:[143,4,4174],t:7,e:"td",f:[{t:4,f:[{p:[145,5,4216],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[145,64,4275]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[145,82,4293]}]},f:[{t:2,r:"display_name",p:[145,127,4338]}]}],n:52,r:"data.medical_jobs",p:[144,6,4184]}]}]}," ",{p:[149,5,4405],t:7,e:"tr",f:[{p:[150,4,4413],t:7,e:"th",a:{style:"color: '#800080';"},f:["Science"]}," ",{p:[151,4,4459],t:7,e:"td",f:[{t:4,f:[{p:[153,5,4501],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[153,64,4560]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[153,82,4578]}]},f:[{t:2,r:"display_name",p:[153,127,4623]}]}],n:52,r:"data.science_jobs",p:[152,6,4469]}]}]}," ",{p:[157,5,4690],t:7,e:"tr",f:[{p:[158,4,4698],t:7,e:"th",a:{style:"color: '#DD0000';"},f:["Security"]}," ",{p:[159,4,4745],t:7,e:"td",f:[{t:4,f:[{p:[161,5,4788],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[161,64,4847]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[161,82,4865]}]},f:[{t:2,r:"display_name",p:[161,127,4910]}]}],n:52,r:"data.security_jobs",p:[160,6,4755]}]}]}," ",{p:[165,5,4977],t:7,e:"tr",f:[{p:[166,4,4985],t:7,e:"th",a:{style:"color: '#cc6600';"},f:["Cargo"]}," ",{p:[167,4,5029],t:7,e:"td",f:[{t:4,f:[{p:[169,5,5069],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[169,64,5128]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[169,82,5146]}]},f:[{t:2,r:"display_name",p:[169,127,5191]}]}],n:52,r:"data.cargo_jobs",p:[168,6,5039]}]}]}," ",{p:[173,5,5258],t:7,e:"tr",f:[{p:[174,4,5266],t:7,e:"th",a:{style:"color: '#808080';"},f:["Civilian"]}," ",{p:[175,4,5313],t:7,e:"td",f:[{t:4,f:[{p:[177,5,5356],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[177,64,5415]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[177,82,5433]}]},f:[{t:2,r:"display_name",p:[177,127,5478]}]}],n:52,r:"data.civilian_jobs",p:[176,6,5323]}]}]}," ",{t:4,f:[{p:[182,4,5576],t:7,e:"tr",f:[{p:[183,6,5586],t:7,e:"th",a:{style:"color: '#A52A2A';"},f:["CentCom"]}," ",{p:[184,6,5634],t:7,e:"td",f:[{t:4,f:[{p:[186,7,5677],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[186,66,5736]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[186,84,5754]}]},f:[{t:2,r:"display_name",p:[186,129,5799]}]}],n:52,r:"data.centcom_jobs",p:[185,5,5643]}]}]}],n:50,r:"data.centcom_access",p:[181,5,5545]}]}]}],n:50,r:"data.assignments",p:[118,4,3401]}]}],r:"data.minor"}," ",{t:4,f:[{p:[198,4,5956],t:7,e:"div",a:{"class":"item"},f:[{p:[199,3,5977],t:7,e:"h2",f:["Central Command"]}]}," ",{p:[201,4,6015],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[203,5,6094],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[204,5,6128],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[204,64,6187]},'", "allowed" : "',{t:2,r:"allowed",p:[204,87,6210]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[204,109,6232]}]},f:[{t:2,r:"desc",p:[204,140,6263]}]}]}],n:52,r:"data.all_centcom_access",p:[202,3,6056]}]}],n:50,r:"data.centcom_access",p:[197,2,5925]},{t:4,n:51,f:[{p:[209,4,6330],t:7,e:"div",a:{"class":"item"},f:[{p:[210,3,6351],t:7,e:"h2",f:[{t:2,r:"data.station_name",p:[210,7,6355]}]}]}," ",{p:[212,4,6395],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[214,5,6463],t:7,e:"div",a:{style:"float: left; width: 175px; min-height: 250px"},f:[{p:[215,4,6525],t:7,e:"div",a:{"class":"average"},f:[{p:[215,25,6546],t:7,e:"ui-button",a:{action:"PRG_regsel",state:[{t:2,x:{r:["selected"],s:'_0?"toggle":null'},p:[215,63,6584]}],params:['{"region" : "',{t:2,r:"regid",p:[215,116,6637]},'"}']},f:[{p:[215,129,6650],t:7,e:"b",f:[{t:2,r:"name",p:[215,132,6653]}]}]}]}," ",{p:[216,4,6687],t:7,e:"br"}," ",{t:4,f:[{p:[218,6,6721],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[219,5,6755],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[219,64,6814]},'", "allowed" : "',{t:2,r:"allowed",p:[219,87,6837]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[219,109,6859]}]},f:[{t:2,r:"desc",p:[219,140,6890]}]}]}],n:52,r:"accesses",p:[217,6,6697]}]}],n:52,r:"data.regions",p:[213,3,6436]}]}],r:"data.centcom_access"}],n:50,r:"data.has_id",p:[67,3,2274]}],n:50,r:"data.authenticated",p:[66,1,2245]}]}],x:{r:["data.mmode"],s:"!_0"}}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],419:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargeState:function(t){var e=this.get("data.battery.max");return t>e/2?"good":t>e/4?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,297],t:7,e:"ntosheader"}," ",{p:[17,1,312],t:7,e:"ui-display",f:[{p:[18,2,326],t:7,e:"i",f:["Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device."]},{p:[18,137,461],t:7,e:"hr"}," ",{p:[19,2,467],t:7,e:"ui-display",a:{title:"Power Supply"},f:[{p:[20,3,503],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"data.power_usage",p:[21,4,539]},"W"]}," ",{t:4,f:[{p:[25,4,606],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Active"]}," ",{p:[28,4,674],t:7,e:"ui-section",a:{label:"Battery Rating"},f:[{t:2,r:"data.battery.max",p:[29,5,714]}]}," ",{p:[31,4,755],t:7,e:"ui-section",a:{label:"Battery Charge"},f:[{p:[32,5,795],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.battery.max",p:[32,26,816]}],value:[{t:2,r:"adata.battery.charge",p:[32,56,846]}],state:[{t:2,x:{r:["chargeState","adata.battery.charge"],s:"_0(_1)"},p:[32,89,879]}]},f:[{t:2,x:{r:["adata.battery.charge"],s:"Math.round(_0)"},p:[32,128,918]},"/",{t:2,r:"adata.battery.max",p:[32,165,955]}]}]}],n:50,r:"data.battery",p:[24,3,582]},{t:4,n:51,f:[{p:[35,4,1017],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Not Available"]}],r:"data.battery"}]}," ",{p:[41,2,1116],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,3,1151],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,4,1189],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,25,1210]}],value:[{t:2,r:"adata.disk_used",p:[43,53,1238]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,87,1272]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,123,1308]},"GQ"]}]}]}," ",{p:[47,2,1373],t:7,e:"ui-display",a:{title:"Computer Components"},f:[{t:4,f:[{p:[49,4,1443],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[49,26,1465]}]},f:[{p:[50,5,1480],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"desc",p:[50,59,1534]}]}," ",{p:[52,5,1554],t:7,e:"ui-section",a:{label:"State"},f:[{p:[53,6,1586],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["critical"],s:'_0?"disabled":null'},p:[53,24,1604]}],action:"PC_toggle_component",params:['{"name": "',{t:2,r:"name",p:[53,105,1685]},'"}']},f:[{t:2,x:{r:["enabled"],s:'_0?"Enabled":"Disabled"'},p:[54,7,1704]}]}]}," ",{t:4,f:[{p:[59,6,1810],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"powerusage",p:[60,7,1849]},"W"]}],n:50,r:"powerusage",p:[58,5,1786]}]}," ",{p:[64,4,1922],t:7,e:"br"}],n:52,r:"data.hardware",p:[48,3,1416]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],420:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,3,97],t:7,e:"h2",f:["An error has occurred and this program can not continue."]}," Additional information: ",{t:2,r:"data.error",p:[8,27,189]},{p:[8,41,203],t:7,e:"br"}," ",{p:[9,3,210],t:7,e:"i",f:["Please try again. If the problem persists contact your system administrator for assistance."]}," ",{p:[10,3,311],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["Restart program"]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,f:[{p:[13,4,410],t:7,e:"h2",f:["Viewing file ",{t:2,r:"data.filename",p:[13,21,427]}]}," ",{p:[14,4,453],t:7,e:"div",a:{"class":"item"},f:[{p:[15,4,475],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["CLOSE"]}," ",{p:[16,4,530],t:7,e:"ui-button",a:{action:"PRG_edit"},f:["EDIT"]}," ",{p:[17,4,579],t:7,e:"ui-button",a:{action:"PRG_printfile"},f:["PRINT"]}," "]},{p:[18,10,640],t:7,e:"hr"}," ",{t:3,r:"data.filedata",p:[19,4,648]}],n:50,r:"data.filename",p:[12,3,385]},{t:4,n:51,f:[{p:[21,4,682],t:7,e:"h2",f:["Available files (local):"]}," ",{p:[22,4,719],t:7,e:"table",f:[{p:[23,5,731],t:7,e:"tr",f:[{p:[24,6,741],t:7,e:"th",f:["File name"]}," ",{p:[25,6,765],t:7,e:"th",f:["File type"]}," ",{p:[26,6,789],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[27,6,818],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[30,6,878],t:7,e:"tr",f:[{p:[31,7,889],t:7,e:"td",f:[{t:2,r:"name",p:[31,11,893]}]}," ",{p:[32,7,913],t:7,e:"td",f:[".",{t:2,r:"type",p:[32,12,918]}]}," ",{p:[33,7,938],t:7,e:"td",f:[{t:2,r:"size",p:[33,11,942]},"GQ"]}," ",{p:[34,7,964],t:7,e:"td",f:[{p:[35,8,976],t:7,e:"ui-button",a:{action:"PRG_openfile",params:['{"name": "',{t:2,r:"name",p:[35,59,1027]},'"}']},f:["VIEW"]}," ",{p:[36,8,1063],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[36,26,1081]}],action:"PRG_deletefile",params:['{"name": "',{t:2,r:"name",p:[36,105,1160]},'"}']},f:["DELETE"]}," ",{p:[37,8,1198],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[37,26,1216]}],action:"PRG_rename",params:['{"name": "',{t:2,r:"name",p:[37,101,1291]},'"}']},f:["RENAME"]}," ",{p:[38,8,1329],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[38,26,1347]}],action:"PRG_clone",params:['{"name": "',{t:2,r:"name",p:[38,100,1421]},'"}']},f:["CLONE"]}," ",{t:4,f:[{p:[40,9,1492],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[40,27,1510]}],action:"PRG_copytousb",params:['{"name": "',{t:2,r:"name",p:[40,105,1588]},'"}']},f:["EXPORT"]}],n:50,r:"data.usbconnected",p:[39,8,1458]}]}]}],n:52,r:"data.files",p:[29,5,852]}]}," ",{t:4,f:[{p:[47,4,1715],t:7,e:"h2",f:["Available files (portable device):"]}," ",{p:[48,4,1762],t:7,e:"table",f:[{p:[49,5,1774],t:7,e:"tr",f:[{p:[50,6,1784],t:7,e:"th",f:["File name"]}," ",{p:[51,6,1808],t:7,e:"th",f:["File type"]}," ",{p:[52,6,1832],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[53,6,1861],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[56,6,1924],t:7,e:"tr",f:[{p:[57,7,1935],t:7,e:"td",f:[{t:2,r:"name",p:[57,11,1939]}]}," ",{p:[58,7,1959],t:7,e:"td",f:[".",{t:2,r:"type",p:[58,12,1964]}]}," ",{p:[59,7,1984],t:7,e:"td",f:[{t:2,r:"size",p:[59,11,1988]},"GQ"]}," ",{p:[60,7,2010],t:7,e:"td",f:[{p:[61,8,2022],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[61,26,2040]}],action:"PRG_usbdeletefile",params:['{"name": "',{t:2,r:"name",p:[61,108,2122]},'"}']},f:["DELETE"]}," ",{t:4,f:[{p:[63,9,2194],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[63,27,2212]}],action:"PRG_copyfromusb",params:['{"name": "',{t:2,r:"name",p:[63,107,2292]},'"}']},f:["IMPORT"]}],n:50,r:"data.usbconnected",p:[62,8,2160]}]}]}],n:52,r:"data.usbfiles",p:[55,5,1895]}]}],n:50,r:"data.usbconnected",p:[46,4,1686]}," ",{p:[70,4,2401],t:7,e:"ui-button",a:{action:"PRG_newtextfile"},f:["NEW DATA FILE"]}],r:"data.filename"}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],421:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["No program loaded. Please select program from list below."]}," ",{p:[6,2,141],t:7,e:"table",f:[{t:4,f:[{p:[8,4,178],t:7,e:"tr",f:[{p:[8,8,182],t:7,e:"td",f:[{p:[8,12,186],t:7,e:"ui-button",a:{action:"PC_runprogram",params:['{"name": "',{t:2,r:"name",p:[8,64,238]},'"}']},f:[{t:2,r:"desc",p:[9,5,255]}]}]},{p:[11,4,283],t:7,e:"td",f:[{p:[11,8,287],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["running"],s:'_0?null:"disabled"'},p:[11,26,305]}],icon:"close",action:"PC_killprogram",params:['{"name": "',{t:2,r:"name",p:[11,114,393]},'"}']}}]}]}],n:52,r:"data.programs",p:[7,3,151]}]}," ",{p:[14,2,441],t:7,e:"br"},{p:[14,6,445],t:7,e:"br"}," ",{t:4,f:[{p:[16,3,476],t:7,e:"ui-button",a:{action:"PC_toggle_light",style:[{t:2,x:{r:["data.light_on"],s:'_0?"selected":null'},p:[16,46,519]}]},f:["Toggle Flashlight"]},{p:[16,114,587],t:7,e:"br"}," ",{p:[17,3,594],t:7,e:"ui-button",a:{action:"PC_light_color"},f:["Change Flashlight Color ",{p:[17,62,653],t:7,e:"span",a:{style:["border:1px solid #161616; background-color: ",{t:2,r:"data.comp_light_color",p:[17,119,710]},";"]},f:[" "]}]}],n:50,r:"data.has_light",p:[15,2,451]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],422:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[6,3,100],t:7,e:"h1",f:["ADMINISTRATIVE MODE"]}],n:50,r:"data.adminmode",p:[5,2,75]}," ",{t:4,f:[{p:[10,3,161],t:7,e:"div",a:{"class":"itemLabel"},f:["Current channel:"]}," ",{p:[13,3,217],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.title",p:[14,4,246]}]}," ",{p:[16,3,272],t:7,e:"div",a:{"class":"itemLabel"},f:["Operator access:"]}," ",{p:[19,3,328],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:[{p:[21,5,386],t:7,e:"b",f:["Enabled"]}],n:50,r:"data.is_operator",p:[20,4,357]},{t:4,n:51,f:[{p:[23,5,417],t:7,e:"b",f:["Disabled"]}],r:"data.is_operator"}]}," ",{p:[26,3,455],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[29,3,504],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[30,4,533],t:7,e:"table",f:[{p:[31,5,545],t:7,e:"tr",f:[{p:[31,9,549],t:7,e:"td",f:[{p:[31,13,553],t:7,e:"ui-button",a:{action:"PRG_speak"},f:["Send message"]}]}]},{p:[32,5,612],t:7,e:"tr",f:[{p:[32,9,616],t:7,e:"td",f:[{p:[32,13,620],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[33,5,687],t:7,e:"tr",f:[{p:[33,9,691],t:7,e:"td",f:[{p:[33,13,695],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]},{p:[34,5,774],t:7,e:"tr",f:[{p:[34,9,778],t:7,e:"td",f:[{p:[34,13,782],t:7,e:"ui-button",a:{action:"PRG_leavechannel"},f:["Leave channel"]}]}]},{p:[35,5,849],t:7,e:"tr",f:[{p:[35,9,853],t:7,e:"td",f:[{p:[35,13,857],t:7,e:"ui-button",a:{action:"PRG_savelog"},f:["Save log to local drive"]}," ",{t:4,f:[{p:[37,6,959],t:7,e:"tr",f:[{p:[37,10,963],t:7,e:"td",f:[{p:[37,14,967],t:7,e:"ui-button",a:{action:"PRG_renamechannel"},f:["Rename channel"]}]}]},{p:[38,6,1037],t:7,e:"tr",f:[{p:[38,10,1041],t:7,e:"td",f:[{p:[38,14,1045],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}]}]},{p:[39,6,1111],t:7,e:"tr",f:[{p:[39,10,1115],t:7,e:"td",f:[{p:[39,14,1119],t:7,e:"ui-button",a:{action:"PRG_deletechannel"},f:["Delete channel"]}]}]}],n:50,r:"data.is_operator",p:[36,5,929]}]}]}]}]}," ",{p:[43,3,1221],t:7,e:"b",f:["Chat Window"]}," ",{p:[44,4,1243],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[45,4,1298],t:7,e:"div",a:{"class":"item"},f:[{p:[46,5,1321],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"msg",p:[48,7,1403]},{p:[48,14,1410],t:7,e:"br"}],n:52,r:"data.messages",p:[47,6,1373]}]}]}]}," ",{p:[53,3,1464],t:7,e:"b",f:["Connected Users"]},{p:[53,25,1486],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"name",p:[55,4,1519]},{p:[55,12,1527],t:7,e:"br"}],n:52,r:"data.clients",p:[54,3,1493]}],n:50,r:"data.title",p:[9,2,140]},{t:4,n:51,f:[{p:[58,3,1556],t:7,e:"b",f:["Controls:"]}," ",{p:[59,3,1575],t:7,e:"table",f:[{p:[60,4,1586],t:7,e:"tr",f:[{p:[60,8,1590],t:7,e:"td",f:[{p:[60,12,1594],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[61,4,1660],t:7,e:"tr",f:[{p:[61,8,1664],t:7,e:"td",f:[{p:[61,12,1668],t:7,e:"ui-button",a:{action:"PRG_newchannel"},f:["New Channel"]}]}]},{p:[62,4,1730],t:7,e:"tr",f:[{p:[62,8,1734],t:7,e:"td",f:[{p:[62,12,1738],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]}]}," ",{p:[64,3,1826],t:7,e:"b",f:["Available channels:"]}," ",{p:[65,3,1855],t:7,e:"table",f:[{t:4,f:[{p:[67,4,1898],t:7,e:"tr",f:[{p:[67,8,1902],t:7,e:"td",f:[{p:[67,12,1906],t:7,e:"ui-button",a:{action:"PRG_joinchannel",params:['{"id": "',{t:2,r:"id",p:[67,64,1958]},'"}']},f:[{t:2,r:"chan",p:[67,74,1968]}]},{p:[67,94,1988],t:7,e:"br"}]}]}],n:52,r:"data.all_channels",p:[66,3,1865]}]}],r:"data.title"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],423:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:["##SYSTEM ERROR: ",{t:2,r:"data.error",p:[6,19,112]},{p:[6,33,126],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["RESET"]}],n:50,r:"data.error",p:[5,2,75]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.target"],s:"_0"},f:["##DoS traffic generator active. Tx: ",{t:2,r:"data.speed",p:[8,39,236]},"GQ/s",{p:[8,57,254],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"nums",p:[10,4,291]},{p:[10,12,299],t:7,e:"br"}],n:52,r:"data.dos_strings",p:[9,3,261]}," ",{p:[12,3,318],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["ABORT"]}]},{t:4,n:50,x:{r:["data.target"],s:"!(_0)"},f:[" ##DoS traffic generator ready. Select target device.",{p:[14,55,430],t:7,e:"br"}," ",{t:4,f:["Targeted device ID: ",{t:2,r:"data.focus",p:[16,24,479]}],n:50,r:"data.focus",p:[15,3,437]},{t:4,n:51,f:["Targeted device ID: None"],r:"data.focus"}," ",{p:[20,3,545],t:7,e:"ui-button",a:{action:"PRG_execute"},f:["EXECUTE"]},{p:[20,54,596],t:7,e:"div",a:{style:"clear:both"}}," Detected devices on network:",{p:[21,31,657],t:7,e:"br"}," ",{t:4,f:[{p:[23,4,689],t:7,e:"ui-button",a:{action:"PRG_target_relay",params:['{"targid": "',{t:2,r:"id",p:[23,61,746]},'"}']},f:[{t:2,r:"id",p:[23,71,756]}]}],n:52,r:"data.relays",p:[22,3,664]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],424:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["Welcome to software download utility. Please select which software you wish to download."]},{p:[5,97,170],t:7,e:"hr"}," ",{t:4,f:[{p:[7,3,197],t:7,e:"ui-display",a:{title:"Download Error"},f:[{p:[8,4,236],t:7,e:"ui-section",a:{label:"Information"},f:[{t:2,r:"data.error",p:[9,5,273]}]}," ",{p:[11,4,308],t:7,e:"ui-section",a:{label:"Reset Program"},f:[{p:[12,5,347],t:7,e:"ui-button",a:{icon:"times",action:"PRG_reseterror"},f:["RESET"]}]}]}],n:50,r:"data.error",p:[6,2,176]},{t:4,n:51,f:[{t:4,f:[{p:[19,4,498],t:7,e:"ui-display",a:{title:"Download Running"},f:[{p:[20,5,540],t:7,e:"i",f:["Please wait..."]}," ",{p:[21,5,566],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"data.downloadname",p:[22,6,602]}]}," ",{p:[24,5,646],t:7,e:"ui-section",a:{label:"File description"},f:[{t:2,r:"data.downloaddesc",p:[25,6,689]}]}," ",{p:[27,5,733],t:7,e:"ui-section",a:{label:"File size"},f:[{t:2,r:"data.downloadsize",p:[28,6,769]},"GQ"]}," ",{p:[30,5,815],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{t:2,r:"data.downloadspeed",p:[31,6,855]}," GQ/s"]}," ",{p:[33,5,905],t:7,e:"ui-section",a:{label:"Download progress"},f:[{p:[34,6,949],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.downloadsize",p:[34,27,970]}],value:[{t:2,r:"adata.downloadcompletion",p:[34,58,1001]}],state:"good"},f:[{t:2,x:{r:["adata.downloadcompletion"],s:"Math.round(_0)"},p:[34,101,1044]},"GQ / ",{t:2,r:"adata.downloadsize",p:[34,146,1089]},"GQ"]}]}]}],n:50,r:"data.downloadname",p:[18,3,469]}],r:"data.error"}," ",{t:4,f:[{t:4,f:[{p:[41,4,1230],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,5,1267],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,6,1307],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,27,1328]}],value:[{t:2,r:"adata.disk_used",p:[43,55,1356]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,89,1390]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,125,1426]},"GQ"]}]}]}," ",{p:[47,4,1499],t:7,e:"ui-display",a:{title:"Primary Software Repository"},f:[{t:4,f:[{p:[49,6,1594],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[49,28,1616]}]},f:[{p:[50,7,1637],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[50,61,1691]}]}," ",{p:[52,7,1723],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[53,8,1761]}," (",{t:2,r:"size",p:[53,22,1775]}," GQ)"]}," ",{p:[55,7,1814],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[56,8,1856]}]}," ",{p:[58,7,1900],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[58,80,1973]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[62,6,2052],t:7,e:"br"}],n:52,r:"data.downloadable_programs",p:[48,5,1552]}]}," ",{t:4,f:[{p:[67,5,2128],t:7,e:"ui-display",a:{title:"UNKNOWN Software Repository"},f:[{p:[68,6,2182],t:7,e:"i",f:["Please note that Nanotrasen does not recommend download of software from non-official servers."]}," ",{t:4,f:[{p:[70,7,2326],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[70,29,2348]}]},f:[{p:[71,8,2370],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[71,62,2424]}]}," ",{p:[73,8,2458],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[74,9,2497]}," (",{t:2,r:"size",p:[74,23,2511]}," GQ)"]}," ",{p:[76,8,2552],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[77,9,2595]}]}," ",{p:[79,8,2641],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[79,81,2714]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[83,7,2797],t:7,e:"br"}],n:52,r:"data.hacked_programs",p:[69,6,2289]}]}],n:50,r:"data.hackedavailable",p:[66,4,2095]}],n:50,x:{r:["data.error"],s:"!_0"},p:[40,3,1207]}],n:50,x:{r:["data.downloadname"],s:"!_0"},p:[39,2,1178]}," ",{p:[89,2,2866],t:7,e:"br"},{p:[89,6,2870],t:7,e:"br"},{p:[89,10,2874],t:7,e:"hr"},{p:[89,14,2878],t:7,e:"i",f:["NTOS v2.0.4b Copyright Nanotrasen 2557 - 2559"]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],
+425:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[6,2,76],t:7,e:"ui-display",a:{title:"WIRELESS CONNECTIVITY"},f:[{p:[8,3,122],t:7,e:"ui-section",a:{label:"Active NTNetRelays"},f:[{p:[9,4,165],t:7,e:"b",f:[{t:2,r:"data.ntnetrelays",p:[9,7,168]}]}]}," ",{t:4,f:[{p:[12,4,239],t:7,e:"ui-section",a:{label:"System status"},f:[{p:[13,6,279],t:7,e:"b",f:[{t:2,x:{r:["data.ntnetstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[13,9,282]}]}]}," ",{p:[15,4,352],t:7,e:"ui-section",a:{label:"Control"},f:[{p:[17,4,385],t:7,e:"ui-button",a:{icon:"plus",action:"toggleWireless"},f:["TOGGLE"]}]}," ",{p:[21,4,480],t:7,e:"br"},{p:[21,8,484],t:7,e:"br"}," ",{p:[22,4,492],t:7,e:"i",f:["Caution - Disabling wireless transmitters when using wireless device may prevent you from re-enabling them again!"]}],n:50,r:"data.ntnetrelays",p:[11,3,211]},{t:4,n:51,f:[{p:[24,4,627],t:7,e:"br"},{p:[24,8,631],t:7,e:"p",f:["Wireless coverage unavailable, no relays are connected."]}],r:"data.ntnetrelays"}]}," ",{p:[29,2,722],t:7,e:"ui-display",a:{title:"FIREWALL CONFIGURATION"},f:[{p:[31,2,768],t:7,e:"table",f:[{p:[32,3,778],t:7,e:"tr",f:[{p:[33,4,786],t:7,e:"th",f:["PROTOCOL"]},{p:[34,4,802],t:7,e:"th",f:["STATUS"]},{p:[35,4,816],t:7,e:"th",f:["CONTROL"]}]},{p:[36,3,830],t:7,e:"tr",f:[" ",{p:[37,4,838],t:7,e:"td",f:["Software Downloads"]},{p:[38,4,864],t:7,e:"td",f:[{t:2,x:{r:["data.config_softwaredownload"],s:'_0?"ENABLED":"DISABLED"'},p:[38,8,868]}]},{p:[39,4,929],t:7,e:"td",f:[" ",{p:[39,9,934],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "1"}'},f:["TOGGLE"]}]}]},{p:[40,3,1012],t:7,e:"tr",f:[" ",{p:[41,4,1020],t:7,e:"td",f:["Peer to Peer Traffic"]},{p:[42,4,1048],t:7,e:"td",f:[{t:2,x:{r:["data.config_peertopeer"],s:'_0?"ENABLED":"DISABLED"'},p:[42,8,1052]}]},{p:[43,4,1107],t:7,e:"td",f:[{p:[43,8,1111],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "2"}'},f:["TOGGLE"]}]}]},{p:[44,3,1189],t:7,e:"tr",f:[" ",{p:[45,4,1197],t:7,e:"td",f:["Communication Systems"]},{p:[46,4,1226],t:7,e:"td",f:[{t:2,x:{r:["data.config_communication"],s:'_0?"ENABLED":"DISABLED"'},p:[46,8,1230]}]},{p:[47,4,1288],t:7,e:"td",f:[{p:[47,8,1292],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "3"}'},f:["TOGGLE"]}]}]},{p:[48,3,1370],t:7,e:"tr",f:[" ",{p:[49,4,1378],t:7,e:"td",f:["Remote System Control"]},{p:[50,4,1407],t:7,e:"td",f:[{t:2,x:{r:["data.config_systemcontrol"],s:'_0?"ENABLED":"DISABLED"'},p:[50,8,1411]}]},{p:[51,4,1469],t:7,e:"td",f:[{p:[51,8,1473],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "4"}'},f:["TOGGLE"]}]}]}]}]}," ",{p:[55,2,1576],t:7,e:"ui-display",a:{title:"SECURITY SYSTEMS"},f:[{t:4,f:[{p:[58,4,1642],t:7,e:"ui-notice",f:[{p:[59,5,1658],t:7,e:"h1",f:["NETWORK INCURSION DETECTED"]}]}," ",{p:[61,5,1714],t:7,e:"i",f:["An abnormal activity has been detected in the network. Please verify system logs for more information"]}],n:50,r:"data.idsalarm",p:[57,3,1617]}," ",{p:[64,3,1839],t:7,e:"ui-section",a:{label:"Intrusion Detection System"},f:[{p:[65,4,1890],t:7,e:"b",f:[{t:2,x:{r:["data.idsstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[65,7,1893]}]}]}," ",{p:[68,3,1962],t:7,e:"ui-section",a:{label:"Maximal Log Count"},f:[{p:[69,4,2004],t:7,e:"b",f:[{t:2,r:"data.ntnetmaxlogs",p:[69,7,2007]}]}]}," ",{p:[72,3,2054],t:7,e:"ui-section",a:{label:"Controls"},f:[]}," ",{p:[74,4,2103],t:7,e:"table",f:[{p:[75,4,2114],t:7,e:"tr",f:[{p:[75,8,2118],t:7,e:"td",f:[{p:[75,12,2122],t:7,e:"ui-button",a:{action:"resetIDS"},f:["RESET IDS"]}]}]},{p:[76,4,2176],t:7,e:"tr",f:[{p:[76,8,2180],t:7,e:"td",f:[{p:[76,12,2184],t:7,e:"ui-button",a:{action:"toggleIDS"},f:["TOGGLE IDS"]}]}]},{p:[77,4,2240],t:7,e:"tr",f:[{p:[77,8,2244],t:7,e:"td",f:[{p:[77,12,2248],t:7,e:"ui-button",a:{action:"updatemaxlogs"},f:["SET LOG LIMIT"]}]}]},{p:[78,4,2311],t:7,e:"tr",f:[{p:[78,8,2315],t:7,e:"td",f:[{p:[78,12,2319],t:7,e:"ui-button",a:{action:"purgelogs"},f:["PURGE LOGS"]}]}]}]}," ",{p:[81,3,2387],t:7,e:"ui-subdisplay",a:{title:"System Logs"},f:[{p:[82,3,2425],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[83,3,2479],t:7,e:"div",a:{"class":"item"},f:[{p:[84,4,2501],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"entry",p:[86,6,2582]},{p:[86,15,2591],t:7,e:"br"}],n:52,r:"data.ntnetlogs",p:[85,5,2552]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],426:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,2,96],t:7,e:"div",a:{"class":"item"},f:[{p:[8,3,117],t:7,e:"h2",f:["An error has occurred during operation..."]}," ",{p:[9,3,170],t:7,e:"b",f:["Additional information:"]},{t:2,r:"data.error",p:[9,34,201]},{p:[9,48,215],t:7,e:"br"}," ",{p:[10,3,222],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Clear"]}]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.downloading"],s:"_0"},f:[{p:[13,3,309],t:7,e:"h2",f:["Download in progress..."]}," ",{p:[14,3,344],t:7,e:"div",a:{"class":"itemLabel"},f:["Downloaded file:"]}," ",{p:[17,3,400],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_name",p:[18,4,429]}]}," ",{p:[20,3,464],t:7,e:"div",a:{"class":"itemLabel"},f:["Download progress:"]}," ",{p:[23,3,522],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_progress",p:[24,4,551]}," / ",{t:2,r:"data.download_size",p:[24,33,580]}," GQ"]}," ",{p:[26,3,617],t:7,e:"div",a:{"class":"itemLabel"},f:["Transfer speed:"]}," ",{p:[29,3,672],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_netspeed",p:[30,4,701]},"GQ/s"]}," ",{p:[32,3,743],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[35,3,792],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[36,4,821],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Abort download"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading"],s:"(!(_0))&&(_1)"},f:[" ",{p:[39,3,916],t:7,e:"h2",f:["Server enabled"]}," ",{p:[40,3,942],t:7,e:"div",a:{"class":"itemLabel"},f:["Connected clients:"]}," ",{p:[43,3,1e3],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_clients",p:[44,4,1029]}]}," ",{p:[46,3,1064],t:7,e:"div",a:{"class":"itemLabel"},f:["Provided file:"]}," ",{p:[49,3,1118],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_filename",p:[50,4,1147]}]}," ",{p:[52,3,1183],t:7,e:"div",a:{"class":"itemLabel"},f:["Server password:"]}," ",{p:[55,3,1239],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ENABLED"],n:50,r:"data.upload_haspassword",p:[56,4,1268]},{t:4,n:51,f:["DISABLED"],r:"data.upload_haspassword"}]}," ",{p:[62,3,1359],t:7,e:"div",a:{"class":"itemLabel"},f:["Commands:"]}," ",{p:[65,3,1408],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[66,4,1437],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[67,4,1501],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Exit server"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(_2))"},f:[" ",{p:[70,3,1599],t:7,e:"h2",f:["File transfer server ready. Select file to upload:"]}," ",{p:[71,3,1662],t:7,e:"table",f:[{p:[72,3,1672],t:7,e:"tr",f:[{p:[72,7,1676],t:7,e:"th",f:["File name"]},{p:[72,20,1689],t:7,e:"th",f:["File size"]},{p:[72,33,1702],t:7,e:"th",f:["Controls ",{t:4,f:[{p:[74,4,1751],t:7,e:"tr",f:[{p:[74,8,1755],t:7,e:"td",f:[{t:2,r:"filename",p:[74,12,1759]}]},{p:[75,4,1775],t:7,e:"td",f:[{t:2,r:"size",p:[75,8,1779]},"GQ"]},{p:[76,4,1793],t:7,e:"td",f:[{p:[76,8,1797],t:7,e:"ui-button",a:{action:"PRG_uploadfile",params:['{"id": "',{t:2,r:"uid",p:[76,59,1848]},'"}']},f:["Select"]}]}]}],n:52,r:"data.upload_filelist",p:[73,3,1717]}]}]}]}," ",{p:[79,3,1903],t:7,e:"hr"}," ",{p:[80,3,1910],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[81,3,1973],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Return"]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(!(_2)))"},f:[" ",{p:[83,3,2034],t:7,e:"h2",f:["Available files:"]}," ",{p:[84,3,2062],t:7,e:"table",a:{border:"1",style:"border-collapse: collapse"},f:[{p:[84,55,2114],t:7,e:"tr",f:[{p:[84,59,2118],t:7,e:"th",f:["Server UID"]},{p:[84,73,2132],t:7,e:"th",f:["File Name"]},{p:[84,86,2145],t:7,e:"th",f:["File Size"]},{p:[84,99,2158],t:7,e:"th",f:["Password Protection"]},{p:[84,122,2181],t:7,e:"th",f:["Operations ",{t:4,f:[{p:[86,5,2226],t:7,e:"tr",f:[{p:[86,9,2230],t:7,e:"td",f:[{t:2,r:"uid",p:[86,13,2234]}]},{p:[87,5,2246],t:7,e:"td",f:[{t:2,r:"filename",p:[87,9,2250]}]},{p:[88,5,2267],t:7,e:"td",f:[{t:2,r:"size",p:[88,9,2271]},"GQ ",{t:4,f:[{p:[90,6,2311],t:7,e:"td",f:["Enabled"]}],n:50,r:"haspassword",p:[89,5,2286]}," ",{t:4,f:[{p:[93,6,2365],t:7,e:"td",f:["Disabled"]}],n:50,x:{r:["haspassword"],s:"!_0"},p:[92,5,2339]}]},{p:[96,5,2399],t:7,e:"td",f:[{p:[96,9,2403],t:7,e:"ui-button",a:{action:"PRG_downloadfile",params:['{"id": "',{t:2,r:"uid",p:[96,62,2456]},'"}']},f:["Download"]}]}]}],n:52,r:"data.servers",p:[85,4,2199]}]}]}]}," ",{p:[99,3,2514],t:7,e:"hr"}," ",{p:[100,3,2521],t:7,e:"ui-button",a:{action:"PRG_uploadmenu"},f:["Send file"]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],427:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[43,1,1040],t:7,e:"ntosheader"}," ",{p:[45,1,1055],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[47,5,1111],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[47,27,1133]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[49,38,1283]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[50,15,1338]}],yinc:"9"}}],n:50,r:"config.fancy",p:[46,3,1086]},{t:4,n:51,f:[{p:[52,5,1386],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[53,7,1423],t:7,e:"span",f:[{t:2,r:"data.supply",p:[53,13,1429]}]}]}," ",{p:[55,5,1474],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[56,9,1508],t:7,e:"span",f:[{t:2,r:"data.demand",p:[56,15,1514]}]}]}],r:"config.fancy"}]}," ",{p:[60,1,1579],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[61,3,1608],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[62,5,1632],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[63,5,1668],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[64,5,1706],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[65,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[66,5,1780],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[67,5,1821],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[68,5,1861],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[71,5,1943],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[71,24,1962]}],nowrap:0},f:[{p:[72,7,1986],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[72,28,2007]}," %"]}," ",{p:[73,7,2064],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[73,28,2085]}]}," ",{p:[74,7,2126],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2147],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[74,41,2160]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[74,70,2189]}]}]}," ",{p:[75,7,2235],t:7,e:"div",a:{"class":"content"},f:[{p:[75,28,2256],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[75,41,2269]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[75,64,2292]}," [",{p:[75,87,2315],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[75,93,2321]}]},"]"]}]}," ",{p:[76,7,2369],t:7,e:"div",a:{"class":"content"},f:[{p:[76,28,2390],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[76,41,2403]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[76,64,2426]}," [",{p:[76,87,2449],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[76,93,2455]}]},"]"]}]}," ",{p:[77,7,2503],t:7,e:"div",a:{"class":"content"},f:[{p:[77,28,2524],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[77,41,2537]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[77,64,2560]}," [",{p:[77,87,2583],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[77,93,2589]}]},"]"]}]}]}],n:52,r:"data.areas",p:[70,3,1918]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],428:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"div",a:{"class":"item"},f:[{p:[6,3,96],t:7,e:"div",a:{"class":"itemLabel"},f:["Payload status:"]}," ",{p:[9,3,150],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ARMED"],n:50,r:"data.armed",p:[10,4,179]},{t:4,n:51,f:["DISARMED"],r:"data.armed"}]}," ",{p:[16,3,255],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[19,3,303],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[20,4,332],t:7,e:"table",f:[{p:[21,4,343],t:7,e:"tr",f:[{p:[21,8,347],t:7,e:"td",f:[{p:[21,12,351],t:7,e:"ui-button",a:{action:"PRG_obfuscate"},f:["OBFUSCATE PROGRAM NAME"]}]}]},{p:[22,4,423],t:7,e:"tr",f:[{p:[22,8,427],t:7,e:"td",f:[{p:[22,12,431],t:7,e:"ui-button",a:{action:"PRG_arm",state:[{t:2,x:{r:["data.armed"],s:'_0?"danger":null'},p:[22,47,466]}]},f:[{t:2,x:{r:["data.armed"],s:'_0?"DISARM":"ARM"'},p:[22,81,500]}]}," ",{p:[23,4,549],t:7,e:"ui-button",a:{icon:"radiation",state:[{t:2,x:{r:["data.armed"],s:'_0?null:"disabled"'},p:[23,39,584]}],action:"PRG_activate"},f:["ACTIVATE"]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],429:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,3,91],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[5,22,110]}," Alarms"]},f:[{p:[6,5,133],t:7,e:"ul",f:[{t:4,f:[{p:[8,9,164],t:7,e:"li",f:[{t:2,r:".",p:[8,13,168]}]}],n:52,r:".",p:[7,7,144]},{t:4,n:51,f:[{p:[10,9,202],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[4,1,61]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],430:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{integState:function(t){var e=100;return t==e?"good":t>e/2?"average":"bad"},bigState:function(t,e,n){return charge>n?"bad":t>e?"average":"good"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[23,1,399],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[27,2,436],t:7,e:"ui-button",a:{action:"PRG_clear"},f:["Back to Menu"]},{p:[27,56,490],t:7,e:"br"}," ",{p:[28,3,497],t:7,e:"ui-display",a:{title:"Supermatter Status:"},f:[{p:[29,3,540],t:7,e:"ui-section",a:{label:"Core Integrity"},f:[{p:[30,5,580],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"adata.SM_integrity",p:[30,38,613]}],state:[{t:2,x:{r:["integState","adata.SM_integrity"],s:"_0(_1)"},p:[30,69,644]}]},f:[{t:2,r:"data.SM_integrity",p:[30,105,680]},"%"]}]}," ",{p:[32,3,730],t:7,e:"ui-section",a:{label:"Relative EER"},f:[{p:[33,5,768],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_power"],s:"_0(_1,150,300)"},p:[33,18,781]}]},f:[{t:2,r:"data.SM_power",p:[33,55,818]}," MeV/cm3"]}]}," ",{p:[35,3,869],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[36,5,906],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambienttemp"],s:"_0(_1,4000,5000)"},p:[36,18,919]}]},f:[{t:2,r:"data.SM_ambienttemp",p:[36,63,964]}," K"]}]}," ",{p:[38,3,1015],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[39,5,1049],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambientpressure"],s:"_0(_1,5000,10000)"},p:[39,18,1062]}]},f:[{t:2,r:"data.SM_ambientpressure",p:[39,68,1112]}," kPa"]}]}]}," ",{p:[42,3,1186],t:7,e:"hr"},{p:[42,7,1190],t:7,e:"br"}," ",{p:[43,3,1197],t:7,e:"ui-display",a:{title:"Gas Composition:"},f:[{t:4,f:[{p:[45,5,1263],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[45,24,1282]}]},f:[{t:2,r:"amount",p:[46,6,1298]}," %"]}],n:52,r:"data.gases",p:[44,4,1238]}]}],n:50,r:"data.active",p:[26,1,415]},{t:4,n:51,f:[{p:[51,2,1368],t:7,e:"ui-button",a:{action:"PRG_refresh"},f:["Refresh"]},{p:[51,53,1419],t:7,e:"br"}," ",{p:[52,2,1425],t:7,e:"ui-display",a:{title:"Detected Supermatters"},f:[{t:4,f:[{p:[54,3,1499],t:7,e:"ui-section",a:{label:"Area"},f:[{t:2,r:"area_name",p:[55,5,1529]}," - (#",{t:2,r:"uid",p:[55,23,1547]},")"]}," ",{p:[57,3,1574],t:7,e:"ui-section",a:{label:"Integrity"},f:[{t:2,r:"integrity",p:[58,5,1609]}," %"]}," ",{p:[60,3,1643],t:7,e:"ui-section",a:{label:"Options"},f:[{p:[61,5,1676],t:7,e:"ui-button",a:{action:"PRG_set",params:['{"target" : "',{t:2,r:"uid",p:[61,54,1725]},'"}']},f:["View Details"]}]}],n:52,r:"data.supermatters",p:[53,2,1469]}]}],r:"data.active"}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],431:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"item",style:"float: left"},f:[{p:[2,2,40],t:7,e:"table",f:[{p:[2,9,47],t:7,e:"tr",f:[{t:4,f:[{p:[4,3,110],t:7,e:"td",f:[{p:[4,7,114],t:7,e:"img",a:{src:[{t:2,r:"data.PC_batteryicon",p:[4,17,124]}]}}]}],n:50,x:{r:["data.PC_batteryicon","data.PC_showbatteryicon"],s:"_0&&_1"},p:[3,2,53]}," ",{t:4,f:[{p:[7,3,220],t:7,e:"td",f:[{p:[7,7,224],t:7,e:"b",f:[{t:2,r:"data.PC_batterypercent",p:[7,10,227]}]}]}],n:50,x:{r:["data.PC_batterypercent","data.PC_showbatteryicon"],s:"_0&&_1"},p:[6,2,160]}," ",{t:4,f:[{p:[10,3,296],t:7,e:"td",f:[{p:[10,7,300],t:7,e:"img",a:{src:[{t:2,r:"data.PC_ntneticon",p:[10,17,310]}]}}]}],n:50,r:"data.PC_ntneticon",p:[9,2,268]}," ",{t:4,f:[{p:[13,3,374],t:7,e:"td",f:[{p:[13,7,378],t:7,e:"img",a:{src:[{t:2,r:"data.PC_apclinkicon",p:[13,17,388]}]}}]}],n:50,r:"data.PC_apclinkicon",p:[12,2,344]}," ",{t:4,f:[{p:[16,3,454],t:7,e:"td",f:[{p:[16,7,458],t:7,e:"b",f:[{t:2,r:"data.PC_stationtime",p:[16,10,461]}]}]}],n:50,r:"data.PC_stationtime",p:[15,2,424]}," ",{t:4,f:[{p:[19,3,534],t:7,e:"td",f:[{p:[19,7,538],t:7,e:"img",a:{src:[{t:2,r:"icon",p:[19,17,548]}]}}]}],n:52,r:"data.PC_programheaders",p:[18,2,499]}]}]}]}," ",{p:[23,1,587],t:7,e:"div",a:{style:"float: right; margin-top: 5px"},f:[{p:[24,2,632],t:7,e:"ui-button",a:{action:"PC_shutdown"},f:["Shutdown"]}," ",{t:4,f:[{p:[26,3,720],t:7,e:"ui-button",a:{action:"PC_exit"},f:["EXIT PROGRAM"]}," ",{p:[27,3,775],t:7,e:"ui-button",a:{action:"PC_minimize"},f:["Minimize Program"]}],n:50,r:"data.PC_showexitprogram",p:[25,2,686]}]}," ",{p:[30,1,852],t:7,e:"div",a:{style:"clear: both"}}]},e.exports=a.extend(r.exports)},{341:341}],432:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Auth. Disk:"},f:[{t:4,f:[{p:[3,7,67],t:7,e:"ui-button",a:{icon:"eject",style:"selected",action:"eject_disk"},f:["++++++++++"]}],n:50,r:"data.disk_present",p:[2,3,35]},{t:4,n:51,f:[{p:[5,7,168],t:7,e:"ui-button",a:{icon:"plus",action:"insert_disk"},f:["----------"]}],r:"data.disk_present"}]}," ",{p:[8,1,259],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[9,3,289],t:7,e:"span",f:[{t:2,r:"data.status1",p:[9,9,295]},"-",{t:2,r:"data.status2",p:[9,26,312]}]}]}," ",{p:[11,1,350],t:7,e:"ui-display",a:{title:"Timer"},f:[{p:[12,3,379],t:7,e:"ui-section",a:{label:"Time to Detonation"},f:[{p:[13,5,423],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[13,11,429]}]}]}," ",{t:4,f:[{p:[16,5,525],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[17,7,565],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_default"],s:'_0&&_1&&_2?null:"disabled"'},p:[17,40,598]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[19,7,768],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_min"],s:'_0&&_1&&_2?null:"disabled"'},p:[19,38,799]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[21,7,971],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[21,39,1003]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[22,7,1134],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_max"],s:'_0&&_1&&_2?null:"disabled"'},p:[22,37,1164]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[15,3,504]}," ",{p:[26,3,1369],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[27,5,1400],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[27,38,1433]}],action:"toggle_timer",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.safety"],s:'_0&&_1&&!_2?null:"disabled"'},p:[29,14,1514]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[30,7,1602]}]}]}]}," ",{p:[34,1,1680],t:7,e:"ui-display",a:{title:"Anchoring"},f:[{p:[35,3,1713],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[36,12,1735]}],icon:[{t:2,x:{r:["data.anchored"],s:'_0?"lock":"unlock"'},p:[37,11,1810]}],style:[{t:2,x:{r:["data.anchored"],s:'_0?null:"caution"'},p:[38,12,1860]}],action:"anchor"},f:[{t:2,x:{r:["data.anchored"],s:'_0?"Engaged":"Off"'},p:[39,21,1918]}]}]}," ",{p:[41,1,1982],t:7,e:"ui-display",a:{title:"Safety"},f:[{p:[42,3,2012],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[43,12,2034]}],icon:[{t:2,x:{r:["data.safety"],s:'_0?"lock":"unlock"'},p:[44,11,2109]}],action:"safety",style:[{t:2,x:{r:["data.safety"],s:'_0?"caution":"danger"'},p:[45,12,2173]}]},f:[{p:[46,7,2220],t:7,e:"span",f:[{t:2,x:{r:["data.safety"],s:'_0?"On":"Off"'},p:[46,13,2226]}]}]}]}," ",{p:[49,1,2293],t:7,e:"ui-display",a:{title:"Code"},f:[{p:[50,3,2321],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.message",p:[50,31,2349]}]}," ",{p:[51,3,2381],t:7,e:"ui-section",a:{label:"Keypad"},f:[{p:[52,5,2413],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[52,39,2447]}],params:'{"digit":"1"}'},f:["1"]}," ",{p:[53,5,2531],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[53,39,2565]}],params:'{"digit":"2"}'},f:["2"]}," ",{p:[54,5,2649],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[54,39,2683]}],params:'{"digit":"3"}'},f:["3"]}," ",{p:[55,5,2767],t:7,e:"br"}," ",{p:[56,5,2776],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[56,39,2810]}],params:'{"digit":"4"}'},f:["4"]}," ",{p:[57,5,2894],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[57,39,2928]}],params:'{"digit":"5"}'},f:["5"]}," ",{p:[58,5,3012],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[58,39,3046]}],params:'{"digit":"6"}'},f:["6"]}," ",{p:[59,5,3130],t:7,e:"br"}," ",{p:[60,5,3139],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[60,39,3173]}],params:'{"digit":"7"}'},f:["7"]}," ",{p:[61,5,3257],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[61,39,3291]}],params:'{"digit":"8"}'},f:["8"]}," ",{p:[62,5,3375],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[62,39,3409]}],params:'{"digit":"9"}'},f:["9"]}," ",{p:[63,5,3493],t:7,e:"br"}," ",{p:[64,5,3502],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[64,39,3536]}],params:'{"digit":"R"}'},f:["R"]}," ",{p:[65,5,3620],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[65,39,3654]}],params:'{"digit":"0"}'},f:["0"]}," ",{p:[66,5,3738],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[66,39,3772]}],params:'{"digit":"E"}'},f:["E"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],433:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,24],t:7,e:"ui-button",a:{icon:"undo",action:"change_menu",params:'{"menu": "1"}'},f:["Return"]}," ",{p:[3,2,111],t:7,e:"ui-display",a:{title:"Advanced Surgery Procedures"},f:[{p:[4,3,162],t:7,e:"ui-button",a:{icon:"download",action:"sync"},f:["Sync with research database"]}," ",{t:4,f:[{p:[6,4,273],t:7,e:"ui-display",f:[{p:[7,6,291],t:7,e:"ui-section",f:[{p:[7,18,303],t:7,e:"b",f:[{t:2,r:"name",p:[7,21,306]}]}]}," ",{p:[8,6,337],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[8,18,349]}]}]}],n:52,r:"data.surgeries",p:[5,3,245]}]}],n:50,x:{r:["data.menu"],s:"_0==2"},p:[1,1,0]},{t:4,n:51,f:[{p:[13,2,425],t:7,e:"ui-button",a:{action:"change_menu",params:'{"menu": "2"}'},f:["View Surgery Procedures"]}," ",{t:4,f:[{p:[15,3,542],t:7,e:"ui-notice",f:["No table detected!"]}],n:51,r:"data.table",p:[14,2,517]}," ",{p:[19,2,605],t:7,e:"ui-display",f:[{p:[20,3,620],t:7,e:"ui-display",a:{title:"Patient State"},f:[{t:4,f:[{p:[22,5,683],t:7,e:"ui-section",a:{label:"State"},f:[{p:[23,6,715],t:7,e:"span",a:{"class":[{t:2,r:"data.patient.statstate",p:[23,19,728]}]},f:[{t:2,r:"data.patient.stat",p:[23,47,756]}]}]}," ",{p:[25,5,807],t:7,e:"ui-section",a:{label:"Blood Type"},f:[{p:[26,6,844],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.patient.blood_type",p:[26,28,866]}]}]}," ",{p:[28,5,923],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[29,6,956],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.patient.minHealth",p:[29,19,969]}],max:[{t:2,r:"data.patient.maxHealth",p:[29,52,1002]}],value:[{t:2,r:"data.patient.health",p:[29,87,1037]}],state:[{t:2,x:{r:["data.patient.health"],s:'_0>=0?"good":"average"'},p:[30,13,1074]}]},f:[{t:2,x:{r:["adata.patient.health"],s:"Math.round(_0)"},p:[30,64,1125]}]}]}," ",{t:4,f:[{p:[33,6,1357],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[33,25,1376]}]},f:[{p:[34,7,1394],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.patient.maxHealth",p:[34,28,1415]}],value:[{t:2,rx:{r:"data.patient",m:[{t:30,n:"type"}]},p:[34,63,1450]}],state:"bad"},f:[{t:2,x:{r:["type","adata.patient"],s:"Math.round(_1[_0])"},p:[34,99,1486]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"},{label:"Toxin",type:"toxLoss"},{label:"Respiratory",type:"oxyLoss"}]'},p:[32,5,1193]}],n:50,r:"data.patient",p:[21,4,658]},{t:4,n:51,f:["No patient detected."],r:"data.patient"}]}," ",{p:[41,3,1630],t:7,e:"ui-display",a:{title:"Initiated Procedures"},f:[{t:4,f:[{t:4,f:[{p:[44,6,1734],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[44,28,1756]}]},f:[{p:[45,7,1773],t:7,e:"ui-section",a:{label:"Next Step"},f:[{p:[46,8,1811],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"next_step",p:[46,30,1833]}]}," ",{t:4,f:[{p:[48,9,1890],t:7,e:"span",a:{"class":"content"},f:[{p:[48,31,1912],t:7,e:"b",f:["Required chemicals:"]},{p:[48,57,1938],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[48,62,1943]}]}],n:50,r:"chems_needed",p:[47,8,1861]}]}," ",{t:4,f:[{p:[52,8,2040],t:7,e:"ui-section",a:{label:"Alternative Step"},f:[{p:[53,9,2086],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"alternative_step",p:[53,31,2108]}]}," ",{t:4,f:[{p:[55,10,2178],t:7,e:"span",a:{"class":"content"},f:[{p:[55,32,2200],t:7,e:"b",f:["Required chemicals:"]},{p:[55,58,2226],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[55,63,2231]}]}],n:50,r:"alt_chems_needed",p:[54,9,2144]}]}],n:50,r:"alternative_step",p:[51,7,2008]}]}],n:52,r:"data.procedures",p:[43,5,1703]}],n:50,r:"data.procedures",p:[42,4,1675]},{t:4,n:51,f:["No active procedures."],r:"data.procedures"}]}]}],x:{r:["data.menu"],s:"_0==2"}}]},e.exports=a.extend(r.exports)},{341:341}],434:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"ui-section",f:["This machine only accepts ore. Gibtonite and Slag are not accepted."]}," ",{p:[5,2,117],t:7,e:"ui-section",f:["Current unclaimed credits: ",{t:2,r:"data.unclaimedPoints",p:[6,30,160]}," ",{p:[7,4,189],t:7,e:"ui-button",a:{action:"Claim"},f:["Claim"]}]}]}," ",{p:[12,1,276],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,3,315],t:7,e:"ui-section",f:[{p:[15,4,332],t:7,e:"ui-button",a:{action:"diskEject",icon:"eject"},f:["Eject Disk"]}]}," ",{t:4,f:[{p:[20,4,460],t:7,e:"ui-section",a:{"class":"candystripe"},f:[{p:[21,5,496],t:7,e:"ui-button",a:{action:"diskUpload",state:[{t:2,x:{r:["canupload"],s:'(_0)?null:"disabled"'},p:[21,42,533]}],icon:"upload",align:"right",params:['{ "design" : "',{t:2,r:"index",p:[21,129,620]},'" }']},f:["Upload"]}," File ",{t:2,r:"index",p:[24,10,676]},": ",{t:2,r:"name",p:[24,21,687]}]}],n:52,r:"data.diskDesigns",p:[19,3,429]}],n:50,r:"data.hasDisk",p:[13,2,291]},{t:4,n:51,f:[{p:[28,3,741],t:7,e:"ui-section",f:[{p:[29,4,758],t:7,e:"ui-button",a:{action:"diskInsert",icon:"floppy-o"},f:["Insert Disk"]}]}],r:"data.hasDisk"}]}," ",{t:4,f:[{p:[36,2,911],t:7,e:"ui-display",f:[{p:[37,3,927],t:7,e:"ui-section",f:[{p:[38,4,944],t:7,e:"b",f:["Warning"]},": ",{t:2,r:"data.disconnected",p:[38,20,960]},". Please contact the quartermaster."]}]}],n:50,r:"data.disconnected",p:[35,1,883]},{t:4,f:[{p:[43,2,1100],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[44,3,1133],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[45,5,1168],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[48,5,1226],t:7,e:"section",a:{"class":"cell"},f:["Sheets"]}," ",{p:[51,5,1283],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[53,5,1327],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[55,5,1371],t:7,e:"section",a:{"class":"cell"},f:["Ore Value"]}]}," ",{t:4,f:[{p:[60,4,1473],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[61,5,1508],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[62,6,1537]}]}," ",{p:[64,5,1567],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[65,6,1610]}]}," ",{p:[67,5,1642],t:7,e:"section",a:{"class":"cell"},f:[{p:[68,6,1671],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[68,19,1684]}],placeholder:"###","class":"number"}}]}," ",{p:[70,5,1751],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[71,6,1794],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[71,60,1848]}],params:['{ "id" : ',{t:2,r:"id",p:[71,115,1903]},', "sheets" : ',{t:2,r:"sheets",p:[71,134,1922]}," }"]},f:["Release"]}]}," ",{p:[75,5,1993],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"value",p:[76,6,2036]}]}]}],n:52,r:"data.materials",p:[59,3,1444]}," ",{t:4,f:[{p:[81,4,2119],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[82,5,2154],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[83,6,2183]}]}," ",{p:[85,5,2213],t:7,e:"section",a:{"class":"cell",align:"right"
+},f:[{t:2,r:"amount",p:[86,6,2256]}]}," ",{p:[88,5,2288],t:7,e:"section",a:{"class":"cell"},f:[{p:[89,6,2317],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[89,19,2330]}],placeholder:"###","class":"number"}}]}," ",{p:[91,5,2397],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[92,6,2440],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Smelt",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[92,58,2492]}],params:['{ "id" : ',{t:2,r:"id",p:[92,114,2548]},', "sheets" : ',{t:2,r:"sheets",p:[92,133,2567]}," }"]},f:["Smelt"]}]}," ",{p:[96,5,2635],t:7,e:"section",a:{"class":"cell",align:"right"},f:[]}]}],n:52,r:"data.alloys",p:[80,3,2093]}]}],n:50,x:{r:["data.materials","data.alloys"],s:"_0||_1"},p:[42,1,1060]}]},e.exports=a.extend(r.exports)},{341:341}],435:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,4,84],t:7,e:"ui-button",a:{icon:"remove",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[4,36,116]}],action:"empty_eject_beaker"},f:["Empty and eject"]}," ",{p:[7,4,225],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[7,35,256]}],action:"empty_beaker"},f:["Empty"]}," ",{p:[10,4,349],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[10,35,380]}],action:"eject_beaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{t:4,f:[{p:[15,4,514],t:7,e:"ui-section",f:[{t:4,f:[{p:[17,6,562],t:7,e:"span",a:{"class":"bad"},f:["The beaker is empty!"]}],n:50,r:"data.beaker_empty",p:[16,5,531]},{t:4,n:51,f:[{p:[19,6,626],t:7,e:"ui-subdisplay",a:{title:"Blood"},f:[{t:4,f:[{p:[21,8,692],t:7,e:"ui-section",a:{label:"Blood DNA"},f:[{t:2,r:"data.blood.dna",p:[21,38,722]}]}," ",{p:[22,8,761],t:7,e:"ui-section",a:{label:"Blood type"},f:[{t:2,r:"data.blood.type",p:[22,39,792]}]}],n:50,r:"data.has_blood",p:[20,7,662]},{t:4,n:51,f:[{p:[24,8,847],t:7,e:"ui-section",f:[{p:[25,9,868],t:7,e:"span",a:{"class":"average"},f:["No blood sample detected."]}]}],r:"data.has_blood"}]}],r:"data.beaker_empty"}]}],n:50,r:"data.has_beaker",p:[14,3,487]},{t:4,n:51,f:[{p:[32,4,1023],t:7,e:"ui-section",f:[{p:[33,5,1040],t:7,e:"span",a:{"class":"bad"},f:["No beaker loaded."]}]}],r:"data.has_beaker"}]}," ",{t:4,f:[{p:[38,3,1151],t:7,e:"ui-display",a:{title:"Diseases"},f:[{t:4,f:[{p:{button:[{t:4,f:[{p:[43,8,1301],t:7,e:"ui-button",a:{icon:"pencil",action:"rename_disease",state:[{t:2,x:{r:["can_rename"],s:'_0?"":"disabled"'},p:[43,64,1357]}],params:['{"index": ',{t:2,r:"index",p:[43,116,1409]},"}"]},f:["Name advanced disease"]}],n:50,r:"is_adv",p:[42,7,1279]}," ",{p:[47,7,1492],t:7,e:"ui-button",a:{icon:"flask",action:"create_culture_bottle",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[47,69,1554]}],params:['{"index": ',{t:2,r:"index",p:[47,124,1609]},"}"]},f:["Create virus culture bottle"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[40,24,1230]}],button:0},f:[" ",{p:[51,6,1699],t:7,e:"ui-section",a:{label:"Disease agent"},f:[{t:2,r:"agent",p:[51,40,1733]}]}," ",{p:[52,6,1761],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[52,38,1793]}]}," ",{p:[53,6,1827],t:7,e:"ui-section",a:{label:"Spread"},f:[{t:2,r:"spread",p:[53,33,1854]}]}," ",{p:[54,6,1883],t:7,e:"ui-section",a:{label:"Possible cure"},f:[{t:2,r:"cure",p:[54,40,1917]}]}," ",{t:4,f:[{p:[56,7,1966],t:7,e:"ui-section",a:{label:"Symptoms"},f:[{t:4,f:[{p:[58,9,2030],t:7,e:"ui-button",a:{action:"symptom_details",state:"",params:['{"picked_symptom": ',{t:2,r:"sym_index",p:[58,81,2102]},', "index": ',{t:2,r:"index",p:[58,105,2126]},"}"]},f:[{t:2,r:"name",p:[59,10,2148]}," "]},{p:[60,21,2177],t:7,e:"br"}],n:52,r:"symptoms",p:[57,8,2003]}]}," ",{p:[63,7,2227],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[63,38,2258]}]}," ",{p:[64,7,2292],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[64,35,2320]}]}," ",{p:[65,7,2351],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[65,39,2383]}]}," ",{p:[66,7,2418],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[66,44,2455]}]}],n:50,r:"is_adv",p:[55,6,1945]}]}],n:52,r:"data.viruses",p:[39,4,1184]},{t:4,n:51,f:[{p:[70,5,2532],t:7,e:"ui-section",f:[{p:[71,6,2550],t:7,e:"span",a:{"class":"average"},f:["No detectable virus in the blood sample."]}]}],r:"data.viruses"}]}," ",{p:[75,3,2669],t:7,e:"ui-display",a:{title:"Antibodies"},f:[{t:4,f:[{p:[77,5,2735],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[77,24,2754]}]},f:[{p:[78,7,2771],t:7,e:"ui-button",a:{icon:"eyedropper",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[78,43,2807]}],action:"create_vaccine_bottle",params:['{"index": ',{t:2,r:"id",p:[78,129,2893]},"}"]},f:["Create vaccine bottle"]}]}],n:52,r:"data.resistances",p:[76,4,2704]},{t:4,n:51,f:[{p:[83,5,2985],t:7,e:"ui-section",f:[{p:[84,6,3003],t:7,e:"span",a:{"class":"average"},f:["No antibodies detected in the blood sample."]}]}],r:"data.resistances"}]}],n:50,r:"data.has_blood",p:[37,2,1126]}],n:50,x:{r:["data.mode"],s:"_0==1"},p:[1,1,0]},{t:4,n:51,f:[{p:[90,2,3142],t:7,e:"ui-button",a:{icon:"undo",state:"",action:"back"},f:["Back"]}," ",{t:4,f:[{p:[94,4,3237],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[94,23,3256]}]},f:[{p:[95,4,3270],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[96,5,3287]}," ",{t:4,f:[{p:[98,5,3320],t:7,e:"br"}," ",{p:[99,5,3330],t:7,e:"b",f:["This symptom has been neutered, and has no effect. It will still affect the virus' statistics."]}],n:50,r:"neutered",p:[97,4,3299]}]}," ",{p:[102,4,3463],t:7,e:"ui-section",f:[{p:[103,5,3480],t:7,e:"ui-section",a:{label:"Level"},f:[{t:2,r:"level",p:[103,31,3506]}]}," ",{p:[104,5,3533],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[104,36,3564]}]}," ",{p:[105,5,3596],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[105,33,3624]}]}," ",{p:[106,5,3653],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[106,37,3685]}]}," ",{p:[107,5,3718],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[107,42,3755]}]}]}," ",{p:[109,4,3805],t:7,e:"ui-subdisplay",a:{title:"Effect Thresholds"},f:[{p:[110,5,3851],t:7,e:"ui-section",f:[{t:3,r:"threshold_desc",p:[110,17,3863]}]}]}]}],n:53,r:"data.symptom",p:[93,2,3211]}],x:{r:["data.mode"],s:"_0==1"}}]},e.exports=a.extend(r.exports)},{341:341}],436:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(484);e.exports={data:{filter:"",tooltiptext:function(t,e,n){var a="";return t&&(a+="REQUIREMENTS: "+t+" "),e&&(a+="CATALYSTS: "+e+" "),n&&(a+="TOOLS: "+n),a}},oninit:function(){var t=this;this.on({hover:function(t){this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}}),this.observe("filter",function(e,a,r){var i=null;i=t.get("data.display_compact")?t.findAll(".section"):t.findAll(".display:not(:first-child)"),(0,n.filterMulti)(i,t.get("filter").toLowerCase())},{init:!1})}}}(r),r.exports.template={v:3,t:[" ",{p:[48,1,1295],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[48,20,1314]},{t:4,f:[" : ",{t:2,r:"data.subcategory",p:[48,64,1358]}],n:50,r:"data.subcategory",p:[48,37,1331]}]},f:[{t:4,f:[{p:[50,3,1410],t:7,e:"ui-section",f:["Crafting... ",{p:[51,16,1438],t:7,e:"i",a:{"class":"fa-spin fa fa-spinner"}}]}],n:50,r:"data.busy",p:[49,2,1390]},{t:4,n:51,f:[{p:[54,3,1504],t:7,e:"ui-section",f:[{p:[55,4,1520],t:7,e:"table",a:{style:"width:100%"},f:[{p:[56,5,1551],t:7,e:"tr",f:[{p:[57,6,1561],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[58,7,1602],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardCat"},f:[{t:2,r:"data.prev_cat",p:[59,8,1660]}]}]}," ",{p:[62,6,1713],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[63,7,1754],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardCat"},f:[{t:2,r:"data.next_cat",p:[64,7,1811]}]}]}," ",{p:[67,6,1864],t:7,e:"td",a:{style:"float:right!important"},f:[{t:4,f:[{p:[69,7,1946],t:7,e:"ui-button",a:{icon:"lock",action:"toggle_recipes"},f:["Showing Craftable Recipes"]}],n:50,r:"data.display_craftable_only",p:[68,6,1904]},{t:4,n:51,f:[{p:[73,7,2066],t:7,e:"ui-button",a:{icon:"unlock",action:"toggle_recipes"},f:["Showing All Recipes"]}],r:"data.display_craftable_only"}]}," ",{p:[78,6,2191],t:7,e:"td",a:{style:"float:right!important"},f:[{p:[79,7,2232],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.display_compact"],s:'_0?"check-square-o":"square-o"'},p:[79,24,2249]}],action:"toggle_compact"},f:["Compact"]}]}]}," ",{p:[84,5,2391],t:7,e:"tr",f:[{t:4,f:[{p:[86,6,2430],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[87,7,2471],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardSubCat"},f:[{t:2,r:"data.prev_subcat",p:[88,8,2532]}]}]}," ",{p:[91,6,2588],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[92,7,2629],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardSubCat"},f:[{t:2,r:"data.next_subcat",p:[93,8,2690]}]}]}],n:50,r:"data.subcategory",p:[85,5,2400]}]}]}," ",{t:4,f:[{t:4,f:[" ",{p:[101,6,2892],t:7,e:"ui-input",a:{value:[{t:2,r:"filter",p:[101,23,2909]}],placeholder:"Filter.."}}],n:51,r:"data.display_compact",p:[100,5,2803]}],n:50,r:"config.fancy",p:[99,4,2778]}]}," ",{t:4,f:[{p:[106,5,3039],t:7,e:"ui-display",f:[{t:4,f:[{p:[108,6,3086],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[108,25,3105]}]},f:[{p:[109,7,3122],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[109,27,3142]}],"tooltip-side":"right",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[109,135,3250]},'"}'],icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.can_craft",p:[107,5,3056]}," ",{t:4,f:[{t:4,f:[{p:[116,7,3452],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[116,26,3471]}]},f:[{p:[117,8,3489],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[117,28,3509]}],"tooltip-side":"right",state:"disabled",icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.cant_craft",p:[115,6,3420]}],n:51,r:"data.display_craftable_only",p:[114,5,3382]}]}],n:50,r:"data.display_compact",p:[105,4,3006]},{t:4,n:51,f:[{t:4,f:[{p:[126,6,3822],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[126,25,3841]}]},f:[{t:4,f:[{p:[128,8,3882],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[129,9,3924]}]}],n:50,r:"req_text",p:[127,7,3858]}," ",{t:4,f:[{p:[133,8,4007],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[134,9,4046]}]}],n:50,r:"catalyst_text",p:[132,7,3978]}," ",{t:4,f:[{p:[138,8,4130],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[139,9,4165]}]}],n:50,r:"tool_text",p:[137,7,4105]}," ",{p:[142,7,4220],t:7,e:"ui-section",f:[{p:[143,8,4240],t:7,e:"ui-button",a:{icon:"gears",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[143,66,4298]},'"}']},f:["Craft"]}]}]}],n:52,r:"data.can_craft",p:[125,5,3792]}," ",{t:4,f:[{t:4,f:[{p:[151,7,4471],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[151,26,4490]}]},f:[{t:4,f:[{p:[153,9,4533],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[154,10,4576]}]}],n:50,r:"req_text",p:[152,8,4508]}," ",{t:4,f:[{p:[158,9,4663],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[159,10,4703]}]}],n:50,r:"catalyst_text",p:[157,8,4633]}," ",{t:4,f:[{p:[163,9,4791],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[164,10,4827]}]}],n:50,r:"tool_text",p:[162,8,4765]}]}],n:52,r:"data.cant_craft",p:[150,6,4439]}],n:51,r:"data.display_craftable_only",p:[149,5,4401]}],r:"data.display_compact"}],r:"data.busy"}]}]},e.exports=a.extend(r.exports)},{341:341,484:484}],437:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[2,23,34]}," connected to a tank."]}]}," ",{p:[4,1,110],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[5,3,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,5,181],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[6,11,187]}," kPa"]}]}," ",{p:[8,3,247],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[9,5,277],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[9,18,290]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[9,59,331]}]}]}]}," ",{p:[12,1,419],t:7,e:"ui-display",a:{title:"Pump"},f:[{p:[13,3,447],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,5,478],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[14,22,495]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[15,14,545]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[16,22,601]}]}]}," ",{p:[18,3,658],t:7,e:"ui-section",a:{label:"Direction"},f:[{p:[19,5,693],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"sign-out":"sign-in"'},p:[19,22,710]}],action:"direction"},f:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"Out":"In"'},p:[20,26,789]}]}]}," ",{p:[22,3,862],t:7,e:"ui-section",a:{label:"Target Pressure"},f:[{p:[23,5,903],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.min_pressure",p:[23,18,916]}],max:[{t:2,r:"data.max_pressure",p:[23,46,944]}],value:[{t:2,r:"data.target_pressure",p:[24,14,980]}]},f:[{t:2,x:{r:["adata.target_pressure"],s:"Math.round(_0)"},p:[24,40,1006]}," kPa"]}]}," ",{p:[26,3,1075],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,1119],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.target_pressure","data.default_pressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,1152]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1300],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.target_pressure","data.min_pressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1331]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1470],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1564],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.target_pressure","data.max_pressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1594]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}," ",{p:{button:[{t:4,f:[{p:[39,7,1853],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[39,38,1884]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[38,5,1826]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[43,3,2e3],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[44,4,2030]}]}," ",{p:[46,3,2070],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[47,4,2103]}," kPa"]}],n:50,r:"data.holding",p:[42,3,1977]},{t:4,n:51,f:[{p:[50,3,2174],t:7,e:"ui-section",f:[{p:[51,4,2190],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}]},e.exports=a.extend(r.exports)},{341:341}],438:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[3,1,69],t:7,e:"ui-notice",f:[{p:[4,3,84],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[4,23,104]}," connected to a tank."]}]}," ",{p:[6,1,182],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[7,3,220],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[8,5,255],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[8,11,261]}," kPa"]}]}," ",{p:[10,3,323],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[11,5,354],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[11,18,367]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[11,59,408]}]}]}]}," ",{p:[14,1,499],t:7,e:"ui-display",a:{title:"Filter"},f:[{p:[15,3,530],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[16,5,562],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[16,22,579]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[17,14,630]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[18,22,687]}]}]}]}," ",{p:{button:[{t:4,f:[{p:[24,7,856],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[24,38,887]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[23,5,828]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[28,3,1007],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[29,4,1038]}]}," ",{p:[31,3,1080],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[32,4,1114]}," kPa"]}],n:50,r:"data.holding",p:[27,3,983]},{t:4,n:51,f:[{p:[35,3,1188],t:7,e:"ui-section",f:[{p:[36,4,1205],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}," ",{p:[40,1,1293],t:7,e:"ui-display",a:{title:"Filters"},f:[{t:4,f:[{p:[42,5,1345],t:7,e:"filters"}],n:53,r:"data",p:[41,3,1325]}]}]},r.exports.components=r.exports.components||{};var i={filters:t(457)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,457:457}],439:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" ",{p:[42,1,1035],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[44,5,1093],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[44,27,1115]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[46,38,1267]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[47,15,1323]}],yinc:"9"}}],n:50,r:"config.fancy",p:[43,3,1067]},{t:4,n:51,f:[{p:[49,5,1373],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[50,7,1411],t:7,e:"span",f:[{t:2,r:"data.supply",p:[50,13,1417]}]}]}," ",{p:[52,5,1464],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[53,9,1499],t:7,e:"span",f:[{t:2,r:"data.demand",p:[53,15,1505]}]}]}],r:"config.fancy"}]}," ",{p:[57,1,1574],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[58,3,1604],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[59,5,1629],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[60,5,1666],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[61,5,1705],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[62,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[63,5,1781],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[64,5,1823],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[65,5,1864],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[68,5,1949],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[68,24,1968]}],nowrap:0},f:[{p:[69,7,1993],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[69,28,2014]}," %"]}," ",{p:[70,7,2072],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[70,28,2093]}]}," ",{p:[71,7,2135],t:7,e:"div",a:{"class":"content"},f:[{p:[71,28,2156],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[71,41,2169]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[71,70,2198]}]}]}," ",{p:[72,7,2245],t:7,e:"div",a:{"class":"content"},f:[{p:[72,28,2266],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[72,41,2279]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[72,64,2302]}," [",{p:[72,87,2325],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[72,93,2331]}]},"]"]}]}," ",{p:[73,7,2380],t:7,e:"div",a:{"class":"content"},f:[{p:[73,28,2401],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[73,41,2414]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[73,64,2437]}," [",{p:[73,87,2460],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[73,93,2466]}]},"]"]}]}," ",{p:[74,7,2515],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2536],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[74,41,2549]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[74,64,2572]}," [",{p:[74,87,2595],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[74,93,2601]}]},"]"]}]}]}],n:52,r:"data.areas",p:[67,3,1923]}]}]},e.exports=a.extend(r.exports)},{341:341}],440:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{readableFrequency:function(){return Math.round(this.get("adata.frequency"))/10}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,167],t:7,e:"ui-display",a:{title:"Settings"},f:[{t:4,f:[{p:[13,5,224],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,7,257],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[14,24,274]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[14,75,325]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"On":"Off"'},p:[16,9,398]}]}]}],n:50,r:"data.headset",p:[12,3,199]},{t:4,n:51,f:[{p:[19,5,476],t:7,e:"ui-section",a:{label:"Microphone"},f:[{p:[20,7,514],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.broadcasting"],s:'_0?"power-off":"close"'},p:[20,24,531]}],style:[{t:2,x:{r:["data.broadcasting"],s:'_0?"selected":null'},p:[20,78,585]}],action:"broadcast"},f:[{t:2,x:{r:["data.broadcasting"],s:'_0?"Engaged":"Disengaged"'},p:[22,9,664]}]}]}," ",{p:[24,5,746],t:7,e:"ui-section",a:{label:"Speaker"},f:[{p:[25,7,781],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[25,24,798]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[25,75,849]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"Engaged":"Disengaged"'},p:[27,9,922]}]}]}],r:"data.headset"}," ",{t:4,f:[{p:[31,5,1034],t:7,e:"ui-section",a:{label:"High Volume"},f:[{p:[32,7,1073],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.useCommand"],s:'_0?"power-off":"close"'},p:[32,24,1090]}],style:[{t:2,x:{r:["data.useCommand"],s:'_0?"selected":null'},p:[32,76,1142]}],action:"command"},f:[{t:2,x:{r:["data.useCommand"],s:'_0?"On":"Off"'},p:[34,9,1217]}]}]}],n:50,r:"data.command",p:[30,3,1009]}]}," ",{p:[38,1,1305],t:7,e:"ui-display",a:{title:"Channel"},f:[{p:[39,3,1336],t:7,e:"ui-section",a:{label:"Frequency"},f:[{t:4,f:[{p:[41,7,1399],t:7,e:"span",f:[{t:2,r:"readableFrequency",p:[41,13,1405]}]}],n:50,r:"data.freqlock",p:[40,5,1371]},{t:4,n:51,f:[{p:[43,7,1453],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[43,46,1492]}],action:"frequency",params:'{"adjust": -1}'}}," ",{p:[44,7,1603],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[44,41,1637]}],action:"frequency",params:'{"adjust": -.2}'}}," ",{p:[45,7,1749],t:7,e:"ui-button",a:{icon:"pencil",action:"frequency",params:'{"tune": "input"}'},f:[{t:2,r:"readableFrequency",p:[45,78,1820]}]}," ",{p:[46,7,1860],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[46,40,1893]}],action:"frequency",params:'{"adjust": .2}'}}," ",{p:[47,7,2004],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[47,45,2042]}],action:"frequency",params:'{"adjust": 1}'}}],r:"data.freqlock"}]}," ",{t:4,f:[{p:[51,5,2212],t:7,e:"ui-section",a:{label:"Subspace Transmission"},f:[{p:[52,7,2261],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.subspace"],s:'_0?"power-off":"close"'},p:[52,24,2278]}],style:[{t:2,x:{r:["data.subspace"],s:'_0?"selected":null'},p:[52,74,2328]}],action:"subspace"},f:[{t:2,x:{r:["data.subspace"],s:'_0?"Active":"Inactive"'},p:[53,29,2395]}]}]}],n:50,r:"data.subspaceSwitchable",p:[50,3,2176]}," ",{t:4,f:[{p:[57,5,2522],t:7,e:"ui-section",a:{label:"Channels"},f:[{t:4,f:[{p:[59,9,2598],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["."],s:'_0?"check-square-o":"square-o"'},p:[59,26,2615]}],style:[{t:2,x:{r:["."],s:'_0?"selected":null'},p:[60,18,2671]}],action:"channel",params:['{"channel": "',{t:2,r:"channel",p:[61,49,2746]},'"}']},f:[{t:2,r:"channel",p:[62,11,2772]}]},{p:[62,34,2795],t:7,e:"br"}],n:52,i:"channel",r:"data.channels",p:[58,7,2558]}]}],n:50,x:{r:["data.subspace","data.channels"],s:"_0&&_1"},p:[56,3,2479]}]}]},e.exports=a.extend(r.exports)},{341:341}],441:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," "," "," "," "," "," ",{p:[11,1,550],t:7,e:"rdheader"}," ",{t:4,f:[{p:[13,2,583],t:7,e:"ui-display",a:{title:"CONSOLE LOCKED"},f:[{p:[14,3,621],t:7,e:"ui-button",a:{action:"Unlock"},f:["Unlock"]}]}],n:50,r:"data.locked",p:[12,1,562]},{t:4,f:[{p:[18,2,712],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[18,17,727]}]},f:[{p:[19,3,745],t:7,e:"tab",a:{name:"Technology"},f:[{p:[20,4,772],t:7,e:"techweb"}]}," ",{p:[22,3,794],t:7,e:"tab",a:{name:"View Node"},f:[{p:[23,4,820],t:7,e:"nodeview"}]}," ",{p:[25,3,843],t:7,e:"tab",a:{name:"View Design"},f:[{p:[26,4,871],t:7,e:"designview"}]}," ",{p:[28,3,896],t:7,e:"tab",a:{name:"Disk Operations - Design"},f:[{p:[29,4,937],t:7,e:"diskopsdesign"}]}," ",{p:[31,3,965],t:7,e:"tab",a:{name:"Disk Operations - Technology"},f:[{p:[32,4,1010],t:7,e:"diskopstech"}]}," ",{p:[34,3,1036],t:7,e:"tab",a:{name:"Deconstructive Analyzer"},f:[{p:[35,4,1076],t:7,e:"destruct"}]}," ",{p:[37,3,1099],t:7,e:"tab",a:{name:"Protolathe"},f:[{p:[38,4,1126],t:7,e:"protolathe"}]}," ",{p:[40,3,1151],t:7,e:"tab",a:{name:"Circuit Imprinter"},f:[{p:[41,4,1185],t:7,e:"circuit"}]}," ",{p:[43,3,1207],t:7,e:"tab",a:{name:"Settings"},f:[{p:[44,4,1232],t:7,e:"settings"}]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[17,1,690]}]},r.exports.components=r.exports.components||{};var i={settings:t(450),circuit:t(442),protolathe:t(448),destruct:t(444),diskopsdesign:t(445),diskopstech:t(446),designview:t(443),nodeview:t(447),techweb:t(451),rdheader:t(449)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451}],442:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,56],t:7,e:"ui-display",a:{title:"Circuit Imprinter Busy!"}}],n:50,r:"data.circuitbusy",p:[2,2,29]},{t:4,n:51,f:[{p:[5,3,126],t:7,e:"ui-display",f:[{p:[6,4,142],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,183],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,196]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,254],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "circuit", "inputText" : ',{t:2,r:"textsearch",p:[8,84,333]},"}"]},f:["Search"]}]}," ",{p:[10,4,389],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.circuitmats",p:[10,27,412]}," / ",{t:2,r:"data.circuitmaxmats",p:[10,50,435]}]}," ",{p:[11,4,475],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.circuitchems",p:[11,26,497]}," / ",{t:2,r:"data.circuitmaxchems",p:[11,50,521]}]}," ",{p:[12,3,561],t:7,e:"ui-display",f:[{p:[14,3,577],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,592]}]},f:[{p:[15,4,617],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,680],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.circuitcat"],s:'_0=="{{name}}"?"selected":null'},p:[17,43,717]}],params:['{"type" : "circuit", "cat" : "',{t:2,r:"name",p:[17,135,809]},'"}']},f:[{t:2,r:"name",p:[17,147,821]}]}],n:52,r:"data.circuitcats",p:[16,5,648]}]}," ",{p:[20,4,869],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,935],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,947]},{t:2,r:"matstring",p:[22,26,955]}," ",{p:[23,7,975],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[23,40,1008]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[23,119,1087]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitdes",p:[21,5,904]}]}," ",{p:[27,4,1161],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[29,6,1226],t:7,e:"ui-section",f:[{t:2,r:"name",p:[29,18,1238]},{t:2,r:"matstring",p:[29,26,1246]}," ",{p:[30,7,1266],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[30,40,1299]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[30,119,1378]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitmatch",p:[28,5,1193]}]}," ",{p:[34,4,1452],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[36,6,1515],t:7,e:"ui-section",f:[{t:2,r:"name",p:[36,18,1527]}," : ",{t:2,r:"amount",p:[36,29,1538]}," cm3 - ",{t:4,f:[{p:[38,7,1586],t:7,e:"input",a:{value:[{t:2,r:"number",p:[38,20,1599]}],placeholder:["1-",{t:2,r:"sheets",p:[38,46,1625]}],"class":"number"}}," ",{p:[39,7,1660],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "circuit", "mat_id" : ',{t:2,r:"mat_id",p:[39,84,1737]},', "sheets" : ',{t:2,r:"number",p:[39,107,1760]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[37,6,1561]}]}],n:52,r:"data.circuitmat_list",p:[35,5,1479]}]}," ",{p:[44,4,1852],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[46,6,1916],t:7,e:"ui-section",f:[{t:2,r:"name",p:[46,18,1928]}," : ",{t:2,r:"amount",p:[46,29,1939]}," - ",{p:[47,7,1959],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "circuit", "name" : ',{t:2,r:"name",p:[47,80,2032]},', "id" : ',{t:2,r:"reagentid",p:[47,97,2049]},"}"]},f:["Purge"]}]}],n:52,r:"data.circuitchem_list",p:[45,5,1879]}]}]}]}]}],r:"data.circuitbusy"}],n:50,r:"data.circuit_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[55,2,2162],t:7,e:"ui-display",a:{title:"No Linked Circuit Imprinter"}}],r:"data.circuit_linked"}]},e.exports=a.extend(r.exports)},{341:341}],443:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,30],t:7,e:"ui-display",a:{title:[{t:2,r:"data.sdesign_name",p:[2,21,49]}]},f:[{p:[3,3,75],t:7,e:"ui-section",a:{title:"Description"},f:[{t:2,r:"data.sdesign_desc",p:[3,35,107]}]}]}," ",{p:[5,2,158],t:7,e:"ui-display",a:{title:"Lathe Types"},f:[{t:4,f:[{p:[7,4,233],t:7,e:"ui-section",a:{title:"Circuit Imprinter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&1"},p:[6,3,193]}," ",{t:4,f:[{p:[10,4,337],t:7,e:"ui-section",a:{title:"Protolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&2"},p:[9,3,297]}," ",{t:4,f:[{p:[13,4,434],t:7,e:"ui-section",a:{title:"Autolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&4"},p:[12,3,394]}," ",{t:4,f:[{p:[16,4,530],t:7,e:"ui-section",a:{title:"Crafting Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&8"},p:[15,3,490]}," ",{t:4,f:[{p:[19,4,637],t:7,e:"ui-section",a:{title:"Exosuit Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&16"},p:[18,3,596]}," ",{t:4,f:[{p:[22,4,743],t:7,e:"ui-section",a:{title:"Biogenerator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&32"},p:[21,3,702]}," ",{t:4,f:[{p:[25,4,843],t:7,e:"ui-section",a:{title:"Limb Grower"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&64"},p:[24,3,802]}," ",{t:4,f:[{p:[28,4,943],t:7,e:"ui-section",a:{title:"Ore Smelter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&128"},p:[27,3,901]}]}," ",{p:[31,2,1015],t:7,e:"ui-display",a:{title:"Materials"},f:[{t:4,f:[{p:[33,4,1084],t:7,e:"ui-section",a:{title:[{t:2,r:"matname",p:[33,23,1103]}]},f:[{t:2,r:"matamt",p:[33,36,1116]}," cm^3"]}],n:52,r:"data.sdesign_materials",p:[32,3,1048]}]}],n:50,r:"data.design_selected",p:[1,1,0]},{t:4,f:[{p:[38,2,1211],t:7,e:"ui-display",a:{title:"No Design Selected."}}],n:50,x:{r:["data.design_selected"],s:"!_0"},p:[37,1,1180]}]},e.exports=a.extend(r.exports)},{341:341}],444:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[4,3,57],t:7,e:"ui-display",a:{title:"Destructive Analyzer Busy!"
+}}],n:50,r:"data.destroybusy",p:[3,2,30]},{t:4,n:51,f:[{t:4,f:[{p:[7,4,162],t:7,e:"ui-display",a:{title:"Destructive Analyzer Unloaded"}}],n:50,x:{r:["data.destroy_loaded"],s:"!_0"},p:[6,3,130]},{t:4,n:51,f:[{p:[9,4,240],t:7,e:"ui-display",a:{title:"Loaded Item"},f:[{p:[10,4,276],t:7,e:"ui-section",a:{title:"Name"},f:[{t:2,r:"data.destroy_name",p:[10,29,301]}]}]}," ",{p:[12,4,356],t:7,e:"ui-display",a:{title:"Boost Nodes"},f:[{t:4,f:[{p:[14,6,425],t:7,e:"ui-section",a:{title:[{t:2,r:"name",p:[14,25,444]}," | ",{t:2,r:"value",p:[14,36,455]}]},f:[{p:[15,7,473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["allow"],s:'_0?null:"disabled"'},p:[15,25,491]}],action:"deconstruct",params:['{"id":',{t:2,r:"id",p:[15,90,556]},"}"]},f:["Deconstruct and Boost"]}]}],n:52,r:"data.boost_paths",p:[13,5,393]}]}," ",{p:[19,4,652],t:7,e:"ui-button",a:{action:"eject_da"},f:["Eject Item"]}],x:{r:["data.destroy_loaded"],s:"!_0"}}],r:"data.destroybusy"}],n:50,r:"data.destroy_linked",p:[2,1,1]},{t:4,n:51,f:[{p:[23,2,733],t:7,e:"ui-display",a:{title:"No Linked Destructive Analyzer"}}],r:"data.destroy_linked"}]},e.exports=a.extend(r.exports)},{341:341}],445:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Design Disk Loaded"}}],n:50,x:{r:["data.ddisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,116],t:7,e:"ui-display",a:{title:"Design Disk Updating"}}],n:50,r:"data.ddisk_update",p:[5,2,88]},{t:4,n:51,f:[{t:4,f:[{p:[9,4,213],t:7,e:"ui-display",a:{title:"Design Disk"},f:[{p:[10,5,250],t:7,e:"ui-section",a:{title:"Disk Space"},f:["Disk Capacity: ",{t:2,r:"data.ddisk_size",p:[10,51,296]}," blueprints."]}," ",{p:[11,5,345],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[11,33,373],t:7,e:"ui-button",a:{action:"ddisk_upall"},f:["Upload all designs"]}]}," ",{p:[12,5,453],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[12,36,484],t:7,e:"ui-button",a:{action:"clear_designdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[13,5,579],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[13,36,610],t:7,e:"ui-button",a:{action:"eject_designdisk"},f:["Eject Disk"]}]}]}," ",{p:[15,4,703],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[17,6,776],t:7,e:"ui-section",a:{title:"Number"},f:["#",{t:2,r:"pos",p:[17,34,804]},": ",{t:4,f:[{p:[19,8,848],t:7,e:"ui-button",a:{action:"upload_empty_ddisk_slot",params:['{"slot": "',{t:2,r:"pos",p:[19,70,910]},'"}']},f:["Upload to Empty Slot"]}],n:50,x:{r:["id"],s:'_0=="null"'},p:[18,7,820]},{t:4,n:51,f:[{p:[21,8,976],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[21,58,1026]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[21,75,1043]}]},f:[{t:2,r:"name",p:[21,122,1090]}]}," ",{p:[22,8,1118],t:7,e:"ui-button",a:{action:"ddisk_erasepos",style:"danger",params:['{"id": "',{t:2,r:"id",p:[22,74,1184]},'"}'],state:[{t:2,x:{r:["id"],s:'_0=="null"?"disabled":null'},p:[22,91,1201]}]},f:["Delete Slot"]}],x:{r:["id"],s:'_0=="null"'}}]}],n:52,r:"data.ddisk_designs",p:[16,5,742]}]}],n:50,x:{r:["data.ddisk_upload"],s:"!_0"},p:[8,3,183]},{t:4,n:51,f:[{p:[28,4,1340],t:7,e:"ui-display",a:{title:"Upload Design to Disk"},f:[{p:[28,46,1382],t:7,e:"ui-section",f:["Available Designs:"]}]}," ",{t:4,f:[{p:[30,5,1484],t:7,e:"ui-section",f:[{p:[30,17,1496],t:7,e:"ui-button",a:{action:"ddisk_uploaddesign",params:['{"id": "',{t:2,r:"id",p:[30,72,1551]},'"}']},f:[{t:2,r:"name",p:[30,82,1561]}]}]}],n:52,r:"data.ddisk_possible_designs",p:[29,4,1442]}],x:{r:["data.ddisk_upload"],s:"!_0"}}],r:"data.ddisk_update"}],x:{r:["data.ddisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],446:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Technology Disk Loaded"}}],n:50,x:{r:["data.tdisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,120],t:7,e:"ui-display",a:{title:"Technology Disk Updating"}}],n:50,r:"data.tdisk_update",p:[5,2,92]},{t:4,n:51,f:[{p:[8,3,191],t:7,e:"ui-display",a:{title:"Technology Disk"},f:[{p:[9,4,231],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[9,32,259],t:7,e:"ui-button",a:{action:"tdisk_down"},f:["Download Research to Disk"]},{p:[9,100,327],t:7,e:"ui-button",a:{action:"tdisk_up"},f:["Upload Research from Disk"]}," ",{p:[10,4,397],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[10,35,428],t:7,e:"ui-button",a:{action:"clear_techdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[11,4,520],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[11,35,551],t:7,e:"ui-button",a:{action:"eject_techdisk"},f:["Eject Disk"]}]}]}]}," ",{p:[13,3,640],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[15,5,709],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,53,757]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,70,774]}]},f:[{t:2,r:"display_name",p:[15,115,819]}]}],n:52,r:"data.tdisk_nodes",p:[14,4,678]}]}],r:"data.tdisk_update"}],x:{r:["data.tdisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],447:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,28],t:7,e:"ui-display",a:{title:[{t:2,r:"data.snode_name",p:[2,21,47]}]},f:[{p:[3,3,71],t:7,e:"ui-section",a:{title:"Description"},f:["Description: ",{t:2,r:"data.snode_desc",p:[3,48,116]}]}," ",{p:[4,3,151],t:7,e:"ui-section",a:{title:"Point Cost"},f:["Point Cost: ",{t:2,r:"data.snode_cost",p:[4,46,194]}]}," ",{p:[5,3,229],t:7,e:"ui-section",a:{title:"Export Price"},f:["Export Price: ",{t:2,r:"data.snode_export",p:[5,50,276]}]}," ",{p:[6,3,313],t:7,e:"ui-button",a:{action:"research_node",params:['{"id"="',{t:2,r:"id",p:[6,52,362]},'"}'],state:[{t:2,x:{r:["data.snode_researched"],s:'_0?"disabled":null'},p:[6,69,379]}]},f:[{t:2,x:{r:["data.snode_researched"],s:'_0?"Researched":"Research Node"'},p:[6,115,425]}]}]}," ",{p:[8,2,511],t:7,e:"ui-display",a:{title:"Prerequisites"},f:[{t:4,f:[{p:[10,4,579],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[10,52,627]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[10,69,644]}]},f:[{t:2,r:"display_name",p:[10,114,689]}]}],n:52,r:"data.node_prereqs",p:[9,3,548]}]}," ",{p:[13,2,747],t:7,e:"ui-display",a:{title:"Unlocks"},f:[{t:4,f:[{p:[15,4,809],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,52,857]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,69,874]}]},f:[{t:2,r:"display_name",p:[15,114,919]}]}],n:52,r:"data.node_unlocks",p:[14,3,778]}]}," ",{p:[18,2,977],t:7,e:"ui-display",a:{title:"Designs"},f:[{t:4,f:[{p:[20,4,1039],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[20,54,1089]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[20,71,1106]}]},f:[{t:2,r:"name",p:[20,118,1153]}]}],n:52,r:"data.node_designs",p:[19,3,1008]}]}],n:50,r:"data.node_selected",p:[1,1,0]},{t:4,f:[{p:[25,2,1239],t:7,e:"ui-display",a:{title:"No Node Selected."}}],n:50,x:{r:["data.node_selected"],s:"!_0"},p:[24,1,1210]}]},e.exports=a.extend(r.exports)},{341:341}],448:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-display",a:{title:"Protolathe Busy!"}}],n:50,r:"data.protobusy",p:[2,2,32]},{t:4,n:51,f:[{p:[5,3,120],t:7,e:"ui-display",f:[{p:[6,4,136],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,177],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,190]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,248],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "proto", "inputText" : ',{t:2,r:"textsearch",p:[8,82,325]},"}"]},f:["Search"]}]}," ",{p:[10,4,381],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.protomats",p:[10,27,404]}," / ",{t:2,r:"data.protomaxmats",p:[10,48,425]}]}," ",{p:[11,4,463],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.protochems",p:[11,26,485]}," / ",{t:2,r:"data.protomaxchems",p:[11,48,507]}]}," ",{p:[12,3,545],t:7,e:"ui-display",f:[{p:[14,3,561],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,576]}]},f:[{p:[15,4,601],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,662],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.protocat","name"],s:'_0==_1?"selected":null'},p:[17,43,699]}],params:['{"type" : "proto", "cat" : "',{t:2,r:"name",p:[17,125,781]},'"}']},f:[{t:2,r:"name",p:[17,137,793]}]}],n:52,r:"data.protocats",p:[16,5,632]}]}," ",{p:[20,4,841],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,905],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,917]},{t:2,r:"matstring",p:[22,26,925]}," ",{t:4,f:[{p:[24,8,973],t:7,e:"input",a:{value:[{t:2,r:"number",p:[24,21,986]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[24,47,1012]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[23,7,945]}," ",{p:[26,7,1083],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[26,40,1116]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[26,117,1193]},'", "amount" : "',{t:2,r:"number",p:[26,138,1214]},'"}']},f:["Print"]}]}],n:52,r:"data.protodes",p:[21,5,876]}]}," ",{p:[30,4,1292],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[32,6,1355],t:7,e:"ui-section",f:[{t:2,r:"name",p:[32,18,1367]},{t:2,r:"matstring",p:[32,26,1375]}," ",{t:4,f:[{p:[34,8,1423],t:7,e:"input",a:{value:[{t:2,r:"number",p:[34,21,1436]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[34,47,1462]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[33,7,1395]}," ",{p:[36,7,1533],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[36,40,1566]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[36,117,1643]},'", "amount" : "',{t:2,r:"number",p:[36,138,1664]},'"}']},f:["Print"]}]}],n:52,r:"data.protomatch",p:[31,5,1324]}]}," ",{p:[40,4,1742],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[42,6,1803],t:7,e:"ui-section",f:[{t:2,r:"name",p:[42,18,1815]}," : ",{t:2,r:"amount",p:[42,29,1826]}," cm3 - ",{t:4,f:[{p:[44,7,1874],t:7,e:"input",a:{value:[{t:2,r:"number",p:[44,20,1887]}],placeholder:["1-",{t:2,r:"sheets",p:[44,46,1913]}],"class":"number"}}," ",{p:[45,7,1948],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "proto", "mat_id" : ',{t:2,r:"mat_id",p:[45,82,2023]},', "sheets" : ',{t:2,r:"number",p:[45,105,2046]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[43,6,1849]}]}],n:52,r:"data.protomat_list",p:[41,5,1769]}]}," ",{p:[50,4,2138],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[52,6,2200],t:7,e:"ui-section",f:[{t:2,r:"name",p:[52,18,2212]}," : ",{t:2,r:"amount",p:[52,29,2223]}," - ",{p:[53,7,2243],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "proto", "name" : ',{t:2,r:"name",p:[53,78,2314]},', "id" : ',{t:2,r:"reagentid",p:[53,95,2331]},"}"]},f:["Purge"]}]}],n:52,r:"data.protochem_list",p:[51,5,2165]}]}]}]}]}],r:"data.protobusy"}],n:50,r:"data.protolathe_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[61,2,2444],t:7,e:"ui-display",a:{title:"No Linked Protolathe"}}],r:"data.protolathe_linked"}]},e.exports=a.extend(r.exports)},{341:341}],449:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,1,13],t:7,e:"span",a:{"class":"memoedit"},f:["Nanotrasen R&D Console"]},{p:[2,53,65],t:7,e:"br"}," Available Points: ",{p:[3,19,89],t:7,e:"ui-section",a:{title:"Research Points"},f:[{t:2,r:"data.research_points_stored",p:[3,55,125]}]}," ",{p:[4,1,170],t:7,e:"ui-section",a:{title:["Page Selection - ",{t:2,r:"page",p:[4,37,206]}]},f:[{p:[4,47,216],t:7,e:"input",a:{value:[{t:2,r:"pageselect",p:[4,60,229]}],placeholder:"1","class":"number"}}," Select Page: ",{p:[5,14,290],t:7,e:"ui-button",a:{action:"page",params:['{"num" : "',{t:2,r:"pageselect",p:[5,57,333]},'"}']},f:["[Go]"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],450:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"span",a:{"class":"bad"},f:["Settings"]},{p:[1,34,33],t:7,e:"br"},{p:[1,39,38],t:7,e:"br"}," ",{p:[2,1,44],t:7,e:"ui-button",a:{action:"Resync"},f:["RESYNC MACHINERY"]},{p:[2,56,99],t:7,e:"br"}," ",{p:[3,1,105],t:7,e:"ui-button",a:{action:"Lock"},f:["LOCK"]}," ",{p:[4,1,147],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "destroy"}',state:[{t:2,x:{r:["data.destroy_linked"],s:'_0?null:"disabled"'},p:[4,71,217]}]},f:["Disconnect Destructive Analyzer"]}," ",{p:[5,1,305],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "lathe"}',state:[{t:2,x:{r:["data.protolathe_linked"],s:'_0?null:"disabled"'},p:[5,69,373]}]},f:["Disconnect Protolathe"]}," ",{p:[6,1,454],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "imprinter"}',state:[{t:2,x:{r:["data.circuit_linked"],s:'_0?null:"disabled"'},p:[6,73,526]}]},f:["Disconnect Circuit Imprinter"]}]},e.exports=a.extend(r.exports)},{341:341}],451:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Available for Research"},f:[{t:4,f:[{p:[3,3,76],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[3,51,124]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[3,68,141]}]},f:[{t:2,r:"display_name",p:[3,113,186]}]}],n:52,r:"data.techweb_avail",p:[2,2,45]}]}," ",{p:[6,1,240],t:7,e:"ui-display",a:{title:"Locked Nodes"},f:[{t:4,f:[{p:[8,3,307],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[8,51,355]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[8,68,372]}]},f:[{t:2,r:"display_name",p:[8,113,417]}]}],n:52,r:"data.techweb_locked",p:[7,2,275]}]}," ",{p:[11,1,472],t:7,e:"ui-display",a:{title:"Researched Nodes"},f:[{t:4,f:[{p:[13,3,547],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[13,51,595]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[13,68,612]}]},f:[{t:2,r:"display_name",p:[13,113,657]}]}],n:52,r:"data.techweb_researched",p:[12,2,511]}]}]},e.exports=a.extend(r.exports)},{341:341}],452:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,24],t:7,e:"ui-notice",f:[{p:[3,3,38],t:7,e:"span",f:["The grinder is currently processing and cannot be used."]}]}],n:50,r:"data.processing",p:[1,1,0]},{p:{button:[{p:[8,5,201],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[8,36,232]}],action:"eject"},f:["Eject Contents"]}]},t:7,e:"ui-display",a:{title:"Processing Chamber",button:0},f:[" ",{p:[10,3,355],t:7,e:"ui-section",a:{label:"Grinding"},f:[{p:[11,5,389],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.operating"],s:'_0?"average":"good"'},p:[11,18,402]}]},f:[{t:2,x:{r:["data.operating"],s:'_0?"Busy":"Ready"'},p:[11,59,443]}]}," ",{p:[12,2,489],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[12,35,522]}],action:"grind"},f:["Activate"]}]}," ",{p:[14,3,640],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[17,9,739],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["The ",{t:2,r:"name",p:[17,56,786]}]},{p:[17,71,801],t:7,e:"br"}],n:52,r:"adata.contentslist",p:[16,7,702]},{t:4,n:51,f:[{p:[19,9,830],t:7,e:"span",f:["No Contents"]}],r:"adata.contentslist"}],n:50,r:"data.contents",p:[15,5,674]},{t:4,n:51,f:[{p:[22,7,890],t:7,e:"span",f:["No Contents"]}],r:"data.contents"}]}]}," ",{p:{button:[{p:[28,5,1020],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.isBeakerLoaded"],s:'(_0==0)&&_1?null:"disabled"'},p:[28,36,1051]}],action:"detach"},f:["Detach"]}]},t:7,e:"ui-display",a:{title:"Container",button:0},f:[" ",{p:[30,3,1173],t:7,e:"ui-section",a:{label:"Reagents"},f:[{t:4,f:[{p:[32,7,1241],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[32,13,1247]},"/",{t:2,r:"data.beakerMaxVolume",p:[32,55,1289]}," Units"]}," ",{p:[33,7,1333],t:7,e:"br"}," ",{t:4,f:[{p:[35,9,1384],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[35,52,1427]}," units of ",{t:2,r:"name",p:[35,87,1462]}]},{p:[35,102,1477],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[34,7,1345]},{t:4,n:51,f:[{p:[37,9,1506],t:7,e:"span",a:{"class":"bad"},f:["Container Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[31,5,1207]},{t:4,n:51,f:[{p:[40,7,1582],t:7,e:"span",a:{"class":"average"},f:["No Container"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],453:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"span",a:{"class":["pipes32x32 ",{t:2,r:"dir",p:[6,80,248]},"-",{t:2,r:"icon_state",p:[6,88,256]}],title:[{t:2,r:"dir_name",p:[6,111,279]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}," ",{t:4,f:[{p:[12,2,395],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[14,4,455],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["@key","data.selected_color"],s:'_0==_1?"selected":null'},p:[14,22,473]}],action:"color",params:['{"paint_color": ',{t:2,r:"@key",p:[15,44,569]},"}"]},f:[{t:2,r:"@key",p:[15,55,580]}]}],n:52,r:"data.paint_colors",p:[13,3,424]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[11,1,367]},{p:[19,1,636],t:7,e:"ui-display",a:{title:"Utilities"},f:[{p:[20,2,668],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&1?"check-square-o":"square-o"'},p:[20,19,685]}],action:"mode",params:'{"mode": 1}'},f:["Build"]}," ",{p:[22,2,792],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&2?"check-square-o":"square-o"'},p:[22,19,809]}],action:"mode",params:'{"mode": 2}'},f:["Wrench"]}," ",{p:[24,2,917],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&4?"check-square-o":"square-o"'},p:[24,19,934]}],action:"mode",params:'{"mode": 4}'},f:["Destroy"]}," ",{t:4,f:[{p:[27,3,1072],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&8?"check-square-o":"square-o"'},p:[27,20,1089]}],action:"mode",params:'{"mode": 8}'},f:["Paint"]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[26,2,1043]}]}," ",{p:[31,1,1219],t:7,e:"ui-display",a:{title:"Category"},f:[{p:[32,2,1250],t:7,e:"ui-section",f:[{p:[33,3,1265],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==0?"check-square-o":"square-o"'},p:[33,20,1282]}],state:[{t:2,x:{r:["data.category"],s:'_0<=0?"selected":null'},p:[33,83,1345]}],action:"category",params:'{"category": 0}'},f:["Atmospherics"]}," ",{p:[35,3,1462],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==1?"check-square-o":"square-o"'},p:[35,20,1479]}],state:[{t:2,x:{r:["data.category"],s:'_0==1?"selected":null'},p:[35,83,1542]}],action:"category",params:'{"category": 1}'},f:["Disposals"]}," ",{p:[37,3,1656],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==2?"check-square-o":"square-o"'},p:[37,20,1673]}],state:[{t:2,x:{r:["data.category"],s:'_0==2?"selected":null'},p:[37,83,1736]}],action:"category",params:'{"category": 2}'},f:["Transit Tubes"]}]}," ",{t:4,f:[{p:[41,3,1897],t:7,e:"ui-section",a:{label:"Piping Layer"},f:[{p:[42,4,1934],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==1?"selected":null'},p:[42,22,1952]}],action:"piping_layer",params:'{"piping_layer": 1}'},f:["1"]}," ",{p:[44,4,2072],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==2?"selected":null'},p:[44,22,2090]}],action:"piping_layer",params:'{"piping_layer": 2}'},f:["2"]}," ",{p:[46,4,2210],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==3?"selected":null'},p:[46,22,2228]}],action:"piping_layer",params:'{"piping_layer": 3}'},f:["3"]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[40,2,1868]}]}," ",{t:4,f:[{p:[52,2,2411],t:7,e:"ui-display",a:{title:[{t:2,r:"cat_name",p:[52,21,2430]}]},f:[{t:4,f:[{p:[54,4,2468],t:7,e:"ui-section",f:[{p:[55,5,2485],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[55,23,2503]}],action:"pipe_type",params:['{"pipe_type": ',{t:2,r:"pipe_index",p:[56,28,2583]},', "category": ',{t:2,r:"cat_name",p:[56,56,2611]},"}"]},f:[{t:2,r:"pipe_name",p:[56,71,2626]}]}]}],n:52,r:"recipes",p:[53,3,2447]}]}],n:52,r:"data.categories",p:[51,1,2384]}]},e.exports=a.extend(r.exports)},{341:341}],454:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[3,21,76]}],action:"color",params:['{"paint_color": ',{t:2,r:"color_name",p:[4,28,152]},"}"]},f:[{t:2,r:"color_name",p:[4,45,169]}]}],n:52,r:"data.paint_colors",p:[2,2,28]}]}]},e.exports=a.extend(r.exports)},{341:341}],455:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"img",a:{src:["pipe.",{t:2,r:"dir",p:[6,71,239]},".",{t:2,r:"icon_state",p:[6,79,247]},".png"],title:[{t:2,r:"dir_name",p:[6,106,274]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}]},e.exports=a.extend(r.exports)},{341:341}],456:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,22],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,38]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,77],t:7,e:"ui-display",a:{title:"Satellite Network Control",button:0},f:[{t:4,f:[{p:[8,4,161],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[9,9,201],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[9,31,223]}]}," ",{p:[10,9,244],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"mode",p:[10,30,265]}]}," ",{p:[11,9,288],t:7,e:"div",a:{"class":"content"},f:[{p:[12,11,320],t:7,e:"ui-button",a:{action:"toggle",params:['{"id": "',{t:2,r:"id",p:[12,54,363]},'"}']},f:[{t:2,x:{r:["active"],s:'_0?"Deactivate":"Activate"'},p:[12,64,373]}]}]}]}],n:52,r:"data.satellites",p:[7,2,132]}]}," ",{t:4,f:[{p:[18,1,511],t:7,e:"ui-display",a:{title:"Station Shield Coverage"},f:[{p:[19,3,558],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.meteor_shield_coverage_max",p:[19,24,579]}],value:[{t:2,r:"data.meteor_shield_coverage",p:[19,68,623]}]},f:[{t:2,x:{r:["data.meteor_shield_coverage","data.meteor_shield_coverage_max"],s:"100*_0/_1"},p:[19,101,656]}," %"]}," ",{p:[20,1,739],t:7,e:"ui-display",f:[]}]}],n:50,r:"data.meteor_shield",p:[17,1,484]}]},e.exports=a.extend(r.exports)},{341:341}],457:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,25],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[2,20,42]}],style:[{t:2,x:{r:["enabled"],s:'_0?"selected":null'},p:[2,72,94]}],action:"toggle_filter",params:['{"id_tag": "',{t:2,r:"id_tag",p:[3,48,174]},'", "val": ',{t:2,r:"gas_id",p:[3,68,194]},"}"]},f:[{t:2,r:"gas_name",p:[3,81,207]}]}],n:52,r:"filter_types",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],458:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," ",{p:[5,1,196],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[5,16,211]}]},f:[{p:[6,2,228],t:7,e:"tab",a:{name:"Status"},f:[{p:[7,3,250],t:7,e:"status"}]}," ",{p:[9,2,269],t:7,e:"tab",a:{name:"Templates"},f:[{p:[10,3,294],t:7,e:"templates"}]}," ",{p:[12,2,316],t:7,e:"tab",a:{name:"Modification"},f:[{t:4,f:[{p:[14,3,368],t:7,e:"modification"}],n:50,r:"data.selected",p:[13,3,344]}," ",{t:4,f:[{p:[17,3,421],t:7,e:"span",a:{"class":"bad"},f:["No shuttle selected."]}],n:50,x:{r:["data.selected"],s:"!_0"},p:[16,3,396]}]}]}]},r.exports.components=r.exports.components||{};var i={modification:t(459),templates:t(461),status:t(460)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,459:459,460:460,461:461}],459:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:["Selected: ",{t:2,r:"data.selected.name",p:[1,30,29]}]},f:[{t:4,f:[{p:[3,5,94],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.selected.description",p:[3,37,126]}]}],n:50,r:"data.selected.description",p:[2,3,56]}," ",{t:4,f:[{p:[6,5,219],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"data.selected.admin_notes",p:[6,37,251]}]}],n:50,r:"data.selected.admin_notes",p:[5,3,181]}]}," ",{t:4,f:[{p:[11,3,351],t:7,e:"ui-display",a:{title:["Existing Shuttle: ",{t:2,r:"data.existing_shuttle.name",p:[11,40,388]}]},f:["Status: ",{t:2,r:"data.existing_shuttle.status",p:[12,13,433]}," ",{t:4,f:["(",{t:2,r:"data.existing_shuttle.timeleft",p:[14,8,513]},")"],n:50,r:"data.existing_shuttle.timer",p:[13,5,470]}," ",{p:[16,5,565],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"data.existing_shuttle.id",p:[17,41,633]},'"}']},f:["Jump To"]}]}],n:50,r:"data.existing_shuttle",p:[10,1,319]},{t:4,f:[{p:[24,3,755],t:7,e:"ui-display",a:{title:"Existing Shuttle: None"}}],n:50,x:{r:["data.existing_shuttle"],s:"!_0"},p:[23,1,722]},{p:[27,1,821],t:7,e:"ui-button",a:{action:"preview",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[28,27,875]},'"}']},f:["Preview"]}," ",{p:[31,1,931],t:7,e:"ui-button",a:{action:"load",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[32,27,982]},'"}'],style:"danger"},f:["Load"]}," ",{p:[37,1,1053],t:7,e:"ui-display",a:{title:"Status"},f:[]}]},e.exports=a.extend(r.exports)},{341:341}],460:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"table",a:{width:"100%"},f:[{t:4,f:[{p:[3,3,47],t:7,e:"tr",f:[{p:[4,5,56],t:7,e:"td",f:[{p:[5,7,67],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"id",p:[5,69,129]},'"}']},f:["JMP"]}]}," ",{p:[9,5,185],t:7,e:"td",f:[{p:[10,7,196],t:7,e:"ui-button",a:{action:"fly",params:['{"id": "',{t:2,r:"id",p:[10,47,236]},'"}'],state:[{t:2,x:{r:["can_fly"],s:'_0?null:"disabled"'},p:[10,64,253]}]},f:["Fly"]}]}," ",{p:[14,5,332],t:7,e:"td",f:[{t:2,r:"name",p:[15,7,343]}," (",{p:[15,17,353],t:7,e:"code",f:[{t:2,r:"id",p:[15,23,359]}]},")"]}," ",{p:[17,5,388],t:7,e:"td",f:[{t:2,r:"status",p:[18,7,399]}]}," ",{p:[20,5,424],t:7,e:"td",f:[{t:4,f:[{t:2,r:"mode",p:[22,9,456]}],n:50,r:"mode",p:[21,7,435]}," ",{t:4,f:["(",{t:2,r:"timeleft",p:[25,10,508]},") ",{p:[26,9,530],t:7,e:"ui-button",a:{action:"fast_travel",params:['{"id": "',{t:2,r:"id",p:[26,57,578]},'"}'],state:[{t:2,x:{r:["can_fast_travel"],s:'_0?null:"disabled"'},p:[26,74,595]}]},f:["Fast Travel"]}],n:50,r:"timer",p:[24,7,485]}]}]}],n:52,r:"data.shuttles",p:[2,1,21]}]}]},e.exports=a.extend(r.exports)},{341:341}],461:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.templates_tabs",p:[1,16,15]}]},f:[{t:4,f:[{p:[3,5,72],t:7,e:"tab",a:{name:[{t:2,r:"port_id",p:[3,16,83]}]},f:[{t:4,f:[{p:[5,9,131],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[5,28,150]}]},f:[{t:4,f:[{p:[7,13,203],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[7,45,235]}]}],n:50,r:"description",p:[6,11,171]}," ",{t:4,f:[{p:[10,13,324],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"admin_notes",p:[10,45,356]}]}],n:50,r:"admin_notes",p:[9,11,292]}," ",{p:[13,11,414],t:7,e:"ui-button",a:{action:"select_template",params:['{"shuttle_id": "',{t:2,r:"shuttle_id",p:[14,37,486]},'"}'],state:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"selected":null'},p:[15,20,523]}]},f:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"Selected":"Select"'},p:[17,13,614]}]}]}],n:52,r:"templates",p:[4,7,103]}]}],n:52,r:"data.templates",p:[2,3,43]}]}]},e.exports=a.extend(r.exports)},{341:341}],462:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,32],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,64],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,70]}]}]}," ",{t:4,f:[{p:[6,5,181],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,214],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,227]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,256]}]}]}," ",{p:[9,5,307],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[10,7,341],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[10,20,354]}],max:[{t:2,r:"data.occupant.maxHealth",p:[10,54,388]}],value:[{t:2,r:"data.occupant.health",p:[10,90,424]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[11,16,465]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[11,68,517]}]}]}," ",{t:4,f:[{p:[14,7,751],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[14,26,770]}]},f:[{p:[15,9,790],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[15,30,811]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[15,66,847]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[15,103,884]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[13,5,586]}," ",{t:4,f:[{p:[19,7,1002],t:7,e:"ui-section",a:{label:"Blood"},f:[{p:[20,9,1037],t:7,e:"ui-section",a:{label:"Volume"},f:[{p:[21,11,1075],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.blood.maxBloodVolume",p:[21,32,1096]}],value:[{t:2,r:"data.occupant.blood.currentBloodVolume",p:[21,79,1143]}],state:[{t:2,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"bad":"good"'},p:[21,130,1194]}]},f:[{t:3,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"LOW ":"OK"'},p:[21,232,1296]}," - ",{t:2,x:{r:["data.occupant.blood.currentBloodVolume"],s:"Math.round(_0)"},p:[21,342,1406]}," cl"]}]}," ",{p:[23,9,1503],t:7,e:"ui-section",a:{label:"Type"},f:[{p:[24,11,1539],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:"data.occupant.blood.bloodType",p:[24,35,1563]}]}]}]}],n:50,r:"data.occupant.blood",p:[18,5,968]}," ",{p:[28,5,1662],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[29,9,1697],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[29,22,1710]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[29,68,1756]}]}]}," ",{p:[31,5,1837],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[32,9,1872],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[32,22,1885]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[32,68,1931]}]}]}," ",{p:[34,5,2013],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[36,11,2098],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[36,54,2141]}," units of ",{t:2,r:"name",p:[36,89,2176]}]},{p:[36,104,2191],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[35,9,2054]},{t:4,n:51,f:[{p:[38,11,2224],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[5,3,155]}]}," ",{p:[43,1,2315],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[44,2,2346],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[45,5,2376],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[45,22,2393]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[45,71,2442]}]}]}," ",{p:[47,3,2505],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[49,7,2564],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied","allowed"],
+s:'_0&&_1?null:"disabled"'},p:[49,38,2595]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[49,122,2679]},'"}']},f:[{t:2,r:"name",p:[49,132,2689]}]},{p:[49,152,2709],t:7,e:"br"}],n:52,r:"data.chems",p:[48,5,2537]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],463:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,24],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[2,22,43]}],labelcolor:[{t:2,r:"htmlcolor",p:[2,44,65]}],candystripe:0,right:0},f:[{p:[3,5,103],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,32,130],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0=="Dead"?"bad bold":_0=="Unconscious"?"average bold":"good"'},p:[3,45,143]}]},f:[{t:2,r:"status",p:[3,132,230]}]}]}," ",{p:[4,5,265],t:7,e:"ui-section",a:{label:"Jelly"},f:[{t:2,r:"exoticblood",p:[4,31,291]}]}," ",{p:[5,5,324],t:7,e:"ui-section",a:{label:"Location"},f:[{t:2,r:"area",p:[5,34,353]}]}," ",{p:[7,5,380],t:7,e:"ui-button",a:{state:[{t:2,r:"swap_button_state",p:[8,14,404]}],action:"swap",params:['{"ref": "',{t:2,r:"ref",p:[9,38,464]},'"}']},f:[{t:4,f:["You Are Here"],n:50,x:{r:["occupied"],s:'_0=="owner"'},p:[10,7,482]},{t:4,n:51,f:[{t:4,f:["Occupied"],n:50,x:{r:["occupied"],s:'_0=="stranger"'},p:[13,9,554]},{t:4,n:51,f:["Swap"],x:{r:["occupied"],s:'_0=="stranger"'}}],x:{r:["occupied"],s:'_0=="owner"'}}]}]}],n:52,r:"data.bodies",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],464:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,23,79],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.drying"],s:'_0?"stop":"tint"'},p:[4,40,96]}],action:"Dry"},f:[{t:2,x:{r:["data.drying"],s:'_0?"Stop drying":"Dry"'},p:[4,88,144]}]}],n:50,r:"data.isdryer",p:[4,3,59]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[7,3,252],t:7,e:"ui-notice",f:[{p:[8,5,268],t:7,e:"span",f:["Unfortunately, this ",{t:2,r:"data.name",p:[8,31,294]}," is empty."]}]}],n:50,x:{r:["data.contents.length"],s:"_0==0"},p:[6,1,216]},{t:4,n:51,f:[{p:[11,1,349],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[12,2,380],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[13,4,413],t:7,e:"section",a:{"class":"cell bold"},f:["Item"]}," ",{p:[16,4,467],t:7,e:"section",a:{"class":"cell bold"},f:["Quantity"]}," ",{p:[19,4,525],t:7,e:"section",a:{"class":"cell bold",align:"center"},f:[{t:4,f:[{t:2,r:"data.verb",p:[20,22,589]}],n:50,r:"data.verb",p:[20,5,572]},{t:4,n:51,f:["Dispense"],r:"data.verb"}]}]}," ",{t:4,f:[{p:[24,3,680],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[25,4,713],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[26,5,740]}]}," ",{p:[28,4,766],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[29,5,807]}]}," ",{p:[31,4,835],t:7,e:"section",a:{"class":"table",alight:"right"},f:[{p:[32,5,878],t:7,e:"section",a:{"class":"cell"}}," ",{p:[33,5,915],t:7,e:"section",a:{"class":"cell"},f:[{p:[34,6,943],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[34,45,982]}],params:['{ "name" : ',{t:2,r:"name",p:[34,102,1039]},', "amount" : 1 }']},f:["One"]}]}," ",{p:[38,5,1114],t:7,e:"section",a:{"class":"cell"},f:[{p:[39,6,1142],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>1)?null:"disabled"'},p:[39,45,1181]}],params:['{ "name" : ',{t:2,r:"name",p:[39,101,1237]}," }"]},f:["Many"]}]}]}]}],n:52,r:"data.contents",p:[23,2,654]}]}],x:{r:["data.contents.length"],s:"_0==0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],465:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{capacityPercentState:function(){var t=this.get("data.capacityPercent");return t>50?"good":t>15?"average":"bad"},inputState:function(){return this.get("data.capacityPercent")>=100?"good":this.get("data.inputting")?"average":"bad"},outputState:function(){return this.get("data.outputting")?"good":this.get("data.charge")>0?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[24,1,640],t:7,e:"ui-display",a:{title:"Storage"},f:[{p:[25,3,671],t:7,e:"ui-section",a:{label:"Stored Energy"},f:[{p:[26,5,710],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.capacityPercent",p:[26,38,743]}],state:[{t:2,r:"capacityPercentState",p:[26,71,776]}]},f:[{t:2,x:{r:["adata.capacityPercent"],s:"Math.fixed(_0)"},p:[26,97,802]},"%"]}]}]}," ",{p:[29,1,880],t:7,e:"ui-display",a:{title:"Input"},f:[{p:[30,3,909],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{p:[31,5,946],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"refresh":"close"'},p:[31,22,963]}],style:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"selected":null'},p:[31,74,1015]}],action:"tryinput"},f:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"Auto":"Off"'},p:[32,25,1082]}]}," [",{p:[34,6,1149],t:7,e:"span",a:{"class":[{t:2,r:"inputState",p:[34,19,1162]}]},f:[{t:2,x:{r:["data.capacityPercent","data.inputting"],s:'_0>=100?"Fully Charged":_1?"Charging":"Not Charging"'},p:[34,35,1178]}]},"]"]}," ",{p:[36,3,1300],t:7,e:"ui-section",a:{label:"Target Input"},f:[{p:[37,5,1338],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.inputLevelMax",p:[37,26,1359]}],value:[{t:2,r:"data.inputLevel",p:[37,57,1390]}]},f:[{t:2,r:"adata.inputLevel_text",p:[37,78,1411]}]}]}," ",{p:[39,3,1463],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1501],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1540]}],action:"input",params:'{"target": "min"}'}}," ",{p:[41,5,1634],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1668]}],action:"input",params:'{"adjust": -10000}'}}," ",{p:[42,5,1763],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"target": "input"}'},f:["Set"]}," ",{p:[43,5,1852],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[43,38,1885]}],action:"input",params:'{"adjust": 10000}'}}," ",{p:[44,5,1996],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[44,43,2034]}],action:"input",params:'{"target": "max"}'}}]}," ",{p:[46,3,2159],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2192],t:7,e:"span",f:[{t:2,r:"adata.inputAvailable",p:[47,9,2198]}]}]}]}," ",{p:[50,1,2259],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2289],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2326],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2343]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2398]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2467]}]}," [",{p:[55,6,2533],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2546]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2563]}]},"]"]}," ",{p:[57,3,2668],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2707],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2728]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2760]}]},f:[{t:2,r:"adata.outputLevel_text",p:[58,80,2782]}]}]}," ",{p:[60,3,2835],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2874],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2913]}],action:"output",params:'{"target": "min"}'}}," ",{p:[62,5,3009],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3043]}],action:"output",params:'{"adjust": -10000}'}}," ",{p:[63,5,3140],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"target": "input"}'},f:["Set"]}," ",{p:[64,5,3230],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[64,38,3263]}],action:"output",params:'{"adjust": 10000}'}}," ",{p:[65,5,3377],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[65,43,3415]}],action:"output",params:'{"target": "max"}'}}]}," ",{p:[67,3,3543],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3577],t:7,e:"span",f:[{t:2,r:"adata.outputUsed",p:[68,9,3583]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],466:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,32],t:7,e:"ui-display",a:{title:"Dispersal Tank"},f:[{p:[3,3,71],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[4,4,101],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.active"],s:'_0?"power-off":"close"'},p:[4,21,118]}],style:[{t:2,x:{r:["data.active"],s:'_0?"selected":null'},p:[5,12,170]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[6,12,218]}],action:"power"},f:[{t:2,x:{r:["data.active"],s:'_0?"On":"Off"'},p:[7,20,280]}]}]}," ",{p:[10,3,345],t:7,e:"ui-section",a:{label:"Smoke Radius Setting"},f:[{p:[11,5,391],t:7,e:"div",a:{"class":"content",style:"float:left"},f:[{p:[12,6,437],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=1?null:"disabled"'},p:[12,36,467]}],style:[{t:2,x:{r:["data.setting"],s:'_0==1?"selected":null'},p:[12,89,520]}],action:"setting",params:'{"amount": 1}'},f:["3"]}," ",{p:[13,6,622],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=2?null:"disabled"'},p:[13,36,652]}],style:[{t:2,x:{r:["data.setting"],s:'_0==2?"selected":null'},p:[13,89,705]}],action:"setting",params:'{"amount": 2}'},f:["6"]}," ",{p:[14,6,807],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=3?null:"disabled"'},p:[14,36,837]}],style:[{t:2,x:{r:["data.setting"],s:'_0==3?"selected":null'},p:[14,89,890]}],action:"setting",params:'{"amount": 3}'},f:["9"]}," ",{p:[15,6,992],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=4?null:"disabled"'},p:[15,36,1022]}],style:[{t:2,x:{r:["data.setting"],s:'_0==4?"selected":null'},p:[15,89,1075]}],action:"setting",params:'{"amount": 4}'},f:["12"]}," ",{p:[16,6,1178],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=5?null:"disabled"'},p:[16,36,1208]}],style:[{t:2,x:{r:["data.setting"],s:'_0==5?"selected":null'},p:[16,89,1261]}],action:"setting",params:'{"amount": 5}'},f:["15"]}]}]}," ",{p:[19,3,1392],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[21,6,1456],t:7,e:"span",f:[{t:2,x:{r:["adata.TankCurrentVolume"],s:"Math.round(_0)"},p:[21,12,1462]},"/",{t:2,r:"data.TankMaxVolume",p:[21,52,1502]}," Units"]}," ",{p:[22,6,1543],t:7,e:"br"}," ",{p:[23,5,1553],t:7,e:"br"}," ",{t:4,f:[{p:[25,7,1599],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[25,50,1642]}," units of ",{t:2,r:"name",p:[25,85,1677]}]},{p:[25,100,1692],t:7,e:"br"}],n:52,r:"adata.TankContents",p:[24,6,1564]}],n:50,r:"data.isTankLoaded",p:[20,4,1425]},{t:4,n:51,f:[{p:[28,6,1730],t:7,e:"span",a:{"class":"bad"},f:["Tank Empty"]}],r:"data.isTankLoaded"}," ",{p:[30,4,1780],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Eject":"Close"'},p:[30,21,1797]}],style:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"selected":null'},p:[31,12,1851]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[32,12,1905]}],action:"purge"},f:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Purge Contents":"No chemicals detected"'},p:[33,20,1967]}]}]}]}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]}]},e.exports=a.extend(r.exports)},{341:341}],467:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,30],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{t:2,x:{r:["adata.generated"],s:"Math.round(_0)"},p:[3,5,71]},"W"]}," ",{p:[5,3,122],t:7,e:"ui-section",a:{label:"Orientation"},f:[{p:[6,5,159],t:7,e:"span",f:[{t:2,x:{r:["adata.angle"],s:"Math.round(_0)"},p:[6,11,165]},"° (",{t:2,r:"data.direction",p:[6,45,199]},")"]}]}," ",{p:[8,3,244],t:7,e:"ui-section",a:{label:"Adjust Angle"},f:[{p:[9,5,282],t:7,e:"ui-button",a:{icon:"step-backward",action:"angle",params:'{"adjust": -15}'},f:["15°"]}," ",{p:[10,5,378],t:7,e:"ui-button",a:{icon:"backward",action:"angle",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[11,5,467],t:7,e:"ui-button",a:{icon:"forward",action:"angle",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[12,5,554],t:7,e:"ui-button",a:{icon:"step-forward",action:"angle",params:'{"adjust": 15}'},f:["15°"]}]}]}," ",{p:[15,1,673],t:7,e:"ui-display",a:{title:"Tracking"},f:[{p:[16,3,705],t:7,e:"ui-section",a:{label:"Tracker Mode"},f:[{p:[17,5,743],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==0?"selected":null'},p:[17,36,774]}],action:"tracking",params:'{"mode": 0}'},f:["Off"]}," ",{p:[19,5,889],t:7,e:"ui-button",a:{icon:"clock-o",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==1?"selected":null'},p:[19,38,922]}],action:"tracking",params:'{"mode": 1}'},f:["Timed"]}," ",{p:[21,5,1039],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.connected_tracker","data.tracking_state"],s:'_0?_1==2?"selected":null:"disabled"'},p:[21,38,1072]}],action:"tracking",params:'{"mode": 2}'},f:["Auto"]}]}," ",{p:[24,3,1239],t:7,e:"ui-section",a:{label:"Tracking Rate"},f:[{p:[25,3,1276],t:7,e:"span",f:[{t:2,x:{r:["adata.tracking_rate"],s:"Math.round(_0)"},p:[25,9,1282]},"°/h (",{t:2,r:"data.rotating_way",p:[25,53,1326]},")"]}]}," ",{p:[27,3,1373],t:7,e:"ui-section",a:{label:"Adjust Rate"},f:[{p:[28,5,1410],t:7,e:"ui-button",a:{icon:"fast-backward",action:"rate",params:'{"adjust": -180}'},f:["180°"]}," ",{p:[29,5,1507],t:7,e:"ui-button",a:{icon:"step-backward",action:"rate",params:'{"adjust": -30}'},f:["30°"]}," ",{p:[30,5,1602],t:7,e:"ui-button",a:{icon:"backward",action:"rate",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[31,5,1690],t:7,e:"ui-button",a:{icon:"forward",action:"rate",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[32,5,1776],t:7,e:"ui-button",a:{icon:"step-forward",action:"rate",params:'{"adjust": 30}'},f:["30°"]}," ",{p:[33,5,1869],t:7,e:"ui-button",a:{icon:"fast-forward",action:"rate",params:'{"adjust": 180}'},f:["180°"]}]}]}," ",{p:{button:[{p:[38,5,2051],t:7,e:"ui-button",a:{icon:"refresh",action:"refresh"},f:["Refresh"]}]},t:7,e:"ui-display",a:{title:"Devices",button:0},f:[" ",{p:[40,2,2130],t:7,e:"ui-section",a:{label:"Solar Tracker"},f:[{p:[41,5,2169],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_tracker"],s:'_0?"good":"bad"'},p:[41,18,2182]}]},f:[{t:2,x:{r:["data.connected_tracker"],s:'_0?"":"Not "'},p:[41,63,2227]},"Found"]}]}," ",{p:[43,2,2296],t:7,e:"ui-section",a:{label:"Solar Panels"},f:[{p:[44,3,2332],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_panels"],s:'_0?"good":"bad"'},p:[44,16,2345]}]},f:[{t:2,x:{r:["adata.connected_panels"],s:"Math.round(_0)"},p:[44,60,2389]}," Panels Connected"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],468:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,7,84],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[4,38,115]}],action:"eject"},f:["Eject"]}],n:50,r:"data.open",p:[3,5,60]}]},t:7,e:"ui-display",a:{title:"Power",button:0},f:[" ",{p:[7,3,220],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[8,5,251],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[8,22,268]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[9,14,318]}],state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[9,54,358]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[10,22,422]}]}]}," ",{p:[12,3,479],t:7,e:"ui-section",a:{label:"Cell"},f:[{t:4,f:[{p:[14,7,541],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerLevel",p:[14,40,574]}]},f:[{t:2,x:{r:["adata.powerLevel"],s:"Math.fixed(_0)"},p:[14,61,595]},"%"]}],n:50,r:"data.hasPowercell",p:[13,5,509]},{t:4,n:51,f:[{p:[16,4,652],t:7,e:"span",a:{"class":"bad"},f:["No Cell"]}],r:"data.hasPowercell"}]}]}," ",{p:[20,1,725],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[21,3,759],t:7,e:"ui-section",a:{label:"Current Temperature"},f:[{p:[22,3,802],t:7,e:"span",f:[{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[22,9,808]},"°C"]}]}," ",{p:[24,2,871],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[25,3,913],t:7,e:"span",f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[25,9,919]},"°C"]}]}," ",{t:4,f:[{p:[28,5,1004],t:7,e:"ui-section",a:{label:"Adjust Target"},f:[{p:[29,7,1045],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[29,46,1084]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[30,7,1189],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[30,41,1223]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[31,7,1327],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:["Set"]}," ",{p:[32,7,1419],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[32,40,1452]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[33,7,1555],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[33,45,1593]}],action:"target",params:'{"adjust": 20}'}}]}],n:50,r:"data.open",p:[27,3,982]}," ",{p:[36,3,1719],t:7,e:"ui-section",a:{label:"Mode"},f:[{t:4,f:[{p:[38,7,1771],t:7,e:"ui-button",a:{icon:"long-arrow-up",state:[{t:2,x:{r:["data.mode"],s:'_0=="heat"?"selected":null'},p:[38,46,1810]}],action:"mode",params:'{"mode": "heat"}'},f:["Heat"]}," ",{p:[39,7,1918],t:7,e:"ui-button",a:{icon:"long-arrow-down",state:[{t:2,x:{r:["data.mode"],s:'_0=="cool"?"selected":null'},p:[39,48,1959]}],action:"mode",params:'{"mode": "cool"}'},f:["Cool"]}," ",{p:[40,7,2067],t:7,e:"ui-button",a:{icon:"arrows-v",state:[{t:2,x:{r:["data.mode"],s:'_0=="auto"?"selected":null'},p:[40,41,2101]}],action:"mode",params:'{"mode": "auto"}'},f:["Auto"]}],n:50,r:"data.open",p:[37,3,1747]},{t:4,n:51,f:[{p:[42,4,2217],t:7,e:"span",f:[{t:2,x:{r:["text","data.mode"],s:"_0.titleCase(_1)"},p:[42,10,2223]}]}],r:"data.open"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],469:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,8,97],t:7,e:"ui-button",a:{action:"jump",params:['{"name" : ',{t:2,r:"name",p:[4,51,140]},"}"]},f:["Jump"]}," ",{p:[7,9,195],t:7,e:"ui-button",a:{action:"spawn",params:['{"name" : ',{t:2,r:"name",p:[7,53,239]},"}"]},f:["Spawn"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[2,22,46]}],button:0},f:[" ",{p:[11,3,308],t:7,e:"ui-section",a:{label:"Description"},f:[{p:[12,5,346],t:7,e:"span",f:[{t:3,r:"desc",p:[12,11,352]}]}]}," ",{p:[14,3,390],t:7,e:"ui-section",a:{label:"Spawners left"},f:[{p:[15,5,430],t:7,e:"span",f:[{t:2,r:"amount_left",p:[15,11,436]}]}]}]}],n:52,r:"data.spawners",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],470:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,30],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[2,22,49]}," Alarms"]},f:[{p:[3,5,72],t:7,e:"ul",f:[{t:4,f:[{p:[5,9,103],t:7,e:"li",f:[{t:2,r:".",p:[5,13,107]}]}],n:52,r:".",p:[4,7,83]},{t:4,n:51,f:[{p:[7,9,141],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],471:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,41],t:7,e:"ui-notice",f:[{p:[3,5,57],t:7,e:"span",f:["Biological entity detected in contents. Please remove."]}]}],n:50,x:{r:["data.occupied","data.safeties"],s:"_0&&_1"},p:[1,1,0]},{t:4,f:[{p:[7,3,173],t:7,e:"ui-notice",f:[{p:[8,5,189],t:7,e:"span",f:["Contents are being disinfected. Please wait."]}]}],n:50,r:"data.uv_active",p:[6,1,148]},{t:4,n:51,f:[{p:{button:[{t:4,f:[{p:[13,25,357],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,42,374]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[13,93,425]}]}],n:50,x:{r:["data.open"],s:"!_0"},p:[13,7,339]}," ",{t:4,f:[{p:[14,27,506],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"sign-out":"sign-in"'},p:[14,44,523]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Close":"Open"'},p:[14,98,577]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[14,7,486]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[17,7,676],t:7,e:"ui-notice",f:[{p:[18,9,696],t:7,e:"span",f:["Unit Locked"]}]}],n:50,r:"data.locked",p:[16,5,650]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.open"],s:"_0"},f:[{p:[21,9,773],t:7,e:"ui-section",a:{label:"Helmet"},f:[{p:[22,11,811],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.helmet"],s:'_0?"square":"square-o"'},p:[22,28,828]}],state:[{t:2,x:{r:["data.helmet"],s:'_0?null:"disabled"'},p:[22,75,875]}],action:"dispense",params:'{"item": "helmet"}'},f:[{t:2,x:{r:["data.helmet"],s:'_0||"Empty"'},p:[23,59,970]}]}]}," ",{p:[25,9,1039],t:7,e:"ui-section",a:{label:"Suit"},f:[{p:[26,11,1075],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.suit"],s:'_0?"square":"square-o"'},p:[26,28,1092]}],state:[{t:2,x:{r:["data.suit"],s:'_0?null:"disabled"'},p:[26,74,1138]}],action:"dispense",params:'{"item": "suit"}'},f:[{t:2,x:{r:["data.suit"],s:'_0||"Empty"'},p:[27,57,1229]}]}]}," ",{p:[29,9,1296],t:7,e:"ui-section",a:{label:"Mask"},f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mask"],s:'_0?"square":"square-o"'},p:[30,28,1349]}],state:[{t:2,x:{r:["data.mask"],s:'_0?null:"disabled"'},p:[30,74,1395]}],action:"dispense",params:'{"item": "mask"}'},f:[{t:2,x:{r:["data.mask"],s:'_0||"Empty"'},p:[31,57,1486]}]}]}," ",{p:[33,9,1553],t:7,e:"ui-section",a:{label:"Storage"},f:[{p:[34,11,1592],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.storage"],s:'_0?"square":"square-o"'},p:[34,28,1609]}],state:[{t:2,x:{r:["data.storage"],s:'_0?null:"disabled"'},p:[34,77,1658]}],action:"dispense",params:'{"item": "storage"}'},f:[{t:2,x:{r:["data.storage"],s:'_0||"Empty"'},p:[35,60,1755]}]}]}]},{t:4,n:50,x:{r:["data.open"],s:"!(_0)"},f:[" ",{p:[38,7,1836],t:7,e:"ui-button",a:{icon:"recycle",state:[{t:2,x:{r:["data.occupied","data.safeties"],s:'_0&&_1?"disabled":null'},p:[38,40,1869]}],action:"uv"},f:["Disinfect"]}]}],r:"data.locked"}]}],r:"data.uv_active"}]},e.exports=a.extend(r.exports)},{341:341}],472:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,5,17],t:7,e:"ui-section",a:{label:"Dispense"},f:[{p:[3,9,55],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.plasma"],s:'_0?"square":"square-o"'},p:[3,26,72]}],state:[{t:2,x:{r:["data.plasma"],s:'_0?null:"disabled"'},p:[3,74,120]}],action:"plasma"},f:["Plasma (",{t:2,x:{r:["adata.plasma"],s:"Math.round(_0)"},p:[4,37,193]},")"]}," ",{p:[5,9,243],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oxygen"],s:'_0?"square":"square-o"'},p:[5,26,260]}],state:[{t:2,x:{r:["data.oxygen"],s:'_0?null:"disabled"'},p:[5,74,308]}],action:"oxygen"},f:["Oxygen (",{t:2,x:{r:["adata.oxygen"],s:"Math.round(_0)"},p:[6,37,381]},")"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],473:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tankPressureState:function(){var t=this.get("data.tankPressure");return t>=200?"good":t>=100?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,282],t:7,e:"ui-notice",f:[{p:[15,3,296],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.connected"],s:'_0?"is":"is not"'},p:[15,23,316]}," connected to a mask."]}]}," ",{p:[17,1,393],t:7,e:"ui-display",f:[{p:[18,3,408],t:7,e:"ui-section",a:{label:"Tank Pressure"},f:[{p:[19,7,449],t:7,e:"ui-bar",a:{min:"0",max:"1013",value:[{t:2,r:"data.tankPressure",p:[19,41,483]}],state:[{t:2,r:"tankPressureState",p:[20,16,521]}]},f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[20,39,544]}," kPa"]}]}," ",{p:[22,3,610],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[23,5,652],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[23,18,665]}],max:[{t:2,r:"data.maxReleasePressure",p:[23,52,699]}],value:[{t:2,r:"data.releasePressure",p:[24,14,741]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[24,40,767]}," kPa"]}]}," ",{p:[26,3,836],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,880],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,913]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1067],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1098]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1243],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1337],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1367]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],474:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,5,32],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[3,9,73],t:7,e:"span",f:[{t:2,x:{r:["adata.temperature"],s:"Math.fixed(_0,2)"},p:[3,15,79]}," K"]}]}," ",{p:[5,5,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,9,185],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.fixed(_0,2)"},p:[6,15,191]}," kPa"]}]}]}," ",{p:[9,1,268],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[10,5,302],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,337],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[11,26,354]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[11,70,398]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[12,28,458]}]}]}," ",{p:[14,5,518],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[15,9,566],t:7,e:"ui-button",a:{icon:"fast-backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[15,48,605]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[17,9,717],t:7,e:"ui-button",a:{icon:"backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[17,43,751]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[19,9,862],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.target"],s:"Math.fixed(_0,2)"},p:[19,79,932]}]}," ",{p:[20,9,984],t:7,e:"ui-button",a:{icon:"forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[20,42,1017]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[22,9,1127],t:7,e:"ui-button",a:{icon:"fast-forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[22,47,1165]}],action:"target",params:'{"adjust": 20}'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],475:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 1:return"good";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,161],t:7,e:"ui-notice",f:[{p:[14,2,174],t:7,e:"ui-section",a:{label:"Reconnect"},f:[{p:[15,3,207],t:7,e:"div",a:{style:"float:right"},f:[{p:[16,4,236],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]}]}]}," ",{p:[20,1,340],t:7,e:"ui-display",a:{title:"Turbine Controller"},f:[{p:[21,2,381],t:7,e:"ui-section",a:{label:"Status"},f:[{t:4,f:[{p:[23,4,434],t:7,e:"span",a:{"class":"bad"},f:["Broken"]}],n:50,r:"data.broken",p:[22,3,411]},{t:4,n:51,f:[{p:[25,4,480],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.online"],s:"_0(_1)"},p:[25,17,493]}]},f:[{t:2,x:{r:["data.online","data.compressor_broke","data.turbine_broke"],s:'_0&&!(_1||_2)?"Online":"Offline"'},p:[25,46,522]}]}],r:"data.broken"}," ",{p:[27,3,630],t:7,e:"div",a:{style:"float:right"},f:[{p:[28,4,659],t:7,e:"ui-button",a:{icon:"power-off",action:"power-on",state:[{t:2,r:"data.broken",p:[28,57,712]}],style:[{t:2,x:{r:["data.online"],s:'_0?"selected":""'},p:[28,81,736]}]},f:["On"]}," ",{p:[29,4,789],t:7,e:"ui-button",a:{icon:"close",action:"power-off",state:[{t:2,r:"data.broken",p:[29,54,839]}],style:[{t:2,x:{r:["data.online"],s:'_0?"":"selected"'},p:[29,78,863]}]},f:["Off"]}]}," ",{t:4,f:[{p:[32,4,958],t:7,e:"br"}," [ ",{p:[33,6,968],t:7,e:"span",a:{"class":"bad"},f:["Compressor is inoperable"]}," ]"],n:50,r:"data.compressor_broke",p:[31,3,925]}," ",{t:4,f:[{p:[36,4,1062],t:7,e:"br"}," [ ",{p:[37,6,1072],t:7,e:"span",a:{"class":"bad"},f:["Turbine is inoperable"]}," ]"],n:50,r:"data.turbine_broke",p:[35,3,1032]}]}]}," ",{p:[41,1,1160],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[42,2,1189],t:7,e:"ui-section",a:{label:"Turbine Speed"},f:[{p:[43,3,1226],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.rpm"],s:'_0?"--":_1'},p:[43,9,1232]}," RPM"]}]}," ",{p:[45,2,1293],t:7,e:"ui-section",a:{label:"Internal Temp"},f:[{p:[46,3,1330],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.temp"],s:'_0?"--":_1'},p:[46,9,1336]}," K"]}]}," ",{p:[48,2,1396],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{p:[49,3,1435],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.power"],s:'_0?"--":_1'},p:[49,9,1441]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],476:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{},oninit:function(){this.on({hover:function(t){var e=this.get("data.telecrystals");e>=t.context.params.cost&&this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}})}}}(r),r.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[23,7,460],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock"]}],n:50,r:"data.lockable",p:[22,5,432]}]},t:7,e:"ui-display",a:{title:"Uplink",button:0},f:[" ",{p:[26,3,543],t:7,e:"ui-section",a:{label:"Telecrystals",right:0},f:[{p:[27,5,587],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.telecrystals"],s:'_0>0?"good":"bad"'},p:[27,18,600]}]},f:[{t:2,r:"data.telecrystals",p:[27,62,644]}," TC"]}]}]}," ",{t:4,f:[{p:[31,3,734],t:7,e:"ui-display",f:[{p:[32,2,748],t:7,e:"ui-button",a:{action:"select",params:['{"category": "',{t:2,r:"name",p:[32,51,797]},'"}']},f:[{t:2,r:"name",p:[32,63,809]}]}," ",{t:4,f:[{p:[34,4,850],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[34,23,869]}],candystripe:0,right:0},f:[{p:[35,3,900],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"name",p:[35,23,920]},": ",{t:2,r:"desc",p:[35,33,930]}],"tooltip-side":"left",state:[{t:2,x:{r:["data.telecrystals","hovered.cost","cost","hovered.item","name"],s:'_0<_2||(_0-_1<_2&&_3!=_4)?"disabled":null'},p:[36,12,971]}],action:"buy",params:['{"category": "',{t:2,r:"category",p:[37,40,1129]},'", "item": ',{t:2,r:"name",p:[37,63,1152]},', "cost": ',{t:2,r:"cost",p:[37,81,1170]},"}"]},v:{hover:"hover",unhover:"unhover"},f:[{t:2,r:"cost",p:[38,43,1223]}," TC"]}]}],n:52,r:"items",p:[33,2,831]}]}],n:52,r:"data.categories",p:[30,1,706]}]},e.exports=a.extend(r.exports)},{341:341}],477:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{healthState:function(t){var e=this.get("data.vr_avatar.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,292],t:7,e:"ui-display",f:[{t:4,f:[{p:[16,3,331],t:7,e:"ui-notice",f:[{p:[17,4,347],t:7,e:"span",f:["Safety restraints disabled."]}]}],n:50,r:"data.emagged",p:[15,2,307]}," ",{t:4,f:[{p:[21,3,442],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:[{p:[22,4,482],t:7,e:"ui-section",a:{label:"Name"},f:[{t:2,r:"data.vr_avatar.name",p:[23,5,513]}]}," ",{p:[25,4,559],t:7,e:"ui-section",a:{label:"Status"},f:[{t:2,r:"data.vr_avatar.status",p:[26,5,592]}]}," ",{p:[28,4,640],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[29,5,673],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.vr_avatar.maxhealth",p:[29,26,694]}],value:[{t:2,r:"adata.vr_avatar.health",
+p:[29,64,732]}],state:[{t:2,x:{r:["healthState","adata.vr_avatar.health"],s:"_0(_1)"},p:[29,99,767]}]},f:[{t:2,x:{r:["adata.vr_avatar.health"],s:"Math.round(_0)"},p:[29,140,808]},"/",{t:2,r:"adata.vr_avatar.maxhealth",p:[29,179,847]}]}]}]}],n:50,r:"data.vr_avatar",p:[20,2,416]},{t:4,n:51,f:[{p:[33,3,935],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:["No Virtual Avatar detected"]}],r:"data.vr_avatar"}," ",{p:[37,2,1031],t:7,e:"ui-display",a:{title:"VR Commands"},f:[{p:[38,3,1067],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.toggle_open"],s:'_0?"times":"plus"'},p:[38,20,1084]}],action:"toggle_open"},f:[{t:2,x:{r:["data.toggle_open"],s:'_0?"Close":"Open"'},p:[39,4,1151]}," the VR Sleeper"]}," ",{t:4,f:[{p:[42,4,1253],t:7,e:"ui-button",a:{icon:"signal",action:"vr_connect"},f:["Connect to VR"]}],n:50,r:"data.isoccupant",p:[41,3,1225]}," ",{t:4,f:[{p:[47,4,1376],t:7,e:"ui-button",a:{icon:"ban",action:"delete_avatar"},f:["Delete Virtual Avatar"]}],n:50,r:"data.vr_avatar",p:[46,3,1349]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],478:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{t:4,f:[{p:[3,5,40],t:7,e:"ui-section",a:{label:[{t:2,r:"color",p:[3,24,59]},{t:2,x:{r:["wire"],s:'_0?" ("+_0+")":""'},p:[3,33,68]}],labelcolor:[{t:2,r:"color",p:[3,80,115]}],candystripe:0,right:0},f:[{p:[4,7,151],t:7,e:"ui-button",a:{action:"cut",params:['{"wire":"',{t:2,r:"color",p:[4,48,192]},'"}']},f:[{t:2,x:{r:["cut"],s:'_0?"Mend":"Cut"'},p:[4,61,205]}]}," ",{p:[5,7,248],t:7,e:"ui-button",a:{action:"pulse",params:['{"wire":"',{t:2,r:"color",p:[5,50,291]},'"}']},f:["Pulse"]}," ",{p:[6,7,328],t:7,e:"ui-button",a:{action:"attach",params:['{"wire":"',{t:2,r:"color",p:[6,51,372]},'"}']},f:[{t:2,x:{r:["attached"],s:'_0?"Detach":"Attach"'},p:[6,64,385]}]}]}],n:52,r:"data.wires",p:[2,3,15]}]}," ",{t:4,f:[{p:[11,3,498],t:7,e:"ui-display",f:[{t:4,f:[{p:[13,7,543],t:7,e:"ui-section",f:[{t:2,r:".",p:[13,19,555]}]}],n:52,r:"data.status",p:[12,5,515]}]}],n:50,r:"data.status",p:[10,1,476]}]},e.exports=a.extend(r.exports)},{341:341}],479:[function(t,e,n){(function(e){"use strict";var n=t(341),a=e.interopRequireDefault(n);t(331),t(1),t(327),t(330);var r=t(480),i=e.interopRequireDefault(r),o=t(481),s=t(328),p=t(329),u=e.interopRequireDefault(p);a["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(485)),window.initialize=function(e){window.tgui=window.tgui||new i["default"]({el:"#container",data:function(){var n=JSON.parse(e);return{constants:t(482),text:t(486),config:n.config,data:n.data,adata:n.data}}})};var c=document.getElementById("data"),l=c.textContent,d=c.getAttribute("data-ref");"{}"!==l&&(window.initialize(l),c.remove()),(0,o.act)(d,"tgui:initialize"),(0,s.loadCSS)("font-awesome.min.css");var f=new u["default"]("FontAwesome");f.check("").then(function(){return document.body.classList.add("icons")})["catch"](function(){return document.body.classList.add("no-icons")})}).call(this,t("babel/external-helpers"))},{1:1,327:327,328:328,329:329,330:330,331:331,341:341,480:480,481:481,482:482,485:485,486:486,"babel/external-helpers":"babel/external-helpers"}],480:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={components:{"ui-bar":t(342),"ui-button":t(343),"ui-display":t(344),"ui-input":t(345),"ui-linegraph":t(346),"ui-notice":t(347),"ui-section":t(349),"ui-subdisplay":t(350),"ui-tabs":t(351)},events:{enter:t(339).enter,space:t(339).space},transitions:{fade:t(340)},onconfig:function(){var e=this.get("config.interface"),n={ai_airlock:t(355),airalarm:t(356),"airalarm/back":t(357),"airalarm/modes":t(358),"airalarm/scrubbers":t(359),"airalarm/status":t(360),"airalarm/thresholds":t(361),"airalarm/vents":t(362),airlock_electronics:t(363),apc:t(364),atmos_alert:t(365),atmos_control:t(366),atmos_filter:t(367),atmos_mixer:t(368),atmos_pump:t(369),borgopanel:t(370),brig_timer:t(371),bsa:t(372),canister:t(373),cargo:t(374),cargo_express:t(375),cellular_emporium:t(376),centcom_podlauncher:t(377),chem_dispenser:t(378),chem_heater:t(379),chem_master:t(380),chem_synthesizer:t(381),clockwork_slab:t(382),codex_gigas:t(383),computer_fabricator:t(384),crayon:t(385),crew:t(386),cryo:t(387),disposal_unit:t(388),dna_vault:t(389),dogborg_sleeper:t(390),eightball:t(391),emergency_shuttle_console:t(392),engraved_message:t(393),error:t(394),"exofab - Copia":t(395),exonet_node:t(396),firealarm:t(397),gps:t(398),gulag_console:t(399),gulag_item_reclaimer:t(400),holodeck:t(401),implantchair:t(402),intellicard:t(403),keycard_auth:t(404),labor_claim_console:t(405),language_menu:t(406),launchpad_remote:t(407),mech_bay_power_console:t(408),mulebot:t(409),nanite_chamber_control:t(410),nanite_cloud_control:t(411),nanite_program_hub:t(412),nanite_programmer:t(413),nanite_remote:t(414),notificationpanel:t(415),ntnet_relay:t(416),ntos_ai_restorer:t(417),ntos_card:t(418),ntos_configuration:t(419),ntos_file_manager:t(420),ntos_main:t(421),ntos_net_chat:t(422),ntos_net_dos:t(423),ntos_net_downloader:t(424),ntos_net_monitor:t(425),ntos_net_transfer:t(426),ntos_power_monitor:t(427),ntos_revelation:t(428),ntos_station_alert:t(429),ntos_supermatter_monitor:t(430),ntosheader:t(431),nuclear_bomb:t(432),operating_computer:t(433),ore_redemption_machine:t(434),pandemic:t(435),personal_crafting:t(436),portable_pump:t(437),portable_scrubber:t(438),power_monitor:t(439),radio:t(440),rdconsole:t(441),"rdconsole/circuit":t(442),"rdconsole/designview":t(443),"rdconsole/destruct":t(444),"rdconsole/diskopsdesign":t(445),"rdconsole/diskopstech":t(446),"rdconsole/nodeview":t(447),"rdconsole/protolathe":t(448),"rdconsole/rdheader":t(449),"rdconsole/settings":t(450),"rdconsole/techweb":t(451),reagentgrinder:t(452),rpd:t(453),"rpd/colorsel":t(454),"rpd/dirsel":t(455),sat_control:t(456),scrubbing_types:t(457),shuttle_manipulator:t(458),"shuttle_manipulator/modification":t(459),"shuttle_manipulator/status":t(460),"shuttle_manipulator/templates":t(461),sleeper:t(462),slime_swap_body:t(463),smartvend:t(464),smes:t(465),smoke_machine:t(466),solar_control:t(467),space_heater:t(468),spawners_menu:t(469),station_alert:t(470),suit_storage_unit:t(471),tank_dispenser:t(472),tanks:t(473),thermomachine:t(474),turbine_computer:t(475),uplink:t(476),vr_sleeper:t(477),wires:t(478)};e in n?this.components["interface"]=n[e]:this.components["interface"]=n.error},oninit:function(){this.observe("config.style",function(t,e,n){t&&document.body.classList.add(t),e&&document.body.classList.remove(e)})},oncomplete:function(){if(this.get("config.locked")){var t=(0,a.lock)(window.screenLeft,window.screenTop),e=t.x,r=t.y;(0,n.winset)(this.get("config.window"),"pos",e+","+r)}(0,n.winset)("mapwindow.map","focus",!0)}}}(r),r.exports.template={v:3,t:[" "," "," "," ",{p:[56,1,1819],t:7,e:"titlebar",f:[{t:3,r:"config.title",p:[56,11,1829]}]}," ",{p:[57,1,1859],t:7,e:"main",f:[{p:[58,3,1868],t:7,e:"warnings"}," ",{p:[59,3,1882],t:7,e:"interface"}]}," ",{t:4,f:[{p:[62,3,1929],t:7,e:"resize"}],n:50,r:"config.titlebar",p:[61,1,1903]}]},r.exports.components=r.exports.components||{};var i={warnings:t(354),titlebar:t(353),resize:t(348)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{339:339,340:340,341:341,342:342,343:343,344:344,345:345,346:346,347:347,348:348,349:349,350:350,351:351,353:353,354:354,355:355,356:356,357:357,358:358,359:359,360:360,361:361,362:362,363:363,364:364,365:365,366:366,367:367,368:368,369:369,370:370,371:371,372:372,373:373,374:374,375:375,376:376,377:377,378:378,379:379,380:380,381:381,382:382,383:383,384:384,385:385,386:386,387:387,388:388,389:389,390:390,391:391,392:392,393:393,394:394,395:395,396:396,397:397,398:398,399:399,400:400,401:401,402:402,403:403,404:404,405:405,406:406,407:407,408:408,409:409,410:410,411:411,412:412,413:413,414:414,415:415,416:416,417:417,418:418,419:419,420:420,421:421,422:422,423:423,424:424,425:425,426:426,427:427,428:428,429:429,430:430,431:431,432:432,433:433,434:434,435:435,436:436,437:437,438:438,439:439,440:440,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451,452:452,453:453,454:454,455:455,456:456,457:457,458:458,459:459,460:460,461:461,462:462,463:463,464:464,465:465,466:466,467:467,468:468,469:469,470:470,471:471,472:472,473:473,474:474,475:475,476:476,477:477,478:478,481:481,483:483}],481:[function(t,e,n){"use strict";function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"byond://"+e+"?"+Object.keys(t).map(function(e){return o(e)+"="+o(t[e])}).join("&")}function r(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};window.location.href=a(Object.assign({src:t,action:e},n))}function i(t,e,n){var r;window.location.href=a((r={},r[t+"."+e]=n,r),"winset")}n.__esModule=!0,n.href=a,n.act=r,n.winset=i;var o=encodeURIComponent},{}],482:[function(t,e,n){"use strict";n.__esModule=!0;n.UI_INTERACTIVE=2,n.UI_UPDATE=1,n.UI_DISABLED=0,n.UI_CLOSE=-1},{}],483:[function(t,e,n){"use strict";function a(t,e){return 0>t?t=0:t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth),0>e?e=0:e+window.innerHeight>window.screen.availHeight&&(e=window.screen.availHeight-window.innerHeight),{x:t,y:e}}function r(t){if(t.preventDefault(),this.get("drag")){if(this.get("x")){var e=t.screenX-this.get("x")+window.screenLeft,n=t.screenY-this.get("y")+window.screenTop;if(this.get("config.locked")){var r=a(e,n);e=r.x,n=r.y}(0,s.winset)(this.get("config.window"),"pos",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}function i(t,e){return t=Math.clamp(100,window.screen.width,t),e=Math.clamp(100,window.screen.height,e),{x:t,y:e}}function o(t){if(t.preventDefault(),this.get("resize")){if(this.get("x")){var e=t.screenX-this.get("x")+window.innerWidth,n=t.screenY-this.get("y")+window.innerHeight,a=i(e,n);e=a.x,n=a.y,(0,s.winset)(this.get("config.window"),"size",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}n.__esModule=!0,n.lock=a,n.drag=r,n.sane=i,n.resize=o;var s=t(481)},{481:481}],484:[function(t,e,n){"use strict";function a(t,e){for(var n=t,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var o;if(a){if(i>=n.length)break;o=n[i++]}else{if(i=n.next(),i.done)break;o=i.value}var s=o;s.textContent.toLowerCase().includes(e)?(s.style.display="",r(s,e)):s.style.display="none"}}function r(t,e){for(var n=t.queryAll("section"),a=t.query("header").textContent.toLowerCase().includes(e),r=n,i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;a||p.textContent.toLowerCase().includes(e)?p.style.display="":p.style.display="none"}}n.__esModule=!0,n.filterMulti=a,n.filter=r},{}],485:[function(t,e,n){"use strict";function a(t,e,n){return Math.max(t,Math.min(n,e))}function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return+(Math.round(t+"e"+e)+"e-"+e)}n.__esModule=!0,n.clamp=a,n.fixed=r},{}],486:[function(t,e,n){"use strict";function a(t){return t[0].toUpperCase()+t.slice(1).toLowerCase()}function r(t){return t.replace(/\w\S*/g,a)}function i(t,e){for(t=""+t;t.length1){for(var p=Array(o),u=0;o>u;u++)p[u]=arguments[u+3];n.children=p}return{$$typeof:t,type:e,key:void 0===a?null:""+a,ref:null,props:n,_owner:null}}}(),e.asyncIterator=function(t){if("function"==typeof Symbol){if(Symbol.asyncIterator){var e=t[Symbol.asyncIterator];if(null!=e)return e.call(t)}if(Symbol.iterator)return t[Symbol.iterator]()}throw new TypeError("Object is not async iterable")},e.asyncGenerator=function(){function t(t){this.value=t}function e(e){function n(t,e){return new Promise(function(n,r){var s={key:t,arg:e,resolve:n,reject:r,next:null};o?o=o.next=s:(i=o=s,a(t,e))})}function a(n,i){try{var o=e[n](i),s=o.value;s instanceof t?Promise.resolve(s.value).then(function(t){a("next",t)},function(t){a("throw",t)}):r(o.done?"return":"normal",o.value)}catch(p){r("throw",p)}}function r(t,e){switch(t){case"return":i.resolve({value:e,done:!0});break;case"throw":i.reject(e);break;default:i.resolve({value:e,done:!1})}i=i.next,i?a(i.key,i.arg):o=null}var i,o;this._invoke=n,"function"!=typeof e["return"]&&(this["return"]=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype["throw"]=function(t){return this._invoke("throw",t)},e.prototype["return"]=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),e.asyncGeneratorDelegate=function(t,e){function n(n,a){return r=!0,a=new Promise(function(e){e(t[n](a))}),{done:!1,value:e(a)}}var a={},r=!1;return"function"==typeof Symbol&&Symbol.iterator&&(a[Symbol.iterator]=function(){return this}),a.next=function(t){return r?(r=!1,t):n("next",t)},"function"==typeof t["throw"]&&(a["throw"]=function(t){if(r)throw r=!1,t;return n("throw",t)}),"function"==typeof t["return"]&&(a["return"]=function(t){return n("return",t)}),a},e.asyncToGenerator=function(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){function a(r,i){try{var o=e[r](i),s=o.value}catch(p){return void n(p)}return o.done?void t(s):Promise.resolve(s).then(function(t){a("next",t)},function(t){a("throw",t)})}return a("next")})}},e.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,a)&&(n[a]=t[a]);return n},e.possibleConstructorReturn=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},e.selfGlobal=void 0===t?self:t,e.set=function a(t,e,n,r){var i=Object.getOwnPropertyDescriptor(t,e);if(void 0===i){var o=Object.getPrototypeOf(t);null!==o&&a(o,e,n,r)}else if("value"in i&&i.writable)i.value=n;else{var s=i.set;void 0!==s&&s.call(r,n)}return n},e.slicedToArray=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),e.slicedToArrayLoose=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t)){for(var n,a=[],r=t[Symbol.iterator]();!(n=r.next()).done&&(a.push(n.value),!e||a.length!==e););return a}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.taggedTemplateLiteral=function(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))},e.taggedTemplateLiteralLoose=function(t,e){return t.raw=e,t},e.temporalRef=function(t,e,n){if(t===n)throw new ReferenceError(e+" is not defined - temporal dead zone");return t},e.temporalUndefined={},e.toArray=function(t){return Array.isArray(t)?t:Array.from(t)},e.toConsumableArray=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e10
All
Custom
- Analyze
+ Analyze
{{else}}
@@ -41,7 +41,7 @@
10
All
Custom
- Analyze
+ Analyze
{{/each}}
diff --git a/tgui/src/interfaces/crayon.ract b/tgui/src/interfaces/crayon.ract
index 8d34e8e82c..42c4df9a50 100644
--- a/tgui/src/interfaces/crayon.ract
+++ b/tgui/src/interfaces/crayon.ract
@@ -29,7 +29,7 @@
{{/each}}
- {{text_buffer}}
+ {{data.text_buffer}}
New Text
diff --git a/tgui/src/interfaces/gulag_item_reclaimer.ract b/tgui/src/interfaces/gulag_item_reclaimer.ract
index 7c315d869c..ac6d5d5165 100644
--- a/tgui/src/interfaces/gulag_item_reclaimer.ract
+++ b/tgui/src/interfaces/gulag_item_reclaimer.ract
@@ -1,10 +1,7 @@
-
- {{data.id ? data.id_name : "-------------"}}
-
{{#each data.mobs}}
Drop Items
{{/each}}
-
\ No newline at end of file
+
diff --git a/tgui/src/interfaces/labor_claim_console.ract b/tgui/src/interfaces/labor_claim_console.ract
index 16b3ae0491..21e69f9aa9 100644
--- a/tgui/src/interfaces/labor_claim_console.ract
+++ b/tgui/src/interfaces/labor_claim_console.ract
@@ -6,24 +6,15 @@
{{/each}}
-
- {{data.id ? data.id_name : "-------------"}}
+
+ {{data.unclaimed_points}}
+ Claim points
- {{#if data.id}}
-
- {{data.points}}
-
-
- {{data.goal}}
-
-
- {{data.unclaimed_points}}
- Claim points
-
- {{/if}}
-
+ Points: {{data.id_points}}
+
+ {{data.status_info}}
Move shuttle
-
-
\ No newline at end of file
+
+
diff --git a/tgui/src/interfaces/ore_redemption_machine.ract b/tgui/src/interfaces/ore_redemption_machine.ract
index 596b624e98..650c5ddd5e 100644
--- a/tgui/src/interfaces/ore_redemption_machine.ract
+++ b/tgui/src/interfaces/ore_redemption_machine.ract
@@ -3,24 +3,10 @@
This machine only accepts ore. Gibtonite and Slag are not accepted.
- Current unclaimed points: {{data.unclaimedPoints}}
- {{#if data.unclaimedPoints}}
+ Current unclaimed credits: {{data.unclaimedPoints}}
- Claim Points
+ Claim
- {{/if}}
-
-
- {{#if data.hasID}}
-
- Eject ID
-
- You have {{data.claimedPoints}} mining points collected.
- {{else}}
-
- Insert ID
-
- {{/if}}