From d718af991324e8a570d0a509aff996e3985c09e3 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sun, 24 Dec 2023 23:54:11 +0100 Subject: [PATCH] [MIRROR] Bridge Assistant Station Trait [MDB IGNORE] (#25667) * Bridge Assistant Station Trait * Diffs * fixes * Update job_traits.dm --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com> --- code/__DEFINES/atom_hud.dm | 1 + code/__DEFINES/jobs.dm | 74 +++++++------- code/__DEFINES/traits/declarations.dm | 6 ++ code/_globalvars/traits/_traits.dm | 4 + code/_onclick/hud/new_player.dm | 2 +- .../subsystem/processing/station.dm | 4 + code/datums/components/twohanded.dm | 16 +++- code/datums/components/wall_mounted.dm | 2 + code/datums/id_trim/jobs.dm | 22 +++++ code/datums/records/manifest.dm | 33 +++++++ code/datums/station_traits/_station_trait.dm | 3 +- code/datums/station_traits/job_traits.dm | 90 ++++++++++++++++-- code/datums/station_traits/neutral_traits.dm | 6 +- code/game/gamemodes/dynamic/dynamic.dm | 3 + code/game/objects/items/storage/belt.dm | 20 ++++ code/modules/admin/verbs/list_exposer.dm | 7 +- code/modules/bitrunning/job.dm | 2 +- code/modules/clothing/outfits/plasmaman.dm | 7 ++ code/modules/jobs/job_types/assistant.dm | 8 +- code/modules/jobs/job_types/prisoner.dm | 2 +- .../station_trait/bridge_assistant.dm | 79 +++++++++++++++ .../job_types/station_trait/cargo_gorilla.dm | 50 ++++++++++ code/modules/mob/dead/crew_manifest.dm | 38 -------- .../modules/mob/dead/new_player/new_player.dm | 6 +- code/modules/mob/dead/observer/observer.dm | 5 +- code/modules/mob/living/silicon/silicon.dm | 5 +- .../computers/item/role_tablet_presets.dm | 12 ++- .../modules/unit_tests/station_trait_tests.dm | 2 + icons/hud/lobby/signup_button.dmi | Bin 676 -> 668 bytes icons/mob/huds/hud.dmi | Bin 9853 -> 10588 bytes icons/obj/card.dmi | Bin 23297 -> 24234 bytes .../modules/title_screen/code/new_player.dm | 6 +- tgstation.dme | 3 +- .../tgui/interfaces/common/JobToIcon.ts | 1 + 34 files changed, 400 insertions(+), 119 deletions(-) create mode 100644 code/modules/jobs/job_types/station_trait/bridge_assistant.dm create mode 100644 code/modules/jobs/job_types/station_trait/cargo_gorilla.dm delete mode 100644 code/modules/mob/dead/crew_manifest.dm diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index 7a1ca9705ac..180bb317fed 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -95,6 +95,7 @@ #define SECHUD_BARTENDER "hudbartender" #define SECHUD_BITRUNNER "hudbitrunner" #define SECHUD_BOTANIST "hudbotanist" +#define SECHUD_BRIDGE_ASSISTANT "hudbridgeassistant" #define SECHUD_CAPTAIN "hudcaptain" #define SECHUD_CARGO_TECHNICIAN "hudcargotechnician" #define SECHUD_CHAPLAIN "hudchaplain" diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 9b65e8a9c55..5de94c3fca5 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -48,6 +48,7 @@ #define JOB_RESEARCH_DIRECTOR "Research Director" #define JOB_CHIEF_ENGINEER "Chief Engineer" #define JOB_CHIEF_MEDICAL_OFFICER "Chief Medical Officer" +#define JOB_BRIDGE_ASSISTANT "Bridge Assistant" //Silicon #define JOB_AI "AI" #define JOB_CYBORG "Cyborg" @@ -146,41 +147,42 @@ #define JOB_DISPLAY_ORDER_ASSISTANT 1 #define JOB_DISPLAY_ORDER_CAPTAIN 2 #define JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL 3 -#define JOB_DISPLAY_ORDER_BARTENDER 4 -#define JOB_DISPLAY_ORDER_BOTANIST 5 -#define JOB_DISPLAY_ORDER_COOK 6 -#define JOB_DISPLAY_ORDER_JANITOR 7 -#define JOB_DISPLAY_ORDER_CLOWN 8 -#define JOB_DISPLAY_ORDER_MIME 9 -#define JOB_DISPLAY_ORDER_CURATOR 10 -#define JOB_DISPLAY_ORDER_LAWYER 11 -#define JOB_DISPLAY_ORDER_CHAPLAIN 12 -#define JOB_DISPLAY_ORDER_PSYCHOLOGIST 13 -#define JOB_DISPLAY_ORDER_AI 14 -#define JOB_DISPLAY_ORDER_CYBORG 15 -#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 16 -#define JOB_DISPLAY_ORDER_STATION_ENGINEER 17 -#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 18 -#define JOB_DISPLAY_ORDER_QUARTERMASTER 19 -#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 20 -#define JOB_DISPLAY_ORDER_SHAFT_MINER 21 -#define JOB_DISPLAY_ORDER_BITRUNNER 22 -#define JOB_DISPLAY_ORDER_CARGO_GORILLA 23 -#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 24 -#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 25 -#define JOB_DISPLAY_ORDER_PARAMEDIC 26 -#define JOB_DISPLAY_ORDER_CHEMIST 27 -#define JOB_DISPLAY_ORDER_VIROLOGIST 28 -#define JOB_DISPLAY_ORDER_CORONER 29 -#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 30 -#define JOB_DISPLAY_ORDER_SCIENTIST 31 -#define JOB_DISPLAY_ORDER_ROBOTICIST 32 -#define JOB_DISPLAY_ORDER_GENETICIST 33 -#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 34 -#define JOB_DISPLAY_ORDER_WARDEN 35 -#define JOB_DISPLAY_ORDER_DETECTIVE 36 -#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 37 -#define JOB_DISPLAY_ORDER_PRISONER 38 +#define JOB_DISPLAY_ORDER_BRIDGE_ASSISTANT 4 +#define JOB_DISPLAY_ORDER_BARTENDER 5 +#define JOB_DISPLAY_ORDER_BOTANIST 6 +#define JOB_DISPLAY_ORDER_COOK 7 +#define JOB_DISPLAY_ORDER_JANITOR 8 +#define JOB_DISPLAY_ORDER_CLOWN 9 +#define JOB_DISPLAY_ORDER_MIME 10 +#define JOB_DISPLAY_ORDER_CURATOR 11 +#define JOB_DISPLAY_ORDER_LAWYER 12 +#define JOB_DISPLAY_ORDER_CHAPLAIN 13 +#define JOB_DISPLAY_ORDER_PSYCHOLOGIST 14 +#define JOB_DISPLAY_ORDER_AI 15 +#define JOB_DISPLAY_ORDER_CYBORG 16 +#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 17 +#define JOB_DISPLAY_ORDER_STATION_ENGINEER 18 +#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 19 +#define JOB_DISPLAY_ORDER_QUARTERMASTER 20 +#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 21 +#define JOB_DISPLAY_ORDER_SHAFT_MINER 22 +#define JOB_DISPLAY_ORDER_BITRUNNER 23 +#define JOB_DISPLAY_ORDER_CARGO_GORILLA 24 +#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 25 +#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 26 +#define JOB_DISPLAY_ORDER_PARAMEDIC 27 +#define JOB_DISPLAY_ORDER_CHEMIST 28 +#define JOB_DISPLAY_ORDER_VIROLOGIST 29 +#define JOB_DISPLAY_ORDER_CORONER 30 +#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 31 +#define JOB_DISPLAY_ORDER_SCIENTIST 32 +#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_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 @@ -245,6 +247,8 @@ /// Combination flag for jobs which are considered regular crew members of the station. #define STATION_JOB_FLAGS (JOB_ANNOUNCE_ARRIVAL|JOB_CREW_MANIFEST|JOB_EQUIP_RANK|JOB_CREW_MEMBER|JOB_NEW_PLAYER_JOINABLE|JOB_REOPEN_ON_ROUNDSTART_LOSS|JOB_ASSIGN_QUIRKS|JOB_CAN_BE_INTERN) +/// Combination flag for jobs which should be there for every station trait job. +#define STATION_TRAIT_JOB_FLAGS (JOB_CANNOT_OPEN_SLOTS|JOB_HIDE_WHEN_EMPTY|JOB_LATEJOIN_ONLY&~JOB_REOPEN_ON_ROUNDSTART_LOSS) #define FACTION_NONE "None" #define FACTION_STATION "Station" diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 60366b69a12..b0ca10a8d88 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -489,6 +489,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Is the mob standing on an elevated surface? This prevents them from dropping down if not elevated first. #define TRAIT_ON_ELEVATED_SURFACE "on_elevated_surface" +// Prevents you from twohanding weapons. +#define TRAIT_NO_TWOHANDING "no_twohanding" + // METABOLISMS // Various jobs on the station have historically had better reactions // to various drinks and foodstuffs. Security liking donuts is a classic @@ -817,6 +820,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Similar trait given to temporary bodies inhabited by players #define TRAIT_TEMPORARY_BODY "temporary_body" +/// Trait given to objects with the wallmounted component +#define TRAIT_WALLMOUNTED "wallmounted" + /// Trait given to mechs that can have orebox functionality on movement #define TRAIT_OREBOX_FUNCTIONAL "orebox_functional" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 4cb5a3b8e79..1b543c0352c 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -98,6 +98,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( /datum/wound = list( "TRAIT_WOUND_SCANNED" = TRAIT_WOUND_SCANNED, ), + /obj = list( + "TRAIT_WALLMOUNTED" = TRAIT_WALLMOUNTED, + ), /mob = list( "TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING, "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING, @@ -305,6 +308,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_SOUL" = TRAIT_NO_SOUL, "TRAIT_NO_STRIP" = TRAIT_NO_STRIP, "TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM, + "TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING, "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, "TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR, "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index 6edd9c65d2a..a51b61cd396 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -40,7 +40,7 @@ var/y_offset = 397 var/y_button_offset = 27 for (var/datum/station_trait/trait as anything in GLOB.lobby_station_traits) - if (!trait.can_display_lobby_button()) + if (!trait.can_display_lobby_button(mymob.client)) continue var/atom/movable/screen/lobby/button/sign_up/sign_up_button = new(our_hud = src) sign_up_button.SlowInit() diff --git a/code/controllers/subsystem/processing/station.dm b/code/controllers/subsystem/processing/station.dm index 731ceec42f9..5c9795b87fd 100644 --- a/code/controllers/subsystem/processing/station.dm +++ b/code/controllers/subsystem/processing/station.dm @@ -11,6 +11,10 @@ PROCESSING_SUBSYSTEM_DEF(station) var/list/selectable_traits_by_types = list(STATION_TRAIT_POSITIVE = list(), STATION_TRAIT_NEUTRAL = list(), STATION_TRAIT_NEGATIVE = list()) ///Currently active announcer. Starts as a type but gets initialized after traits are selected var/datum/centcom_announcer/announcer = /datum/centcom_announcer/default + ///A list of trait roles that should be protected from antag + var/list/antag_protected_roles = list() + ///A list of trait roles that should never be able to roll antag + var/list/antag_restricted_roles = list() /datum/controller/subsystem/processing/station/Initialize() diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 37df7308217..89db2d27c83 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -173,17 +173,25 @@ /datum/component/two_handed/proc/wield(mob/living/carbon/user) if(wielded) return + var/atom/atom_parent = parent + if(HAS_TRAIT(user, TRAIT_NO_TWOHANDING)) + if(require_twohands) + atom_parent.balloon_alert(user, "too weak to wield!") + user.dropItemToGround(parent, force = TRUE) + else + atom_parent.balloon_alert(user, "too weak to wield with both hands!") + return if(user.get_inactive_held_item()) if(require_twohands) - to_chat(user, span_notice("[parent] is too cumbersome to carry in one hand!")) - user.dropItemToGround(parent, force=TRUE) + atom_parent.balloon_alert(user, "can't carry in one hand!") + user.dropItemToGround(parent, force = TRUE) else - to_chat(user, span_warning("You need your other hand to be empty!")) + atom_parent.balloon_alert(user, "holding something in other hand!") return if(user.usable_hands < 2) if(require_twohands) user.dropItemToGround(parent, force=TRUE) - to_chat(user, span_warning("You don't have enough intact hands.")) + atom_parent.balloon_alert(user, "not enough hands!") return // wield update status diff --git a/code/datums/components/wall_mounted.dm b/code/datums/components/wall_mounted.dm index 8d1722f89fe..00482592f2b 100644 --- a/code/datums/components/wall_mounted.dm +++ b/code/datums/components/wall_mounted.dm @@ -16,12 +16,14 @@ on_drop = on_drop_callback /datum/component/wall_mounted/RegisterWithParent() + ADD_TRAIT(parent, TRAIT_WALLMOUNTED, REF(src)) RegisterSignal(hanging_wall_turf, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(hanging_wall_turf, COMSIG_TURF_CHANGE, PROC_REF(on_turf_changing)) RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(drop_wallmount)) RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_linked_destroyed)) /datum/component/wall_mounted/UnregisterFromParent() + REMOVE_TRAIT(parent, TRAIT_WALLMOUNTED, REF(src)) UnregisterSignal(hanging_wall_turf, list(COMSIG_ATOM_EXAMINE, COMSIG_TURF_CHANGE)) UnregisterSignal(parent, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) hanging_wall_turf = null diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index 72a23adf768..ea46cc91319 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -203,6 +203,28 @@ ) job = /datum/job/botanist +/datum/id_trim/job/bridge_assistant + assignment = "Bridge Assistant" + trim_state = "trim_assistant" + department_color = COLOR_COMMAND_BLUE + subdepartment_color = COLOR_COMMAND_BLUE + sechud_icon_state = SECHUD_BRIDGE_ASSISTANT + minimal_access = list( + ACCESS_COMMAND, + ACCESS_EVA, + ACCESS_GATEWAY, + ACCESS_MAINT_TUNNELS, + ACCESS_RC_ANNOUNCE, + ACCESS_TELEPORTER, + ACCESS_WEAPONS, + ) + extra_access = list() + template_access = list( + ACCESS_CAPTAIN, + ACCESS_CHANGE_IDS, + ) + job = /datum/job/bridge_assistant + /datum/id_trim/job/captain assignment = "Captain" intern_alt_name = "Captain-in-Training" diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm index 7b43b7644ef..4ab24ee69c9 100644 --- a/code/datums/records/manifest.dm +++ b/code/datums/records/manifest.dm @@ -174,3 +174,36 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) target.rank = assignment target.trim = trim + +/datum/manifest/ui_state(mob/user) + return GLOB.always_state + +/datum/manifest/ui_status(mob/user, datum/ui_state/state) + return (isnewplayer(user) || isobserver(user) || isAI(user) || ispAI(user) || user.client?.holder) ? UI_INTERACTIVE : UI_CLOSE + +/datum/manifest/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "CrewManifest") + ui.open() + +/datum/manifest/ui_data(mob/user) + var/list/positions = list() + for(var/datum/job_department/department as anything in SSjob.joinable_departments) + var/open = 0 + var/list/exceptions = list() + for(var/datum/job/job as anything in department.department_jobs) + if(job.total_positions == -1) + exceptions += job.title + continue + var/open_slots = job.total_positions - job.current_positions + if(open_slots < 1) + continue + open += open_slots + positions[department.department_name] = list("exceptions" = exceptions, "open" = open) + + return list( + "manifest" = get_manifest(), + "positions" = positions + ) + diff --git a/code/datums/station_traits/_station_trait.dm b/code/datums/station_traits/_station_trait.dm index 0ef8a631392..54a711aaba6 100644 --- a/code/datums/station_traits/_station_trait.dm +++ b/code/datums/station_traits/_station_trait.dm @@ -83,7 +83,7 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) return /// Return TRUE if we want to show a lobby button, by default we assume we don't want it after the round begins -/datum/station_trait/proc/can_display_lobby_button() +/datum/station_trait/proc/can_display_lobby_button(client/player) return sign_up_button && !SSticker.HasRoundStarted() /* SKYRAT EDIT REMOVAL @@ -127,4 +127,3 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) var/datum/hud/using_hud = hud_owner.hud_used using_hud?.show_hud(using_hud?.hud_version) lobby_buttons = list() - diff --git a/code/datums/station_traits/job_traits.dm b/code/datums/station_traits/job_traits.dm index fc176aa0415..4d6de5e6951 100644 --- a/code/datums/station_traits/job_traits.dm +++ b/code/datums/station_traits/job_traits.dm @@ -1,3 +1,7 @@ +#define CAN_ROLL_ALWAYS 1 //always can roll for antag +#define CAN_ROLL_PROTECTED 2 //can roll if config lets protected roles roll +#define CAN_ROLL_NEVER 3 //never roll antag + /** * A station trait which enables a temporary job * Generally speaking these should always all be mutually exclusive, don't have too many at once @@ -7,16 +11,24 @@ abstract_type = /datum/station_trait/job /// What tooltip to show on the button var/button_desc = "Sign up to gain some kind of unusual job, not available in most rounds." + /// Can this job roll antag? + var/can_roll_antag = CAN_ROLL_ALWAYS + /// How many positions to spawn? + var/position_amount = 1 /// Type of job to enable - var/job_to_add = /datum/job/clown + var/datum/job/job_to_add = /datum/job/clown /// Who signed up to this in the lobby var/list/lobby_candidates /datum/station_trait/job/New() . = ..() + switch(can_roll_antag) + if(CAN_ROLL_PROTECTED) + SSstation.antag_protected_roles += job_to_add::title + if(CAN_ROLL_NEVER) + SSstation.antag_restricted_roles += job_to_add::title blacklist += subtypesof(/datum/station_trait/job) - type // All but ourselves RegisterSignal(SSdcs, COMSIG_GLOB_PRE_JOBS_ASSIGNED, PROC_REF(pre_jobs_assigned)) - /* SKYRAT EDIT REMOVAL /datum/station_trait/job/setup_lobby_button(atom/movable/screen/lobby/button/sign_up/lobby_button) RegisterSignal(lobby_button, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_lobby_button_update_overlays)) @@ -40,7 +52,6 @@ SIGNAL_HANDLER overlays += LAZYFIND(lobby_candidates, lobby_button.get_mob()) ? "tick" : "cross" */ - /// Called before we start assigning roles, assign ours first /datum/station_trait/job/proc/pre_jobs_assigned() SIGNAL_HANDLER @@ -52,16 +63,19 @@ if (!LAZYLEN(lobby_candidates)) on_failed_assignment() return // Nobody signed up :( - var/mob/dead/new_player/picked_player = pick(lobby_candidates) - picked_player.mind.assigned_role = new job_to_add() + for(var/_ in 1 to position_amount) + var/mob/dead/new_player/picked_player = pick_n_take(lobby_candidates) + picked_player.mind.assigned_role = new job_to_add() lobby_candidates = null /// Called if we didn't assign a role before the round began, we add it to the latejoin menu instead /datum/station_trait/job/proc/on_failed_assignment() - var/datum/job/our_job = job_to_add - our_job = SSjob.GetJob(our_job::title) - our_job.total_positions++ + var/datum/job/our_job = SSjob.GetJob(job_to_add::title) + our_job.total_positions = position_amount +/datum/station_trait/job/can_display_lobby_button(client/player) + var/datum/job/our_job = SSjob.GetJob(job_to_add::title) + return our_job.player_old_enough(player) && ..() /// Adds a gorilla to the cargo department, replacing the sloth and the mech /datum/station_trait/job/cargorilla @@ -69,6 +83,7 @@ button_desc = "Sign up to become the Cargo Gorilla, a peaceful shepherd of boxes." weight = 1 show_in_report = FALSE // Selective attention test. Did you spot the gorilla? + can_roll_antag = CAN_ROLL_NEVER job_to_add = /datum/job/cargo_gorilla /datum/station_trait/job/cargorilla/New() @@ -80,7 +95,6 @@ . = ..() overlays += LAZYFIND(lobby_candidates, lobby_button.get_mob()) ? "gorilla_on" : "gorilla_off" */ - /// Remove the cargo equipment and personnel that are being replaced by a gorilla. /datum/station_trait/job/cargorilla/proc/replace_cargo(datum/source) SIGNAL_HANDLER @@ -96,3 +110,61 @@ // monkey carries the crates, the age of robot is over if(GLOB.cargo_ripley) qdel(GLOB.cargo_ripley) + +/datum/station_trait/job/bridge_assistant + name = "Bridge Assistant" + button_desc = "Sign up to become the Bridge Assistant and watch over the Bridge." + weight = 2 + report_message = "We have installed a Bridge Assistant on your station." + show_in_report = TRUE + can_roll_antag = CAN_ROLL_PROTECTED + job_to_add = /datum/job/bridge_assistant + +/datum/station_trait/job/bridge_assistant/New() + . = ..() + RegisterSignal(SSatoms, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(add_coffeemaker)) +/* SKYRAT EDIT REMOVAL +/datum/station_trait/job/bridge_assistant/on_lobby_button_update_overlays(atom/movable/screen/lobby/button/sign_up/lobby_button, list/overlays) + . = ..() + overlays += "bridge_assistant" +*/ +/// Creates a coffeemaker in the bridge, if we don't have one yet. +/datum/station_trait/job/bridge_assistant/proc/add_coffeemaker(datum/source) + SIGNAL_HANDLER + var/area/bridge = GLOB.areas_by_type[/area/station/command/bridge] + if(isnull(bridge)) //no bridge, what will he assist? + return + var/list/possible_coffeemaker_positions = list(/area/station/command/bridge, /area/station/command/meeting_room) + var/list/coffeemakers = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/coffeemaker) + for(var/obj/machinery/coffeemaker as anything in coffeemakers) //don't spawn a coffeemaker if there is already one on the bridge + if(is_type_in_list(get_area(coffeemaker), possible_coffeemaker_positions)) + return + var/list/tables = list() + for(var/turf/area_turf as anything in bridge.get_contained_turfs()) + var/obj/structure/table/table = locate() in area_turf + if(isnull(table)) + continue + if(area_turf.is_blocked_turf(ignore_atoms = list(table))) //don't spawn a coffeemaker on a fax machine or smth + continue + tables += table + if(!length(tables)) + return + var/picked_table = pick_n_take(tables) + var/picked_turf = get_turf(picked_table) + if(length(tables)) + var/another_table = pick(tables) + for(var/obj/thing_on_table in picked_turf) //if there's paper bins or other shit on the table, get that off + if(thing_on_table == picked_table) + continue + if(HAS_TRAIT(thing_on_table, TRAIT_WALLMOUNTED) || (thing_on_table.flags_1 & ON_BORDER_1) || thing_on_table.layer < TABLE_LAYER) + continue + if(thing_on_table.invisibility || !thing_on_table.alpha || !thing_on_table.mouse_opacity) + continue + thing_on_table.forceMove(get_turf(another_table)) + new /obj/machinery/coffeemaker/impressa(picked_turf) + new /obj/item/reagent_containers/cup/coffeepot(picked_turf) + new /obj/item/storage/box/coffeepack(picked_turf) + +#undef CAN_ROLL_ALWAYS +#undef CAN_ROLL_PROTECTED +#undef CAN_ROLL_NEVER diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index 5e864738f8e..5d49155a3c1 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -2,7 +2,7 @@ name = "Bananium Shipment" trait_type = STATION_TRAIT_NEUTRAL weight = 5 - report_message = "Rumors has it that the clown planet has been sending support packages to clowns in this system" + report_message = "Rumors has it that the clown planet has been sending support packages to clowns in this system." trait_to_give = STATION_TRAIT_BANANIUM_SHIPMENTS /datum/station_trait/unnatural_atmosphere @@ -10,7 +10,7 @@ trait_type = STATION_TRAIT_NEUTRAL weight = 5 show_in_report = TRUE - report_message = "System's local planet has irregular atmospherical properties" + report_message = "System's local planet has irregular atmospherical properties." trait_to_give = STATION_TRAIT_UNNATURAL_ATMOSPHERE // This station trait modifies the atmosphere, which is too far past the time admins are able to revert it @@ -197,7 +197,7 @@ /datum/station_trait/birthday/proc/announce_birthday() - report_message = "We here at Nanotrasen would all like to wish [birthday_person ? birthday_person_name : "Employee Name"] a very happy birthday" + report_message = "We here at Nanotrasen would all like to wish [birthday_person ? birthday_person_name : "Employee Name"] a very happy birthday." priority_announce("Happy birthday to [birthday_person ? birthday_person_name : "Employee Name"]! Nanotrasen wishes you a very happy [birthday_person ? thtotext(birthday_person.age + 1) : "255th"] birthday.") if(birthday_person) playsound(birthday_person, 'sound/items/party_horn.ogg', 50) diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 71d1ff1287e..04cb808931b 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -821,6 +821,9 @@ GLOBAL_LIST_EMPTY(dynamic_forced_rulesets) stack_trace("Invalid dynamic configuration variable [variable] in [ruleset.ruletype] [ruleset.name].") continue ruleset.vars[variable] = rule_conf[variable] + ruleset.restricted_roles |= SSstation.antag_restricted_roles + if(length(ruleset.protected_roles)) //if we care to protect any role, we should protect station trait roles too + ruleset.protected_roles |= SSstation.antag_protected_roles if(CONFIG_GET(flag/protect_roles_from_antagonist)) ruleset.restricted_roles |= ruleset.protected_roles if(CONFIG_GET(flag/protect_assistant_from_antagonist)) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index a677e858f20..8ac1a726c71 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -190,6 +190,26 @@ to_preload += /obj/item/extinguisher/mini return to_preload +/obj/item/storage/belt/utility/full/inducer/PopulateContents() + SSwardrobe.provide_type(/obj/item/screwdriver, src) + SSwardrobe.provide_type(/obj/item/wrench, src) + SSwardrobe.provide_type(/obj/item/weldingtool, src) + SSwardrobe.provide_type(/obj/item/crowbar/red, src) + SSwardrobe.provide_type(/obj/item/wirecutters, src) + SSwardrobe.provide_type(/obj/item/multitool, src) + SSwardrobe.provide_type(/obj/item/inducer, src) + +/obj/item/storage/belt/utility/full/inducer/get_types_to_preload() + var/list/to_preload = list() //Yes this is a pain. Yes this is the point + to_preload += /obj/item/screwdriver + to_preload += /obj/item/wrench + to_preload += /obj/item/weldingtool + to_preload += /obj/item/crowbar + to_preload += /obj/item/wirecutters + to_preload += /obj/item/multitool + to_preload += /obj/item/inducer + return to_preload + /obj/item/storage/belt/utility/syndicate preload = FALSE diff --git a/code/modules/admin/verbs/list_exposer.dm b/code/modules/admin/verbs/list_exposer.dm index 445097e8bef..5ea2e227750 100644 --- a/code/modules/admin/verbs/list_exposer.dm +++ b/code/modules/admin/verbs/list_exposer.dm @@ -51,12 +51,7 @@ if(!SSticker.HasRoundStarted()) tgui_alert(usr, "The game hasn't started yet!") return - var/data = "Showing Crew Manifest.
" - data += "" - for(var/datum/record/crew/entry in GLOB.manifest.general) - data += "" - data += "
NamePosition
[entry.name][entry.rank][entry.rank != entry.trim ? " ([entry.trim])" : ""]
" - usr << browse(data, "window=manifest;size=440x410") + GLOB.manifest.ui_interact(usr) /datum/admins/proc/output_ai_laws() var/law_bound_entities = 0 diff --git a/code/modules/bitrunning/job.dm b/code/modules/bitrunning/job.dm index 57581753c0f..1e749a3c7a5 100644 --- a/code/modules/bitrunning/job.dm +++ b/code/modules/bitrunning/job.dm @@ -29,7 +29,7 @@ /obj/item/food/cornchips/blue = 1, ) rpg_title = "Recluse" - job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN + job_flags = STATION_JOB_FLAGS /datum/outfit/job/bitrunner name = "Bitrunner" diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm index a422d2d736e..40d7cfa888e 100644 --- a/code/modules/clothing/outfits/plasmaman.dm +++ b/code/modules/clothing/outfits/plasmaman.dm @@ -288,3 +288,10 @@ uniform = /obj/item/clothing/under/plasmaman/bitrunner gloves = /obj/item/clothing/gloves/color/plasmaman/black head = /obj/item/clothing/head/helmet/space/plasmaman/bitrunner + +/datum/outfit/plasmaman/bridge_assistant + name = "Bridge Assistant Plasmaman" + + uniform = /obj/item/clothing/under/plasmaman //call me when this is gags and not 10 million new assets + gloves = /obj/item/clothing/gloves/color/plasmaman/black + head = /obj/item/clothing/head/helmet/space/plasmaman diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index 89e7d04742c..fce0aade6ca 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -48,14 +48,16 @@ Assistant /datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target) ..() + give_hat() + give_jumpsuit(target) + +/datum/outfit/job/assistant/proc/give_hat() for(var/holidayname in GLOB.holidays) var/datum/holiday/holiday_today = GLOB.holidays[holidayname] var/obj/item/special_hat = holiday_today.holiday_hat if(prob(HOLIDAY_HAT_CHANCE) && !isnull(special_hat) && isnull(head)) head = special_hat - give_jumpsuit(target) - /datum/outfit/job/assistant/proc/give_jumpsuit(mob/living/carbon/human/target) var/static/jumpsuit_number = 0 jumpsuit_number += 1 @@ -81,6 +83,8 @@ Assistant /datum/outfit/job/assistant/consistent name = "Assistant - Consistent" +/datum/outfit/job/assistant/consistent/give_hat() + return /datum/outfit/job/assistant/consistent/give_jumpsuit(mob/living/carbon/human/target) uniform = /obj/item/clothing/under/color/grey diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index cf4c9f65910..4e49507864a 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -23,7 +23,7 @@ family_heirlooms = list(/obj/item/pen/blue) rpg_title = "Defeated Miniboss" - job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN | JOB_CANNOT_OPEN_SLOTS + job_flags = STATION_JOB_FLAGS | JOB_CANNOT_OPEN_SLOTS & ~JOB_REOPEN_ON_ROUNDSTART_LOSS /datum/job/prisoner/New() . = ..() diff --git a/code/modules/jobs/job_types/station_trait/bridge_assistant.dm b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm new file mode 100644 index 00000000000..ebc1af0ee1a --- /dev/null +++ b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm @@ -0,0 +1,79 @@ +/datum/job/bridge_assistant + title = JOB_BRIDGE_ASSISTANT + description = "Watch over the Bridge, command its consoles, and spend your days brewing coffee for higher-ups." + auto_deadmin_role_flags = DEADMIN_POSITION_HEAD //not really a head but close enough + department_head = list(JOB_CAPTAIN) + faction = FACTION_STATION + total_positions = 0 + spawn_positions = 0 + supervisors = "the Captain, and in non-Bridge related situations the other heads" + minimal_player_age = 7 + exp_requirements = 300 + exp_required_type = EXP_TYPE_CREW + exp_granted_type = EXP_TYPE_CREW + config_tag = "BRIDGE_ASSISTANT" + + outfit = /datum/outfit/job/bridge_assistant + plasmaman_outfit = /datum/outfit/plasmaman/bridge_assistant + + paycheck = PAYCHECK_CREW + paycheck_department = ACCOUNT_CIV + + liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_BRIDGE_ASSISTANT + departments_list = list(/datum/job_department/command) + + family_heirlooms = list(/obj/item/banner/command/mundane) + + mail_goodies = list( + /obj/item/storage/fancy/cigarettes = 1, + /obj/item/pen/fountain = 1, + ) + rpg_title = "Royal Guard" + allow_bureaucratic_error = FALSE + job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS + ignore_human_authority = TRUE + +/datum/job/bridge_assistant/after_spawn(mob/living/spawned, client/player_client) + . = ..() + ADD_TRAIT(spawned, TRAIT_NO_TWOHANDING, JOB_TRAIT) + +/datum/job/bridge_assistant/get_roundstart_spawn_point() + var/list/chair_turfs = list() + var/list/possible_turfs = list() + var/area/bridge = GLOB.areas_by_type[/area/station/command/bridge] + if(isnull(bridge)) + return ..() //if no bridge, spawn on the arrivals shuttle (but also what the fuck) + for(var/turf/possible_turf as anything in bridge.get_contained_turfs()) + if(possible_turf.is_blocked_turf()) + continue + if(locate(/obj/structure/chair) in possible_turf) + chair_turfs += possible_turf + continue + possible_turfs += possible_turf + if(length(chair_turfs)) + return pick(chair_turfs) //prioritize turfs with a chair + if(length(possible_turfs)) + return pick(possible_turfs) //if none, just pick a random turf in the bridge + return ..() //if the bridge has no turfs, spawn on the arrivals shuttle + +/datum/outfit/job/bridge_assistant + name = "Bridge Assistant" + jobtype = /datum/job/bridge_assistant + + id_trim = /datum/id_trim/job/bridge_assistant + backpack_contents = list( + /obj/item/modular_computer/pda/bridge_assistant = 1, + ) + + uniform = /obj/item/clothing/under/trek/command/next + neck = /obj/item/clothing/neck/large_scarf/blue + belt = /obj/item/storage/belt/utility/full/inducer + ears = /obj/item/radio/headset/headset_com + glasses = /obj/item/clothing/glasses/sunglasses + gloves = /obj/item/clothing/gloves/fingerless + head = /obj/item/clothing/head/soft/black + shoes = /obj/item/clothing/shoes/laceup + l_pocket = /obj/item/gun/energy/e_gun/mini + r_pocket = /obj/item/assembly/flash/handheld diff --git a/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm b/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm new file mode 100644 index 00000000000..87363bf9b7b --- /dev/null +++ b/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm @@ -0,0 +1,50 @@ +/datum/job/cargo_gorilla + title = JOB_CARGO_GORILLA + description = "Assist the supply department by moving freight and disposing of unwanted fruits." + department_head = list(JOB_QUARTERMASTER) + faction = FACTION_STATION + total_positions = 0 + spawn_positions = 0 + supervisors = SUPERVISOR_QM + spawn_type = /mob/living/basic/gorilla/cargorilla + config_tag = "CARGO_GORILLA" + random_spawns_possible = FALSE + display_order = JOB_DISPLAY_ORDER_CARGO_GORILLA + departments_list = list(/datum/job_department/cargo) + mail_goodies = list( + /obj/item/food/grown/banana = 1, + ) + rpg_title = "Beast of Burden" + allow_bureaucratic_error = FALSE + job_flags = STATION_TRAIT_JOB_FLAGS | JOB_ANNOUNCE_ARRIVAL | JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK + +/datum/job/cargo_gorilla/get_roundstart_spawn_point() + if (length(GLOB.gorilla_start)) + return pick(GLOB.gorilla_start) + return ..() + +/datum/job/cargo_gorilla/get_spawn_mob(client/player_client, atom/spawn_point) + if (!player_client) + return + var/mob/living/the_big_man = new spawn_type(get_turf(spawn_point)) + the_big_man.fully_replace_character_name(the_big_man.real_name, pick(GLOB.cargorilla_names)) + return the_big_man + +/datum/job/cargo_gorilla/after_spawn(mob/living/spawned, client/player_client) + . = ..() + // Gorilla with a wage, what's he buyin? + var/datum/bank_account/bank_account = new(spawned.real_name, src) + bank_account.payday(STARTING_PAYCHECKS, TRUE) + bank_account.replaceable = FALSE + spawned.add_mob_memory(/datum/memory/key/account, remembered_id = bank_account.account_id) + + var/obj/item/card/id/advanced/cargo_gorilla/gorilla_id = new(spawned.loc) + gorilla_id.registered_name = spawned.name + gorilla_id.update_label() + gorilla_id.registered_account = bank_account + bank_account.bank_cards += gorilla_id + spawned.put_in_hands(gorilla_id, del_on_fail = TRUE) + + to_chat(spawned, span_boldnotice("You are Cargorilla, a pacifist friend of the station and carrier of freight.")) + to_chat(spawned, span_notice("You can pick up crates by clicking on them, and drop them by clicking on the ground.")) + spawned.mind.special_role = "Cargorilla" diff --git a/code/modules/mob/dead/crew_manifest.dm b/code/modules/mob/dead/crew_manifest.dm deleted file mode 100644 index 6a2c84622a2..00000000000 --- a/code/modules/mob/dead/crew_manifest.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/crew_manifest - -/datum/crew_manifest/ui_state(mob/user) - return GLOB.always_state - -/datum/crew_manifest/ui_status(mob/user, datum/ui_state/state) - return (isnewplayer(user) || isobserver(user) || isAI(user) || ispAI(user)) ? UI_INTERACTIVE : UI_CLOSE - -/datum/crew_manifest/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if (!ui) - ui = new(user, src, "CrewManifest") - ui.open() - -/datum/crew_manifest/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - -/datum/crew_manifest/ui_data(mob/user) - var/list/positions = list() - for(var/datum/job_department/department as anything in SSjob.joinable_departments) - var/open = 0 - var/list/exceptions = list() - for(var/datum/job/job as anything in department.department_jobs) - if(job.total_positions == -1) - exceptions += job.title - continue - var/open_slots = job.total_positions - job.current_positions - if(open_slots < 1) - continue - open += open_slots - positions[department.department_name] = list("exceptions" = exceptions, "open" = open) - - return list( - "manifest" = GLOB.manifest.get_manifest(), - "positions" = positions - ) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 5c07c8c8fd4..3cf5b06f726 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -338,11 +338,7 @@ return client.crew_manifest_delay = world.time + (1 SECONDS) - if(!GLOB.crew_manifest_tgui) - GLOB.crew_manifest_tgui = new /datum/crew_manifest(src) - - - GLOB.crew_manifest_tgui.ui_interact(src) + GLOB.manifest.ui_interact(src) /mob/dead/new_player/Move() return 0 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index c3c87bef4ab..4a3f3daa245 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -725,10 +725,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return client.crew_manifest_delay = world.time + (1 SECONDS) - if(!GLOB.crew_manifest_tgui) - GLOB.crew_manifest_tgui = new /datum/crew_manifest(src) - - GLOB.crew_manifest_tgui.ui_interact(src) + GLOB.manifest.ui_interact(src) //this is called when a ghost is drag clicked to something. /mob/dead/observer/MouseDrop(atom/over) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 8a1f20d28c4..7e6dda33d8e 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -349,10 +349,7 @@ return client.crew_manifest_delay = world.time + (1 SECONDS) - if(!GLOB.crew_manifest_tgui) - GLOB.crew_manifest_tgui = new /datum/crew_manifest(src) - - GLOB.crew_manifest_tgui.ui_interact(src) + GLOB.manifest.ui_interact(src) /mob/living/silicon/proc/set_autosay() //For allowing the AI and borgs to set the radio behavior of auto announcements (state laws, arrivals). if(!radio) diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index 4ccdfe8ec21..339def50add 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -103,7 +103,7 @@ /obj/item/modular_computer/pda/heads/quartermaster name = "quartermaster PDA" - greyscale_config = /datum/greyscale_config/tablet/stripe_thick + greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#c4b787#18191e#8b4c31" inserted_item = /obj/item/pen/survival stored_paper = 20 @@ -414,7 +414,7 @@ ) /** - * No Department + * No Department/Station Trait */ /obj/item/modular_computer/pda/assistant @@ -423,6 +423,14 @@ /datum/computer_file/program/bounty_board, ) +/obj/item/modular_computer/pda/bridge_assistant + name = "bridge assistant PDA" + greyscale_colors = "#374f7e#a92323" + starting_programs = list( + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/status, + ) + /** * Non-roles */ diff --git a/code/modules/unit_tests/station_trait_tests.dm b/code/modules/unit_tests/station_trait_tests.dm index 430e83b9af7..21173e152d7 100644 --- a/code/modules/unit_tests/station_trait_tests.dm +++ b/code/modules/unit_tests/station_trait_tests.dm @@ -6,5 +6,7 @@ for(var/datum/job/job as anything in subtypesof(/datum/job)) if(!(initial(job.job_flags) & JOB_CREW_MEMBER)) continue + if((initial(job.job_flags) & STATION_TRAIT_JOB_FLAGS) == STATION_TRAIT_JOB_FLAGS) + continue if(!(job in cyber_trait.job_to_cybernetic)) TEST_FAIL("Job [job] does not have an assigned cybernetic for [cyber_trait.type] station trait.") diff --git a/icons/hud/lobby/signup_button.dmi b/icons/hud/lobby/signup_button.dmi index 4ff31a316c2ac3b3cb47c4130f1b79b1cb872547..a67cc5584424e0a78c9069417a0e9ff16e923c65 100644 GIT binary patch delta 573 zcmV-D0>b^I1)K$tYJbCeR9JLGWpiV4X>fFDZ*Bkpc$}S*O$x#=5QW#xDMGsy(bBCO zX^}4M6-sQV}r*nmmL`pl4nLnIcGYA5xNVa2Sj|NqWa_V$wfYt3n4oc7G9kX=HE$aSqReD>QqJ za`T_HX6Y1b*6bEitJag&f!3_GeIFh5W#hM89B?UGh6uqkJ{stpMT}A&y6YU2(W)sw zkMjmZf~#In5daMU00B-(L_t(oh3%CwPQ)+}MaPBv$u4t{h!Y@j0J|_kh!$}JH~|GW zfCJEk8_-j71An*+lZ8xvur0C;VkN&cZzuD2oMhuA*BOjXz@ol6HhOey!a8kw^M2v@ zMNqF!sD222|6}mo#Omv2|6}mol-ixzEy6nl5&3k zs65=IgiTndi{W|L@iIKEab1$=(M3IEjgwDCSmV_8rGFM^0SIi(4|rd?eEU$|Uk`U* z`mf;5IQ!R4g|=W<5aC*8-z6Oc{3I?#Dmae=Fkll{*wz8g95`YCC;5W2IPXdU2TMg~ z9nqBn>{*C&kNO{>pK^kpppZL@NO3|KZ)M1xyBLcX9rafFDZ*Bkpc$}S*!3u*g42I9`Qxv_9v5D7R zhB7?NSCC?(4eMHIx{ba4>bz};;_XlP{^SoN73cC&)uOmo{0W}WS#c8i{=nG_RnW1> za?UhhuftSOkO87h2z&b&63!HQij5;@otJl*^bgkPIKhllK!2^Z3?7K)@GN%0$oD9B z|6XU;ZgF-?w&>av&pQK)J9_8Q7}>b4ThA^Z+d-cz-V4e*Lh%KhJkAts=eH;Lw9p zGM|{_;tI5;z*m%qb@_aaTJCI3k5urIfQ%I!7BJSBDb9@4FTzRHq4LQMIT}>_{N-Hz zHpTvoHkM)^$Rk5qgX2Gvv;oK`8uPMa$P-nLH_u;|ib-BKR!tcWxv{5)f>UP9MT6!9 zOJg1xbUrHWY3KquQ{ZEio^ap8o0`c2)StSQPEyrB(9&_{mi{;v&&#T+sulDL^Q-!K Th`d__00000NkvXXu0mjf>HQmH diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index 3e32e17437cb763a4fce98f20d571abc00033238..eb7007c9c454c20791ef8c2f8a9f9178af98a043 100644 GIT binary patch literal 10588 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 diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index fdf3657c9d1300bd6cef2fb3c0a7906191018f64..da8c2bda657675be06287730a85e7cda3964fc89 100644 GIT binary patch literal 24234 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 literal 23297 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 diff --git a/modular_skyrat/modules/title_screen/code/new_player.dm b/modular_skyrat/modules/title_screen/code/new_player.dm index 0841d6c0700..0d6dbf8cf45 100644 --- a/modular_skyrat/modules/title_screen/code/new_player.dm +++ b/modular_skyrat/modules/title_screen/code/new_player.dm @@ -152,10 +152,14 @@ return var/list/available_lobby_station_traits = list() for (var/datum/station_trait/trait as anything in GLOB.lobby_station_traits) - if (!trait.can_display_lobby_button()) + if (!trait.can_display_lobby_button(client)) continue available_lobby_station_traits += trait + if(!LAZYLEN(available_lobby_station_traits)) + to_chat(src, span_warning("There are currently no job traits available!")) + return + var/datum/station_trait/clicked_trait = tgui_input_list(src, "Select a job trait to sign up for:", "Job Traits", available_lobby_station_traits) if(!clicked_trait) diff --git a/tgstation.dme b/tgstation.dme index a53051fde53..8d6cd4f4642 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4298,6 +4298,8 @@ #include "code\modules\jobs\job_types\spawner\syndicate_cybersun_captain.dm" #include "code\modules\jobs\job_types\spawner\venus_human_trap.dm" #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\keybindings\bindings_atom.dm" #include "code\modules\keybindings\bindings_client.dm" #include "code\modules\keybindings\focus.dm" @@ -4523,7 +4525,6 @@ #include "code\modules\mob\status_procs.dm" #include "code\modules\mob\transform_procs.dm" #include "code\modules\mob\camera\camera.dm" -#include "code\modules\mob\dead\crew_manifest.dm" #include "code\modules\mob\dead\dead.dm" #include "code\modules\mob\dead\new_player\latejoin_menu.dm" #include "code\modules\mob\dead\new_player\login.dm" diff --git a/tgui/packages/tgui/interfaces/common/JobToIcon.ts b/tgui/packages/tgui/interfaces/common/JobToIcon.ts index 75db6d4e678..47d3e24de67 100644 --- a/tgui/packages/tgui/interfaces/common/JobToIcon.ts +++ b/tgui/packages/tgui/interfaces/common/JobToIcon.ts @@ -11,6 +11,7 @@ const BASEICONS = { 'Bit Avatar': 'code', Bitrunner: 'gamepad', Botanist: 'seedling', + 'Bridge Assistant': 'building-shield', Captain: 'crown', 'Cargo Gorilla': 'paw', 'Cargo Technician': 'box',