diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index 1f35cc925a..7d4d1c1c9b 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -157,3 +157,15 @@ /datum/gear/utility/umbrella/New() ..() gear_tweaks = list(gear_tweak_free_color_choice) + +/datum/gear/cheaptablet + display_name = "cheap tablet computer" + path = /obj/item/modular_computer/tablet/preset/custom_loadout/cheap + sort_category = "utility" + cost = 3 + +/datum/gear/normaltablet + display_name = "tablet computer" + path = /obj/item/modular_computer/tablet/preset/custom_loadout/advanced + sort_category = "utility" + cost = 4 diff --git a/code/modules/modular_computers/computers/item/console_presets.dm b/code/modules/modular_computers/computers/item/console_presets.dm new file mode 100644 index 0000000000..450c9e6383 --- /dev/null +++ b/code/modules/modular_computers/computers/item/console_presets.dm @@ -0,0 +1,82 @@ +/obj/machinery/modular_computer/console/preset/ + // Can be changed to give devices specific hardware + var/_has_id_slot = 0 + var/_has_printer = 0 + var/_has_battery = 0 + +/obj/machinery/modular_computer/console/preset/New() + . = ..() + if(!cpu) + return + if(_has_id_slot) + cpu.card_slot = new/obj/item/weapon/computer_hardware/card_slot(cpu) + if(_has_printer) + cpu.nano_printer = new/obj/item/weapon/computer_hardware/nano_printer(cpu) + if(_has_battery) + cpu.battery_module = new/obj/item/weapon/computer_hardware/battery_module/super(cpu) + install_programs() + +// Override in child types to install preset-specific programs. +/obj/machinery/modular_computer/console/preset/proc/install_programs() + return + +// ===== ENGINEERING CONSOLE ===== +/obj/machinery/modular_computer/console/preset/engineering + console_department = "Engineering" + desc = "A stationary computer. This one comes preloaded with engineering programs." + +/obj/machinery/modular_computer/console/preset/engineering/install_programs() + cpu.hard_drive.store_file(new/datum/computer_file/program/power_monitor()) + cpu.hard_drive.store_file(new/datum/computer_file/program/alarm_monitor()) + cpu.hard_drive.store_file(new/datum/computer_file/program/atmos_control()) + cpu.hard_drive.store_file(new/datum/computer_file/program/rcon_console()) + + +// ===== MEDICAL CONSOLE ===== +/obj/machinery/modular_computer/console/preset/medical + console_department = "Medbay" + desc = "A stationary computer. This one comes preloaded with medical programs." + +/obj/machinery/modular_computer/console/preset/medical/install_programs() + cpu.hard_drive.store_file(new/datum/computer_file/program/suit_sensors()) + + +// ===== RESEARCH CONSOLE ===== +/obj/machinery/modular_computer/console/preset/research + console_department = "Medbay" + desc = "A stationary computer. This one comes preloaded with research programs." + +/obj/machinery/modular_computer/console/preset/research/install_programs() + cpu.hard_drive.store_file(new/datum/computer_file/program/ntnetmonitor()) + cpu.hard_drive.store_file(new/datum/computer_file/program/nttransfer()) + cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient()) + + +// ===== COMMAND CONSOLE ===== +/obj/machinery/modular_computer/console/preset/command + console_department = "Command" + desc = "A stationary computer. This one comes preloaded with command programs." + _has_id_slot = 1 + +/obj/machinery/modular_computer/console/preset/command/install_programs() + cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient()) + cpu.hard_drive.store_file(new/datum/computer_file/program/card_mod()) + + +// ===== SECURITY CONSOLE ===== +/obj/machinery/modular_computer/console/preset/security + console_department = "Security" + desc = "A stationary computer. This one comes preloaded with security programs." + +/obj/machinery/modular_computer/console/preset/security/install_programs() + return // No security programs exist, yet, but the preset is ready so it may be mapped in. + + +// ===== CIVILIAN CONSOLE ===== +/obj/machinery/modular_computer/console/preset/civilian + console_department = "Civilian" + desc = "A stationary computer. This one comes preloaded with generic programs." + +/obj/machinery/modular_computer/console/preset/civilian/install_programs() + cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient()) + cpu.hard_drive.store_file(new/datum/computer_file/program/nttransfer()) diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm index 0af7cce4d1..c840f2717c 100644 --- a/code/modules/modular_computers/computers/item/processor.dm +++ b/code/modules/modular_computers/computers/item/processor.dm @@ -10,6 +10,12 @@ var/obj/machinery/modular_computer/machinery_computer = null +/obj/item/modular_computer/processor/Destroy() + if(machinery_computer && (machinery_computer.cpu == src)) + machinery_computer.cpu = null + machinery_computer = null + return ..() + // Due to how processes work, we'd receive two process calls - one from machinery type and one from our own type. // Since we want this to be in-sync with machinery (as it's hidden type for machinery-based computers) we'll ignore // non-relayed process calls. diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm index 4de568af9f..1c997202db 100644 --- a/code/modules/modular_computers/computers/item/tablet.dm +++ b/code/modules/modular_computers/computers/item/tablet.dm @@ -5,4 +5,5 @@ icon_state_unpowered = "tablet" icon_state_menu = "menu" hardware_flag = PROGRAM_TABLET - max_hardware_size = 1 \ No newline at end of file + max_hardware_size = 1 + w_class = 2 \ No newline at end of file diff --git a/code/modules/modular_computers/computers/item/tablet_presets.dm b/code/modules/modular_computers/computers/item/tablet_presets.dm new file mode 100644 index 0000000000..5bad3b5177 --- /dev/null +++ b/code/modules/modular_computers/computers/item/tablet_presets.dm @@ -0,0 +1,17 @@ + +// Available as custom loadout item, this is literally the worst possible cheap tablet +/obj/item/modular_computer/tablet/preset/custom_loadout/cheap/New() + . = ..() + desc = "A low-end tablet often seen among low ranked station personnel" + battery_module = new/obj/item/weapon/computer_hardware/battery_module/nano(src) + hard_drive = new/obj/item/weapon/computer_hardware/hard_drive/micro(src) + network_card = new/obj/item/weapon/computer_hardware/network_card(src) + +// Alternative version, an average one, for higher ranked positions mostly +/obj/item/modular_computer/tablet/preset/custom_loadout/advanced/New() + . = ..() + battery_module = new/obj/item/weapon/computer_hardware/battery_module(src) + hard_drive = new/obj/item/weapon/computer_hardware/hard_drive/small(src) + network_card = new/obj/item/weapon/computer_hardware/network_card(src) + nano_printer = new/obj/item/weapon/computer_hardware/nano_printer(src) + card_slot = new/obj/item/weapon/computer_hardware/card_slot(src) \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm new file mode 100644 index 0000000000..c65d0487d4 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -0,0 +1,218 @@ +/datum/computer_file/program/card_mod + filename = "cardmod" + filedesc = "ID card modification program" + nanomodule_path = /datum/nano_module/card_mod + program_icon_state = "id" + extended_desc = "Program for programming employee ID cards to access parts of the station." + required_access = access_hop + requires_ntnet = 0 + size = 8 + +/datum/nano_module/card_mod + name = "ID card modification program" + var/mod_mode = 1 + var/is_centcom = 0 + var/show_assignments = 0 + +/datum/nano_module/card_mod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + var/list/data = list() + if(program) + data = program.get_header_data() + + data["src"] = "\ref[src]" + data["station_name"] = station_name() + data["manifest"] = data_core ? data_core.get_manifest(0) : null + data["assignments"] = show_assignments + if(program && program.computer) + data["have_id_slot"] = !!program.computer.card_slot + data["have_printer"] = !!program.computer.nano_printer + data["authenticated"] = program.can_run(user) + if(!program.computer.card_slot) + mod_mode = 0 //We can't modify IDs when there is no card reader + else + data["have_id_slot"] = 0 + data["have_printer"] = 0 + data["authenticated"] = 0 + data["mmode"] = mod_mode + data["centcom_access"] = is_centcom + + if(program && program.computer && program.computer.card_slot) + var/obj/item/weapon/card/id/id_card = program.computer.card_slot.stored_card + data["has_id"] = !!id_card + data["id_account_number"] = id_card ? id_card.associated_account_number : null + data["id_rank"] = id_card && id_card.assignment ? id_card.assignment : "Unassigned" + data["id_owner"] = id_card && id_card.registered_name ? id_card.registered_name : "-----" + data["id_name"] = id_card ? id_card.name : "-----" + + + data["engineering_jobs"] = format_jobs(engineering_positions) + data["medical_jobs"] = format_jobs(medical_positions) + data["science_jobs"] = format_jobs(science_positions) + data["security_jobs"] = format_jobs(security_positions) + data["cargo_jobs"] = format_jobs(cargo_positions) + data["civilian_jobs"] = format_jobs(civilian_positions) + data["centcom_jobs"] = format_jobs(get_all_centcom_jobs()) + + data["all_centcom_access"] = is_centcom ? get_accesses(1) : null + data["regions"] = get_accesses() + + if(program.computer.card_slot.stored_card) + var/obj/item/weapon/card/id/id_card = program.computer.card_slot.stored_card + if(is_centcom) + var/list/all_centcom_access = list() + for(var/access in get_all_centcom_access()) + all_centcom_access.Add(list(list( + "desc" = replacetext(get_centcom_access_desc(access), " ", " "), + "ref" = access, + "allowed" = (access in id_card.access) ? 1 : 0))) + data["all_centcom_access"] = all_centcom_access + else + var/list/regions = list() + for(var/i = 1; i <= 7; i++) + var/list/accesses = list() + for(var/access in get_region_accesses(i)) + if (get_access_desc(access)) + accesses.Add(list(list( + "desc" = replacetext(get_access_desc(access), " ", " "), + "ref" = access, + "allowed" = (access in id_card.access) ? 1 : 0))) + + regions.Add(list(list( + "name" = get_region_accesses_name(i), + "accesses" = accesses))) + data["regions"] = regions + + ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "identification_computer_lap.tmpl", name, 600, 700, state = state) + ui.auto_update_layout = 1 + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/datum/nano_module/card_mod/proc/format_jobs(list/jobs) + var/obj/item/weapon/card/id/id_card = program.computer.card_slot.stored_card + var/list/formatted = list() + for(var/job in jobs) + formatted.Add(list(list( + "display_name" = replacetext(job, " ", " "), + "target_rank" = id_card && id_card.assignment ? id_card.assignment : "Unassigned", + "job" = job))) + + return formatted + +/datum/nano_module/card_mod/proc/get_accesses(var/is_centcom = 0) + + return null + + +/datum/computer_file/program/card_mod/Topic(href, href_list) + var/mob/living/user = usr + var/obj/item/weapon/card/id/user_id_card = user.GetIdCard() + var/obj/item/weapon/card/id/id_card = computer.card_slot.stored_card + var/datum/nano_module/card_mod/module = NM + switch(href_list["action"]) + if("switchm") + if(href_list["target"] == "mod") + module.mod_mode = 1 + else if (href_list["target"] == "manifest") + module.mod_mode = 0 + if("togglea") + if(module.show_assignments) + module.show_assignments = 0 + else + module.show_assignments = 1 + if("print") + if(computer && computer.nano_printer) //This option should never be called if there is no printer + if(module.mod_mode) + if(can_run(user, 1)) + var/contents = {"

