Files
Bubberstation/code/datums/id_trim/centcom.dm
Jacquerel 6baa43748d Certain ID trims affect secbot response (#79980)
## About The Pull Request

A prior refactor of how ID cards worked removed (without commentary?)
the long-previously-existing behaviour that Agent IDs cause a
subtraction from the level of suspicion that security bots see from you.
I have not only restored this behaviour, but applied it to a handful of
other ID cards (based on trim).

When Beepsky looks at you he will make an assessment based on various
factors controlled by his bot settings:

- If Beepsky is set to check ID and your identity is concealed (you
appear as "Unknown") add 4 points.
- If Beepsky is set to check Weapons and you are holding a restricted
weapon without a permit, add 4 points.
- If Beepsky is set to check Weapons and you are wearing a restricted
weapon on your belt or back without a permit, add 2 points.
- If Beepsky is set to check records and you are set to Arrest, add 5
points.
- If Beepsky is set to check records and you have some other
non-innocent status, add 2 points.
- If you are wearing a wizard's hat, add 2 points.
- If you are not human, add 1 point (police are racist).
- If you are loyalty implanted, subtract 1 point.

Factors added or restored in this PR based on your ID now are:

- If you are wearing an Agent ID, subtract 5 points.
- If you are wearing a Cybercop ID, subtract 1 point.
- If you are wearing a Centcomm ID, subtract 10 points.
- If you are wearing an Admin ID, subtract infinite points.
- If you are wearing a prisoner ID, add 1 point.
- If you are wearing a Syndicate or Battlecruiser ID, add 5 or 10
points.

If Beepsky is _emagged_ then he will view all targets as having 10
threat, regardless of their ID card.
If you complete this process with >4 points he will attempt to arrest
you.

The upshot of my changes are:
Wearing an Agent ID card will cause Beepsky to overlook the fact that
you are carrying a gun in your hands without a permit, unless you are
also set to arrest.
Wearing an Agent ID card will cause Beepsky to overlook the fact that
you are set to arrest, unless you are carrying a gun in your hands.
Wearing a prisoner ID while not human will cause Beepsky to try and
arrest you if you have a weapon on your belt or back (if he is set to
care about weapons permits or unless you have one).
Wearing a centcomm ID card will cause Beepsky to treat you as above the
law in basically all circumstances, up to and including when you try and
beat him to death. He will simply sit there and take it.

In addition to this, this information forwarded to AI is now also
available to player secbots upon examine.
Players can't become secbots very easily because you can't upload PAIs
into them or enable their sentience in the panel, but it sometimes
happens via random event or admin intervention.

## Why It's Good For The Game

I think this was removed by mistake? It wasn't included in the changelog
and everyone I talked to thought it was still true.
It's a fun feature which makes agent IDs marginally more useful. 
I think Beepsky and pals judging you based on your job makes sense, even
if it is mostly applied to fluff roles.

## Changelog

🆑
add: Agent IDs once more trick Beepsky into treating you more leniently.
add: Prisoner IDs make Beepsky treat you somewhat more suspiciously, as
do Syndicate IDs. Wearing a Centcomm ID means that Beepsky is aware that
you are above the law.
add: Player-controlled security bots can view someone's assessed threat
level by examining them.
/🆑
2023-12-01 00:54:22 +01:00

203 lines
7.1 KiB
Plaintext

/// Trim for basic Centcom cards.
/datum/id_trim/centcom
access = list(ACCESS_CENT_GENERAL)
assignment = JOB_CENTCOM
trim_state = "trim_centcom"
sechud_icon_state = SECHUD_CENTCOM
department_color = COLOR_CENTCOM_BLUE
subdepartment_color = COLOR_CENTCOM_BLUE
threat_modifier = -10 // Centcom are legally allowed to do whatever they want
/// Trim for Centcom VIPs
/datum/id_trim/centcom/vip
access = list(ACCESS_CENT_GENERAL)
assignment = JOB_CENTCOM_VIP
/// Trim for Centcom Custodians.
/datum/id_trim/centcom/custodian
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)
assignment = JOB_CENTCOM_CUSTODIAN
trim_state = "trim_janitor"
department_color = COLOR_CENTCOM_BLUE
subdepartment_color = COLOR_SERVICE_LIME
/// Trim for Centcom Thunderdome Overseers.
/datum/id_trim/centcom/thunderdome_overseer
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER)
assignment = JOB_CENTCOM_THUNDERDOME_OVERSEER
/// Trim for Centcom Officials.
/datum/id_trim/centcom/official
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_WEAPONS)
assignment = JOB_CENTCOM_OFFICIAL
/// Trim for Centcom Interns.
/datum/id_trim/centcom/intern
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_WEAPONS)
assignment = "CentCom Intern"
/// Trim for Centcom Head Interns. Different assignment, common station access added on.
/datum/id_trim/centcom/intern/head
assignment = "CentCom Head Intern"
/datum/id_trim/centcom/intern/head/New()
. = ..()
access |= SSid_access.get_flag_access_list(ACCESS_FLAG_COMMON)
/// Trim for Bounty Hunters hired by centcom.
/datum/id_trim/centcom/bounty_hunter
access = list(ACCESS_CENT_GENERAL)
assignment = "Bounty Hunter"
/// Trim for Centcom Bartenders.
/datum/id_trim/centcom/bartender
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR)
assignment = JOB_CENTCOM_BARTENDER
/// Trim for Centcom Medical Officers.
/datum/id_trim/centcom/medical_officer
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_MEDICAL)
assignment = JOB_CENTCOM_MEDICAL_DOCTOR
/// Trim for Centcom Research Officers.
/datum/id_trim/centcom/research_officer
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_TELEPORTER, ACCESS_CENT_STORAGE)
assignment = JOB_CENTCOM_RESEARCH_OFFICER
/// Trim for Centcom Specops Officers. All Centcom and Station Access.
/datum/id_trim/centcom/specops_officer
assignment = JOB_CENTCOM_SPECIAL_OFFICER
/datum/id_trim/centcom/specops_officer/New()
. = ..()
access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))
/// Trim for Centcom (Soviet) Admirals. All Centcom and Station Access.
/datum/id_trim/centcom/admiral
assignment = JOB_CENTCOM_ADMIRAL
/datum/id_trim/centcom/admiral/New()
. = ..()
access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))
/// Trim for Centcom Commanders. All Centcom and Station Access.
/datum/id_trim/centcom/commander
assignment = JOB_CENTCOM_COMMANDER
/datum/id_trim/centcom/commander/New()
. = ..()
access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))
/// Trim for Deathsquad officers. All Centcom and Station Access.
/datum/id_trim/centcom/deathsquad
assignment = JOB_ERT_DEATHSQUAD
trim_state = "trim_deathcommando"
sechud_icon_state = SECHUD_DEATH_COMMANDO
/datum/id_trim/centcom/deathsquad/New()
. = ..()
access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))
/// Trim for generic ERT interns. No universal ID card changing access.
/datum/id_trim/centcom/ert
assignment = "Emergency Response Team Intern"
/datum/id_trim/centcom/ert/New()
. = ..()
access = list(ACCESS_CENT_GENERAL) | (SSid_access.get_region_access_list(list(REGION_ALL_STATION)) - ACCESS_CHANGE_IDS)
/// Trim for ERT Commanders. All station and centcom access.
/datum/id_trim/centcom/ert/commander
assignment = JOB_ERT_COMMANDER
trim_state = "trim_ert_commander"
sechud_icon_state = SECHUD_EMERGENCY_RESPONSE_TEAM_COMMANDER
/datum/id_trim/centcom/ert/commander/New()
. = ..()
access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))
/// Trim for generic ERT seccies. No universal ID card changing access.
/datum/id_trim/centcom/ert/security
assignment = JOB_ERT_OFFICER
trim_state = "trim_securityofficer"
subdepartment_color = COLOR_SECURITY_RED
sechud_icon_state = SECHUD_SECURITY_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/security/New()
. = ..()
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING) | (SSid_access.get_region_access_list(list(REGION_ALL_STATION)) - ACCESS_CHANGE_IDS)
/// Trim for generic ERT engineers. No universal ID card changing access.
/datum/id_trim/centcom/ert/engineer
assignment = JOB_ERT_ENGINEER
trim_state = "trim_stationengineer"
subdepartment_color = COLOR_ENGINEERING_ORANGE
sechud_icon_state = SECHUD_ENGINEERING_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/engineer/New()
. = ..()
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE) | (SSid_access.get_region_access_list(list(REGION_ALL_STATION)) - ACCESS_CHANGE_IDS)
/// Trim for generic ERT medics. No universal ID card changing access.
/datum/id_trim/centcom/ert/medical
assignment = JOB_ERT_MEDICAL_DOCTOR
trim_state = "trim_medicaldoctor"
subdepartment_color = COLOR_MEDICAL_BLUE
sechud_icon_state = SECHUD_MEDICAL_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/medical/New()
. = ..()
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING) | (SSid_access.get_region_access_list(list(REGION_ALL_STATION)) - ACCESS_CHANGE_IDS)
/// Trim for generic ERT chaplains. No universal ID card changing access.
/datum/id_trim/centcom/ert/chaplain
assignment = JOB_ERT_CHAPLAIN
trim_state = "trim_chaplain"
subdepartment_color = "#58C800"
sechud_icon_state = SECHUD_RELIGIOUS_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/chaplain/New()
. = ..()
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING) | (SSid_access.get_region_access_list(list(REGION_ALL_STATION)) - ACCESS_CHANGE_IDS)
/// Trim for generic ERT janitors. No universal ID card changing access.
/datum/id_trim/centcom/ert/janitor
assignment = JOB_ERT_JANITOR
trim_state = "trim_ert_janitor"
subdepartment_color = COLOR_SERVICE_LIME
sechud_icon_state = SECHUD_JANITORIAL_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/janitor/New()
. = ..()
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING) | (SSid_access.get_region_access_list(list(REGION_ALL_STATION)) - ACCESS_CHANGE_IDS)
/// Trim for generic ERT clowns. No universal ID card changing access.
/datum/id_trim/centcom/ert/clown
assignment = JOB_ERT_CLOWN
trim_state = "trim_clown"
subdepartment_color = COLOR_MAGENTA
sechud_icon_state = SECHUD_ENTERTAINMENT_RESPONSE_OFFICER
/datum/id_trim/centcom/ert/clown/New()
. = ..()
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING) | (SSid_access.get_region_access_list(list(REGION_ALL_STATION)) - ACCESS_CHANGE_IDS)
/datum/id_trim/centcom/ert/militia
assignment = "Frontier Militia"
/datum/id_trim/centcom/ert/militia/general
assignment = "Frontier Militia General"