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
@@ -69,6 +69,21 @@
continue
hard_drive.store_file(prog)
/obj/item/modular_computer/proc/handle_verbs()
if(card_slot)
if(card_slot.stored_card)
verbs += /obj/item/modular_computer/proc/eject_id
if(card_slot.stored_item)
verbs += /obj/item/modular_computer/proc/eject_item
if(portable_drive)
verbs += /obj/item/modular_computer/proc/eject_usb
if(battery_module && battery_module.hotswappable)
verbs += /obj/item/modular_computer/proc/eject_battery
if(ai_slot && ai_slot.stored_card)
verbs += /obj/item/modular_computer/proc/eject_ai
if(personal_ai)
verbs += /obj/item/modular_computer/proc/eject_personal_ai
/obj/item/modular_computer/Initialize()
. = ..()
listener = new(LISTENER_MODULAR_COMPUTER, src)
@@ -76,7 +91,9 @@
install_default_hardware()
if(hard_drive)
install_default_programs()
handle_verbs()
update_icon()
initial_name = name
/obj/item/modular_computer/Destroy()
kill_program(TRUE)
@@ -87,6 +104,11 @@
QDEL_NULL(listener)
return ..()
/obj/item/modular_computer/CouldUseTopic(var/mob/user)
..()
if(iscarbon(user))
playsound(src, 'sound/machines/pda_click.ogg', 20)
/obj/item/modular_computer/emag_act(var/remaining_charges, var/mob/user)
if(computer_emagged)
to_chat(user, SPAN_WARNING("\The [src] has already been emagged."))
@@ -155,10 +177,11 @@
// Relays kill program request to currently active program. Use this to quit current program.
/obj/item/modular_computer/proc/kill_program(var/forced = FALSE)
if(active_program)
active_program.kill_program(forced)
if(active_program && active_program.kill_program(forced))
src.vueui_transfer(active_program)
active_program = null
else
return FALSE
var/mob/user = usr
if(user && istype(user) && !forced)
ui_interact(user) // Re-open the UI on this computer. It should show the main screen now.
@@ -195,14 +218,14 @@
enabled = FALSE
update_icon()
/obj/item/modular_computer/proc/enable_computer(var/mob/user)
/obj/item/modular_computer/proc/enable_computer(var/mob/user, var/ar_forced=FALSE)
enabled = TRUE
update_icon()
// Autorun feature
var/datum/computer_file/data/autorun = hard_drive ? hard_drive.find_file_by_name("autorun") : null
if(istype(autorun))
run_program(autorun.stored_data, user)
run_program(autorun.stored_data, user, ar_forced)
for(var/s in enabled_services)
var/datum/computer_file/program/service = s
@@ -227,7 +250,7 @@
ui_interact(user) // Re-open the UI on this computer. It should show the main screen now.
/obj/item/modular_computer/proc/run_program(prog, mob/user)
/obj/item/modular_computer/proc/run_program(prog, mob/user, var/forced=FALSE)
var/datum/computer_file/program/P = null
if(!istype(user))
user = usr
@@ -255,7 +278,7 @@
to_chat(user, SPAN_WARNING("\The [src] displays, \"Maximal CPU load reached. Unable to run another program.\"."))
return
if(P.requires_ntnet && !get_ntnet_status(P.requires_ntnet_feature)) // The program requires NTNet connection, but we are not connected to NTNet.
if(P.requires_ntnet && !get_ntnet_status(P.requires_ntnet_feature) && !forced) // The program requires NTNet connection, but we are not connected to NTNet.
to_chat(user, FONT_SMALL(SPAN_WARNING("\The [src] displays, \"NETWORK ERROR - Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\".")))
return
@@ -353,11 +376,10 @@
if(S in enabled_services)
return
enabled_services += S
// Start service
S.service_activate()
S.service_state = PROGRAM_STATE_ACTIVE
if(S.service_activate())
enabled_services += S
S.service_state = PROGRAM_STATE_ACTIVE
/obj/item/modular_computer/proc/disable_service(service, mob/user, var/datum/computer_file/program/S = null)
@@ -383,3 +405,73 @@
to_chat(user, message)
return
audible_message(message, hearing_distance = message_range)
// TODO: Make pretty much everything use these helpers.
/obj/item/modular_computer/proc/output_notice(var/message, var/message_range)
message = "[icon2html(src, viewers(message_range, get_turf(src)))][src]: " + message
output_message(SPAN_NOTICE(message), message_range)
/obj/item/modular_computer/proc/output_error(var/message, var/message_range)
message = "[icon2html(src, viewers(message_range, get_turf(src)))][src]: " + message
output_message(SPAN_WARNING(message), message_range)
/obj/item/modular_computer/proc/get_notification(var/message, var/message_range = 1, var/atom/source)
if(silent)
return
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 20, 1)
message = "[icon2html(src, viewers(message_range, get_turf(src)))][src]: [SPAN_DANGER("-!-")] Notification from [source]: " + message
output_message(FONT_SMALL(SPAN_BOLD(message)), message_range)
/obj/item/modular_computer/proc/register_account(var/datum/computer_file/program/PRG = null)
var/obj/item/card/id/id = GetID()
if(PRG)
output_message(SPAN_NOTICE("\The [src] shows a notice: \"[PRG.filedesc] requires a registered NTNRC account. Registering automatically...\""))
if(!istype(id))
output_message(SPAN_WARNING("\The [src] shows an error: \"No ID card found!\""))
return FALSE
if(id.chat_registered)
output_message(SPAN_WARNING("\The [src] shows an error: \"This card is already registered to another account!\""))
return FALSE
id.chat_registered = TRUE
registered_id = id
output_message(SPAN_NOTICE("\The [src] beeps: \"Registration successful!\""))
playsound(get_turf(src), 'sound/machines/ping.ogg', 20, 0)
return registered_id
/obj/item/modular_computer/proc/unregister_account()
if(!registered_id)
return FALSE
registered_id.chat_registered = FALSE
registered_id = null
if(hard_drive)
var/datum/computer_file/program/P = hard_drive.find_file_by_name("ntnrc_client")
P.event_unregistered()
output_message(SPAN_NOTICE("\The [src] beeps: \"Successfully unregistered ID!\""))
playsound(get_turf(src), 'sound/machines/ping.ogg', 20, 0)
return TRUE
/obj/item/modular_computer/proc/set_autorun(var/fname)
if(!fname)
return FALSE
var/datum/computer_file/data/autorun = hard_drive.find_file_by_name("autorun")
if(istype(autorun) && autorun.stored_data == fname)
autorun.stored_data = null
return -1
autorun = new /datum/computer_file/data(src)
autorun.filename = "autorun"
autorun.stored_data = fname
hard_drive.store_file(autorun)
return TRUE
/obj/item/modular_computer/proc/silence_notifications()
for (var/datum/computer_file/program/P in hard_drive.stored_files)
if (istype(P))
P.event_silentmode()
silent = !silent
@@ -7,6 +7,7 @@
return
found = TRUE
portable_drive = H
verbs += /obj/item/modular_computer/proc/eject_usb
else if(istype(H, /obj/item/computer_hardware/hard_drive))
if(hard_drive)
to_chat(user, SPAN_WARNING("\The [src]'s hard drive slot is already occupied by \the [hard_drive]."))
@@ -39,6 +40,8 @@
return
found = TRUE
battery_module = H
if(battery_module.hotswappable)
verbs += /obj/item/modular_computer/proc/eject_battery
else if(istype(H, /obj/item/computer_hardware/processor_unit))
if(processor_unit)
to_chat(user, SPAN_WARNING("\The [src]'s processor slot is already occupied by \the [processor_unit]."))
@@ -51,6 +54,7 @@
return
found = TRUE
ai_slot = H
verbs += /obj/item/modular_computer/proc/eject_ai
else if(istype(H, /obj/item/computer_hardware/tesla_link))
if(tesla_link)
to_chat(user, SPAN_WARNING("\The [src]'s tesla link slot is already occupied by \the [tesla_link]."))
@@ -63,6 +67,7 @@
return
personal_ai = H
to_chat(user, SPAN_NOTICE("You install \the [H] into \the [src]."))
verbs += /obj/item/modular_computer/proc/eject_personal_ai
personal_ai.pai.parent_computer = src
personal_ai.pai.verbs += /mob/living/silicon/pai/proc/personal_computer_interact
to_chat(personal_ai.pai, SPAN_NOTICE("You gain access to \the [src]'s computronics."))
@@ -1,5 +1,4 @@
// Eject ID card from computer, if it has ID slot with card inside.
/obj/item/modular_computer/verb/eject_id()
/obj/item/modular_computer/proc/eject_id()
set name = "Eject ID"
set category = "Object"
set src in view(1)
@@ -7,49 +6,12 @@
if(use_check_and_message(usr))
return
proc_eject_id(usr)
// Eject ID card from computer, if it has ID slot with card inside.
/obj/item/modular_computer/verb/eject_usb()
set name = "Eject Portable Storage"
set category = "Object"
set src in view(1)
if(use_check_and_message(usr))
return
proc_eject_usb(usr)
/obj/item/modular_computer/verb/eject_ai()
set name = "Eject AI Storage"
set category = "Object"
set src in view(1)
if(use_check_and_message(usr))
return
proc_eject_ai(usr)
/obj/item/modular_computer/verb/eject_personal_ai()
set name = "Eject Personal AI"
set category = "Object"
set src in view(1)
if(use_check_and_message(usr))
return
proc_eject_personal_ai(usr)
/obj/item/modular_computer/proc/proc_eject_id(mob/user)
if(!user)
user = usr
if(!card_slot)
to_chat(user, SPAN_WARNING("\The [src] does not have an ID card slot."))
to_chat(usr, SPAN_WARNING("\The [src] does not have an ID card slot."))
return
if(!card_slot.stored_card)
to_chat(user, SPAN_WARNING("There is no card in \the [src]."))
to_chat(usr, SPAN_WARNING("There is no card in \the [src]."))
return
if(active_program)
@@ -57,57 +19,155 @@
for(var/datum/computer_file/program/P in idle_threads)
P.event_idremoved(TRUE)
if(ishuman(user))
user.put_in_hands(card_slot.stored_card)
else
card_slot.stored_card.forceMove(get_turf(src))
card_slot.stored_card = null
card_slot.eject_id(usr)
update_uis()
to_chat(user, SPAN_NOTICE("You remove the card from \the [src]."))
to_chat(usr, SPAN_NOTICE("You remove the card from \the [src]."))
/obj/item/modular_computer/proc/proc_eject_usb(mob/user)
if(!user)
user = usr
/obj/item/modular_computer/proc/eject_usb()
set name = "Eject Portable Storage"
set category = "Object"
set src in view(1)
if(!portable_drive)
to_chat(user, SPAN_WARNING("There is no portable drive connected to \the [src]."))
if(use_check_and_message(usr))
return
uninstall_component(user, portable_drive, put_in_hands = TRUE)
if(!portable_drive)
to_chat(usr, SPAN_WARNING("There is no portable drive connected to \the [src]."))
return
uninstall_component(usr, portable_drive, put_in_hands = TRUE)
verbs -= /obj/item/modular_computer/proc/eject_usb
update_uis()
/obj/item/modular_computer/proc/proc_eject_ai(mob/user)
if(!user)
user = usr
/obj/item/modular_computer/proc/eject_item()
set name = "Eject Stored Item"
set category = "Object"
set src in view(1)
if(use_check_and_message(usr))
return
if(!card_slot)
to_chat(usr, SPAN_WARNING("\The [src] does not have an ID card slot."))
return
if(!card_slot.stored_item)
to_chat(usr, SPAN_WARNING("There is no item stored in \the [src]."))
return
var/I = card_slot.stored_item.name
if(ishuman(usr))
usr.put_in_hands(card_slot.stored_item)
else
card_slot.stored_item.forceMove(get_turf(src))
card_slot.stored_item = null
update_uis()
verbs -= /obj/item/modular_computer/proc/eject_item
to_chat(usr, SPAN_NOTICE("You remove \the [I] from \the [src]."))
/obj/item/modular_computer/proc/eject_battery(mob/usr = usr)
set name = "Eject Battery"
set category = "Object"
set src in view(1)
if(use_check_and_message(usr))
return
if(!battery_module)
to_chat(usr, SPAN_WARNING("\The [src] doesn't have a battery installed."))
return
if(!battery_module.hotswappable)
to_chat(usr, SPAN_WARNING("\The [src]'s battery isn't removable without tools!"))
return
uninstall_component(usr, battery_module, put_in_hands = TRUE)
verbs -= /obj/item/modular_computer/proc/eject_battery
update_uis()
/obj/item/modular_computer/proc/eject_ai()
set name = "Eject AI Storage"
set category = "Object"
set src in view(1)
if(use_check_and_message(usr))
return
if(!ai_slot)
to_chat(user, SPAN_WARNING("\The [src] doesn't have an intellicard slot."))
to_chat(usr, SPAN_WARNING("\The [src] doesn't have an intellicard slot."))
return
if(!ai_slot.stored_card)
to_chat(user, SPAN_WARNING("There is no intellicard connected to \the [src]."))
to_chat(usr, SPAN_WARNING("There is no intellicard connected to \the [src]."))
return
if(ishuman(user))
user.put_in_hands(ai_slot.stored_card)
if(ishuman(usr))
usr.put_in_hands(ai_slot.stored_card)
else
ai_slot.stored_card.forceMove(get_turf(src))
ai_slot.stored_card = null
ai_slot.update_power_usage()
verbs -= /obj/item/modular_computer/proc/eject_ai
update_uis()
/obj/item/modular_computer/proc/proc_eject_personal_ai(mob/user)
if(!personal_ai)
to_chat(user, SPAN_WARNING("There is no personal AI connected to \the [src]."))
/obj/item/modular_computer/proc/eject_personal_ai()
set name = "Eject Personal AI"
set category = "Object"
set src in view(1)
if(use_check_and_message(usr))
return
personal_ai.pai.verbs -= /mob/living/silicon/pai/proc/personal_computer_interact
personal_ai.pai.parent_computer = null
to_chat(personal_ai.pai, SPAN_NOTICE("You lose access to \the [src]'s computronics."))
uninstall_component(user, personal_ai, put_in_hands = TRUE)
if(!personal_ai)
to_chat(usr, SPAN_WARNING("There is no personal AI connected to \the [src]."))
return
uninstall_component(usr, personal_ai, put_in_hands = TRUE)
verbs -= /obj/item/modular_computer/proc/eject_personal_ai
update_uis()
/obj/item/modular_computer/AltClick(var/mob/user)
if(use_check_and_message(user, 32))
return
if(!card_slot)
to_chat(user, SPAN_WARNING("\The [src] does not have an ID card slot."))
return
if(card_slot.stored_card)
eject_id()
else if(card_slot.stored_item)
eject_item()
else
to_chat(user, SPAN_WARNING("\The [src] does not have a card or item stored in the card slot."))
/obj/item/modular_computer/attack(mob/living/M, mob/living/user)
if(scan_mode == SCANNER_MEDICAL)
health_scan_mob(M, user, TRUE)
/obj/item/modular_computer/afterattack(atom/A, mob/user, proximity_flag, click_parameters)
. = ..()
if(!proximity_flag)
return
if(scan_mode == SCANNER_REAGENT)
if(!isobj(A) || isnull(A.reagents))
return
if(A.reagents.reagent_list.len)
var/reagents_length = A.reagents.reagent_list.len
to_chat(user, SPAN_NOTICE("[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found."))
for(var/re in A.reagents.reagent_list)
to_chat(user, SPAN_NOTICE(" [re]"))
else
to_chat(user, SPAN_NOTICE("No active chemical agents found in [A]."))
else if(scan_mode == SCANNER_GAS)
analyze_gases(A, user)
/obj/item/modular_computer/attack_ghost(var/mob/abstract/observer/user)
if(enabled)
ui_interact(user)
@@ -152,15 +212,29 @@
if(!card_slot)
to_chat(user, SPAN_WARNING("You try to insert \the [I] into \the [src], but it does not have an ID card slot installed."))
return
if(card_slot.stored_card)
to_chat(user, SPAN_WARNING("You try to insert \the [I] into \the [src], but its ID card slot is occupied."))
return
user.drop_from_inventory(I, src)
card_slot.stored_card = I
if(card_slot.stored_card)
eject_id()
card_slot.insert_id(I)
update_uis()
to_chat(user, SPAN_NOTICE("You insert \the [I] into \the [src]."))
return
if(is_type_in_list(W, card_slot?.allowed_items))
if(!card_slot)
to_chat(user, SPAN_WARNING("You try to insert \the [W] into \the [src], but it does not have an ID card slot installed."))
return
if(card_slot.stored_item)
to_chat(user, SPAN_WARNING("You try to insert \the [W] into \the [src], but its storage slot is occupied."))
return
user.drop_from_inventory(W, src)
card_slot.stored_item = W
update_uis()
verbs += /obj/item/modular_computer/proc/eject_item
to_chat(user, SPAN_NOTICE("You insert \the [W] into \the [src]."))
return
if(istype(W, /obj/item/paper))
if(!nano_printer)
return
@@ -230,6 +304,8 @@
var/mob/M = usr
if(use_check_and_message(M))
return
if(istype(over_object, /obj/machinery/power/apc) && tesla_link)
return over_object.attackby(src, M)
if(!istype(over_object, /obj/screen) && !(over_object == src))
return attack_self(M)
@@ -92,9 +92,9 @@
if(!istype(P) || P.program_state == PROGRAM_STATE_KILLED)
return
P.kill_program(TRUE)
if(P.kill_program())
to_chat(user, SPAN_NOTICE("Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed."))
update_uis()
to_chat(user, SPAN_NOTICE("Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed."))
if(href_list["PC_runprogram"] )
. = run_program(href_list["PC_runprogram"], usr)
@@ -103,16 +103,14 @@
if(href_list["PC_setautorun"])
if(!hard_drive)
return
var/datum/computer_file/data/autorun = hard_drive.find_file_by_name("autorun")
if(!istype(autorun))
autorun = new /datum/computer_file/data()
autorun.filename = "autorun"
hard_drive.store_file(autorun)
if(autorun.stored_data == href_list["PC_setautorun"])
autorun.stored_data = null
else
autorun.stored_data = href_list["PC_setautorun"]
set_autorun(href_list["PC_setautorun"])
if(href_list["PC_register"])
if(registered_id)
unregister_account()
else if(GetID())
register_account()
if( href_list["PC_toggleservice"] )
toggle_service(href_list["PC_toggleservice"], usr)
return 1
@@ -1,4 +1,5 @@
// This is the base type that handles everything. Subtypes can be easily created by tweaking variables in this file to your liking.
/obj/item/modular_computer
name = "Modular Computer"
desc = "A modular computer. You shouldn't see this."
@@ -21,6 +22,12 @@
var/_app_preset_type // Used for specifying the software preset of the console
var/ambience_last_played // Last time sound was played
var/pAI_lock = FALSE // Toggles whether pAI can interact with the modular computer while installed in it
var/obj/item/card/id/registered_id = null // ID used for chat client registering
var/scan_mode = null // Mode used for health/reagent scanners
var/silent = FALSE
var/doorcode = "smindicate"
var/hidden = FALSE
var/initial_name
// Modular computers can run on various devices. Each DEVICE (Laptop, Console, Tablet,..)
// must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently
@@ -1,19 +1,23 @@
/obj/item/modular_computer/tablet
/obj/item/modular_computer/handheld
name = "tablet computer"
desc = "A portable device for your needs on the go."
desc_info = "To deploy the charging cable on this device, either drag and drop it over a nearby APC, or click on the APC with the computer in hand."
icon = 'icons/obj/modular_tablet.dmi'
icon_state = "tablet"
icon_state_unpowered = "tablet"
icon_state_menu = "menu"
slot_flags = SLOT_ID
slot_flags = SLOT_ID | SLOT_BELT
can_reset = TRUE
hardware_flag = PROGRAM_TABLET
max_hardware_size = 1
w_class = ITEMSIZE_SMALL
light_strength = 2 // Same as PDAs
/obj/item/modular_computer/tablet/Initialize()
/obj/item/modular_computer/handheld/Initialize()
. = ..()
set_icon()
/obj/item/modular_computer/handheld/proc/set_icon()
icon_state += pick("", "-blue", "-green", "-red", "-brown")
icon_state_unpowered = icon_state
icon_state_broken = icon_state
@@ -0,0 +1,27 @@
/obj/item/modular_computer/handheld/pda
name = "\improper PDA"
desc = "The latest in portable microcomputer solutions from Thinktronic Systems, LTD."
icon = 'icons/obj/pda.dmi'
icon_state = "pda"
icon_state_screensaver = "off"
icon_state_unpowered = "pda"
var/icon_add // this is the "bar" part in "pda-bar"
enrolled = DEVICE_PRIVATE
/obj/item/modular_computer/handheld/pda/set_icon()
if(icon_add)
icon_state += "-[icon_add]"
icon_state_unpowered = icon_state
icon_state_broken = icon_state
/obj/item/modular_computer/handheld/pda/old
icon = 'icons/obj/pda_old.dmi'
/obj/item/modular_computer/handheld/pda/rugged
icon = 'icons/obj/pda_rugged.dmi'
/obj/item/modular_computer/handheld/pda/slate
icon = 'icons/obj/pda_slate.dmi'
/obj/item/modular_computer/handheld/pda/smart
icon = 'icons/obj/pda_smart.dmi'
@@ -23,10 +23,6 @@
computer_host = loc
else
return
// Let's remove integrated verbs for ejecting things.
verbs -= /obj/item/modular_computer/verb/eject_ai
verbs -= /obj/item/modular_computer/verb/eject_id
verbs -= /obj/item/modular_computer/verb/eject_usb
/obj/item/modular_computer/silicon/computer_use_power(power_usage)
// If we have host like AI, borg or pAI we handle there power
@@ -1,37 +1,31 @@
/obj/item/modular_computer/wristbound
/obj/item/modular_computer/handheld/wristbound
name = "wristbound computer"
desc = "A portable wristbound device for your needs on the go. Quite comfortable."
desc_info = "A NanoTrasen design, this wristbound computer allows the user to quickly and safely access critical info, without taking their hands out of the equation."
desc_fluff = "A NanoTrasen design, this wristbound computer allows the user to quickly and safely access critical info, without taking their hands out of the equation."
icon = 'icons/obj/modular_wristbound.dmi'
icon_state = "wristbound"
icon_state_unpowered = "wristbound"
icon_state_menu = "menu"
icon_state_screensaver = "standby"
hardware_flag = PROGRAM_WRISTBOUND
slot_flags = SLOT_GLOVES|SLOT_ID
can_reset = TRUE
max_hardware_size = 1
w_class = ITEMSIZE_NORMAL
light_strength = 1
menu_light_color = COLOR_GREEN
/obj/item/modular_computer/CouldUseTopic(var/mob/user)
..()
if(iscarbon(user))
playsound(src, 'sound/machines/pda_click.ogg', 20)
/obj/item/modular_computer/wristbound/Initialize()
/obj/item/modular_computer/handheld/wristbound/set_icon()
icon_state_unpowered = icon_state
icon_state_broken = icon_state
. = ..()
/obj/item/modular_computer/wristbound/attack_hand(mob/user)
/obj/item/modular_computer/handheld/wristbound/attack_hand(mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.gloves == src || H.wear_id == src)
return attack_self(user)
..()
/obj/item/modular_computer/wristbound/MouseDrop(obj/over_object)
/obj/item/modular_computer/handheld/wristbound/MouseDrop(obj/over_object)
if(!canremove)
return
if(!over_object || over_object == src)
@@ -59,9 +53,3 @@
usr.u_equip(src)
usr.put_in_l_hand(src,FALSE)
add_fingerprint(usr)
/obj/item/modular_computer/wristbound/AltClick(mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.gloves == src)
H.unEquip(src)
@@ -67,7 +67,7 @@
/obj/item/modular_computer/console/preset/command/captain
name = "captain's console"
_app_preset_type = /datum/modular_computer_app_presets/captain
_app_preset_type = /datum/modular_computer_app_presets/command/captain
enrolled = 1
/obj/item/modular_computer/console/preset/command/hop
@@ -0,0 +1,177 @@
/obj/item/modular_computer/handheld/custom_loadout/cheap/install_default_hardware()
..()
processor_unit = new /obj/item/computer_hardware/processor_unit/small(src)
hard_drive = new /obj/item/computer_hardware/hard_drive/micro(src)
network_card = new /obj/item/computer_hardware/network_card(src)
battery_module = new /obj/item/computer_hardware/battery_module(src)
card_slot = new /obj/item/computer_hardware/card_slot(src)
tesla_link = new /obj/item/computer_hardware/tesla_link/charging_cable(src)
battery_module.charge_to_full()
/obj/item/modular_computer/handheld/custom_loadout/advanced/install_default_hardware()
..()
processor_unit = new /obj/item/computer_hardware/processor_unit/small(src)
hard_drive = new /obj/item/computer_hardware/hard_drive/small(src)
network_card = new /obj/item/computer_hardware/network_card(src)
nano_printer = new /obj/item/computer_hardware/nano_printer(src)
card_slot = new /obj/item/computer_hardware/card_slot(src)
battery_module = new /obj/item/computer_hardware/battery_module(src)
tesla_link = new /obj/item/computer_hardware/tesla_link/charging_cable(src)
battery_module.charge_to_full()
// Cargo Delivery
/obj/item/modular_computer/handheld/custom_loadout/advanced/cargo_delivery
_app_preset_type = /datum/modular_computer_app_presets/cargo_delivery
enrolled = DEVICE_PRIVATE
// Tablet PDA presets
/obj/item/modular_computer/handheld/preset
enrolled = DEVICE_PRIVATE
/obj/item/modular_computer/handheld/preset/install_default_hardware()
..()
processor_unit = new/obj/item/computer_hardware/processor_unit/small(src)
hard_drive = new /obj/item/computer_hardware/hard_drive/small(src)
network_card = new /obj/item/computer_hardware/network_card(src)
battery_module = new /obj/item/computer_hardware/battery_module(src)
card_slot = new /obj/item/computer_hardware/card_slot(src)
card_slot.stored_item = new /obj/item/pen
tesla_link = new /obj/item/computer_hardware/tesla_link/charging_cable(src)
battery_module.charge_to_full()
/obj/item/modular_computer/handheld/preset/civilian
_app_preset_type = /datum/modular_computer_app_presets/civilian
/obj/item/modular_computer/handheld/preset/civilian/bartender/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
/obj/item/modular_computer/handheld/preset/civilian/librarian/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
silence_notifications()
/obj/item/modular_computer/handheld/preset/civilian/janitor
_app_preset_type = /datum/modular_computer_app_presets/civilian/janitor
/obj/item/modular_computer/handheld/preset/civilian/chaplain/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
/obj/item/modular_computer/handheld/preset/civilian/lawyer/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
// Engineering
/obj/item/modular_computer/handheld/preset/engineering
_app_preset_type = /datum/modular_computer_app_presets/engineering
/obj/item/modular_computer/handheld/preset/engineering/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/silver
/obj/item/modular_computer/handheld/preset/engineering/atmos
_app_preset_type = /datum/modular_computer_app_presets/engineering/atmos
/obj/item/modular_computer/handheld/preset/engineering/ce
_app_preset_type = /datum/modular_computer_app_presets/engineering/ce
// Supply
/obj/item/modular_computer/handheld/preset/supply
_app_preset_type = /datum/modular_computer_app_presets/supply
/obj/item/modular_computer/handheld/preset/supply/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/silver
/obj/item/modular_computer/handheld/preset/supply/qm/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
// Medical
/obj/item/modular_computer/handheld/preset/medical
_app_preset_type = /datum/modular_computer_app_presets/medical
/obj/item/modular_computer/handheld/preset/medical/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/white
/obj/item/modular_computer/handheld/preset/medical/psych/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain/white
/obj/item/modular_computer/handheld/preset/medical/cmo
_app_preset_type = /datum/modular_computer_app_presets/medical/cmo
// Science
/obj/item/modular_computer/handheld/preset/research
_app_preset_type = /datum/modular_computer_app_presets/research
/obj/item/modular_computer/handheld/preset/research/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/white
/obj/item/modular_computer/handheld/preset/research/rd
_app_preset_type = /datum/modular_computer_app_presets/research/rd
// Security
/obj/item/modular_computer/handheld/preset/security
_app_preset_type = /datum/modular_computer_app_presets/security
/obj/item/modular_computer/handheld/preset/security/detective
_app_preset_type = /datum/modular_computer_app_presets/security/investigations
/obj/item/modular_computer/handheld/preset/security/hos
_app_preset_type = /datum/modular_computer_app_presets/security/hos
// Command / Misc
/obj/item/modular_computer/handheld/preset/command
_app_preset_type = /datum/modular_computer_app_presets/command
/obj/item/modular_computer/handheld/preset/command/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain/head
/obj/item/modular_computer/handheld/preset/command/cciaa
_app_preset_type = /datum/modular_computer_app_presets/command
/obj/item/modular_computer/handheld/preset/command/hop
_app_preset_type = /datum/modular_computer_app_presets/command/hop
/obj/item/modular_computer/handheld/preset/command/captain
_app_preset_type = /datum/modular_computer_app_presets/command/captain
/obj/item/modular_computer/handheld/preset/command/captain/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain/captain
/obj/item/modular_computer/handheld/preset/command/bst
hidden = TRUE
/obj/item/modular_computer/handheld/preset/command/bst/attack_hand()
if(!usr)
return
if(!istype(usr, /mob/living/carbon/human/bst))
to_chat(usr, SPAN_ALERT("Your hand seems to go right through the [src]. It's like it doesn't exist."))
return
else
..()
/obj/item/modular_computer/handheld/preset/ert
_app_preset_type = /datum/modular_computer_app_presets/ert
hidden = TRUE
/obj/item/modular_computer/handheld/preset/syndicate
_app_preset_type = /datum/modular_computer_app_presets/merc
computer_emagged = TRUE
hidden = TRUE
/obj/item/modular_computer/handheld/preset/syndicate/install_default_hardware()
..()
network_card = new /obj/item/computer_hardware/network_card/signaler(src)
@@ -13,6 +13,7 @@
nano_printer = new /obj/item/computer_hardware/nano_printer(src)
nano_printer.max_paper = 10
nano_printer.stored_paper = 5
tesla_link = new /obj/item/computer_hardware/tesla_link/charging_cable(src)
/obj/item/modular_computer/laptop/preset/install_default_programs()
..()
@@ -75,7 +76,7 @@
/obj/item/modular_computer/laptop/preset/command/captain
name = "captain's laptop"
desc = "A portable computer belonging to the captain."
_app_preset_type = /datum/modular_computer_app_presets/captain
_app_preset_type = /datum/modular_computer_app_presets/command/captain
/obj/item/modular_computer/laptop/preset/command/captain/install_default_hardware()
..()
@@ -0,0 +1,194 @@
/obj/item/modular_computer/handheld/pda/install_default_hardware()
..()
processor_unit = new /obj/item/computer_hardware/processor_unit/small(src)
hard_drive = new /obj/item/computer_hardware/hard_drive/small(src)
network_card = new /obj/item/computer_hardware/network_card(src)
battery_module = new /obj/item/computer_hardware/battery_module(src)
card_slot = new /obj/item/computer_hardware/card_slot(src)
card_slot.stored_item = new /obj/item/pen
tesla_link = new /obj/item/computer_hardware/tesla_link/charging_cable(src)
battery_module.charge_to_full()
// Civilian
/obj/item/modular_computer/handheld/pda/civilian
_app_preset_type = /datum/modular_computer_app_presets/civilian
/obj/item/modular_computer/handheld/pda/civilian/bartender/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
/obj/item/modular_computer/handheld/pda/civilian/librarian
icon_add = "libb"
/obj/item/modular_computer/handheld/pda/civilian/librarian/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
silence_notifications()
/obj/item/modular_computer/handheld/pda/civilian/janitor
_app_preset_type = /datum/modular_computer_app_presets/civilian/janitor
/obj/item/modular_computer/handheld/pda/civilian/chaplain/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
/obj/item/modular_computer/handheld/pda/civilian/lawyer
icon_add = "h"
/obj/item/modular_computer/handheld/pda/civilian/lawyer/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
/obj/item/modular_computer/handheld/pda/civilian/clown
_app_preset_type = /datum/modular_computer_app_presets/civilian/clown
icon_add = "clown"
/obj/item/modular_computer/handheld/pda/civilian/clown/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/crayon
/obj/item/modular_computer/handheld/pda/civilian/mime
_app_preset_type = /datum/modular_computer_app_presets/civilian/mime
icon_add = "mime"
// Engineering
/obj/item/modular_computer/handheld/pda/engineering
_app_preset_type = /datum/modular_computer_app_presets/engineering
icon_add = "e"
/obj/item/modular_computer/handheld/pda/engineering/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/silver
/obj/item/modular_computer/handheld/pda/engineering/atmos
_app_preset_type = /datum/modular_computer_app_presets/engineering/atmos
/obj/item/modular_computer/handheld/pda/engineering/ce
_app_preset_type = /datum/modular_computer_app_presets/engineering/ce
icon_add = "ce"
// Supply
/obj/item/modular_computer/handheld/pda/supply
_app_preset_type = /datum/modular_computer_app_presets/supply
icon_add = "sup"
/obj/item/modular_computer/handheld/pda/supply/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/silver
/obj/item/modular_computer/handheld/pda/supply/miner
_app_preset_type = /datum/modular_computer_app_presets/civilian
/obj/item/modular_computer/handheld/pda/supply/qm
icon_add = "q"
/obj/item/modular_computer/handheld/pda/supply/qm/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
// Medical
/obj/item/modular_computer/handheld/pda/medical
_app_preset_type = /datum/modular_computer_app_presets/medical
icon_add = "m"
/obj/item/modular_computer/handheld/pda/medical/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/white
/obj/item/modular_computer/handheld/pda/medical/psych/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain/white
/obj/item/modular_computer/handheld/pda/medical/cmo
_app_preset_type = /datum/modular_computer_app_presets/medical/cmo
icon_add = "cmo"
// Science
/obj/item/modular_computer/handheld/pda/research
_app_preset_type = /datum/modular_computer_app_presets/research
icon_add = "tox"
/obj/item/modular_computer/handheld/pda/research/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/white
/obj/item/modular_computer/handheld/pda/research/rd
_app_preset_type = /datum/modular_computer_app_presets/research/rd
icon_add = "rd"
// Security
/obj/item/modular_computer/handheld/pda/security
_app_preset_type = /datum/modular_computer_app_presets/security
icon_add = "s"
/obj/item/modular_computer/handheld/pda/security/detective
_app_preset_type = /datum/modular_computer_app_presets/security/investigations
/obj/item/modular_computer/handheld/pda/security/hos
_app_preset_type = /datum/modular_computer_app_presets/security/hos
icon_add = "hos"
// Command / Misc
/obj/item/modular_computer/handheld/pda/command
_app_preset_type = /datum/modular_computer_app_presets/command
icon_add = "h"
/obj/item/modular_computer/handheld/pda/command/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain/head
/obj/item/modular_computer/handheld/pda/command/cciaa
_app_preset_type = /datum/modular_computer_app_presets/command
icon_add = "h"
// detonate = 0
/obj/item/modular_computer/handheld/pda/command/hop
_app_preset_type = /datum/modular_computer_app_presets/command/hop
icon_add = "hop"
/obj/item/modular_computer/handheld/pda/command/captain
_app_preset_type = /datum/modular_computer_app_presets/command/captain
icon_add = "c"
/obj/item/modular_computer/handheld/pda/command/captain/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain/captain
/obj/item/modular_computer/handheld/pda/command/bst
icon_add = "h"
hidden = TRUE
/obj/item/modular_computer/handheld/pda/command/bst/attack_hand()
if(!usr)
return
if(!istype(usr, /mob/living/carbon/human/bst))
to_chat(usr, SPAN_ALERT("Your hand seems to go right through the [src]. It's like it doesn't exist."))
return
else
..()
/obj/item/modular_computer/handheld/pda/ert
_app_preset_type = /datum/modular_computer_app_presets/ert
icon_add = "s"
hidden = TRUE
/obj/item/modular_computer/handheld/pda/syndicate
_app_preset_type = /datum/modular_computer_app_presets/merc
icon_add = "syn"
computer_emagged = TRUE
/obj/item/modular_computer/handheld/pda/syndicate/install_default_hardware()
..()
network_card = new /obj/item/computer_hardware/network_card/signaler(src)
/obj/item/modular_computer/handheld/pda/civilian/clear
icon_add = "transp"
/obj/item/modular_computer/handheld/pda/civilian/merchant
hidden = TRUE
@@ -1,23 +0,0 @@
/obj/item/modular_computer/tablet/preset/custom_loadout/cheap/install_default_hardware()
..()
processor_unit = new /obj/item/computer_hardware/processor_unit/small(src)
hard_drive = new /obj/item/computer_hardware/hard_drive/micro(src)
network_card = new /obj/item/computer_hardware/network_card(src)
battery_module = new /obj/item/computer_hardware/battery_module/nano(src)
battery_module.charge_to_full()
/obj/item/modular_computer/tablet/preset/custom_loadout/advanced/install_default_hardware()
..()
processor_unit = new /obj/item/computer_hardware/processor_unit/small(src)
hard_drive = new /obj/item/computer_hardware/hard_drive/small(src)
network_card = new /obj/item/computer_hardware/network_card(src)
nano_printer = new /obj/item/computer_hardware/nano_printer(src)
card_slot = new /obj/item/computer_hardware/card_slot(src)
battery_module = new /obj/item/computer_hardware/battery_module(src)
battery_module.charge_to_full()
// Cargo Delivery
/obj/item/modular_computer/tablet/preset/custom_loadout/advanced/cargo_delivery
_app_preset_type = /datum/modular_computer_app_presets/cargo_delivery
enrolled = 1
@@ -1,79 +1,253 @@
/obj/item/modular_computer/wristbound/preset/cheap/install_default_hardware()
/obj/item/modular_computer/handheld/wristbound/preset/cheap/install_default_hardware()
..()
processor_unit = new /obj/item/computer_hardware/processor_unit/small(src)
hard_drive = new /obj/item/computer_hardware/hard_drive/micro(src)
network_card = new /obj/item/computer_hardware/network_card(src)
battery_module = new /obj/item/computer_hardware/battery_module/nano(src)
tesla_link = new /obj/item/computer_hardware/tesla_link/charging_cable(src)
battery_module.charge_to_full()
/obj/item/modular_computer/wristbound/preset/cheap/generic
/obj/item/modular_computer/handheld/wristbound/preset/cheap/generic
_app_preset_type = /datum/modular_computer_app_presets/civilian
/obj/item/modular_computer/wristbound/preset/advanced/install_default_hardware()
/obj/item/modular_computer/handheld/wristbound/preset/advanced/install_default_hardware()
..()
processor_unit = new /obj/item/computer_hardware/processor_unit/small(src)
hard_drive = new /obj/item/computer_hardware/hard_drive/small(src)
network_card = new /obj/item/computer_hardware/network_card(src)
nano_printer = new /obj/item/computer_hardware/nano_printer(src)
card_slot = new /obj/item/computer_hardware/card_slot(src)
battery_module = new /obj/item/computer_hardware/battery_module(src)
battery_module = new /obj/item/computer_hardware/battery_module/hotswap(src)
tesla_link = new /obj/item/computer_hardware/tesla_link/charging_cable(src)
battery_module.charge_to_full()
/obj/item/modular_computer/wristbound/preset/advanced/cargo
/obj/item/modular_computer/handheld/wristbound/preset/advanced/cargo
icon_state = "wristbound_cargo"
_app_preset_type = /datum/modular_computer_app_presets/cargo_delivery
enrolled = 1
/obj/item/modular_computer/wristbound/preset/advanced/engineering
/obj/item/modular_computer/handheld/wristbound/preset/advanced/engineering
icon_state = "wristbound_engineering"
_app_preset_type = /datum/modular_computer_app_presets/engineering
enrolled = 1
/obj/item/modular_computer/wristbound/preset/advanced/medical
/obj/item/modular_computer/handheld/wristbound/preset/advanced/medical
icon_state = "wristbound_medical"
_app_preset_type = /datum/modular_computer_app_presets/medical
enrolled = 1
/obj/item/modular_computer/wristbound/preset/advanced/security
/obj/item/modular_computer/handheld/wristbound/preset/advanced/security
icon_state = "wristbound_security"
_app_preset_type = /datum/modular_computer_app_presets/security
enrolled = 1
/obj/item/modular_computer/wristbound/preset/advanced/security/investigations
/obj/item/modular_computer/handheld/wristbound/preset/advanced/security/investigations
_app_preset_type = /datum/modular_computer_app_presets/security/investigations
enrolled = 1
/obj/item/modular_computer/wristbound/preset/advanced/research
/obj/item/modular_computer/handheld/wristbound/preset/advanced/research
icon_state = "wristbound_science"
_app_preset_type = /datum/modular_computer_app_presets/research
enrolled = 1
/obj/item/modular_computer/wristbound/preset/advanced/command
/obj/item/modular_computer/handheld/wristbound/preset/advanced/command
icon_state = "wristbound_command"
_app_preset_type = /datum/modular_computer_app_presets/command
enrolled = 1
/obj/item/modular_computer/wristbound/preset/advanced/command/ce
/obj/item/modular_computer/handheld/wristbound/preset/advanced/command/ce
_app_preset_type = /datum/modular_computer_app_presets/engineering/ce
/obj/item/modular_computer/wristbound/preset/advanced/command/rd
/obj/item/modular_computer/handheld/wristbound/preset/advanced/command/rd
_app_preset_type = /datum/modular_computer_app_presets/research/rd
/obj/item/modular_computer/wristbound/preset/advanced/command/cmo
/obj/item/modular_computer/handheld/wristbound/preset/advanced/command/cmo
_app_preset_type = /datum/modular_computer_app_presets/medical/cmo
/obj/item/modular_computer/wristbound/preset/advanced/command/hop
/obj/item/modular_computer/handheld/wristbound/preset/advanced/command/hop
_app_preset_type = /datum/modular_computer_app_presets/command/hop
/obj/item/modular_computer/wristbound/preset/advanced/command/hos
/obj/item/modular_computer/handheld/wristbound/preset/advanced/command/hos
_app_preset_type = /datum/modular_computer_app_presets/security/hos
/obj/item/modular_computer/wristbound/preset/advanced/command/captain
_app_preset_type = /datum/modular_computer_app_presets/captain
/obj/item/modular_computer/handheld/wristbound/preset/advanced/command/captain
_app_preset_type = /datum/modular_computer_app_presets/command/captain
/obj/item/modular_computer/wristbound/preset/advanced/generic
/obj/item/modular_computer/handheld/wristbound/preset/advanced/generic
_app_preset_type = /datum/modular_computer_app_presets/civilian
/obj/item/modular_computer/wristbound/preset/advanced/representative
/obj/item/modular_computer/handheld/wristbound/preset/advanced/representative
_app_preset_type = /datum/modular_computer_app_presets/representative
enrolled = 1
enrolled = DEVICE_PRIVATE
// Wristbound PDA presets
/obj/item/modular_computer/handheld/wristbound/preset/pda
enrolled = DEVICE_PRIVATE
/obj/item/modular_computer/handheld/wristbound/preset/pda/install_default_hardware()
..()
processor_unit = new /obj/item/computer_hardware/processor_unit/small(src)
hard_drive = new /obj/item/computer_hardware/hard_drive/small(src)
network_card = new /obj/item/computer_hardware/network_card(src)
battery_module = new /obj/item/computer_hardware/battery_module(src)
card_slot = new /obj/item/computer_hardware/card_slot(src)
card_slot.stored_item = new /obj/item/pen
tesla_link = new /obj/item/computer_hardware/tesla_link/charging_cable(src)
battery_module.charge_to_full()
/obj/item/modular_computer/handheld/wristbound/preset/pda/civilian
_app_preset_type = /datum/modular_computer_app_presets/civilian
/obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/bartender/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
/obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/librarian/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
silence_notifications()
/obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/janitor
_app_preset_type = /datum/modular_computer_app_presets/civilian/janitor
/obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/chaplain/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
/obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/lawyer/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
// Engineering
/obj/item/modular_computer/handheld/wristbound/preset/pda/engineering
_app_preset_type = /datum/modular_computer_app_presets/engineering
icon_state = "wristbound_engineering"
item_state = "wristbound_engineering"
icon_state_unpowered = "wristbound_engineering"
/obj/item/modular_computer/handheld/wristbound/preset/pda/engineering/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/silver
/obj/item/modular_computer/handheld/wristbound/preset/pda/engineering/atmos
_app_preset_type = /datum/modular_computer_app_presets/engineering/atmos
/obj/item/modular_computer/handheld/wristbound/preset/pda/engineering/ce
_app_preset_type = /datum/modular_computer_app_presets/engineering/ce
// Supply
/obj/item/modular_computer/handheld/wristbound/preset/pda/supply
_app_preset_type = /datum/modular_computer_app_presets/supply
icon_state = "wristbound_cargo"
item_state = "wristbound_cargo"
icon_state_unpowered = "wristbound_cargo"
/obj/item/modular_computer/handheld/wristbound/preset/pda/supply/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/silver
/obj/item/modular_computer/handheld/wristbound/preset/pda/supply/qm/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain
/obj/item/modular_computer/handheld/wristbound/preset/pda/supply/miner
_app_preset_type = /datum/modular_computer_app_presets/civilian
// Medical
/obj/item/modular_computer/handheld/wristbound/preset/pda/medical
_app_preset_type = /datum/modular_computer_app_presets/medical
icon_state = "wristbound_medical"
item_state = "wristbound_medical"
icon_state_unpowered = "wristbound_medical"
/obj/item/modular_computer/handheld/wristbound/preset/pda/medical/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/white
/obj/item/modular_computer/handheld/wristbound/preset/pda/medical/psych/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain/white
/obj/item/modular_computer/handheld/wristbound/preset/pda/medical/cmo
_app_preset_type = /datum/modular_computer_app_presets/medical/cmo
// Science
/obj/item/modular_computer/handheld/wristbound/preset/pda/research
_app_preset_type = /datum/modular_computer_app_presets/research
icon_state = "wristbound_science"
item_state = "wristbound_science"
icon_state_unpowered = "wristbound_science"
/obj/item/modular_computer/handheld/wristbound/preset/pda/research/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/white
/obj/item/modular_computer/handheld/wristbound/preset/pda/research/rd
_app_preset_type = /datum/modular_computer_app_presets/research/rd
// Security
/obj/item/modular_computer/handheld/wristbound/preset/pda/security
_app_preset_type = /datum/modular_computer_app_presets/security
icon_state = "wristbound_security"
item_state = "wristbound_security"
icon_state_unpowered = "wristbound_security"
/obj/item/modular_computer/handheld/wristbound/preset/pda/security/detective
_app_preset_type = /datum/modular_computer_app_presets/security/investigations
/obj/item/modular_computer/handheld/wristbound/preset/pda/security/hos
_app_preset_type = /datum/modular_computer_app_presets/security/hos
// Command / Misc
/obj/item/modular_computer/handheld/wristbound/preset/pda/command
_app_preset_type = /datum/modular_computer_app_presets/command
icon_state = "wristbound_command"
item_state = "wristbound_command"
icon_state_unpowered = "wristbound_command"
/obj/item/modular_computer/handheld/wristbound/preset/pda/command/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain/head
/obj/item/modular_computer/handheld/wristbound/preset/pda/command/cciaa
_app_preset_type = /datum/modular_computer_app_presets/command
/obj/item/modular_computer/handheld/wristbound/preset/pda/command/hop
_app_preset_type = /datum/modular_computer_app_presets/command/hop
/obj/item/modular_computer/handheld/wristbound/preset/pda/command/captain
_app_preset_type = /datum/modular_computer_app_presets/command/captain
/obj/item/modular_computer/handheld/wristbound/preset/pda/command/captain/Initialize()
. = ..()
card_slot.stored_item = new /obj/item/pen/fountain/captain
/obj/item/modular_computer/handheld/wristbound/preset/pda/command/bst
hidden = TRUE
/obj/item/modular_computer/handheld/wristbound/preset/pda/command/bst/attack_hand()
if(!usr)
return
if(!istype(usr, /mob/living/carbon/human/bst))
to_chat(usr, SPAN_ALERT("Your hand seems to go right through the [src]. It's like it doesn't exist."))
return
else
..()
/obj/item/modular_computer/handheld/wristbound/preset/pda/ert
_app_preset_type = /datum/modular_computer_app_presets/ert
icon_state = "wristbound_command"
item_state = "wristbound_command"
icon_state_unpowered = "wristbound_command"
hidden = TRUE
/obj/item/modular_computer/handheld/wristbound/preset/pda/syndicate
_app_preset_type = /datum/modular_computer_app_presets/merc
icon_state = "wristbound_security"
item_state = "wristbound_security"
icon_state_unpowered = "wristbound_security"
computer_emagged = TRUE
hidden = TRUE
/obj/item/modular_computer/handheld/wristbound/preset/pda/syndicate/install_default_hardware()
..()
network_card = new /obj/item/computer_hardware/network_card/signaler(src)