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
🆑
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)
/🆑
This commit is contained in:
ArrisFairburne
2025-04-10 23:20:59 -07:00
committed by GitHub
parent eaa6352aff
commit 04fd2b0a8a
2 changed files with 105 additions and 1 deletions
@@ -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"
@@ -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