Access Report

+ Prepared By: [user_id_card.registered_name ? user_id_card.registered_name : "Unknown"]
+ For: [id_card.registered_name ? id_card.registered_name : "Unregistered"]
+
+ Assignment: [id_card.assignment]
+ Account Number: #[id_card.associated_account_number]
+ Blood Type: [id_card.blood_type]

+ Access:
+ "} + for(var/A in id_card.access) + contents += " [get_access_desc(A)]" + + if(!computer.nano_printer.print_text(contents,"access report")) + usr << "Hardware error: Printer was unable to print the file. It may be out of paper." + return + else + computer.visible_message("[computer] prints out paper.") + else + var/contents = {"

Crew Manifest

+
+ [data_core ? data_core.get_manifest(0) : ""] + "} + if(!computer.nano_printer.print_text(contents,text("crew manifest ([])", stationtime2text()))) + usr << "Hardware error: Printer was unable to print the file. It may be out of paper." + return + else + computer.visible_message("[computer] prints out paper.") + if("eject") + if(computer && computer.card_slot) + computer.proc_eject_id(user) + if("terminate") + if(computer && can_run(user, 1)) + id_card.assignment = "Terminated" + id_card.access = list() + callHook("terminate_employee", list(id_card)) + if("edit") + if(computer && can_run(user, 1)) + if(href_list["name"]) + var/temp_name = sanitizeName(input("Enter name.", "Name", id_card.registered_name)) + if(temp_name) + id_card.registered_name = temp_name + else + computer.visible_message("[computer] buzzes rudely.") + else if(href_list["account"]) + var/account_num = text2num(input("Enter account number.", "Account", id_card.associated_account_number)) + id_card.associated_account_number = account_num + if("assign") + if(computer && can_run(user, 1) && id_card) + var/t1 = href_list["assign_target"] + if(t1 == "Custom") + var/temp_t = sanitize(input("Enter a custom job assignment.","Assignment", id_card.assignment), 45) + //let custom jobs function as an impromptu alt title, mainly for sechuds + if(temp_t) + id_card.assignment = temp_t + else + var/list/access = list() + if(module.is_centcom) + access = get_centcom_access(t1) + else + var/datum/job/jobdatum + for(var/jobtype in typesof(/datum/job)) + var/datum/job/J = new jobtype + if(ckey(J.title) == ckey(t1)) + jobdatum = J + break + if(!jobdatum) + usr << "No log exists for this job: [t1]" + return + + access = jobdatum.get_access() + + id_card.access = access + id_card.assignment = t1 + id_card.rank = t1 + + callHook("reassign_employee", list(id_card)) + if("access") + if(href_list["allowed"] && computer && can_run(user, 1)) + var/access_type = text2num(href_list["access_target"]) + var/access_allowed = text2num(href_list["allowed"]) + if(access_type in (get_all_centcom_access() + get_all_station_access())) + id_card.access -= access_type + if(!access_allowed) + id_card.access += access_type + if(id_card) + id_card.name = text("[id_card.registered_name]'s ID Card ([id_card.assignment])") + + SSnanoui.update_uis(NM) + ..(href, href_list) + return 1 \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/configurator.dm b/code/modules/modular_computers/file_system/programs/configurator.dm index a0d3505935..91fff9c10c 100644 --- a/code/modules/modular_computers/file_system/programs/configurator.dm +++ b/code/modules/modular_computers/file_system/programs/configurator.dm @@ -29,6 +29,10 @@ if(!istype(movable)) movable = null + if(istype(movable, /obj/item/modular_computer/processor)) + var/obj/item/modular_computer/processor/P = movable + stationary = P.machinery_computer + // No computer connection, we can't get data from that. if(!movable && !stationary) return 0 diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm index 1ddd80d04f..1771c347a1 100644 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ b/code/modules/modular_computers/hardware/card_slot.dm @@ -11,6 +11,7 @@ /obj/item/weapon/computer_hardware/card_slot/Destroy() if(holder2 && (holder2.card_slot == src)) holder2.card_slot = null - stored_card.loc = get_turf(holder2) + if(stored_card) + stored_card.forceMove(get_turf(holder2)) holder2 = null ..() \ No newline at end of file diff --git a/code/modules/modular_computers/hardware/nano_printer.dm b/code/modules/modular_computers/hardware/nano_printer.dm index 5bc77ddf54..000c1c0981 100644 --- a/code/modules/modular_computers/hardware/nano_printer.dm +++ b/code/modules/modular_computers/hardware/nano_printer.dm @@ -2,6 +2,7 @@ name = "nano printer" desc = "Small integrated printer with scanner and paper recycling module." power_usage = 50 + critical = 0 icon_state = "printer" hardware_size = 1 var/stored_paper = 5 @@ -9,7 +10,7 @@ var/obj/item/weapon/paper/P = null // Currently stored paper for scanning. -/obj/item/weapon/computer_hardware/nano_printer/proc/print_text(var/text_to_print) +/obj/item/weapon/computer_hardware/nano_printer/proc/print_text(var/text_to_print, var/paper_title = null) if(!stored_paper) return 0 @@ -21,6 +22,8 @@ P = new/obj/item/weapon/paper(get_turf(holder2)) P.info = text_to_print + if(paper_title) + P.name = paper_title P.update_icon() stored_paper-- P = null diff --git a/code/modules/research/designs/modular_computer.dm b/code/modules/research/designs/modular_computer.dm index 7fc891999e..618b0f801e 100644 --- a/code/modules/research/designs/modular_computer.dm +++ b/code/modules/research/designs/modular_computer.dm @@ -5,7 +5,7 @@ id = "hdd_basic" req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) build_type = PROTOLATHE - materials = list("metal" = 2000, "glass" = 100) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 100) build_path = /obj/item/weapon/computer_hardware/hard_drive/ sort_string = "VBAAA" @@ -14,7 +14,7 @@ id = "hdd_advanced" req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) build_type = PROTOLATHE - materials = list("metal" = 4000, "glass" = 200) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 200) build_path = /obj/item/weapon/computer_hardware/hard_drive/advanced sort_string = "VBAAB" @@ -23,7 +23,7 @@ id = "hdd_super" req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) build_type = PROTOLATHE - materials = list("metal" = 8000, "glass" = 400) + materials = list(DEFAULT_WALL_MATERIAL = 8000, "glass" = 400) build_path = /obj/item/weapon/computer_hardware/hard_drive/super sort_string = "VBAAC" @@ -32,7 +32,7 @@ id = "hdd_cluster" req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) build_type = PROTOLATHE - materials = list("metal" = 16000, "glass" = 800) + materials = list(DEFAULT_WALL_MATERIAL = 16000, "glass" = 800) build_path = /obj/item/weapon/computer_hardware/hard_drive/cluster sort_string = "VBAAD" @@ -41,7 +41,7 @@ id = "hdd_small" req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) build_type = PROTOLATHE - materials = list("metal" = 4000, "glass" = 200) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 200) build_path = /obj/item/weapon/computer_hardware/hard_drive/small sort_string = "VBAAE" @@ -50,7 +50,7 @@ id = "hdd_micro" req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) build_type = PROTOLATHE - materials = list("metal" = 2000, "glass" = 100) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 100) build_path = /obj/item/weapon/computer_hardware/hard_drive/micro sort_string = "VBAAF" @@ -60,7 +60,7 @@ id = "netcard_basic" req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 1) build_type = IMPRINTER - materials = list("metal" = 500, "glass" = 100) + materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 100) chemicals = list("sacid" = 20) build_path = /obj/item/weapon/computer_hardware/network_card sort_string = "VBAAG" @@ -70,7 +70,7 @@ id = "netcard_advanced" req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 2) build_type = IMPRINTER - materials = list("metal" = 1000, "glass" = 200) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 200) chemicals = list("sacid" = 20) build_path = /obj/item/weapon/computer_hardware/network_card/advanced sort_string = "VBAAH" @@ -80,7 +80,7 @@ id = "netcard_wired" req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 3) build_type = IMPRINTER - materials = list("metal" = 5000, "glass" = 400) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 400) chemicals = list("sacid" = 20) build_path = /obj/item/weapon/computer_hardware/network_card/wired sort_string = "VBAAI" @@ -122,7 +122,7 @@ id = "cardslot" req_tech = list(TECH_DATA = 2) build_type = PROTOLATHE - materials = list("metal" = 3000) + materials = list(DEFAULT_WALL_MATERIAL = 3000) build_path = /obj/item/weapon/computer_hardware/card_slot sort_string = "VBAAM" @@ -132,7 +132,7 @@ id = "nanoprinter" req_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) build_type = PROTOLATHE - materials = list("metal" = 3000) + materials = list(DEFAULT_WALL_MATERIAL = 3000) build_path = /obj/item/weapon/computer_hardware/nano_printer sort_string = "VBAAN" @@ -142,7 +142,7 @@ id = "teslalink" req_tech = list(TECH_DATA = 2, TECH_POWER = 3, TECH_ENGINEERING = 2) build_type = PROTOLATHE - materials = list("metal" = 10000) + materials = list(DEFAULT_WALL_MATERIAL = 10000) build_path = /obj/item/weapon/computer_hardware/tesla_link sort_string = "VBAAO" @@ -152,7 +152,7 @@ id = "bat_normal" req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) build_type = PROTOLATHE - materials = list("metal" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 2000) build_path = /obj/item/weapon/computer_hardware/battery_module sort_string = "VBAAP" @@ -161,7 +161,7 @@ id = "bat_advanced" req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 2) build_type = PROTOLATHE - materials = list("metal" = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 4000) build_path = /obj/item/weapon/computer_hardware/battery_module/advanced sort_string = "VBAAQ" @@ -170,7 +170,7 @@ id = "bat_super" req_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3) build_type = PROTOLATHE - materials = list("metal" = 8000) + materials = list(DEFAULT_WALL_MATERIAL = 8000) build_path = /obj/item/weapon/computer_hardware/battery_module/super sort_string = "VBAAR" @@ -179,7 +179,7 @@ id = "bat_ultra" req_tech = list(TECH_POWER = 5, TECH_ENGINEERING = 4) build_type = PROTOLATHE - materials = list("metal" = 16000) + materials = list(DEFAULT_WALL_MATERIAL = 16000) build_path = /obj/item/weapon/computer_hardware/battery_module/ultra sort_string = "VBAAS" @@ -188,7 +188,7 @@ id = "bat_nano" req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) build_type = PROTOLATHE - materials = list("metal" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 2000) build_path = /obj/item/weapon/computer_hardware/battery_module/nano sort_string = "VBAAT" @@ -197,6 +197,6 @@ id = "bat_micro" req_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 2) build_type = PROTOLATHE - materials = list("metal" = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 4000) build_path = /obj/item/weapon/computer_hardware/battery_module/micro sort_string = "VBAAU" diff --git a/icons/obj/modular_console.dmi b/icons/obj/modular_console.dmi index 8abe1da2dd..7cadca6509 100644 Binary files a/icons/obj/modular_console.dmi and b/icons/obj/modular_console.dmi differ diff --git a/icons/obj/modular_tablet.dmi b/icons/obj/modular_tablet.dmi index 9583ce4a86..fb0e1fd9c9 100644 Binary files a/icons/obj/modular_tablet.dmi and b/icons/obj/modular_tablet.dmi differ diff --git a/nano/templates/identification_computer_lap.tmpl b/nano/templates/identification_computer_lap.tmpl new file mode 100644 index 0000000000..9325723fae --- /dev/null +++ b/nano/templates/identification_computer_lap.tmpl @@ -0,0 +1,191 @@ +{{if data.have_id_slot}}{{:helper.link('Access Modification', 'home', {'action' : 'switchm', 'target' : 'mod'}, data.mmode ? 'disabled' : null)}}{{/if}} +{{:helper.link('Crew Manifest', 'folder-open', {'action' : 'switchm', 'target' : 'manifest'}, !data.mmode ? 'disabled' : null)}} +{{if data.have_printer}}{{:helper.link('Print', 'print', {'action' : 'print'}, (!data.mmode || data.has_id) ? null : 'disabled')}}{{/if}} + +{{if !data.mmode}} +
+

