Files
Mathilde 043d5a252a Blueys, NTCs and Lawyers now have Faxbond on their PDAs (#5937)
## About The Pull Request

With this I am making it so that the FaxBond app
(https://github.com/tgstation/tgstation/pull/96467) comes preinstalled
on the PDAs of the Blueshield, the NTC and the Lawyer. The Blueshield
and the NTC are 'dignitary' roles, as well as command roles. On /tg/,
all command roles get faxbond, but not these two because they don't
exist there. The lawyer is also a bureaucratic role that, alongside the
NTC, makes good use of the fax.
The Consultant also gets the security records app, because they already
have physical access to security and employment records


## Why It's Good For The Game

Fax machines are often used by these roles (the Lawyer and the NTC
particularly) so it makes sense for them to have THE fax machine app, to
not miss any messages. Faxes are also used by admins to indirectly
interact with the crew, and it's not uncommon for the players to miss
faxes.

<img width="375" height="311" alt="image"
src="https://github.com/user-attachments/assets/7b73f33e-2c08-4588-8f03-9d57e5da7edb"
/>

## Proof Of Testing
<img width="421" height="537" alt="image"
src="https://github.com/user-attachments/assets/8258b39b-1828-40ff-a9f4-f73d07703a60"
/>

## Changelog

🆑
add: The PDAs of the Nanotrasen Consultant, the Lawyer and the
Blueshield now come preinstalled with the FaxBond app. May they never
miss a fax again.
/🆑

Co-authored-by: Alexis <catmc8565@gmail.com>
2026-07-14 09:04:30 -07:00

528 lines
17 KiB
Plaintext

/**
* Command
*/
/obj/item/modular_computer/pda/heads
icon_state = "/obj/item/modular_computer/pda/heads"
greyscale_config = /datum/greyscale_config/tablet/head
greyscale_colors = "#67A364#a92323"
max_capacity = parent_type::max_capacity * 2
/// Fax type for a relevant head's tp connect their PDA to (for use with fax notification app)
var/fax_type = null
var/static/list/datum/computer_file/head_programs = list(
/datum/computer_file/program/status,
/datum/computer_file/program/science,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/budgetorders,
/datum/computer_file/program/faxbond,
)
/obj/item/modular_computer/pda/heads/Initialize(mapload)
. = ..()
for(var/programs in head_programs)
var/datum/computer_file/program/program_type = new programs
store_file(program_type)
if (ispath(fax_type, /obj/machinery/fax))
var/datum/computer_file/program/faxbond/fax_notifier = locate() in stored_files
var/list/faxes_list = SSmachines.get_machines_by_type(fax_type)
var/obj/machinery/fax/heads_fax = length(faxes_list) ? pick(faxes_list) : null //there really shouldnt be more than one
fax_notifier.connect_fax(heads_fax)
/obj/item/modular_computer/pda/heads/captain
name = "captain PDA"
icon_state = "/obj/item/modular_computer/pda/heads/captain"
greyscale_config = /datum/greyscale_config/tablet/captain
greyscale_colors = "#2C7CB2#FF0000#FFFFFF#FFD55B"
inserted_item = /obj/item/pen/fountain/captain
fax_type = /obj/machinery/fax/heads/captain
/obj/item/modular_computer/pda/heads/captain/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TABLET_CHECK_DETONATE, PROC_REF(tab_no_detonate))
for(var/datum/computer_file/program/messenger/messenger_app in stored_files)
messenger_app.spam_mode = TRUE
/obj/item/modular_computer/pda/heads/captain/proc/tab_no_detonate()
SIGNAL_HANDLER
return COMPONENT_TABLET_NO_DETONATE
/obj/item/modular_computer/pda/heads/hop
name = "head of personnel PDA"
icon_state = "/obj/item/modular_computer/pda/heads/hop"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#374f7e#a52f29#a52f29"
fax_type = /obj/machinery/fax/heads/hop
starting_programs = list(
/datum/computer_file/program/records/security,
/datum/computer_file/program/job_management,
)
/obj/item/modular_computer/pda/heads/hos
name = "head of security PDA"
icon_state = "/obj/item/modular_computer/pda/heads/hos"
greyscale_config = /datum/greyscale_config/tablet/head
greyscale_colors = "#EA3232#0000CC"
inserted_item = /obj/item/pen/red/security
fax_type = /obj/machinery/fax/heads/hos
starting_programs = list(
/datum/computer_file/program/records/security,
)
/obj/item/modular_computer/pda/heads/ce
name = "chief engineer PDA"
icon_state = "/obj/item/modular_computer/pda/heads/ce"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#D99A2E#69DBF3#FAFAFA"
fax_type = /obj/machinery/fax/heads/ce
starting_programs = list(
/datum/computer_file/program/atmosscan,
/datum/computer_file/program/alarm_monitor,
/datum/computer_file/program/supermatter_monitor,
)
/obj/item/modular_computer/pda/heads/cmo
name = "chief medical officer PDA"
icon_state = "/obj/item/modular_computer/pda/heads/cmo"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#FAFAFA#000099#3F96CC"
fax_type = /obj/machinery/fax/heads/cmo
starting_programs = list(
/datum/computer_file/program/maintenance/phys_scanner,
/datum/computer_file/program/records/medical,
)
/obj/item/modular_computer/pda/heads/rd
name = "research director PDA"
icon_state = "/obj/item/modular_computer/pda/heads/rd"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#FAFAFA#000099#B347BC"
inserted_item = /obj/item/pen/fountain
fax_type = /obj/machinery/fax/heads/rd
starting_programs = list(
/datum/computer_file/program/borg_monitor,
/datum/computer_file/program/scipaper_program,
/datum/computer_file/program/signal_commander,
)
/obj/item/modular_computer/pda/heads/quartermaster
name = "quartermaster PDA"
icon_state = "/obj/item/modular_computer/pda/heads/quartermaster"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#c4b787#18191e#8b4c31"
inserted_item = /obj/item/pen/survival
stored_paper = 20
fax_type = /obj/machinery/fax/heads/qm
starting_programs = list(
/datum/computer_file/program/shipping,
/datum/computer_file/program/restock_tracker,
)
/**
* Security
*/
/obj/item/modular_computer/pda/security
name = "security PDA"
greyscale_colors = "#EA3232#0000cc"
inserted_item = /obj/item/pen/red/security
starting_programs = list(
/datum/computer_file/program/records/security,
/datum/computer_file/program/robocontrol,
)
/obj/item/modular_computer/pda/detective
name = "detective PDA"
greyscale_colors = "#805A2F#990202"
inserted_item = /obj/item/pen/red/security
starting_programs = list(
/datum/computer_file/program/records/security,
/datum/computer_file/program/robocontrol,
)
/obj/item/modular_computer/pda/warden
name = "warden PDA"
icon_state = "/obj/item/modular_computer/pda/warden"
greyscale_config = /datum/greyscale_config/tablet/stripe_double
greyscale_colors = "#EA3232#0000CC#363636"
inserted_item = /obj/item/pen/red/security
starting_programs = list(
/datum/computer_file/program/records/security,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/budgetorders,
)
/**
* Engineering
*/
/obj/item/modular_computer/pda/engineering
name = "engineering PDA"
icon_state = "/obj/item/modular_computer/pda/engineering"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#D99A2E#69DBF3#E3DF3D"
starting_programs = list(
/datum/computer_file/program/alarm_monitor,
/datum/computer_file/program/atmosscan,
/datum/computer_file/program/supermatter_monitor,
)
/obj/item/modular_computer/pda/atmos
name = "atmospherics PDA"
icon_state = "/obj/item/modular_computer/pda/atmos"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#EEDC43#00E5DA#727272"
starting_programs = list(
/datum/computer_file/program/alarm_monitor,
/datum/computer_file/program/atmosscan,
/datum/computer_file/program/supermatter_monitor,
)
/**
* Science
*/
/obj/item/modular_computer/pda/science
name = "scientist PDA"
icon_state = "/obj/item/modular_computer/pda/science"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#000099#B347BC"
starting_programs = list(
/datum/computer_file/program/atmosscan,
/datum/computer_file/program/science,
/datum/computer_file/program/scipaper_program,
/datum/computer_file/program/signal_commander,
)
/obj/item/modular_computer/pda/roboticist
name = "roboticist PDA"
icon_state = "/obj/item/modular_computer/pda/roboticist"
greyscale_config = /datum/greyscale_config/tablet/stripe_double
greyscale_colors = "#484848#0099CC#D94927"
starting_programs = list(
/datum/computer_file/program/science,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/borg_monitor,
)
/obj/item/modular_computer/pda/geneticist
name = "geneticist PDA"
icon_state = "/obj/item/modular_computer/pda/geneticist"
greyscale_config = /datum/greyscale_config/tablet/stripe_double
greyscale_colors = "#FAFAFA#000099#0097CA"
starting_programs = list(
/datum/computer_file/program/records/medical,
)
/**
* Medical
*/
/obj/item/modular_computer/pda/medical
name = "medical PDA"
icon_state = "/obj/item/modular_computer/pda/medical"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#000099#3F96CC"
starting_programs = list(
/datum/computer_file/program/records/medical,
/datum/computer_file/program/robocontrol,
)
/obj/item/modular_computer/pda/medical/paramedic
name = "paramedic PDA"
icon_state = "/obj/item/modular_computer/pda/medical/paramedic"
greyscale_config = /datum/greyscale_config/tablet/stripe_double
greyscale_colors = "#28334D#000099#3F96CC"
starting_programs = list(
/datum/computer_file/program/records/medical,
/datum/computer_file/program/radar/lifeline,
)
/obj/item/modular_computer/pda/chemist
name = "chemist PDA"
icon_state = "/obj/item/modular_computer/pda/chemist"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#355FAC#EA6400"
/obj/item/modular_computer/pda/coroner
name = "coroner PDA"
icon_state = "/obj/item/modular_computer/pda/coroner"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#000099#1f2026"
starting_programs = list(
/datum/computer_file/program/records/medical,
)
/**
* Supply
*/
/obj/item/modular_computer/pda/cargo
name = "cargo technician PDA"
icon_state = "/obj/item/modular_computer/pda/cargo"
greyscale_colors = "#8b4c31#2c2e32"
stored_paper = 20
starting_programs = list(
/datum/computer_file/program/shipping,
/datum/computer_file/program/budgetorders,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/restock_tracker,
)
/obj/item/modular_computer/pda/shaftminer
name = "shaft miner PDA"
icon_state = "/obj/item/modular_computer/pda/shaftminer"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#927444#8b4c31#4c202d"
starting_programs = list(
/datum/computer_file/program/skill_tracker,
/datum/computer_file/program/raptordex,
)
/obj/item/modular_computer/pda/bitrunner
name = "bit runner PDA"
icon_state = "/obj/item/modular_computer/pda/bitrunner"
greyscale_colors = "#D6B328#6BC906"
starting_programs = list(
/datum/computer_file/program/arcade,
/datum/computer_file/program/skill_tracker,
)
/**
* Service
*/
/obj/item/modular_computer/pda/janitor
name = "janitor PDA"
icon_state = "/obj/item/modular_computer/pda/janitor"
greyscale_colors = "#933ea8#235AB2"
starting_programs = list(
/datum/computer_file/program/skill_tracker,
/datum/computer_file/program/radar/custodial_locator,
)
/obj/item/modular_computer/pda/chaplain
name = "chaplain PDA"
icon_state = "/obj/item/modular_computer/pda/chaplain"
greyscale_config = /datum/greyscale_config/tablet/chaplain
greyscale_colors = "#333333#D11818"
/obj/item/modular_computer/pda/lawyer
name = "lawyer PDA"
greyscale_colors = "#4C76C8#FFE243"
inserted_item = /obj/item/pen/fountain
starting_programs = list(
/datum/computer_file/program/records/security,
/datum/computer_file/program/faxbond, //BUBBER EDIT - Lawyers too shall have a taste of bureaucracy
)
/obj/item/modular_computer/pda/lawyer/Initialize(mapload)
. = ..()
for(var/datum/computer_file/program/messenger/messenger_app in stored_files)
messenger_app.spam_mode = TRUE
/obj/item/modular_computer/pda/botanist
name = "botanist PDA"
icon_state = "/obj/item/modular_computer/pda/botanist"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#50E193#E26F41#71A7CA"
/obj/item/modular_computer/pda/cook
name = "cook PDA"
icon_state = "/obj/item/modular_computer/pda/botanist"
greyscale_colors = "#FAFAFA#A92323"
/obj/item/modular_computer/pda/bar
name = "bartender PDA"
icon_state = "/obj/item/modular_computer/pda/bar"
greyscale_colors = "#333333#C7C7C7"
inserted_item = /obj/item/pen/fountain
/obj/item/modular_computer/pda/clown
name = "clown PDA"
icon = 'icons/obj/devices/modular_pda.dmi'
icon_state = "pda-clown"
post_init_icon_state = null
inserted_disk = /obj/item/disk/computer/virus/clown
greyscale_config = null
greyscale_colors = null
inserted_item = /obj/item/toy/crayon/rainbow
/obj/item/modular_computer/pda/clown/Initialize(mapload)
. = ..()
AddComponent(\
/datum/component/slippery,\
knockdown = 12 SECONDS,\
lube_flags = NO_SLIP_WHEN_WALKING,\
on_slip_callback = CALLBACK(src, PROC_REF(AfterSlip)),\
can_slip_callback = CALLBACK(src, PROC_REF(try_slip)),\
slot_whitelist = ITEM_SLOT_ID | ITEM_SLOT_BELT,\
)
AddComponent(/datum/component/wearertargeting/sitcomlaughter, CALLBACK(src, PROC_REF(after_sitcom_laugh)))
/// Returns whether the PDA can slip or not, if we have a wearer then check if they are in a position to slip someone.
/obj/item/modular_computer/pda/clown/proc/try_slip(mob/living/slipper, mob/living/slippee)
if(isnull(slipper))
return TRUE
if(!istype(slipper.get_item_by_slot(ITEM_SLOT_FEET), /obj/item/clothing/shoes/clown_shoes))
to_chat(slipper,span_warning("[src] failed to slip anyone. Perhaps I shouldn't have abandoned my legacy..."))
return FALSE
return TRUE
/obj/item/modular_computer/pda/clown/update_overlays()
. = ..()
. += mutable_appearance(icon, "pda_stripe_clown") // clowns have eyes that go over their screen, so it needs to be compiled last
/obj/item/modular_computer/pda/clown/proc/AfterSlip(mob/living/carbon/human/M)
if (istype(M) && (M.real_name != saved_identification))
var/obj/item/disk/computer/virus/clown/cart = inserted_disk
if(istype(cart) && cart.charges < 5)
cart.charges++
playsound(src,'sound/machines/ping.ogg',30,TRUE)
/obj/item/modular_computer/pda/clown/proc/after_sitcom_laugh(mob/victim)
victim.visible_message("[src] lets out a burst of laughter!")
/obj/item/modular_computer/pda/mime
name = "mime PDA"
inserted_disk = /obj/item/disk/computer/virus/mime
icon_state = "/obj/item/modular_computer/pda/mime"
greyscale_config = /datum/greyscale_config/tablet/mime
greyscale_colors = "#FAFAFA#EA3232"
inserted_item = /obj/item/toy/crayon/mime
starting_programs = list(
/datum/computer_file/program/emojipedia,
)
/obj/item/modular_computer/pda/mime/Initialize(mapload)
. = ..()
for(var/datum/computer_file/program/messenger/msg in stored_files)
msg.mime_mode = TRUE
msg.alert_silenced = TRUE
/obj/item/modular_computer/pda/curator
name = "curator PDA"
desc = "A small experimental microcomputer."
icon = 'icons/obj/devices/modular_pda.dmi'
icon_state = "pda-library"
post_init_icon_state = null
greyscale_config = null
greyscale_colors = null
inserted_item = /obj/item/pen/fountain
long_ranged = TRUE
starting_programs = list(
/datum/computer_file/program/emojipedia,
/datum/computer_file/program/newscaster,
/datum/computer_file/program/portrait_printer,
)
/* // SKYRAT EDIT REMOVAL BEGIN - Mutes the Curator's ringer on spawn
/obj/item/modular_computer/pda/curator/Initialize(mapload)
. = ..()
for(var/datum/computer_file/program/messenger/msg in stored_files)
msg.alert_silenced = TRUE
*/ // SKYRAT EDIT REMOVAL END
/obj/item/modular_computer/pda/psychologist
name = "psychologist PDA"
icon_state = "/obj/item/modular_computer/pda/psychologist"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#333333#000099#3F96CC"
starting_programs = list(
/datum/computer_file/program/records/medical,
/datum/computer_file/program/robocontrol,
)
/**
* No Department/Station Trait
*/
/obj/item/modular_computer/pda/assistant
name = "assistant PDA"
flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1
starting_programs = list(
/datum/computer_file/program/bounty_board,
)
/obj/item/modular_computer/pda/bridge_assistant
name = "bridge assistant PDA"
greyscale_colors = "#374f7e#a92323"
starting_programs = list(
/datum/computer_file/program/status,
)
/obj/item/modular_computer/pda/veteran_advisor
name = "security advisor PDA"
greyscale_colors = "#EA3232#FFD700"
inserted_item = /obj/item/pen/fountain
starting_programs = list(
/datum/computer_file/program/records/security,
/datum/computer_file/program/coupon, //veteran discount
/datum/computer_file/program/skill_tracker,
)
/obj/item/modular_computer/pda/human_ai
name = "modular interface"
icon = 'icons/obj/devices/modular_pda.dmi'
icon_state = "pda-silicon-human"
post_init_icon_state = null
base_icon_state = "pda-silicon-human"
greyscale_config = null
greyscale_colors = null
has_light = FALSE //parity with borg PDAs
comp_light_luminosity = 0
inserted_item = null
has_pda_programs = FALSE
starting_programs = list(
/datum/computer_file/program/messenger,
/datum/computer_file/program/secureye/human_ai,
/datum/computer_file/program/alarm_monitor,
/datum/computer_file/program/status,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/borg_monitor,
)
/obj/item/modular_computer/pda/pun_pun
name = "monkey PDA"
greyscale_colors = "#ffcc66#914800"
starting_programs = list(
/datum/computer_file/program/bounty_board,
/datum/computer_file/program/emojipedia,
)
/**
* Non-roles
*/
/obj/item/modular_computer/pda/syndicate
name = "military PDA"
greyscale_colors = "#891417#80FF80"
saved_identification = "John Doe"
saved_job = "Citizen"
device_theme = PDA_THEME_SYNDICATE
/obj/item/modular_computer/pda/syndicate/Initialize(mapload)
. = ..()
var/datum/computer_file/program/messenger/msg = locate() in stored_files
if(msg)
msg.invisible = TRUE
/obj/item/modular_computer/pda/clear
name = "clear PDA"
icon = 'icons/obj/devices/modular_pda.dmi'
icon_state = "pda-clear"
post_init_icon_state = null
greyscale_config = null
greyscale_colors = null
long_ranged = TRUE
/obj/item/modular_computer/pda/clear/Initialize(mapload)
. = ..()
var/datum/computer_file/program/themeify/theme_app = locate() in stored_files
if(theme_app)
for(var/theme_key in GLOB.pda_name_to_theme - GLOB.default_pda_themes)
LAZYADD(theme_app.imported_themes, theme_key)
/obj/item/modular_computer/pda/clear/get_messenger_ending()
return "Sent from my crystal PDA"