Modular PDAs: The End of an Era (#10319)

PDAs are dead, long live PDAs. All trace of old PDAs has been scoured from the codebase, and in its place are modular computer PDAs that are feature-equivalent. Essentially every PDA function except the Syndicate detonation feature and Notepad has been ported over, and battery life for handheld computers has been boosted alongside the addition of charging cables to make things easier.
This commit is contained in:
JohnWildkins
2020-11-01 14:09:50 -05:00
committed by GitHub
parent a5d891763c
commit 616776f886
167 changed files with 2017 additions and 3332 deletions
@@ -28,6 +28,7 @@
/datum/modular_computer_app_presets/engineering/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -43,6 +44,31 @@
)
return _prg_list
/datum/modular_computer_app_presets/engineering/atmos
name = "atmos"
display_name = "Engineering - Atmospherics"
description = "Contains the most common engineering programs and atmospheric monitoring software."
available = TRUE
/datum/modular_computer_app_presets/engineering/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
new /datum/computer_file/program/chatclient(comp),
new /datum/computer_file/program/civilian/cargoorder(comp),
new /datum/computer_file/program/power_monitor(comp),
new /datum/computer_file/program/alarm_monitor(comp),
new /datum/computer_file/program/atmos_control(comp),
new /datum/computer_file/program/rcon_console(comp),
new /datum/computer_file/program/camera_monitor(comp),
new /datum/computer_file/program/lighting_control(comp),
new /datum/computer_file/program/ntsl2_interpreter(comp),
new /datum/computer_file/program/scanner/gas(comp)
)
return _prg_list
/datum/modular_computer_app_presets/engineering/ce
name = "engineering_head"
display_name = "Engineering - CE"
@@ -51,6 +77,7 @@
/datum/modular_computer_app_presets/engineering/ce/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -65,7 +92,8 @@
new /datum/computer_file/program/camera_monitor(comp),
new /datum/computer_file/program/lighting_control(comp),
new /datum/computer_file/program/records/employment(comp),
new /datum/computer_file/program/ntsl2_interpreter(comp)
new /datum/computer_file/program/ntsl2_interpreter(comp),
new /datum/computer_file/program/scanner/gas(comp)
)
return _prg_list
@@ -85,7 +113,8 @@
new /datum/computer_file/program/suit_sensors(comp),
new /datum/computer_file/program/records/medical(comp),
new /datum/computer_file/program/ntsl2_interpreter(comp),
new /datum/computer_file/program/chemistry_codex(comp)
new /datum/computer_file/program/chemistry_codex(comp),
new /datum/computer_file/program/scanner/medical(comp)
)
return _prg_list
@@ -97,6 +126,7 @@
/datum/modular_computer_app_presets/medical/cmo/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -107,7 +137,9 @@
new /datum/computer_file/program/records/employment(comp),
new /datum/computer_file/program/records/medical(comp),
new /datum/computer_file/program/ntsl2_interpreter(comp),
new /datum/computer_file/program/chemistry_codex(comp)
new /datum/computer_file/program/chemistry_codex(comp),
new /datum/computer_file/program/scanner/medical(comp),
new /datum/computer_file/program/scanner/science(comp)
)
return _prg_list
@@ -128,7 +160,9 @@
new /datum/computer_file/program/ntnetmonitor(comp),
new /datum/computer_file/program/aidiag(comp),
new /datum/computer_file/program/ntsl2_interpreter(comp),
new /datum/computer_file/program/chemistry_codex(comp)
new /datum/computer_file/program/chemistry_codex(comp),
new /datum/computer_file/program/scanner/science(comp),
new /datum/computer_file/program/scanner/gas(comp)
)
return _prg_list
@@ -140,6 +174,7 @@
/datum/modular_computer_app_presets/research/rd/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -150,7 +185,9 @@
new /datum/computer_file/program/aidiag(comp),
new /datum/computer_file/program/records/employment(comp),
new /datum/computer_file/program/ntsl2_interpreter(comp),
new /datum/computer_file/program/chemistry_codex(comp)
new /datum/computer_file/program/chemistry_codex(comp),
new /datum/computer_file/program/scanner/science(comp),
new /datum/computer_file/program/scanner/gas(comp)
)
return _prg_list
@@ -162,6 +199,7 @@
/datum/modular_computer_app_presets/command/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -182,6 +220,7 @@
/datum/modular_computer_app_presets/command/hop/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -196,14 +235,15 @@
)
return _prg_list
/datum/modular_computer_app_presets/captain
/datum/modular_computer_app_presets/command/captain
name = "captain"
display_name = "Captain"
description = "Contains the most important programs for the Captain."
available = FALSE
/datum/modular_computer_app_presets/captain/return_install_programs(obj/item/modular_computer/comp)
/datum/modular_computer_app_presets/command/captain/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -231,6 +271,7 @@
/datum/modular_computer_app_presets/security/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/nttransfer(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -280,6 +321,7 @@
/datum/modular_computer_app_presets/security/investigations/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/nttransfer(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -303,6 +345,7 @@
/datum/modular_computer_app_presets/security/hos/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/nttransfer(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -327,6 +370,7 @@
/datum/modular_computer_app_presets/civilian/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -338,6 +382,39 @@
)
return _prg_list
/datum/modular_computer_app_presets/civilian/janitor
name = "janitor"
display_name = "Janitor"
description = "Contains programs for janitorial service."
available = TRUE
/datum/modular_computer_app_presets/civilian/janitor/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
new /datum/computer_file/program/chatclient(comp),
new /datum/computer_file/program/civilian/cargoorder(comp),
new /datum/computer_file/program/civilian/janitor(comp),
new /datum/computer_file/program/game/arcade(comp),
new /datum/computer_file/program/game/sudoku(comp),
new /datum/computer_file/program/ntsl2_interpreter(comp)
)
return _prg_list
/datum/modular_computer_app_presets/civilian/clown
name = "clown"
display_name = "Clown"
description = "Contains programs for HONK!!!"
available = TRUE
/datum/modular_computer_app_presets/civilian/mime
name = "mime"
display_name = "Mime"
description = "Contains programs for janitorial service."
available = TRUE
/datum/modular_computer_app_presets/supply
name = "supply"
display_name = "Supply"
@@ -346,6 +423,7 @@
/datum/modular_computer_app_presets/supply/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -365,6 +443,7 @@
/datum/modular_computer_app_presets/cargo_delivery/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -382,6 +461,7 @@
/datum/modular_computer_app_presets/representative/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
@@ -420,11 +500,13 @@
/datum/modular_computer_app_presets/merc/return_install_programs(obj/item/modular_computer/comp)
var/list/_prg_list = list(
new /datum/computer_file/program/ntnetdownload(comp),
new /datum/computer_file/program/filemanager(comp),
new /datum/computer_file/program/newsbrowser(comp),
new /datum/computer_file/program/manifest(comp),
new /datum/computer_file/program/nttransfer(comp),
new /datum/computer_file/program/camera_monitor/hacked(comp)
new /datum/computer_file/program/camera_monitor/hacked(comp),
new /datum/computer_file/program/signaler(comp)
)
return _prg_list
@@ -0,0 +1,106 @@
/datum/computer_file/program/civilian/janitor
filename = "janitor"
filedesc = "Custodial Supplies Locator"
program_icon_state = "generic"
extended_desc = "This program is used by custodial staff to keep track of work-related supplies."
usage_flags = PROGRAM_ALL_REGULAR
size = 4
required_access_run = access_janitor
required_access_download = access_janitor
requires_ntnet = TRUE
available_on_ntnet = TRUE
var/sel_type = "Mops"
var/list/types = list("Mops", "Buckets", "Cleanbots", "Janicarts")
/datum/computer_file/program/civilian/janitor/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if (!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-janitor", 500, 500, "Custodial Supplies Locator")
ui.auto_update_content = TRUE
ui.open()
/datum/computer_file/program/civilian/janitor/vueui_transfer(oldobj)
for(var/o in SSvueui.transfer_uis(oldobj, src, "mcomputer-janitor", 500, 500, "Custodial Supplies Locator"))
var/datum/vueui/ui = o
ui.auto_update_content = TRUE
return TRUE
/datum/computer_file/program/civilian/janitor/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data
if(!data)
data = list()
var/headerdata = get_header_data(data["_PC"])
if(headerdata)
data["_PC"] = headerdata
. = data
var/turf/p = get_turf(user)
var/dir
LAZYINITLIST(data["user_loc"])
LAZYINITLIST(data["categories"])
data["supplies"] = list()
VUEUI_SET_CHECK(data["user_loc"]["x"], p ? p.x : null, ., data)
VUEUI_SET_CHECK(data["user_loc"]["y"], p ? p.y : null, ., data)
if(LAZYLEN(data["categories"]) != LAZYLEN(types))
VUEUI_SET_CHECK_LIST(data["categories"], types, ., data)
if(!sel_type || !data["sel_category"])
VUEUI_SET_CHECK(data["sel_category"], "Mops", ., data)
sel_type = data["sel_category"]
else if (sel_type != data["sel_category"])
VUEUI_SET_CHECK(data["sel_category"], sel_type, ., data)
var/status = ""
for(var/atom/A in global.janitorial_supplies)
if(istype(A, /obj/item/mop) && sel_type == "Mops")
var/obj/item/mop/M = A
status = M.reagents.total_volume ? "Wet" : "Dry"
else if(istype(A, /obj/structure/mopbucket) && sel_type == "Buckets")
var/obj/structure/mopbucket/B = A
status = (B.reagents.total_volume / B.reagents.maximum_volume) * 100
status = "[status]% filled"
else if(istype(A, /mob/living/bot/cleanbot) && sel_type == "Cleanbots")
var/mob/living/bot/cleanbot/C = A
status = C.on ? "Online" : "Offline"
else if(istype(A, /obj/structure/janitorialcart) && sel_type == "Janicarts")
var/obj/structure/janitorialcart/J = A
status = J.get_short_status()
else
continue
var/turf/AT = get_turf(A)
if(AT && ARE_Z_CONNECTED(AT.z, p.z))
dir = dir2text(get_dir(p, AT))
if(!dir)
dir = "ERR"
dir = uppertext(dir)
var/list/L = ++data["supplies"]
var/idx = length(L)
data["supplies"][idx] = list(
"name" = A.name,
"key" = idx,
"x" = AT.x,
"y" = AT.y,
"dir" = dir,
"status" = status
)
return data
/datum/computer_file/program/civilian/janitor/Topic(href, href_list)
if(..())
return TRUE
if(href_list["selected"])
sel_type = href_list["selected"]
SSvueui.check_uis_for_change(src)
return
@@ -169,7 +169,7 @@
break
R.rank = id_card.assignment
R.real_rank = real_title
computer.proc_eject_id(user)
computer.eject_id()
if("suspend")
if(computer && can_run(user, 1))
id_card.assignment = "Suspended"
@@ -1,25 +1,25 @@
/datum/computer_file/program/pai_atmos
filename = "pai_atmos"
/datum/computer_file/program/atmos
filename = "atmos"
filedesc = "Atmosphere Sensor"
program_icon_state = "generic"
extended_desc = "This program is for viewing local atmospheric data."
size = 2
available_on_ntnet = TRUE
usage_flags = PROGRAM_SILICON_PAI
usage_flags = PROGRAM_ALL
/datum/computer_file/program/pai_atmos/ui_interact(mob/user)
/datum/computer_file/program/atmos/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if (!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-pai-atmosphere", 400, 200, "pAI Atmosphere Sensor")
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-atmosphere", 400, 200, "Atmosphere Sensor")
ui.open()
/datum/computer_file/program/pai_atmos/vueui_transfer(oldobj)
SSvueui.transfer_uis(oldobj, src, "mcomputer-pai-atmosphere", 400, 200, "pAI Atmosphere Sensor")
/datum/computer_file/program/atmos/vueui_transfer(oldobj)
SSvueui.transfer_uis(oldobj, src, "mcomputer-atmosphere", 400, 200, "Atmosphere Sensor")
return TRUE
// Gaters data for ui
/datum/computer_file/program/pai_atmos/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
/datum/computer_file/program/atmos/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data || list()
// Gather data for computer header
@@ -27,17 +27,9 @@
if(headerdata)
data["_PC"] = headerdata
. = data
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
var/turf/T = get_turf_or_move(host.loc)
var/turf/T = get_turf_or_move(computer)
if(T)
var/datum/gas_mixture/env = T.return_air()
VUEUI_SET_CHECK(data["read"], TRUE, ., data)
@@ -1,6 +1,6 @@
/datum/computer_file/program/newsbrowser
filename = "newsbrowser"
filedesc = "NTNet/ExoNet News Browser"
filedesc = "News Browser"
extended_desc = "This program may be used to view and download news articles from the network."
program_icon_state = "generic"
usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET | PROGRAM_STATIONBOUND | PROGRAM_WRISTBOUND
@@ -87,7 +87,7 @@
/datum/nano_module/program/computer_newsbrowser
name = "NTNet/ExoNet News Browser"
name = "News Browser"
/datum/nano_module/program/computer_newsbrowser/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
@@ -1,6 +1,6 @@
/datum/computer_file/program/chatclient
filename = "ntnrc_client"
filedesc = "NTNet Relay Chat Client"
filedesc = "Chat Client"
program_icon_state = "command"
extended_desc = "This program allows communication over the NTNRC network."
size = 2
@@ -10,27 +10,54 @@
ui_header = "ntnrc_idle.gif"
available_on_ntnet = TRUE
nanomodule_path = /datum/nano_module/program/computer_chatclient
color = LIGHT_COLOR_GREEN
silent = TRUE
var/last_message // Used to generate the toolbar icon
var/username
var/datum/ntnet_conversation/channel
var/operator_mode = FALSE // Channel operator mode
var/netadmin_mode = FALSE // Administrator mode (invisible to other users + bypasses passwords)
var/set_offline = FALSE // appear "invisible"
var/list/directmessagechannels = list()
color = LIGHT_COLOR_GREEN
/datum/computer_file/program/chatclient/New()
..()
username = "DefaultUser[rand(100, 999)]"
var/ringtone = "beep"
var/syndi_auth = FALSE
/datum/computer_file/program/chatclient/New(var/obj/item/modular_computer/comp)
..(comp)
if(!comp)
return
/datum/computer_file/program/chatclient/Topic(href, href_list)
if(..())
return TRUE
if(href_list["PRG_toggleringer"])
. = TRUE
silent = !silent
if(href_list["PRG_setringtone"])
. = TRUE
var/t = input(usr, "Please enter new ringtone", filedesc, ringtone) as text|null
if(!usr.Adjacent(computer) || !t)
return
var/obj/item/device/uplink/hidden/H = computer.hidden_uplink
if(istype(H) && H.check_trigger(usr, lowertext(t), lowertext(H.pda_code)))
to_chat(usr, SPAN_NOTICE("\The [computer] softly beeps."))
syndi_auth = TRUE
SSnanoui.close_uis(NM)
else
t = sanitize(t, 20)
ringtone = t
if(href_list["PRG_speak"])
. = TRUE
if(!channel)
return TRUE
var/mob/living/user = usr
if(ishuman(user))
user.visible_message("[SPAN_BOLD("\The [user]")] taps on [user.get_pronoun("his")] computer's screen.")
var/message = sanitize(input(user, "Enter message or leave blank to cancel: "))
if(!message || !channel)
return
@@ -43,6 +70,8 @@
to_chat(usr, SPAN_WARNING("The target chat isn't active on your program anymore!"))
return
var/mob/living/user = usr
if(ishuman(user))
user.visible_message("[SPAN_BOLD("\The [user]")] taps on [user.get_pronoun("his")] computer's screen.")
var/message = sanitize(input(user, "Enter message or leave blank to cancel: "))
if(!message)
return
@@ -192,9 +221,10 @@
var/names = list()
for(var/cl in ntnet_global.chat_clients)
var/datum/computer_file/program/chatclient/C = cl
if(C.set_offline || C == src)
continue
clients[C.username] = C
names += C.username
names -= username // Remove ourselves
names += "== Cancel =="
var/picked = input(usr, "Select with whom you would like to start a conversation.") in names
if(picked == "== Cancel ==")
@@ -230,26 +260,67 @@
ui_header = "ntnrc_idle.gif"
/datum/computer_file/program/chatclient/kill_program(var/forced = FALSE)
if(!forced)
var/confirm = alert("Are you sure you want to close the NTNRC Client? You will not be reachable via messaging if you do so.", "Close?", "Yes", "No")
if((confirm != "Yes") || (CanUseTopic(usr) != STATUS_INTERACTIVE))
return FALSE
channel = null
ntnet_global.chat_clients -= src
..(forced)
return TRUE
/datum/computer_file/program/chatclient/run_program(var/mob/user)
ntnet_global.chat_clients += src
if(!computer)
return
if(!istype(computer, /obj/item/modular_computer/silicon))
if((!computer.registered_id && !computer.register_account(src)))
return
if(!(src in ntnet_global.chat_clients))
ntnet_global.chat_clients += src
if(!username)
username = username_from_id()
return ..(user)
/datum/computer_file/program/chatclient/proc/username_from_id()
if(istype(computer, /obj/item/modular_computer/silicon))
var/obj/item/modular_computer/silicon/SC = computer
return SC.computer_host.name
if(!computer.registered_id)
return "Unknown"
return "[computer.registered_id.registered_name] ([computer.registered_id.assignment])"
/datum/computer_file/program/chatclient/event_unregistered()
..()
computer.set_autorun(filename)
ntnet_global.chat_clients -= src
kill_program(TRUE)
/datum/computer_file/program/chatclient/event_silentmode()
..()
if(silent == computer.silent)
silent = !silent
/datum/nano_module/program/computer_chatclient
name = "NTNet Relay Chat Client"
name = "Chat Client"
/datum/nano_module/program/computer_chatclient/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
if(!ntnet_global || !ntnet_global.chat_channels)
return
var/datum/computer_file/program/chatclient/C = program
if(C.computer.hidden_uplink && C.syndi_auth)
if(alert(user, "Resume or close and secure?", name, "Resume", "Close") == "Resume")
C.computer.hidden_uplink.trigger(user)
return
else
C.syndi_auth = FALSE
var/list/data = list()
if(program)
data = list("_PC" = program.get_header_data())
var/datum/computer_file/program/chatclient/C = program
if(!istype(C))
return
@@ -0,0 +1,46 @@
/datum/computer_file/program/scanner
size = 2
program_type = PROGRAM_SERVICE
available_on_ntnet = FALSE
usage_flags = PROGRAM_ALL_HANDHELD
var/mode = null
/datum/computer_file/program/scanner/service_activate()
. = ..()
if(!computer.scan_mode)
computer.scan_mode = mode
return TRUE
else
computer.visible_message(SPAN_WARNING("Cannot activate [filedesc]: Another scanner is already active!"))
return FALSE
/datum/computer_file/program/scanner/service_deactivate()
. = ..()
computer.scan_mode = null
/datum/computer_file/program/scanner/medical
filename = "med_scanner"
filedesc = "Medical Analyzer"
extended_desc = "A scanning suite capable of detecting major medical problems in individuals."
available_on_ntnet = TRUE
required_access_run = access_medical
required_access_download = access_medical
mode = SCANNER_MEDICAL
/datum/computer_file/program/scanner/science
filename = "sci_scanner"
filedesc = "Reagent Analyzer"
extended_desc = "A scanning suite capable of detecting active chemical reagents."
available_on_ntnet = TRUE
required_access_run = access_research
required_access_download = access_research
mode = SCANNER_REAGENT
/datum/computer_file/program/scanner/gas
filename = "gas_scanner"
filedesc = "Gas Analyzer"
extended_desc = "A scanning suite capable of detecting and parsing gaseous conditions within a closed atmospheric system."
available_on_ntnet = TRUE
required_access_run = list(access_atmospherics, access_research)
required_access_download = list(access_atmospherics, access_research)
mode = SCANNER_GAS
@@ -0,0 +1,107 @@
/datum/computer_file/program/signaler
filename = "signaler"
filedesc = "Remote Signaller"
program_icon_state = "generic"
extended_desc = "This program can be used to send wide-range signals of various frequencies."
size = 2
available_on_ntnet = TRUE
usage_flags = PROGRAM_ALL
var/obj/item/radio/integrated/signal/radio
var/doorcode
/datum/computer_file/program/signaler/New(var/obj/item/modular_computer/comp)
..(comp)
if(computer && computer.computer_emagged && computer.doorcode)
doorcode = computer.doorcode
/datum/computer_file/program/signaler/can_run(mob/user, loud, access_to_check, check_type)
. = ..()
if(!get_radio())
computer.output_error("Cannot open [filedesc]: missing signaler hardware.", 0)
return FALSE
/datum/computer_file/program/signaler/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if (!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-signaler", 400, 300, "Remote Signaller")
ui.open()
/datum/computer_file/program/signaler/vueui_transfer(oldobj)
SSvueui.transfer_uis(oldobj, src, "mcomputer-signaler", 400, 300, "Remote Signaller")
return TRUE
/datum/computer_file/program/signaler/proc/get_radio()
if(istype(computer, /obj/item/modular_computer/silicon))
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
return host.sradio
else
if(!computer || !computer.network_card?.sradio)
return
return computer.network_card.sradio
// Gathers data for ui
/datum/computer_file/program/signaler/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data || list()
// Gather data for computer header
var/headerdata = get_header_data(data["_PC"])
if(headerdata)
data["_PC"] = headerdata
. = data
radio = get_radio()
if(!radio)
return
VUEUI_SET_CHECK(data["code"], radio.code, ., data)
VUEUI_SET_CHECK(data["frequency"], format_frequency(radio.frequency), ., data)
VUEUI_SET_CHECK(data["emagged"], computer.computer_emagged, ., data)
if(computer.computer_emagged)
if(doorcode == "RESET")
VUEUI_SET_CHECK(data["doorcode"], computer.doorcode, ., data)
VUEUI_SET_CHECK(doorcode, data["doorcode"], ., data)
/datum/computer_file/program/signaler/Topic(href, href_list)
. = ..()
radio = get_radio()
if(!radio)
return
if(href_list["send"])
radio.send_signal("ACTIVATE")
computer.output_message("[icon2html(host, viewers(get_turf(src)))] *beep* *beep*", 1)
return TRUE
else if(href_list["freq"])
var/new_frequency = (radio.frequency + href_list["freq"])
if(new_frequency < PUBLIC_LOW_FREQ || new_frequency > PUBLIC_HIGH_FREQ)
new_frequency = sanitize_frequency(new_frequency)
radio.set_frequency(new_frequency)
return TRUE
else if(href_list["code"])
radio.code += href_list["code"]
radio.code = Clamp(1, round(radio.code), 100)
return TRUE
else if(href_list["toggledoor"])
for(var/obj/machinery/door/blast/M in SSmachinery.all_machines)
if(M.id == href_list["toggledoor"])
if(M.density)
M.open()
else
M.close()
return TRUE
else if(href_list["resetcode"])
if(computer?.doorcode)
doorcode = "RESET"
SSvueui.check_uis_for_change(src)
return TRUE
@@ -14,6 +14,7 @@
if(computer.personal_ai)
to_chat(computer.personal_ai.pai, SPAN_WARNING("pAI Access Lock systems engaged."))
computer.pAI_lock = TRUE
return TRUE
/datum/computer_file/program/pai_access_lock/service_deactivate()
. = ..()
@@ -11,14 +11,15 @@
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
return FALSE
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
return FALSE
var/mob/living/silicon/pai/host = true_computer.computer_host
host.toggle_flashlight()
return TRUE
/datum/computer_file/program/pai_flashlight/service_deactivate()
. = ..()
@@ -10,12 +10,13 @@
/datum/computer_file/program/pai_sechud/service_activate()
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
return FALSE
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
return FALSE
var/mob/living/silicon/pai/host = true_computer.computer_host
host.secHUD = TRUE
return TRUE
/datum/computer_file/program/pai_sechud/service_deactivate()
. = ..()
@@ -39,12 +40,13 @@
/datum/computer_file/program/pai_medhud/service_activate()
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
return FALSE
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
return FALSE
var/mob/living/silicon/pai/host = true_computer.computer_host
host.medHUD = TRUE
return TRUE
/datum/computer_file/program/pai_medhud/service_deactivate()
. = ..()
@@ -1,69 +0,0 @@
/datum/computer_file/program/pai_signaler
filename = "signaler"
filedesc = "Remote Signaller"
program_icon_state = "generic"
extended_desc = "This program can be used to send wide-range signals of various frequencies."
size = 3
available_on_ntnet = 1
usage_flags = PROGRAM_SILICON_PAI
/datum/computer_file/program/pai_signaler/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if (!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-pai-signaler", 400, 150, "pAI Signaller")
ui.open()
/datum/computer_file/program/pai_signaler/vueui_transfer(oldobj)
SSvueui.transfer_uis(oldobj, src, "mcomputer-pai-signaler", 400, 150, "pAI Signaller")
return TRUE
// Gaters data for ui
/datum/computer_file/program/pai_signaler/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data || list()
// Gather data for computer header
var/headerdata = get_header_data(data["_PC"])
if(headerdata)
data["_PC"] = headerdata
. = data
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
VUEUI_SET_CHECK(data["code"], host.sradio.code, ., data)
VUEUI_SET_CHECK(data["frequency"], format_frequency(host.sradio.frequency), ., data)
/datum/computer_file/program/pai_signaler/Topic(href, href_list)
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
var/mob/living/silicon/pai/host = true_computer.computer_host
if(href_list["send"])
host.sradio.send_signal("ACTIVATE")
for(var/mob/O in hearers(1, host.loc))
O.show_message(text("[icon2html(host, viewers(get_turf(src)))] *beep* *beep*"), 3, "*beep* *beep*", 2)
return 1
else if(href_list["freq"])
var/new_frequency = (host.sradio.frequency + href_list["freq"])
if(new_frequency < PUBLIC_LOW_FREQ || new_frequency > PUBLIC_HIGH_FREQ)
new_frequency = sanitize_frequency(new_frequency)
host.sradio.set_frequency(new_frequency)
return 1
else if(href_list["code"])
host.sradio.code += href_list["code"]
host.sradio.code = round(host.sradio.code)
host.sradio.code = min(100, host.sradio.code)
host.sradio.code = max(1, host.sradio.code)
return 1
@@ -10,10 +10,10 @@
/datum/computer_file/program/pai_translator/service_activate()
. = ..()
if(!istype(computer, /obj/item/modular_computer/silicon))
return
return FALSE
var/obj/item/modular_computer/silicon/true_computer = computer
if(!istype(true_computer.computer_host, /mob/living/silicon/pai))
return
return FALSE
var/mob/living/silicon/pai/host = true_computer.computer_host
if(!host.translator_on)
@@ -22,6 +22,7 @@
host.add_language(LANGUAGE_SKRELLIAN)
host.add_language(LANGUAGE_ROOTSONG)
host.translator_on = TRUE
return TRUE
/datum/computer_file/program/pai_translator/service_deactivate()
. = ..()
@@ -10,7 +10,7 @@
color = LIGHT_COLOR_GREEN
unsendable = TRUE
undeletable = TRUE
size = 4
size = 2
available_on_ntnet = FALSE
requires_ntnet = FALSE
@@ -10,7 +10,7 @@
color = LIGHT_COLOR_GREEN
unsendable = TRUE
undeletable = TRUE
size = 4
size = 2
available_on_ntnet = FALSE
requires_ntnet = FALSE
@@ -40,7 +40,10 @@
var/list/hardware = computer.get_all_components()
VUEUI_SET_CHECK(data["disk_size"], computer.hard_drive.max_capacity, ., data)
VUEUI_SET_CHECK(data["disk_used"], computer.hard_drive.used_capacity, ., data)
VUEUI_SET_CHECK(data["power_usage"], computer.last_power_usage, ., data)
VUEUI_SET_CHECK(data["power_usage"], computer.last_power_usage * (CELLRATE / 2), ., data)
VUEUI_SET_CHECK(data["card_slot"], computer.card_slot, ., data)
if(computer.registered_id)
VUEUI_SET_CHECK(data["registered"], computer.registered_id.registered_name, ., data)
if(!computer.battery_module)
VUEUI_SET_CHECK(data["battery"], 0, ., data)
else
@@ -52,4 +55,8 @@
for(var/obj/item/computer_hardware/H in hardware)
LAZYINITLIST(data["hardware"][H.name])
for(var/v in list("name", "desc", "enabled", "critical", "power_usage"))
VUEUI_SET_CHECK(data["hardware"][H.name][v], H.vars[v], ., data)
if(v == "power_usage")
var/watt_usage = H.vars[v] * (CELLRATE / 2)
VUEUI_SET_CHECK(data["hardware"][H.name][v], watt_usage, ., data)
else
VUEUI_SET_CHECK(data["hardware"][H.name][v], H.vars[v], ., data)
@@ -5,7 +5,7 @@
extended_desc = "This program allows management of files."
program_icon_state = "generic"
color = LIGHT_COLOR_GREEN
size = 4
size = 2
requires_ntnet = FALSE
available_on_ntnet = FALSE
undeletable = TRUE
@@ -6,7 +6,7 @@
color = LIGHT_COLOR_GREEN
unsendable = TRUE
undeletable = TRUE
size = 4
size = 2
requires_ntnet = TRUE
requires_ntnet_feature = NTNET_SOFTWAREDOWNLOAD
available_on_ntnet = 0
@@ -92,7 +92,7 @@
if(href_list["download"])
var/datum/computer_file/program/PRG = ntnet_global.find_ntnet_file_by_name(href_list["download"])
if(!istype(PRG))
return 1
return add_to_queue(PRG, ui.user)
@@ -126,7 +126,7 @@
generate_network_log("Began downloading file [PRG.filename].[PRG.filetype] from unspecified server.")
download_files[PRG.filename] = PRG.clone()
download_files[PRG.filename] = PRG.clone(FALSE, computer)
queue_size += PRG.size
download_queue[PRG.filename] = 0
for(var/i in SSvueui.get_open_uis(src))
@@ -224,9 +224,8 @@
if(download_queue[active_download] >= active_download_file.size)
finish_from_queue(active_download)
active_download = null
playsound(get_turf(computer), 'sound/machines/ping.ogg', 40, 0)
computer.output_message("[icon2html(computer, viewers(get_turf(computer)))] <b>[capitalize_first_letters(computer)]</b> pings, \"Software download completed successfully!\"", 1)
computer.output_message("[icon2html(computer, viewers(get_turf(computer)), computer.icon_state)] <b>[capitalize_first_letters(computer.name)]</b> pings: \"[active_download_file.filedesc ? active_download_file.filedesc : active_download_file.filename] downloaded successfully!\"", 1)
active_download = null
SSvueui.check_uis_for_change(src)