Crew Manifest

+
+
+ {{:data.manifest}} +
+{{else}} +
+

Access Modification

+
+ +{{if !data.has_id}} + Please insert the ID into the terminal to proceed.
+{{/if}} + +
+
+ Target Identity: +
+
+ {{:helper.link(data.id_name, 'eject', {'action' : 'eject'})}} +
+
+
+ +{{if data.authenticated}} + {{if data.has_id}} +
+

Details

+
+ +
+
+ Registered Name: +
+
+ {{:helper.link(data.id_owner, 'pencil', {'action' : 'edit', 'name' : 1})}} +
+
+ +
+
+ Account Number: +
+
+ {{:helper.link(data.id_account_number, 'pencil', {'action' : 'edit', 'account' : 1})}} +
+
+ + +
+
+ Terminations: +
+
+ {{:helper.link('Terminate ' + data.id_owner, 'gear', {'action' : 'terminate'}, data.id_rank == "Terminated" ? 'disabled' : null, data.id_rank == "Terminated" ? 'disabled' : 'linkDanger')}} +
+
+ +
+

Assignment

+
+ {{:helper.link(data.assignments ? "Hide assignments" : "Show assignments", 'gear', {'action' : 'togglea'})}} +
+ + + +
+
+ {{if data.assignments}} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{if data.centcom_access}} + + + + + {{/if}} +
Command
Special + {{:helper.link("Captain", '', {'action' : 'assign', 'assign_target' : 'Captain'}, data.id_rank == 'Captain' ? 'disabled' : null)}} + {{:helper.link("Custom", '', {'action' : 'assign', 'assign_target' : 'Custom'})}} +
Engineering + {{for data.engineering_jobs}} + {{:helper.link(value.display_name, '', {'action' : 'assign', 'assign_target' : value.job}, data.id_rank == value.job ? 'disabled' : null)}} + {{/for}} +
Medical + {{for data.medical_jobs}} + {{:helper.link(value.display_name, '', {'action' : 'assign', 'assign_target' : value.job}, data.id_rank == value.job ? 'disabled' : null)}} + {{/for}} +
Science + {{for data.science_jobs}} + {{:helper.link(value.display_name, '', {'action' : 'assign', 'assign_target' : value.job}, data.id_rank == value.job ? 'disabled' : null)}} + {{/for}} +
Security + {{for data.security_jobs}} + {{:helper.link(value.display_name, '', {'action' : 'assign', 'assign_target' : value.job}, data.id_rank == value.job ? 'disabled' : null)}} + {{/for}} +
Cargo + {{for data.cargo_jobs}} + {{if index && index % 6 === 0}} +
+ {{/if}} + {{:helper.link(value.display_name, '', {'action' : 'assign', 'assign_target' : value.job}, data.id_rank == value.job ? 'disabled' : null)}} + {{/for}} +
Civilian + {{for data.civilian_jobs}} + {{if index && index % 6 === 0}} +
+ {{/if}} + {{:helper.link(value.display_name, '', {'action' : 'assign', 'assign_target' : value.job}, data.id_rank == value.job ? 'disabled' : null)}} + {{/for}} +
CentCom + {{for data.centcom_jobs}} + {{if index % 6 === 0}} +
+ {{/if}} + + {{:helper.link(value.display_name, '', {'action' : 'assign', 'assign_target' : value.job}, data.id_rank == value.job ? 'disabled' : null)}} + {{/for}} +
+
+ {{/if}} +
+ + {{if data.centcom_access}} +
+

