[MIRROR] NEW TRAIT ROLE: Veteran Advisor (#26667)

* NEW TRAIT ROLE: Veteran Advisor

* Oh, right

---------

Co-authored-by: vinylspiders <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
This commit is contained in:
SkyratBot
2024-03-13 06:32:59 +01:00
committed by GitHub
co-authored by vinylspiders Useroth
parent 8a4df2e7f1
commit 8196e26aff
20 changed files with 218 additions and 45 deletions
+1
View File
@@ -124,6 +124,7 @@
#define SECHUD_SCIENTIST "hudscientist"
#define SECHUD_SHAFT_MINER "hudshaftminer"
#define SECHUD_STATION_ENGINEER "hudstationengineer"
#define SECHUD_VETERAN_ADVISOR "hudveteranadvisor"
#define SECHUD_VIROLOGIST "hudvirologist"
#define SECHUD_WARDEN "hudwarden"
+6 -4
View File
@@ -49,6 +49,7 @@
#define JOB_CHIEF_ENGINEER "Chief Engineer"
#define JOB_CHIEF_MEDICAL_OFFICER "Chief Medical Officer"
#define JOB_BRIDGE_ASSISTANT "Bridge Assistant"
#define JOB_VETERAN_ADVISOR "Veteran Security Advisor"
//Silicon
#define JOB_AI "AI"
#define JOB_CYBORG "Cyborg"
@@ -180,10 +181,11 @@
#define JOB_DISPLAY_ORDER_ROBOTICIST 33
#define JOB_DISPLAY_ORDER_GENETICIST 34
#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 35
#define JOB_DISPLAY_ORDER_WARDEN 36
#define JOB_DISPLAY_ORDER_DETECTIVE 37
#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 38
#define JOB_DISPLAY_ORDER_PRISONER 39
#define JOB_DISPLAY_ORDER_VETERAN_ADVISOR 36
#define JOB_DISPLAY_ORDER_WARDEN 37
#define JOB_DISPLAY_ORDER_DETECTIVE 38
#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 39
#define JOB_DISPLAY_ORDER_PRISONER 40
#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 100 //SKYRAT EDIT ADDITON
#define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 101 //SKYRAT EDIT ADDITON
#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 102 //SKYRAT EDIT ADDITON
+46
View File
@@ -426,3 +426,49 @@
to_chat(victim, "[span_name("[name]")] exclaims, \"[span_robot("[beepskys_cry]")]")
if(victim.client?.prefs.read_preference(/datum/preference/toggle/enable_runechat))
victim.create_chat_message(src, raw_message = beepskys_cry, spans = list("robotic"))
// Used by Veteran Security Advisor job.
/datum/brain_trauma/special/ptsd
name = "Combat PTSD"
desc = "The patient is experiencing PTSD stemming from past combat exposure, resulting in a lack of emotions. Additionally, they are experiencing mild hallucinations."
scan_desc = "PTSD"
gain_text = span_warning("You're thrust back into the chaos of past! Explosions! Gunfire! Emotions, gone AWOL!")
lose_text = span_notice("You feel flashbacks of past fade, as your emotions return and mind clear.")
resilience = TRAUMA_RESILIENCE_ABSOLUTE
can_gain = TRUE
random_gain = FALSE
/// Our cooldown declare for causing hallucinations
COOLDOWN_DECLARE(ptsd_hallucinations)
var/list/ptsd_hallucinations_list = list(
/datum/hallucination/fake_sound/normal/boom,
/datum/hallucination/fake_sound/normal/distant_boom,
/datum/hallucination/stray_bullet,
/datum/hallucination/battle/gun/disabler,
/datum/hallucination/battle/gun/laser,
/datum/hallucination/battle/bomb,
/datum/hallucination/battle/e_sword,
/datum/hallucination/battle/harm_baton,
/datum/hallucination/battle/stun_prod,
)
/datum/brain_trauma/special/ptsd/on_life(seconds_per_tick, times_fired)
if(owner.stat != CONSCIOUS)
return
if(!COOLDOWN_FINISHED(src, ptsd_hallucinations))
return
owner.cause_hallucination(pick(ptsd_hallucinations_list), "Caused by The Combat PTSD brain trauma")
COOLDOWN_START(src, ptsd_hallucinations, rand(10 SECONDS, 10 MINUTES))
/datum/brain_trauma/special/ptsd/on_gain()
owner.add_mood_event("combat_ptsd", /datum/mood_event/desentized)
owner.mob_mood?.mood_modifier -= 1 //Basically nothing can change your mood
owner.mob_mood?.sanity_level = SANITY_DISTURBED //Makes sanity on a unstable level unless cured
..()
/datum/brain_trauma/special/ptsd/on_lose()
owner.clear_mood_event("combat_ptsd")
owner.mob_mood?.mood_modifier += 1
owner.mob_mood?.sanity_level = SANITY_GREAT
return ..()
+30
View File
@@ -1183,6 +1183,36 @@
)
job = /datum/job/station_engineer
/datum/id_trim/job/veteran_advisor
assignment = "Veteran Security Advisor"
trim_state = "trim_veteranadvisor"
department_color = COLOR_SECURITY_RED
subdepartment_color = COLOR_COMMAND_BLUE
sechud_icon_state = SECHUD_VETERAN_ADVISOR
minimal_access = list(
ACCESS_COMMAND,
ACCESS_BRIG,
ACCESS_BRIG_ENTRANCE,
ACCESS_COURT,
ACCESS_MECH_SECURITY,
ACCESS_MINERAL_STOREROOM,
ACCESS_SECURITY,
ACCESS_WEAPONS,
)
extra_access = list()
template_access = list()
job = /datum/job/veteran_advisor
/datum/id_trim/job/veteran_advisor/refresh_trim_access()
. = ..()
if(!.)
return
// Config check for if sec has maint access.
if(CONFIG_GET(flag/security_has_maint_access))
access |= list(ACCESS_MAINT_TUNNELS)
/datum/id_trim/job/virologist
assignment = "Virologist"
trim_state = "trim_virologist"
@@ -483,3 +483,9 @@
/datum/mood_event/all_nighter
description = "I didn't sleep at all last night. I'm exhausted."
mood_change = -5
//Used by the Veteran Advisor trait job
/datum/mood_event/desentized
description = "Nothing will ever rival with what I seen in the past..."
mood_change = -3
special_screen_obj = "mood_desentized"
+15
View File
@@ -162,6 +162,21 @@
new /obj/item/reagent_containers/cup/coffeepot(picked_turf)
new /obj/item/storage/box/coffeepack(picked_turf)
/datum/station_trait/job/veteran_advisor
name = "Veteran Advisor"
button_desc = "Sign up to become a DISABLED but hard boiled Veteran Advisor of Nanotrasen Security Force. Advise HoS and Captain, train Officers, all while fighting your PTSD."
weight = 2
report_message = "Veteran Security Advisor has been assigned to your station to help with Security matters."
show_in_report = TRUE
can_roll_antag = CAN_ROLL_PROTECTED
job_to_add = /datum/job/veteran_advisor
/* SKYRAT EDIT -- REMOVAL -- We handle the lobby a bit differently for time being
/datum/station_trait/job/veteran_advisor/on_lobby_button_update_overlays(atom/movable/screen/lobby/button/sign_up/lobby_button, list/overlays)
. = ..()
overlays += "veteran_advisor"
*/
#undef CAN_ROLL_ALWAYS
#undef CAN_ROLL_PROTECTED
#undef CAN_ROLL_NEVER
@@ -250,6 +250,14 @@ GLOBAL_LIST_INIT(channel_tokens, list(
worn_icon_state = "com_headset"
keyslot = /obj/item/encryptionkey/heads/hos
/obj/item/radio/headset/heads/hos/advisor
name = "\proper the veteran security advisor headset"
desc = "The headset of the man who was in charge of keeping order and protecting the station..."
icon_state = "com_headset"
worn_icon_state = "com_headset"
keyslot = /obj/item/encryptionkey/heads/hos
command = FALSE
/obj/item/radio/headset/heads/hos/alt
name = "\proper the head of security's bowman headset"
desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs."
+9
View File
@@ -135,6 +135,15 @@
strip_delay = 60
dog_fashion = null
/obj/item/clothing/head/soft/veteran
name = "veteran cap"
desc = "It's a robust baseball hat in tasteful black colour with a golden connotation to \"REMEMBER\"."
icon_state = "veteransoft"
soft_type = "veteran"
armor_type = /datum/armor/cosmetic_sec
strip_delay = 60
dog_fashion = null
/obj/item/clothing/head/soft/paramedic
name = "paramedic cap"
desc = "It's a baseball hat with a dark turquoise color and a reflective cross on the top."
@@ -0,0 +1,76 @@
/datum/job/veteran_advisor
title = JOB_VETERAN_ADVISOR
description = "Advise HoS, and Captain on matters of Security. Train green Officers. \
Lay back in your wheelchair and say \"I told you\" to the HoS when all of the station collapses."
auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
department_head = list(JOB_HEAD_OF_SECURITY)
faction = FACTION_STATION
total_positions = 0
spawn_positions = 0
supervisors = SUPERVISOR_HOS
minimal_player_age = 7
exp_requirements = 6000 //100 HOURS! We want really hard boiled people
exp_required_type = EXP_TYPE_CREW
exp_required_type_department = EXP_TYPE_SECURITY
exp_granted_type = EXP_TYPE_CREW
config_tag = "VETERAN_ADVISOR"
outfit = /datum/outfit/job/veteran_advisor
plasmaman_outfit = /datum/outfit/plasmaman/security
paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SEC
liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
display_order = JOB_DISPLAY_ORDER_VETERAN_ADVISOR
departments_list = list(/datum/job_department/security)
family_heirlooms = list(/obj/item/plaque)
mail_goodies = list(
/obj/item/clothing/accessory/medal/conduct = 1,
/obj/item/instrument/trumpet = 5,
/obj/item/storage/fancy/cigarettes/cigars = 10,
)
rpg_title = "Royal Advisor"
allow_bureaucratic_error = FALSE
job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS
/datum/job/veteran_advisor/get_roundstart_spawn_point() //Spawning at Brig where Officers spawn
if (length(GLOB.start_landmarks_list["Security Officer"]))
return pick(GLOB.start_landmarks_list["Security Officer"])
return ..()
/datum/job/veteran_advisor/after_spawn(mob/living/spawned, client/player_client)
. = ..()
var/mob/living/carbon/veteran = spawned
spawned.add_quirk(/datum/quirk/paraplegic) //Even in 2300s veterans are getting it bad
if(veteran)
veteran.gain_trauma(/datum/brain_trauma/special/ptsd) //War, war never changes...
/datum/outfit/job/veteran_advisor
name = "Veteran Security Advisor"
jobtype = /datum/job/veteran_advisor
id_trim = /datum/id_trim/job/veteran_advisor
backpack_contents = list(
/obj/item/modular_computer/pda/veteran_advisor = 1,
/obj/item/storage/fancy/cigarettes/cigars = 1,
/obj/item/lighter = 1,
/obj/item/clothing/accessory/medal/bronze_heart = 1,
)
uniform = /obj/item/clothing/under/rank/security/officer/formal
head = /obj/item/clothing/head/soft/veteran
mask = /obj/item/clothing/mask/cigarette/cigar
suit = /obj/item/clothing/suit/jacket/trenchcoat
belt = /obj/item/storage/belt/holster/detective/full/ert //M1911 pistol
ears = /obj/item/radio/headset/heads/hos/advisor
glasses = /obj/item/clothing/glasses/eyepatch
shoes = /obj/item/clothing/shoes/jackboots
l_pocket = /obj/item/coin/antagtoken
r_pocket = /obj/item/melee/baton/telescopic
r_hand = /obj/item/cane
implants = list(/obj/item/implant/mindshield)
@@ -433,6 +433,17 @@
/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/crew_manifest,
/datum/computer_file/program/coupon, //veteran discount
/datum/computer_file/program/skill_tracker,
)
/**
* Non-roles
*/
Binary file not shown.

Before

Width:  |  Height:  |  Size: 668 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

@@ -1,53 +1,33 @@
/obj/item/reagent_containers/cup/soup_pot/material
icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi'
custom_materials = null // We're going to apply custom materials when this baby is actually made
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
// A few random preset types as well
/obj/item/reagent_containers/cup/soup_pot/material/fake_copper
/obj/item/reagent_containers/cup/soup_pot/material/fake_copper/Initialize(mapload)
. = ..()
set_custom_materials(list(GET_MATERIAL_REF(/datum/material/copporcitite) = SHEET_MATERIAL_AMOUNT))
custom_materials = list(/datum/material/copporcitite=SHEET_MATERIAL_AMOUNT)
/obj/item/reagent_containers/cup/soup_pot/material/fake_brass
/obj/item/reagent_containers/cup/soup_pot/material/fake_brass/Initialize(mapload)
. = ..()
set_custom_materials(list(GET_MATERIAL_REF(/datum/material/brussite) = SHEET_MATERIAL_AMOUNT))
custom_materials = list(/datum/material/brussite=SHEET_MATERIAL_AMOUNT)
/obj/item/reagent_containers/cup/soup_pot/material/fake_tin
/obj/item/reagent_containers/cup/soup_pot/material/fake_tin/Initialize(mapload)
. = ..()
set_custom_materials(list(GET_MATERIAL_REF(/datum/material/tinumium) = SHEET_MATERIAL_AMOUNT))
custom_materials = list(/datum/material/tinumium=SHEET_MATERIAL_AMOUNT)
// Oven Trays
/obj/item/plate/oven_tray/material
desc = "Time to bake hardtack!"
icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi'
custom_materials = null // We're going to apply custom materials when this baby is actually made
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
fragile = FALSE
// A few random preset types as well
/obj/item/plate/oven_tray/material/fake_copper
/obj/item/plate/oven_tray/material/fake_copper/Initialize(mapload)
. = ..()
set_custom_materials(list(GET_MATERIAL_REF(/datum/material/copporcitite) = SHEET_MATERIAL_AMOUNT))
custom_materials = list(/datum/material/copporcitite=SHEET_MATERIAL_AMOUNT)
/obj/item/plate/oven_tray/material/fake_brass
/obj/item/plate/oven_tray/material/fake_brass/Initialize(mapload)
. = ..()
set_custom_materials(list(GET_MATERIAL_REF(/datum/material/brussite) = SHEET_MATERIAL_AMOUNT))
custom_materials = list(/datum/material/brussite=SHEET_MATERIAL_AMOUNT)
/obj/item/plate/oven_tray/material/fake_tin
/obj/item/plate/oven_tray/material/fake_tin/Initialize(mapload)
. = ..()
set_custom_materials(list(GET_MATERIAL_REF(/datum/material/tinumium) = SHEET_MATERIAL_AMOUNT))
custom_materials = list(/datum/material/tinumium=SHEET_MATERIAL_AMOUNT)
@@ -41,37 +41,24 @@
desc = "A glass bowl that is capable of carrying things."
icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "glass_bowl"
custom_materials = null
custom_materials = list(/datum/material/glass=SHEET_MATERIAL_AMOUNT)
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
/obj/item/reagent_containers/cup/bowl/blowing_glass/Initialize(mapload)
. = ..()
set_custom_materials(list(GET_MATERIAL_REF(/datum/material/glass) = SHEET_MATERIAL_AMOUNT))
/obj/item/reagent_containers/cup/beaker/large/blowing_glass
name = "glass cup"
desc = "A glass cup that is capable of carrying liquids."
icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "glass_cup"
custom_materials = null
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
/obj/item/reagent_containers/cup/beaker/large/blowing_glass/Initialize(mapload)
. = ..()
set_custom_materials(list(GET_MATERIAL_REF(/datum/material/glass) = SHEET_MATERIAL_AMOUNT))
/obj/item/plate/blowing_glass
name = "glass plate"
desc = "A glass plate that is capable of carrying things."
icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "glass_plate"
custom_materials = null
custom_materials = list(/datum/material/glass=SHEET_MATERIAL_AMOUNT)
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
/obj/item/plate/blowing_glass/Initialize(mapload)
. = ..()
set_custom_materials(list(GET_MATERIAL_REF(/datum/material/glass) = SHEET_MATERIAL_AMOUNT))
/obj/item/glassblowing/molten_glass
name = "molten glass"
desc = "A glob of molten glass, ready to be shaped into art."
+1
View File
@@ -4351,6 +4351,7 @@
#include "code\modules\jobs\job_types\spawner\zombie.dm"
#include "code\modules\jobs\job_types\station_trait\bridge_assistant.dm"
#include "code\modules\jobs\job_types\station_trait\cargo_gorilla.dm"
#include "code\modules\jobs\job_types\station_trait\veteran_advisor.dm"
#include "code\modules\keybindings\bindings_atom.dm"
#include "code\modules\keybindings\bindings_client.dm"
#include "code\modules\keybindings\focus.dm"
@@ -54,6 +54,7 @@ const BASEICONS = {
'Shaft Miner': 'digging',
'Station Engineer': 'gears',
'Syndicate Operative': 'dragon',
'Veteran Security Advisor': 'ribbon',
Virologist: 'virus',
Warden: 'handcuffs',
// SKYRAT EDIT START - Skyrat-exclusive jobs have icons too