From 04fd2b0a8a70ed0cc375d97e4ec3006c708ec2b8 Mon Sep 17 00:00:00 2001 From: ArrisFairburne Date: Fri, 11 Apr 2025 02:20:59 -0400 Subject: [PATCH] Synth brain PDAs now have departmental PDA apps pre-installed (#3463) ## About The Pull Request Synth brains now start with your department's apps pre-installed. For example, Scientist synths now start with NT Science Hub. They also now have double the storage space compared to the basic PDA. ## Why It's Good For The Game Convenience. Also, synth PDAs have sort of existed in a weird limbo where (at least, from my point of view having talked to some others) most synth players just don't actually use one of the defining features of their race because normal PDAs are largely better and more convenient, hopefully this change emphasizes their abilities. The doubled brain storage space is just so that synth brain PDAs can comfortably house whatever programs come with being a dept. head. Balance wise, I doubt it will affect anything (what could you even do with the extra storage space, short of the dept. head apps? basic crew apps fit comfortably on the basic PDA limit, synths can't be emagged for expensive syndie apps, and synths can't store files on their brain via disks). ## Proof Of Testing (image taken after I spawned as RD; this is the synth brain PDA) ![image](https://github.com/user-attachments/assets/9a4dc579-f5a3-4df2-ad39-17aace34a250) ## Changelog :cl: qol: Synthetic crew now spawn in with PDA apps relevant to their work station. bal: Synthetic crew brain PDAs now have 128 max capacity points (was previously 64) /:cl: --- .../internal_computer/internal_computer.dm | 18 +++- .../code/controllers/subsystem/job.dm | 88 +++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/modular_skyrat/modules/synths/code/bodyparts/internal_computer/internal_computer.dm b/modular_skyrat/modules/synths/code/bodyparts/internal_computer/internal_computer.dm index 3278ee98bfd..0318373fcd9 100644 --- a/modular_skyrat/modules/synths/code/bodyparts/internal_computer/internal_computer.dm +++ b/modular_skyrat/modules/synths/code/bodyparts/internal_computer/internal_computer.dm @@ -9,7 +9,7 @@ max_idle_programs = 3 - max_capacity = 64 + max_capacity = parent_type::max_capacity * 2 /obj/item/modular_computer/pda/synth/Initialize(mapload) . = ..() @@ -18,6 +18,22 @@ if(!istype(loc, /obj/item/organ/brain/synth)) return INITIALIZE_HINT_QDEL + //this code has to be called at a delay because the required data (synth owner's job) is null when initialized + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/modular_computer/pda/synth, post_initialize)), 1 DECISECONDS) + +/obj/item/modular_computer/pda/synth/proc/post_initialize() + var/obj/item/organ/brain/synth/brain_loc = loc + var/mob/living/carbon/owner = brain_loc?.bodypart_owner?.owner + if(istype(owner)) + var/obj/item/modular_computer/pda/job_pda = SSjob.get_pda_type_by_job(owner.job) + if(istype(job_pda)) + starting_programs += job_pda.starting_programs + var/obj/item/modular_computer/pda/heads/head_pda = job_pda + if(istype(head_pda)) + starting_programs += head_pda.head_programs + install_default_programs() + QDEL_NULL(job_pda) + /* Action for opening the synthbrain computer */ /datum/action/item_action/synth/open_internal_computer name = "Open persocom emulation" diff --git a/modular_zubbers/code/controllers/subsystem/job.dm b/modular_zubbers/code/controllers/subsystem/job.dm index 46524fc1250..45d4346b466 100644 --- a/modular_zubbers/code/controllers/subsystem/job.dm +++ b/modular_zubbers/code/controllers/subsystem/job.dm @@ -10,3 +10,91 @@ JOB_HEAD_OF_SECURITY = 8, JOB_BLUESHIELD = 9 ) + +/datum/controller/subsystem/job/proc/get_pda_type_by_job(job_name) + switch(job_name) + if(JOB_ASSISTANT) + return new /obj/item/modular_computer/pda + if(JOB_PRISONER) + return null + if(JOB_CAPTAIN) // HEADS + return new /obj/item/modular_computer/pda/heads/captain + if(JOB_CHIEF_ENGINEER) + return new /obj/item/modular_computer/pda/heads/ce + if(JOB_CHIEF_MEDICAL_OFFICER) + return new /obj/item/modular_computer/pda/heads/cmo + if(JOB_HEAD_OF_PERSONNEL) + return new /obj/item/modular_computer/pda/heads/hop + if(JOB_HEAD_OF_SECURITY) + return new /obj/item/modular_computer/pda/heads/hos + if(JOB_QUARTERMASTER) + return new /obj/item/modular_computer/pda/heads/quartermaster + if(JOB_RESEARCH_DIRECTOR) + return new /obj/item/modular_computer/pda/heads/rd + if(JOB_BLUESHIELD) + return new /obj/item/modular_computer/pda/blueshield + if(JOB_NT_REP) + return new /obj/item/modular_computer/pda/nanotrasen_consultant + if(JOB_WARDEN) // SEC + return new /obj/item/modular_computer/pda/warden + if(JOB_DETECTIVE) + return new /obj/item/modular_computer/pda/detective + if(JOB_SECURITY_OFFICER) + return new /obj/item/modular_computer/pda/security + if(JOB_SECURITY_OFFICER_MEDICAL) + return new /obj/item/modular_computer/pda/security + if(JOB_CORRECTIONS_OFFICER) + return new /obj/item/modular_computer/pda/security + if(JOB_STATION_ENGINEER) //ENGI + return new /obj/item/modular_computer/pda/engineering + if(JOB_ATMOSPHERIC_TECHNICIAN) + return new /obj/item/modular_computer/pda/atmos + if(JOB_ENGINEERING_GUARD) + return new /obj/item/modular_computer/pda/engineering + if(JOB_TELECOMMS_SPECIALIST) + return new /obj/item/modular_computer/pda/telecomms + if(JOB_SCIENTIST) // SCI + return new /obj/item/modular_computer/pda/science + if(JOB_ROBOTICIST) + return new /obj/item/modular_computer/pda/roboticist + if(JOB_GENETICIST) + return new /obj/item/modular_computer/pda/geneticist + if(JOB_SCIENCE_GUARD) + return new /obj/item/modular_computer/pda/science + if(JOB_CARGO_TECHNICIAN) // CARGO + return new /obj/item/modular_computer/pda/cargo + if(JOB_SHAFT_MINER) + return new /obj/item/modular_computer/pda/shaftminer + if(JOB_BITRUNNER) + return new /obj/item/modular_computer/pda/bitrunner + if(JOB_CUSTOMS_AGENT) + return new /obj/item/modular_computer/pda/cargo + if(JOB_BARTENDER) // SERVICE + return new /obj/item/modular_computer/pda/bar + if(JOB_BOTANIST) + return new /obj/item/modular_computer/pda/botanist + if(JOB_COOK) + return new /obj/item/modular_computer/pda/cook + if(JOB_CHEF) + return new /obj/item/modular_computer/pda/cook + if(JOB_JANITOR) + return new /obj/item/modular_computer/pda/janitor + if(JOB_CLOWN) + return new /obj/item/modular_computer/pda/clown + if(JOB_MIME) + return new /obj/item/modular_computer/pda/mime + if(JOB_CURATOR) + return new /obj/item/modular_computer/pda/curator + if(JOB_LAWYER) + return new /obj/item/modular_computer/pda/lawyer + if(JOB_CHAPLAIN) + return new /obj/item/modular_computer/pda/chaplain + if(JOB_PSYCHOLOGIST) + return new /obj/item/modular_computer/pda/psychologist + if(JOB_BARBER) + return new /obj/item/modular_computer/pda + if(JOB_BOUNCER) + return new /obj/item/modular_computer/pda/bar + else + return null +