[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>
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
|
Before Width: | Height: | Size: 668 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 23 KiB |
|
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."
|
||||
|
||||
@@ -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
|
||||
|
||||