From aea69a21b41c09d5f5f35b97e81fc25aa9d06b20 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 19 Jan 2023 21:30:05 +0100 Subject: [PATCH] [MIRROR] Adds maintenance tablet apps (Health analyzer is one now too) [MDB IGNORE] (#18809) Adds maintenance tablet apps (Health analyzer is one now too) (#71738) About The Pull Request Sprites were generously made by https://github.com/Tramzz This was a branch I've been putting off for months because my hatred for tablet apps brought me to removing computer parts, tablets, and ntnet, however I've now returned (after a lot more procrastination). Adds Maintenance tablet applications to the game, so far there's only three of them, for proof of concept; The health analyzer app (the chem analyzer part is removed entirely) move away from being given to medical/geneticists/detectives/RD. There is on exception, which is the CMO, who gets to have the application on their tablet roundstart. Maybe it could be given to their role disk as well? A camera application: image image MODsuit control application: image image image Maintenance applications stand out from normal tablet apps because they can't be downloaded off the App store, and instead can only be found in maintenance, with a one-use download, cloning the application from a disk to a computer, or vice versa, will delete the old one, meaning you can only have one application at once. Why It's Good For The Game This is more as a proof of concept for maintenance applications, but I also think that the analyzer application wasn't really that good as an app, you should either use a health analyzer or the wand in front of medbay, you shouldn't just have one in your tablet at all times because it makes it lame if your analyzer is stolen. Changelog cl JohnFulpWillard, sprites by Tramzz add: Added Maintenance tablet applications, applications that can't be cloned or downloaded from the store, instead you can find one app in maintenance. balance: The Analyzer tablet application is also a maintenance tablet application now. /cl Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> --- code/_globalvars/lists/maintenance_loot.dm | 6 ++ code/modules/mod/mod_ui.dm | 2 +- .../computers/item/disks/computer_disk.dm | 5 + .../computers/item/disks/maintenance_disks.dm | 13 +++ .../computers/item/disks/role_disks.dm | 7 -- .../computers/item/role_tablet_presets.dm | 11 +-- .../file_system/computer_file.dm | 11 +++ .../modular_computers/file_system/program.dm | 6 +- .../file_system/programs/alarm.dm | 4 +- .../maintenance/_maintenance_program.dm | 13 +++ .../programs/maintenance/camera.dm | 64 ++++++++++++ .../programs/maintenance/modsuit.dm | 49 +++++++++ .../programs/maintenance/phys_scanner.dm | 26 +++++ .../file_system/programs/phys_scanner.dm | 93 ------------------ code/modules/photography/camera/camera.dm | 32 +++--- icons/obj/modular_console.dmi | Bin 90243 -> 91003 bytes icons/obj/modular_laptop.dmi | Bin 31910 -> 32233 bytes icons/obj/modular_pda.dmi | Bin 17319 -> 18135 bytes tgstation.dme | 6 +- tgui/packages/tgui/interfaces/MODsuit.js | 42 +++++--- tgui/packages/tgui/interfaces/NtosCamera.js | 38 +++++++ tgui/packages/tgui/interfaces/NtosMODsuit.js | 31 ++++++ .../tgui/interfaces/NtosPhysScanner.js | 16 +-- 23 files changed, 312 insertions(+), 163 deletions(-) create mode 100644 code/modules/modular_computers/computers/item/disks/maintenance_disks.dm create mode 100644 code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm create mode 100644 code/modules/modular_computers/file_system/programs/maintenance/camera.dm create mode 100644 code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm create mode 100644 code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm delete mode 100644 code/modules/modular_computers/file_system/programs/phys_scanner.dm create mode 100644 tgui/packages/tgui/interfaces/NtosCamera.js create mode 100644 tgui/packages/tgui/interfaces/NtosMODsuit.js diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 3bed269cc35..38e9e858fc9 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -251,6 +251,12 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items /obj/item/food/monkeycube = 1, ) = 8, + list(//computer disks + /obj/item/computer_disk/maintenance/scanner = 1, + /obj/item/computer_disk/maintenance/camera = 1, + /obj/item/computer_disk/maintenance/modsuit_control = 1, + ) = 4, + list(//modsuits /obj/effect/spawner/random/mod/maint = 3, /obj/item/mod/construction/broken_core = 1, diff --git a/code/modules/mod/mod_ui.dm b/code/modules/mod/mod_ui.dm index c68c0270ddb..2a9652a4a98 100644 --- a/code/modules/mod/mod_ui.dm +++ b/code/modules/mod/mod_ui.dm @@ -54,7 +54,7 @@ data["boots"] = boots?.name return data -/obj/item/mod/control/ui_act(action, params) +/obj/item/mod/control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/modular_computers/computers/item/disks/computer_disk.dm b/code/modules/modular_computers/computers/item/disks/computer_disk.dm index 81e4171481c..bd652a31c8e 100644 --- a/code/modules/modular_computers/computers/item/disks/computer_disk.dm +++ b/code/modules/modular_computers/computers/item/disks/computer_disk.dm @@ -20,6 +20,10 @@ var/datum/computer_file/program/program_type = new programs add_file(program_type) +/obj/item/computer_disk/Destroy(force) + . = ..() + QDEL_LIST(stored_files) + /** * add_file * @@ -29,6 +33,7 @@ if((file.size + used_capacity) > max_capacity) return FALSE stored_files.Add(file) + file.disk_host = src used_capacity += file.size return TRUE diff --git a/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm b/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm new file mode 100644 index 00000000000..d343ceba26a --- /dev/null +++ b/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm @@ -0,0 +1,13 @@ +/obj/item/computer_disk/maintenance + name = "maintenance data disk" + desc = "A data disk forgotten in the depths of maintenance, might have some useful program on it." + +/// Medical health analyzer app +/obj/item/computer_disk/maintenance/scanner + starting_programs = list(/datum/computer_file/program/maintenance/phys_scanner) + +/obj/item/computer_disk/maintenance/camera + starting_programs = list(/datum/computer_file/program/maintenance/camera) + +/obj/item/computer_disk/maintenance/modsuit_control + starting_programs = list(/datum/computer_file/program/maintenance/modsuit_control) diff --git a/code/modules/modular_computers/computers/item/disks/role_disks.dm b/code/modules/modular_computers/computers/item/disks/role_disks.dm index 97e06a3d86c..a1cd5d063ca 100644 --- a/code/modules/modular_computers/computers/item/disks/role_disks.dm +++ b/code/modules/modular_computers/computers/item/disks/role_disks.dm @@ -24,14 +24,12 @@ starting_programs = list( /datum/computer_file/program/records/security, /datum/computer_file/program/records/medical, - /datum/computer_file/program/phys_scanner/all, ) /obj/item/computer_disk/command/cmo name = "chief medical officer data disk" desc = "Removable disk used to download essential CMO tablet apps." starting_programs = list( - /datum/computer_file/program/phys_scanner/all, /datum/computer_file/program/records/medical, ) @@ -39,7 +37,6 @@ name = "research director data disk" desc = "Removable disk used to download essential RD tablet apps." starting_programs = list( - /datum/computer_file/program/phys_scanner/chemistry, /datum/computer_file/program/signal_commander, ) @@ -88,7 +85,6 @@ desc = "Removable disk used to download medical-related tablet apps." icon_state = "datadisk7" starting_programs = list( - /datum/computer_file/program/phys_scanner/medical, /datum/computer_file/program/records/medical, ) @@ -96,9 +92,6 @@ name = "chemistry data disk" desc = "Removable disk used to download chemistry-related tablet apps." icon_state = "datadisk5" - starting_programs = list( - /datum/computer_file/program/phys_scanner/chemistry, - ) /** * Supply diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index 0105b8cda95..ebb8bfe9776 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -81,7 +81,7 @@ /datum/computer_file/program/science, /datum/computer_file/program/robocontrol, /datum/computer_file/program/budgetorders, - /datum/computer_file/program/phys_scanner/all, + /datum/computer_file/program/maintenance/phys_scanner, /datum/computer_file/program/records/medical, ) @@ -96,7 +96,6 @@ /datum/computer_file/program/science, /datum/computer_file/program/robocontrol, /datum/computer_file/program/budgetorders, - /datum/computer_file/program/phys_scanner/chemistry, /datum/computer_file/program/signal_commander, ) @@ -136,7 +135,6 @@ /datum/computer_file/program/records/security, /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, - /datum/computer_file/program/phys_scanner/medical, ) /obj/item/modular_computer/pda/warden @@ -196,7 +194,6 @@ greyscale_config = /datum/greyscale_config/tablet/stripe_split greyscale_colors = "#FAFAFA#000099#0097CA" starting_programs = list( - /datum/computer_file/program/phys_scanner/medical, /datum/computer_file/program/records/medical, ) @@ -209,7 +206,6 @@ greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#FAFAFA#000099#3F96CC" starting_programs = list( - /datum/computer_file/program/phys_scanner/medical, /datum/computer_file/program/records/medical, /datum/computer_file/program/robocontrol, ) @@ -217,7 +213,6 @@ /obj/item/modular_computer/pda/medical/paramedic name = "paramedic PDA" starting_programs = list( - /datum/computer_file/program/phys_scanner/medical, /datum/computer_file/program/records/medical, /datum/computer_file/program/radar/lifeline, ) @@ -227,7 +222,6 @@ greyscale_config = /datum/greyscale_config/tablet/stripe_split greyscale_colors = "#FAFAFA#355FAC#57C451" starting_programs = list( - /datum/computer_file/program/phys_scanner/medical, /datum/computer_file/program/records/medical, /datum/computer_file/program/robocontrol, ) @@ -236,9 +230,6 @@ name = "chemist PDA" greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#FAFAFA#355FAC#EA6400" - starting_programs = list( - /datum/computer_file/program/phys_scanner/chemistry, - ) /** * Supply diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index d34124045ba..337f483ee90 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -13,15 +13,21 @@ var/static/file_uid = 0 ///The modular computer hosting the file. var/obj/item/modular_computer/computer + ///The computer disk hosting the file. + var/obj/item/computer_disk/disk_host /datum/computer_file/New() ..() uid = file_uid++ + RegisterSignal(src, COMSIG_MODULAR_COMPUTER_FILE_ADDED, PROC_REF(on_install)) /datum/computer_file/Destroy(force) if(computer) computer.remove_file(src) computer = null + if(disk_host) + disk_host.remove_file(src) + disk_host = null return ..() // Returns independent copy of this file. @@ -36,6 +42,11 @@ temp.filetype = filetype return temp +///Called post-installation of an application in a computer, after 'computer' var is set. +/datum/computer_file/proc/on_install() + SIGNAL_HANDLER + return + /** * Called when examining a modular computer * Args: diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 84532e4f517..6d3bfb4fd9c 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -31,7 +31,7 @@ var/available_on_syndinet = FALSE /// Name of the tgui interface var/tgui_id - /// Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images are taken from /icons/program_icons. Be careful not to use too large images! + /// Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images must also be inserted into /datum/asset/simple/headers. var/ui_header = null /// Font Awesome icon to use as this program's icon in the modular computer main menu. Defaults to a basic program maximize window icon if not overridden. var/program_icon = "window-maximize-o" @@ -77,7 +77,7 @@ *user is the person making the attack action *params is anything the pre_attack() proc had in the same-named variable. */ -/datum/computer_file/program/proc/tap(atom/A, mob/living/user, params) +/datum/computer_file/program/proc/tap(atom/tapped_atom, mob/living/user, params) return FALSE ///Makes sure a program can run on this hardware (for apps limited to tablets/computers/laptops) @@ -213,7 +213,7 @@ // Calls beginning with "PRG_" are reserved for programs handling. // Calls beginning with "PC_" are reserved for computer handling (by whatever runs the program) // ALWAYS INCLUDE PARENT CALL ..() OR DIE IN FIRE. -/datum/computer_file/program/ui_act(action,list/params,datum/tgui/ui) +/datum/computer_file/program/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index 7430e08ad2c..ad8f56d6330 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -14,13 +14,13 @@ /// Station alert datum for showing alerts UI var/datum/station_alert/alert_control -/datum/computer_file/program/alarm_monitor/New() +/datum/computer_file/program/alarm_monitor/on_install() + . = ..() //We want to send an alarm if we're in one of the mining home areas //Or if we're on station. Otherwise, die. var/list/allowed_areas = GLOB.the_station_areas + typesof(/area/mine) alert_control = new(computer, list(ALARM_ATMOS, ALARM_FIRE, ALARM_POWER), listener_areas = allowed_areas) RegisterSignals(alert_control.listener, list(COMSIG_ALARM_LISTENER_TRIGGERED, COMSIG_ALARM_LISTENER_CLEARED), PROC_REF(update_alarm_display)) - return ..() /datum/computer_file/program/alarm_monitor/Destroy() QDEL_NULL(alert_control) diff --git a/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm b/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm new file mode 100644 index 00000000000..39edf659cff --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm @@ -0,0 +1,13 @@ +/** + * Maintenance programs + * + * Programs that are found from data disks in maintenance + * Can only be cloned once to a modular computer, then deletes itself. + */ +/datum/computer_file/program/maintenance + filetype = "MNT" + available_on_ntnet = FALSE + +/datum/computer_file/program/maintenance/clone(rename = FALSE) + . = ..() + qdel(src) diff --git a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm new file mode 100644 index 00000000000..c5a89fb6f59 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm @@ -0,0 +1,64 @@ +/datum/computer_file/program/maintenance/camera + filename = "camera_app" + filedesc = "Camera" + program_icon_state = "camera" + category = PROGRAM_CATEGORY_MISC + extended_desc = "This program allows the taking of pictures." + size = 4 + usage_flags = PROGRAM_TABLET + tgui_id = "NtosCamera" + program_icon = "camera" + + /// Camera built-into the tablet. + var/obj/item/camera/internal_camera + /// Latest picture taken by the app. + var/datum/picture/internal_picture + /// How many pictures were taken already, used for the camera's TGUI photo display + var/picture_number = 1 + +/datum/computer_file/program/maintenance/camera/on_install() + . = ..() + internal_camera = new(computer) + internal_camera.print_picture_on_snap = FALSE + +/datum/computer_file/program/maintenance/camera/Destroy() + if(internal_camera) + QDEL_NULL(internal_camera) + if(internal_picture) + QDEL_NULL(internal_picture) + return ..() + +/datum/computer_file/program/maintenance/camera/tap(atom/tapped_atom, mob/living/user, params) + . = ..() + if(internal_picture) + QDEL_NULL(internal_picture) + var/turf/our_turf = get_turf(tapped_atom) + internal_picture = internal_camera.captureimage(our_turf, user, internal_camera.picture_size_x + 1, internal_camera.picture_size_y + 1) + picture_number++ + computer.save_photo(internal_picture.picture_image) + +/datum/computer_file/program/maintenance/camera/ui_data(mob/user) + var/list/data = get_header_data() + + if(!isnull(internal_picture)) + user << browse_rsc(internal_picture.picture_image, "tmp_photo[picture_number].png") + data["photo"] = "tmp_photo[picture_number].png" + + data["paper_left"] = computer.stored_paper + + return data + +/datum/computer_file/program/maintenance/camera/ui_act(action, params, datum/tgui/ui) + . = ..() + if(.) + return + + var/mob/living/user = usr + switch(action) + if("print_photo") + if(computer.stored_paper <= 0) + to_chat(usr, span_notice("Hardware error: Printer out of paper.")) + return + internal_camera.printpicture(user, internal_picture) + computer.stored_paper-- + computer.visible_message(span_notice("\The [computer] prints out a paper.")) diff --git a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm new file mode 100644 index 00000000000..1c0efef4d35 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm @@ -0,0 +1,49 @@ +/datum/computer_file/program/maintenance/modsuit_control + filename = "modsuit_control" + filedesc = "MODsuit Control" + program_icon_state = "modsuit_control" + category = PROGRAM_CATEGORY_SCI + extended_desc = "This program allows people to connect a MODsuit to it, allowing remote control." + size = 2 + tgui_id = "NtosMODsuit" + program_icon = "user-astronaut" + + ///The suit we have control over. + var/obj/item/mod/control/controlled_suit + +/datum/computer_file/program/maintenance/modsuit_control/Destroy() + if(controlled_suit) + unsync_modsuit() + return ..() + +/datum/computer_file/program/maintenance/modsuit_control/application_attackby(obj/item/attacking_item, mob/living/user) + . = ..() + if(!istype(attacking_item, controlled_suit)) + return FALSE + if(controlled_suit) + unsync_modsuit() + controlled_suit = attacking_item + RegisterSignal(controlled_suit, COMSIG_PARENT_QDELETING, PROC_REF(unsync_modsuit)) + user.balloon_alert(user, "suit updated") + return TRUE + +/datum/computer_file/program/maintenance/modsuit_control/proc/unsync_modsuit(atom/source) + UnregisterSignal(controlled_suit, COMSIG_PARENT_QDELETING) + controlled_suit = null + +/datum/computer_file/program/maintenance/modsuit_control/ui_data(mob/user) + var/list/data = get_header_data() + data["has_suit"] = !!controlled_suit + if(controlled_suit) + data += controlled_suit.ui_data() + return data + +/datum/computer_file/program/maintenance/modsuit_control/ui_static_data(mob/user) + return controlled_suit.ui_static_data() + +/datum/computer_file/program/maintenance/modsuit_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + controlled_suit.ui_act(action, params, ui) diff --git a/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm new file mode 100644 index 00000000000..dd52dce439f --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm @@ -0,0 +1,26 @@ +/datum/computer_file/program/maintenance/phys_scanner + filename = "phys_scanner" + filedesc = "Physical Scanner" + category = PROGRAM_CATEGORY_MISC + extended_desc = "This program allows the tablet to scan physical objects and display a data output." + size = 2 + usage_flags = PROGRAM_TABLET + tgui_id = "NtosPhysScanner" + program_icon = "barcode" + /// Information from the last scanned person, to display on the app. + var/last_record = "" + +/datum/computer_file/program/maintenance/phys_scanner/tap(atom/tapped_atom, mob/living/user, params) + . = ..() + + if(!iscarbon(tapped_atom)) + return + var/mob/living/carbon/carbon = tapped_atom + carbon.visible_message(span_notice("[user] analyzes [tapped_atom]'s vitals.")) + last_record = healthscan(user, carbon, 1, tochat = FALSE) + +/datum/computer_file/program/maintenance/phys_scanner/ui_data(mob/user) + var/list/data = get_header_data() + + data["last_record"] = last_record + return data diff --git a/code/modules/modular_computers/file_system/programs/phys_scanner.dm b/code/modules/modular_computers/file_system/programs/phys_scanner.dm deleted file mode 100644 index 8f0efa35c01..00000000000 --- a/code/modules/modular_computers/file_system/programs/phys_scanner.dm +++ /dev/null @@ -1,93 +0,0 @@ -#define TABLET_MEDICAL_MODE (1<<0) -#define TABLET_CHEMISTRY_MODE (1<<1) - -/datum/computer_file/program/phys_scanner - filename = "phys_scanner" - filedesc = "Physical Scanner" - category = PROGRAM_CATEGORY_MISC - extended_desc = "This program allows the tablet to scan physical objects and display a data output." - size = 8 - usage_flags = PROGRAM_TABLET - available_on_ntnet = FALSE - tgui_id = "NtosPhysScanner" - program_icon = "barcode" - - var/current_mode = 0 - var/available_modes = NONE - - var/last_record = "" - -/datum/computer_file/program/phys_scanner/proc/ReadModes() - var/reads = list() - - if(available_modes & TABLET_CHEMISTRY_MODE) - reads += "Reagent" - - if(available_modes & TABLET_MEDICAL_MODE) - reads += "Health" - - return reads - -/datum/computer_file/program/phys_scanner/proc/ReadCurrent() - if(current_mode & TABLET_CHEMISTRY_MODE) - return "Reagent" - if(current_mode & TABLET_MEDICAL_MODE) - return "Health" - -/datum/computer_file/program/phys_scanner/tap(atom/A, mob/living/user, params) - . = ..() - - switch(current_mode) - if(TABLET_CHEMISTRY_MODE) - if(!isnull(A.reagents)) - if(A.reagents.reagent_list.len > 0) - var/reagents_length = A.reagents.reagent_list.len - last_record = "[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found." - for (var/re in A.reagents.reagent_list) - last_record += "\t [re]" - else - last_record = "No active chemical agents found in [A]." - else - last_record = "No significant chemical agents found in [A]." - if(TABLET_MEDICAL_MODE) - var/mob/living/carbon/carbon = A - if(istype(carbon)) - carbon.visible_message(span_notice("[user] analyzes [A]'s vitals.")) - last_record = healthscan(user, carbon, 1, tochat = FALSE) - -/datum/computer_file/program/phys_scanner/ui_act(action, list/params, datum/tgui/ui) - . = ..() - if(.) - return - - switch(action) - if("selectMode") - switch(params["newMode"]) - if("Reagent") - current_mode = TABLET_CHEMISTRY_MODE - if("Health") - current_mode = TABLET_MEDICAL_MODE - - return UI_UPDATE - - -/datum/computer_file/program/phys_scanner/ui_data(mob/user) - var/list/data = get_header_data() - - data["set_mode"] = ReadCurrent() - data["last_record"] = last_record - data["available_modes"] = ReadModes() - - return data - -/datum/computer_file/program/phys_scanner/medical - available_modes = TABLET_MEDICAL_MODE - -/datum/computer_file/program/phys_scanner/chemistry - available_modes = TABLET_CHEMISTRY_MODE - -/datum/computer_file/program/phys_scanner/all - available_modes = TABLET_MEDICAL_MODE | TABLET_CHEMISTRY_MODE - -#undef TABLET_MEDICAL_MODE -#undef TABLET_CHEMISTRY_MODE diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 8651b40a82d..3e1c7f87856 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -40,6 +40,8 @@ var/picture_size_y_max = 4 var/can_customise = TRUE var/default_picture_name + ///Whether the camera should print pictures immediately when a picture is taken. + var/print_picture_on_snap = TRUE /obj/item/camera/Initialize(mapload) . = ..() @@ -216,25 +218,26 @@ after_picture(user, picture) SEND_SIGNAL(src, COMSIG_CAMERA_IMAGE_CAPTURED, target, user) blending = FALSE - + return picture /obj/item/camera/proc/flash_end() set_light_on(FALSE) /obj/item/camera/proc/after_picture(mob/user, datum/picture/picture) - printpicture(user, picture) + if(print_picture_on_snap) + printpicture(user, picture) /obj/item/camera/proc/printpicture(mob/user, datum/picture/picture) //Normal camera proc for creating photos - var/obj/item/photo/p = new(get_turf(src), picture) - if(user && in_range(src, user)) //needed because of TK - if(!ispAI(user)) - user.put_in_hands(p) - pictures_left-- - to_chat(user, span_notice("[pictures_left] photos left.")) - var/customise = "No" - if(can_customise) - customise = tgui_alert(user, "Do you want to customize the photo?", "Customization", list("Yes", "No")) + if(!user) + return + pictures_left-- + var/obj/item/photo/new_photo = new(get_turf(src), picture) + if(in_range(new_photo, user) && user.put_in_hands(new_photo)) //needed because of TK + to_chat(user, span_notice("[pictures_left] photos left.")) + + if(can_customise) + var/customise = tgui_alert(user, "Do you want to customize the photo?", "Customization", list("Yes", "No")) if(customise == "Yes") var/name1 = tgui_input_text(user, "Set a name for this photo, or leave blank.", "Name", max_length = 32) var/desc1 = tgui_input_text(user, "Set a description to add to photo, or leave blank.", "Description", max_length = 128) @@ -245,11 +248,10 @@ picture.picture_desc = "[desc1] - [picture.picture_desc]" if(caption) picture.caption = caption - else - if(default_picture_name) - picture.picture_name = default_picture_name + else if(default_picture_name) + picture.picture_name = default_picture_name - p.set_picture(picture, TRUE, TRUE) + new_photo.set_picture(picture, TRUE, TRUE) if(CONFIG_GET(flag/picture_logging_camera)) picture.log_to_file() diff --git a/icons/obj/modular_console.dmi b/icons/obj/modular_console.dmi index 71fb225b97ea20e3f8d804c0f36bfcc33522f37c..86e3d7139579da94c276f9fc05e966af95b4a99a 100644 GIT binary patch delta 3934 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 HN6-HU8Opzv delta 3168 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 diff --git a/icons/obj/modular_laptop.dmi b/icons/obj/modular_laptop.dmi index 92536f9ca6c036331965ed5f1dc9df602c253c7f..22432826e92875f58adc0c54b75da8ad756a152e 100644 GIT binary patch delta 9477 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 delta 9101 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 ADF6Tf diff --git a/icons/obj/modular_pda.dmi b/icons/obj/modular_pda.dmi index cafb0442386cc7253566631d48759ad5ee3aa0d6..593633ff1fe2bbbb02cba218a1f37b07c36413bb 100644 GIT binary patch literal 18135 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 Tp9B734d~`|qie-i?VkP*!rIlE literal 17319 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

84<1YpEc zHO}S7y9?#{rD-VB$aX{3Z*#e#>;iYjyjIMk$61ANl+x1Hk;{c&@&;It9Pt*~zD)Vj0tCx;_1i=*Z6;NajjRxbRq z$^rTN$t#z(7CFN@>{D5%MPq*H( zHGwH#od}!k9`zG%g6llG4;8(-QnxR>iaBh;VkxY)iJ|?CnCIn1zU-MygEx-^(%)UU z_eLSV|NYMy?{&~dTs%lFsr}<=X<^YR3X2k+CnsnvtAiY!Y#|DCObWHa@mGnL&E2K)NH92&YoOk95Z5qY3~VRG7;gIW9hGke}wcwtNy zc*c|TluKVSL(LjIa1C|=#=uK$InyQ}mbnyjy&1~Cxe7a?+^z;M<+t0s-#FCrK*alI z`1vruvPwk(0f7o?Cx`7>=>Yv%C9C6)C0cU6-b^@w08YwCb@l8a9>NtL$8)tBU@YIE)%8q7Q}M0 zpWrm`sa^vPBN;p?KF>hT{`zQRgOcZoc}2NX%z0*LW$8~-LlF6oj)Z>UJEsw~GNkul z?TLOQxP14rMP>4f0RHda`yRf&R+5*O`GymrsQ#hYQRMv5=ZQyOdAVZG>ITH5aO^s- z=O#ayVB=X{sbHlU*>>;&KVnMUkJnG2Zsq#v*9%>y`k(9TZ5M)_L*EhCkWAdQ@Vg7; zO5`5HY?k7w`$41>_LLAr&N=4naGo>&Z)EE#esP0@iiiM0rjC3DLbdA@HyR3#Z}Wr0 z6HZQbm?2AirTAM>afeX4c%4+Dl=|R@>adh#_83mj#{$NsQvsD6#@;1V+>)Erk{nMB z1qc(i@7Yx0cT*lut97YI&sW8n|GMQDH6sLk5L|u~5ZXYa$l5Tfyh_c>dT{jqK|t$G zH|HhhB^%6!$9tu@(Ty$DJh@3G3lzn)89L{8ElbgnUNs)ne^a&M?Bh+1$;ABzb5-X$ zI@e43bq$Xu_0Jx*I=`<4Gzewvl@jgdqAG5`XHrtsxQ*T_-Qe~(u?P3SuNYjzNN=X3 zo6N6(eYQ)n2lC!B`kxAe%UtyZygQpeYSxYdKY=)EM7I|i^8g} zw3v(u=KH#%`VoO$=XXs$eQMfSwQAZqt6_hTJSAvz+`(qcT^3FAu zwW$Ws$)i8f+Ra{0$D>whLf_>pF5Uv0W_OAFU8~LGZR%(ac{lBgxN=S>K_W# zI@U)0bKi|S9loOZK4RK>_WcArrz6r54}TheG{0W!ZHa)$c@c0E7%-U+_vYFXI#xSQoF42uppT z`lxajWBE#J=)+W?|EgIa7C=$G!2A7iOg*b5K63Q#?Tzh-gfg%#$&r;HdiAyl0?Cqn zZX53_3g`%u-p`2(p=o#LK*aWjR=P-toIiLMV*26Y_x-}Q^#QIwytHpRMJ`qEg&PPq z{2YU070^wT4===&bIsY8>v45p{Ewg^R``?WcR8vEsMozv6({t+k;N;!= zwU0Q7h^?rIK@p8VoT|(u8~l^OQmNW!T>S=Rc|smoPfY8Z2|2=m8*KfAI}WS4jO;y3 z;}4(gF|40yjb7-YB=By1Cm1Vs9uRU&l|f&kBNahHp ziea0%{-Gx4a^2lwvBoI--qEHbreCl`WV0NeIQA|TaD&>rYjD*mSMm7G1H4XoS&z&> zTN1aMHEs0&qqFz=#0z@A%fm?6Z_JxqkTWi9sIoCD+U!2`4wxc?+_-9@UwYa3;r{}8qi { ); }; +export const MODsuitContent = (props, context) => { + const { act, data } = useBackend(context); + const { ui_theme, interface_break } = data; + return ( +

+ {(!!interface_break && ) || ( + + + + + + + + + + + + + + + )} +
+ ); +}; + export const MODsuit = (props, context) => { const { act, data } = useBackend(context); const { ui_theme, interface_break } = data; @@ -758,22 +783,7 @@ export const MODsuit = (props, context) => { title="MOD Interface Panel" resizable> - {(!!interface_break && ) || ( - - - - - - - - - - - - - - - )} + ); diff --git a/tgui/packages/tgui/interfaces/NtosCamera.js b/tgui/packages/tgui/interfaces/NtosCamera.js new file mode 100644 index 00000000000..dbb86a69f69 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosCamera.js @@ -0,0 +1,38 @@ +import { useBackend } from '../backend'; +import { NtosWindow } from '../layouts'; +import { Button, Box, NoticeBox, Stack } from '../components'; + +export const NtosCamera = (props, context) => { + return ( + + + + + + ); +}; + +export const NtosCameraContent = (props, context) => { + const { act, data } = useBackend(context); + const { photo, paper_left } = data; + + if (!photo) { + return Phototrasen Images - Tap to snap a photo!; + } + + return ( + + +