Central Command

+
+
+ {{for data.all_centcom_access}} +
+ {{:helper.link(value.desc, '', {'action' : 'access', 'access_target' : value.ref, 'allowed' : value.allowed}, null, value.allowed ? 'selected' : null)}} +
+ {{/for}} +
+ {{else}} +
+

{{:data.station_name}}

+
+
+ {{for data.regions}} +
+
{{:value.name}}
+ {{for value.accesses :accessValue:accessKey}} +
+ {{:helper.link(accessValue.desc, '', {'action' : 'access', 'access_target' : accessValue.ref, 'allowed' : accessValue.allowed}, null, accessValue.allowed ? 'selected' : null)}} +
+ {{/for}} +
+ {{/for}} +
+ {{/if}} + {{/if}} +{{/if}} +{{/if}} \ No newline at end of file diff --git a/polaris.dme b/polaris.dme index f6bca52140..430f720734 100644 --- a/polaris.dme +++ b/polaris.dme @@ -2101,6 +2101,7 @@ #include "code\modules\modular_computers\computers\item\modular_computer.dm" #include "code\modules\modular_computers\computers\item\processor.dm" #include "code\modules\modular_computers\computers\item\tablet.dm" +#include "code\modules\modular_computers\computers\item\tablet_presets.dm" #include "code\modules\modular_computers\computers\machinery\modular_computer.dm" #include "code\modules\modular_computers\computers\machinery\modular_console.dm" #include "code\modules\modular_computers\computers\machinery\modular_laptop.dm" @@ -2109,6 +2110,7 @@ #include "code\modules\modular_computers\file_system\program.dm" #include "code\modules\modular_computers\file_system\programs\_engineering.dm" #include "code\modules\modular_computers\file_system\programs\_medical.dm" +#include "code\modules\modular_computers\file_system\programs\card.dm" #include "code\modules\modular_computers\file_system\programs\configurator.dm" #include "code\modules\modular_computers\file_system\programs\file_browser.dm" #include "code\modules\modular_computers\file_system\programs\ntdownloader.dm"