diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index ebe47d3a3f42..1f27f82227b3 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -667,6 +667,8 @@ if(!SSticker.IsRoundInProgress() || QDELETED(character)) return var/area/A = get_area(character) + if(character.mind.role_alt_title) + rank = character.mind.role_alt_title deadchat_broadcast(" has arrived at the station at [A.name].", "[character.real_name] ([rank])", follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE) if((!GLOB.announcement_systems.len) || (!character.mind)) return diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 8344153a2b28..5dafdac0c3f9 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -78,6 +78,9 @@ SUBSYSTEM_DEF(job) SetupOccupations() return type_occupations[jobtype] +/datum/controller/subsystem/job/proc/GetPlayerAltTitle(mob/dead/new_player/player, rank) + return player.client.prefs.GetPlayerAltTitle(GetJob(rank)) + // Attempts to Assign player to Role /datum/controller/subsystem/job/proc/AssignRole(mob/dead/new_player/player, rank, latejoin = FALSE) JobDebug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]") @@ -96,6 +99,7 @@ SUBSYSTEM_DEF(job) position_limit = job.spawn_positions JobDebug("Player: [player] is now Rank: [rank], JCP:[job.current_positions], JPL:[position_limit]") player.mind.assigned_role = rank + player.mind.role_alt_title = GetPlayerAltTitle(player, rank) unassigned -= player job.current_positions++ return TRUE @@ -463,10 +467,11 @@ SUBSYSTEM_DEF(job) log_world("Couldn't find a round start spawn point for [rank]") SendToLateJoin(living_mob) - + var/alt_title = null if(living_mob.mind) living_mob.mind.assigned_role = rank - to_chat(M, "You are the [rank].") + alt_title = living_mob.mind.role_alt_title + to_chat(M, "You are the [alt_title ? alt_title : rank].") if(job) var/new_mob = job.equip(living_mob, null, null, joined_late , null, M.client) if(ismob(new_mob)) @@ -483,7 +488,7 @@ SUBSYSTEM_DEF(job) M.client.holder.auto_deadmin() else handle_auto_deadmin_roles(M.client, rank) - to_chat(M, "As the [rank] you answer directly to [job.supervisors]. Special circumstances may change this.") + to_chat(M, "As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.") job.radio_help_message(M) if(job.req_admin_notify) to_chat(M, "You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp.") diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 8582cb5bf68f..6bc2b3583378 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -133,8 +133,16 @@ /datum/datacore/proc/manifest_modify(name, assignment) var/datum/data/record/foundrecord = find_record("name", name, GLOB.data_core.general) + var/real_title = assignment + for(var/datum/job/J in SSjob.occupations) + var/list/alttitles = get_alternate_titles(J.title) + if(!J) continue + if(assignment in alttitles) + real_title = J.title + break if(foundrecord) foundrecord.fields["rank"] = assignment + foundrecord.fields["real_rank"] = real_title /datum/datacore/proc/get_manifest() var/list/manifest_out = list() @@ -283,7 +291,9 @@ var/static/list/show_directions = list(SOUTH, WEST) if(H.mind && (H.mind.assigned_role != H.mind.special_role)) var/assignment - if(H.mind.assigned_role) + if(H.mind.role_alt_title) + assignment = H.mind.role_alt_title + else if(H.mind.assigned_role) assignment = H.mind.assigned_role else if(H.job) assignment = H.job diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 2150fe2974cd..15543bbcb108 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -38,6 +38,9 @@ var/memory var/assigned_role + + var/role_alt_title + var/special_role var/list/restricted_roles = list() var/list/datum/objective/objectives = list() @@ -821,4 +824,4 @@ /mob/living/silicon/pai/mind_initialize() ..() mind.assigned_role = ROLE_PAI - mind.special_role = "" \ No newline at end of file + mind.special_role = "" diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 10720aa19b4f..66bcce3bdf0d 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -149,8 +149,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) if (I) name = I.registered_name - assignment = I.assignment - ijob = jobs[I.assignment] + assignment = I.originalassignment + ijob = jobs[I.originalassignment] else name = "Unknown" assignment = "" diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 9bf01989f063..76db08a0e318 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -117,6 +117,7 @@ var/list/access = list() var/registered_name = null // The name registered_name on the card var/assignment = null + var/originalassignment = null var/access_txt // mapping aid var/datum/bank_account/registered_account var/obj/machinery/paystand/my_store diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index 814cce00c729..bfaaf9bdad07 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -218,7 +218,7 @@ output += "
" //all heads are listed twice so have a javascript call to toggle both their checkboxes when one is pressed //for simplicity this also includes the captain even though it doesn't do anything - for(var/job in GLOB.command_positions) + for(var/job in GLOB.original_command_positions) if(break_counter > 0 && (break_counter % 3 == 0)) output += "
" output += {"
" //standard departments all have identical handling - var/list/job_lists = list("Security" = GLOB.security_positions, - "Engineering" = GLOB.engineering_positions, - "Medical" = GLOB.medical_positions, - "Science" = GLOB.science_positions, - "Supply" = GLOB.supply_positions) + var/list/job_lists = list("Security" = GLOB.original_security_positions, + "Engineering" = GLOB.original_engineering_positions, + "Medical" = GLOB.original_medical_positions, + "Science" = GLOB.original_science_positions, + "Supply" = GLOB.original_supply_positions) for(var/department in job_lists) //the first element is the department head so they need the same javascript call as above output += "
" @@ -251,7 +251,7 @@ break_counter++ output += "
" //departments/groups that don't have command staff would throw a javascript error since there's no corresponding reference for toggle_head() - var/list/headless_job_lists = list("Silicon" = GLOB.nonhuman_positions, + var/list/headless_job_lists = list("Silicon" = GLOB.original_nonhuman_positions, "Abstract" = list("Appearance", "Emote", "OOC", "Voice Announcements")) for(var/department in headless_job_lists) output += "
" @@ -265,7 +265,7 @@ "} break_counter++ output += "
" - var/list/long_job_lists = list("Civilian" = GLOB.civilian_positions, + var/list/long_job_lists = list("Civilian" = GLOB.original_civilian_positions, "Ghost and Other Roles" = list(ROLE_BRAINWASHED, ROLE_DEATHSQUAD, ROLE_DRONE, ROLE_FUGITIVE, ROLE_HOLOPARASITE, ROLE_LAVALAND, ROLE_MIND_TRANSFER, ROLE_POSIBRAIN, ROLE_SENTIENCE), "Antagonist Positions" = list(ROLE_ABDUCTOR, ROLE_ALIEN, ROLE_BLOB, ROLE_BROTHER, ROLE_CHANGELING, ROLE_CULTIST, diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1fe5425c9cdd..25f1b26a0474 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -47,6 +47,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/show_credits = TRUE var/uses_glasses_colour = 0 + var/list/player_alt_titles = new() + ///Whether emotes will be displayed on runechat. Requires chat_on_map to have effect. Boolean. var/see_rc_emotes = TRUE @@ -976,10 +978,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) HTML += "[rank] \[QUIET\]" continue // yogs end + + var/rank_display + if(job.alt_titles) + rank_display = "[GetPlayerAltTitle(job)]" + else + rank_display = "[rank]" + if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs - HTML += "[rank]" + HTML += "[rank_display]" else - HTML += "[rank]" + HTML += rank_display HTML += "" @@ -1042,6 +1051,19 @@ GLOBAL_LIST_EMPTY(preferences_datums) popup.set_content(HTML) popup.open(FALSE) +/datum/preferences/proc/GetPlayerAltTitle(datum/job/job) + return player_alt_titles.Find(job.title) > 0 \ + ? player_alt_titles[job.title] \ + : job.title + +/datum/preferences/proc/SetPlayerAltTitle(datum/job/job, new_title) + // remove existing entry + if(player_alt_titles.Find(job.title)) + player_alt_titles -= job.title + // add one if it's not default + if(job.title != new_title) + player_alt_titles[job.title] = new_title + /datum/preferences/proc/SetJobPreferenceLevel(datum/job/job, level) if (!job) return FALSE @@ -1231,6 +1253,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(BERANDOMJOB) joblessrole = RETURNTOLOBBY SetChoices(user) + if ("alt_title") + var/datum/job/job = SSjob.GetJob(href_list["job"]) + if (job) + var/choices = list(job.title) + job.alt_titles + var/choice = input("Pick a title for [job.title].", "Character Generation", GetPlayerAltTitle(job)) as anything in choices | null + if(choice) + SetPlayerAltTitle(job, choice) + SetChoices(user) if("setJobLevel") UpdateJobPreference(user, href_list["text"], text2num(href_list["level"])) else diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 9a3e65232db6..830395d78c91 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -172,7 +172,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car READ_FILE(S["buttons_locked"], buttons_locked) READ_FILE(S["windowflash"], windowflashing) READ_FILE(S["be_special"] , be_special) - + READ_FILE(S["player_alt_titles"], player_alt_titles) READ_FILE(S["default_slot"], default_slot) READ_FILE(S["chat_toggles"], chat_toggles) @@ -221,40 +221,40 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car update_preferences(needs_update, S) //needs_update = savefile_version if we need an update (positive integer) //Sanitize - asaycolor = sanitize_ooccolor(sanitize_hexcolor(asaycolor, 6, 1, initial(asaycolor))) - ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) - lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) - UI_style = sanitize_inlist(UI_style, GLOB.available_ui_styles, GLOB.available_ui_styles[1]) - hotkeys = sanitize_integer(hotkeys, FALSE, TRUE, initial(hotkeys)) - chat_on_map = sanitize_integer(chat_on_map, FALSE, TRUE, initial(chat_on_map)) - max_chat_length = sanitize_integer(max_chat_length, 1, CHAT_MESSAGE_MAX_LENGTH, initial(max_chat_length)) + asaycolor = sanitize_ooccolor(sanitize_hexcolor(asaycolor, 6, 1, initial(asaycolor))) + ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) + lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) + UI_style = sanitize_inlist(UI_style, GLOB.available_ui_styles, GLOB.available_ui_styles[1]) + hotkeys = sanitize_integer(hotkeys, FALSE, TRUE, initial(hotkeys)) + chat_on_map = sanitize_integer(chat_on_map, FALSE, TRUE, initial(chat_on_map)) + max_chat_length = sanitize_integer(max_chat_length, 1, CHAT_MESSAGE_MAX_LENGTH, initial(max_chat_length)) see_chat_non_mob = sanitize_integer(see_chat_non_mob, FALSE, TRUE, initial(see_chat_non_mob)) - see_rc_emotes = sanitize_integer(see_rc_emotes, FALSE, TRUE, initial(see_rc_emotes)) - tgui_fancy = sanitize_integer(tgui_fancy, FALSE, TRUE, initial(tgui_fancy)) - tgui_lock = sanitize_integer(tgui_lock, FALSE, TRUE, initial(tgui_lock)) - buttons_locked = sanitize_integer(buttons_locked, FALSE, TRUE, initial(buttons_locked)) - windowflashing = sanitize_integer(windowflashing, FALSE, TRUE, initial(windowflashing)) - default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) - toggles = sanitize_integer(toggles, 0, (1 << 23), initial(toggles)) // Yogs -- Fixes toggles not having >16 bits of flagspace - clientfps = sanitize_integer(clientfps, 0, 1000, 0) - parallax = sanitize_integer(parallax, PARALLAX_INSANE, PARALLAX_DISABLE, null) + see_rc_emotes = sanitize_integer(see_rc_emotes, FALSE, TRUE, initial(see_rc_emotes)) + tgui_fancy = sanitize_integer(tgui_fancy, FALSE, TRUE, initial(tgui_fancy)) + tgui_lock = sanitize_integer(tgui_lock, FALSE, TRUE, initial(tgui_lock)) + buttons_locked = sanitize_integer(buttons_locked, FALSE, TRUE, initial(buttons_locked)) + windowflashing = sanitize_integer(windowflashing, FALSE, TRUE, initial(windowflashing)) + default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) + toggles = sanitize_integer(toggles, 0, (1 << 23), initial(toggles)) // Yogs -- Fixes toggles not having >16 bits of flagspace + clientfps = sanitize_integer(clientfps, 0, 1000, 0) + parallax = sanitize_integer(parallax, PARALLAX_INSANE, PARALLAX_DISABLE, null) ambientocclusion = sanitize_integer(ambientocclusion, FALSE, TRUE, initial(ambientocclusion)) auto_fit_viewport = sanitize_integer(auto_fit_viewport, FALSE, TRUE, initial(auto_fit_viewport)) - widescreenpref = sanitize_integer(widescreenpref, FALSE, TRUE, initial(widescreenpref)) - pixel_size = sanitize_integer(pixel_size, PIXEL_SCALING_AUTO, PIXEL_SCALING_3X, initial(pixel_size)) - scaling_method = sanitize_text(scaling_method, initial(scaling_method)) - ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form)) - ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) - ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) - ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) - menuoptions = SANITIZE_LIST(menuoptions) - be_special = SANITIZE_LIST(be_special) - pda_style = sanitize_inlist(pda_style, GLOB.pda_styles, initial(pda_style)) - pda_color = sanitize_hexcolor(pda_color, 6, 1, initial(pda_color)) - skillcape = sanitize_integer(skillcape, 1, 82, initial(skillcape)) - map = sanitize_integer(map, FALSE, TRUE, initial(map)) - flare = sanitize_integer(flare, FALSE, TRUE, initial(flare)) - bar_choice = sanitize_text(bar_choice, initial(bar_choice)) + widescreenpref = sanitize_integer(widescreenpref, FALSE, TRUE, initial(widescreenpref)) + pixel_size = sanitize_integer(pixel_size, PIXEL_SCALING_AUTO, PIXEL_SCALING_3X, initial(pixel_size)) + scaling_method = sanitize_text(scaling_method, initial(scaling_method)) + ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form)) + ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) + ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) + ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) + menuoptions = SANITIZE_LIST(menuoptions) + be_special = SANITIZE_LIST(be_special) + pda_style = sanitize_inlist(pda_style, GLOB.pda_styles, initial(pda_style)) + pda_color = sanitize_hexcolor(pda_color, 6, 1, initial(pda_color)) + skillcape = sanitize_integer(skillcape, 1, 82, initial(skillcape)) + map = sanitize_integer(map, FALSE, TRUE, initial(map)) + flare = sanitize_integer(flare, FALSE, TRUE, initial(flare)) + bar_choice = sanitize_text(bar_choice, initial(bar_choice)) var/bar_sanitize = FALSE for(var/A in GLOB.potential_box_bars) @@ -264,6 +264,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(!bar_sanitize) bar_choice = "Random" + if(!player_alt_titles) player_alt_titles = new() + show_credits = sanitize_integer(show_credits, FALSE, TRUE, initial(show_credits)) // yogs start - Donor features & yogtoggles @@ -303,6 +305,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["buttons_locked"], buttons_locked) WRITE_FILE(S["windowflash"], windowflashing) WRITE_FILE(S["be_special"], be_special) + WRITE_FILE(S["player_alt_titles"], player_alt_titles) WRITE_FILE(S["default_slot"], default_slot) WRITE_FILE(S["toggles"], toggles) WRITE_FILE(S["chat_toggles"], chat_toggles) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 1e5a3212cb5a..f2b423794653 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -378,6 +378,8 @@ if(!I) return var/jobName = I.assignment + if(I.originalassignment) + jobName = I.originalassignment if(jobName in get_all_job_icons()) //Check if the job has a hud icon return jobName if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a CentCom job diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index cc5e50db2653..1a18217549c1 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -35,6 +35,8 @@ //Sellection screen color var/selection_color = "#ffffff" + //List of alternate titles, if any + var/list/alt_titles //If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect. var/req_admin_notify @@ -260,7 +262,11 @@ C.access = J.get_access() shuffle_inplace(C.access) // Shuffle access list to make NTNet passkeys less predictable C.registered_name = H.real_name - C.assignment = J.title + if(H.mind?.role_alt_title) + C.assignment = H.mind.role_alt_title + else + C.assignment = J.title + C.originalassignment = H.mind.assigned_role if(H.age) C.registered_age = H.age C.update_label() @@ -275,7 +281,10 @@ var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot) if(istype(PDA)) PDA.owner = H.real_name - PDA.ownjob = J.title + if(H.mind?.role_alt_title) + PDA.ownjob = H.mind.role_alt_title + else + PDA.ownjob = J.title PDA.update_label() /datum/outfit/job/get_chameleon_disguise_info() diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index b10cb406e81f..f4d2d1a88f5a 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -16,6 +16,8 @@ display_order = JOB_DISPLAY_ORDER_AI var/do_special_check = TRUE + alt_titles = list("Station Central Processor", "Central Silicon Intelligence", "Cyborg Overlord") + /datum/job/ai/equip(mob/living/carbon/human/H, visualsOnly, announce, latejoin, datum/outfit/outfit_override, client/preference_source = null) if(visualsOnly) CRASH("dynamic preview is unsupported") diff --git a/code/modules/jobs/job_types/artist.dm b/code/modules/jobs/job_types/artist.dm index c45d8601831f..4f2bd90545ce 100644 --- a/code/modules/jobs/job_types/artist.dm +++ b/code/modules/jobs/job_types/artist.dm @@ -10,7 +10,7 @@ selection_color = "#dddddd" outfit = /datum/outfit/job/artist - + alt_titles = list("Painter", "Composer", "Artisan") access = list() minimal_access = list() paycheck = PAYCHECK_ASSISTANT diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index 4bb6e73ff748..ce2353de5bb9 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -18,6 +18,8 @@ Assistant paycheck_department = ACCOUNT_CIV display_order = JOB_DISPLAY_ORDER_ASSISTANT + alt_titles = list("Intern", "Apprentice", "Subordinate", "Temporary Worker", "Colleague", "Associate") + /datum/job/assistant/get_access() if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set . = ..() diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index c22e977066f3..8c46a483bbcf 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -10,6 +10,7 @@ selection_color = "#fff5cc" exp_requirements = 180 exp_type = EXP_TYPE_CREW + alt_titles = list("Breach Fixer", "Radiation Creator", "Habitation Technician", "Fire Suppression Technician", "Atmospherics Trainee", "Environmental Maintainer") outfit = /datum/outfit/job/atmos diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm index 22d48dccd4b0..9986bd118516 100644 --- a/code/modules/jobs/job_types/bartender.dm +++ b/code/modules/jobs/job_types/bartender.dm @@ -10,6 +10,8 @@ selection_color = "#bbe291" exp_type_department = EXP_TYPE_SERVICE // This is so the jobs menu can work properly + alt_titles = list("Barkeep", "Tapster", "Barista", "Mixologist") + outfit = /datum/outfit/job/bartender access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 87c02bfa265c..0ee5415dc562 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/botanist + alt_titles = list("Ecologist", "Agriculturist", "Botany Greenhorn", "Hydroponicist") + access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) paycheck = PAYCHECK_EASY diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 6c49c1cb07bd..f9777f17a9b3 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -15,6 +15,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_COMMAND + alt_titles = list("Station Commander", "Facility Overseer") outfit = /datum/outfit/job/captain diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index dfb998add446..9eb6fcd98c5b 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/cargo_tech + alt_titles = list("Deliveryperson", "Mail Service", "Exports Handler", "Cargo Trainee", "Crate Pusher") + access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) paycheck = PAYCHECK_EASY diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index 3d987162c6ea..8f4bff90ab97 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/chaplain + alt_titles = list("Priest", "Preacher", "Cleric") + access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE) minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE) paycheck = PAYCHECK_EASY diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index 3e860d92f532..aa9cfadfec6b 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -12,6 +12,8 @@ exp_requirements = 120 exp_type_department = EXP_TYPE_MEDICAL + alt_titles = list("Pharmacist", "Chemical Analyst", "Chemistry Lab Technician", "Chemical Specialist") + outfit = /datum/outfit/job/chemist access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MECH_MEDICAL, ACCESS_MINERAL_STOREROOM) diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 1602999a4e3c..6630586a7681 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -15,6 +15,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_ENGINEERING + alt_titles = list("Head of Engineering", "Engineering Director") outfit = /datum/outfit/job/ce diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 33dafd976ada..adfb74511cc9 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -15,6 +15,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_MEDICAL + alt_titles = list("Medical Director", "Head of Medical") outfit = /datum/outfit/job/cmo diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index a8b362cd9df4..36f43b0504b0 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/clown + alt_titles = list("Entertainer", "Comedian", "Jester") + access = list(ACCESS_THEATRE) minimal_access = list(ACCESS_THEATRE) paycheck = PAYCHECK_MINIMAL diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index 6996fde1ccd8..88d53a37a27b 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -12,6 +12,8 @@ outfit = /datum/outfit/job/cook + alt_titles = list("Chef", "Hash Slinger", "Sous-chef", "Culinary Artist") + access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM) paycheck = PAYCHECK_EASY diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm index 57f52803c2bb..2c4667f10a37 100644 --- a/code/modules/jobs/job_types/curator.dm +++ b/code/modules/jobs/job_types/curator.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/curator + alt_titles = list("Librarian", "Journalist", "Archivist") + access = list(ACCESS_LIBRARY, ACCESS_CONSTRUCTION, ACCESS_MINING_STATION) minimal_access = list(ACCESS_LIBRARY, ACCESS_CONSTRUCTION, ACCESS_MINING_STATION) paycheck = PAYCHECK_EASY diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm index 0cf6dee1b8c3..a9babf2ba89c 100644 --- a/code/modules/jobs/job_types/cyborg.dm +++ b/code/modules/jobs/job_types/cyborg.dm @@ -11,6 +11,7 @@ minimal_player_age = 21 exp_requirements = 120 exp_type = EXP_TYPE_CREW + alt_titles = list("Android", "Robot", "Cyborg") display_order = JOB_DISPLAY_ORDER_CYBORG diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 8698a5a91764..a26d25e0a758 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -15,6 +15,8 @@ outfit = /datum/outfit/job/detective + alt_titles = list("Investigator", "Forensic Analyst", "Investigative Cadet", "Private Eye", "Inspector") + access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_MECH_SECURITY, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_MECH_SECURITY, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) paycheck = PAYCHECK_MEDIUM diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index c1c8ebf06420..244817c23826 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -10,6 +10,7 @@ selection_color = "#d4ebf2" exp_type = EXP_TYPE_CREW exp_requirements = 60 + alt_titles = list("DNA Mechanic", "Bioengineer", "Junior Geneticist", "Gene Splicer") outfit = /datum/outfit/job/geneticist diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index c8c1b0b2d73a..28e923c571fb 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -15,6 +15,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_SUPPLY + alt_titles = list("Chief of Staff", "Head of Internal Affairs") outfit = /datum/outfit/job/hop diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index b24f7995b882..17a89caded8b 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -15,6 +15,7 @@ exp_requirements = 600 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_SECURITY + alt_titles = list("Security Commander", "Security Chief") outfit = /datum/outfit/job/hos mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index fd9717f9cd1e..a6fadbd77033 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/janitor + alt_titles = list("Custodian", "Sanitation Worker", "Cleaner", "Caretaker") + access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) paycheck = PAYCHECK_EASY diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm index 10e066781644..9aa7c31340db 100644 --- a/code/modules/jobs/job_types/lawyer.dm +++ b/code/modules/jobs/job_types/lawyer.dm @@ -9,6 +9,7 @@ supervisors = "the head of personnel" selection_color = "#dddddd" var/lawyers = 0 //Counts lawyer amount + alt_titles = list("Prosecutor", "Defense Attorney", "Paralegal", "Ace Attorney") outfit = /datum/outfit/job/lawyer diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index e80e98f726e0..37070fc29b83 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -10,6 +10,7 @@ selection_color = "#d4ebf2" exp_requirements = 180 exp_type = EXP_TYPE_CREW + alt_titles = list("Physician", "Surgeon", "Nurse", "Medical Resident", "Attending Physician", "Attending Physician", "General Practitioner") outfit = /datum/outfit/job/doctor diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index c60c1e6e7832..627390ab8107 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/mime + alt_titles = list("Mute Entertainer", "Silent Jokester", "Pantomimist") + access = list(ACCESS_THEATRE) minimal_access = list(ACCESS_THEATRE) paycheck = PAYCHECK_MINIMAL diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index d731ee36971c..5f2f4886edfd 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/quartermaster + alt_titles = list("Stock Controller", "Cargo Coordinator", "Shipping Overseer") + access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT) minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT) paycheck = PAYCHECK_MEDIUM diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 82e62c58b043..7c5401df6192 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -16,6 +16,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_SCIENCE + alt_titles = list("Chief Science Officer", "Head of Research") outfit = /datum/outfit/job/rd diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 75c1f133585c..87fc5d0e9eed 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -10,6 +10,7 @@ selection_color = "#ffeeff" exp_requirements = 60 exp_type = EXP_TYPE_CREW + alt_titles = list("Augmentation Theorist", "Cyborg Maintainer", "Robotics Intern", "Biomechanical Engineer", "Mechatronic Engineer") outfit = /datum/outfit/job/roboticist diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 696831aa50e9..a9a4f0b0d021 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -10,7 +10,7 @@ selection_color = "#ffeeff" exp_requirements = 180 exp_type = EXP_TYPE_CREW - + alt_titles = list("Researcher", "Toxins Specialist", "Physicist", "Science Intern", "Anomalist", "Quantum Physicist", "Xenobiologist", "Bomb Specialist") outfit = /datum/outfit/job/scientist diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 76a8fabbfb08..47ede25e69ee 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -15,6 +15,8 @@ outfit = /datum/outfit/job/security + alt_titles = list("Security Guard", "Threat Response Officer", "Civilan Protection Officer", "Security Cadet", "Security Staff Sergeant") + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MECH_SECURITY, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MECH_SECURITY, ACCESS_MINERAL_STOREROOM) // See /datum/job/officer/get_access() paycheck = PAYCHECK_HARD diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 57114fca9922..3cb25ae9e2b0 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -8,6 +8,7 @@ spawn_positions = 3 supervisors = "the quartermaster and the head of personnel" selection_color = "#dcba97" + alt_titles = list("Lavaland Scout", "Prospector", "Junior Miner", "Major Miner") outfit = /datum/outfit/job/miner diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 8b0f3a36b270..17c6013dcc3f 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -10,6 +10,7 @@ selection_color = "#fff5cc" exp_requirements = 180 exp_type = EXP_TYPE_CREW + alt_titles = list("Engine Technician", "Solar Engineer", "Project Engineer", "Junior Engineer", "Construction Specialist") outfit = /datum/outfit/job/engineer diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index d3f9685887f6..72e8fab706d9 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -14,6 +14,8 @@ outfit = /datum/outfit/job/virologist + alt_titles = list("Microbiologist", "Pathologist", "Junior Disease Researcher", "Epidemiologist") + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_MECH_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MEDICAL, ACCESS_VIROLOGY, ACCESS_MECH_MEDICAL, ACCESS_MINERAL_STOREROOM) paycheck = PAYCHECK_MEDIUM diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index d31081017363..301c2549b1bd 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -16,6 +16,8 @@ outfit = /datum/outfit/job/warden + alt_titles = list("Brig Watchman", "Brig Superintendent", "Security Lt. Commander", "Security Dispatcher", "Prison Supervisor") + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MECH_SECURITY, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_MECH_SECURITY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) // See /datum/job/warden/get_access() paycheck = PAYCHECK_HARD diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index f9deb8b424ac..9c7f5b4abc03 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -1,4 +1,4 @@ -GLOBAL_LIST_INIT(command_positions, list( +GLOBAL_LIST_INIT(original_command_positions, list( "Captain", "Head of Personnel", "Head of Security", @@ -6,43 +6,34 @@ GLOBAL_LIST_INIT(command_positions, list( "Research Director", "Chief Medical Officer")) - -GLOBAL_LIST_INIT(engineering_positions, list( +GLOBAL_LIST_INIT(original_engineering_positions, list( "Chief Engineer", "Station Engineer", - // yogs start - Yog jobs "Atmospheric Technician", "Signal Technician")) - // yogs end - -GLOBAL_LIST_INIT(medical_positions, list( +GLOBAL_LIST_INIT(original_medical_positions, list( "Chief Medical Officer", "Medical Doctor", "Geneticist", "Virologist", - // yogs start - Yog jobs "Chemist", "Paramedic", "Psychiatrist", "Mining Medic")) - // yogs end - -GLOBAL_LIST_INIT(science_positions, list( +GLOBAL_LIST_INIT(original_science_positions, list( "Research Director", "Scientist", "Roboticist")) - -GLOBAL_LIST_INIT(supply_positions, list( +GLOBAL_LIST_INIT(original_supply_positions, list( "Head of Personnel", "Quartermaster", "Cargo Technician", "Shaft Miner")) - -GLOBAL_LIST_INIT(civilian_positions, list( +GLOBAL_LIST_INIT(original_civilian_positions, list( "Bartender", "Botanist", "Cook", @@ -52,36 +43,105 @@ GLOBAL_LIST_INIT(civilian_positions, list( "Chaplain", "Clown", "Mime", - // yogs start - Yog jobs "Assistant", "Clerk", "Tourist", "Artist")) - // yogs end - -GLOBAL_LIST_INIT(security_positions, list( +GLOBAL_LIST_INIT(original_security_positions, list( "Head of Security", "Warden", "Detective", "Security Officer")) - -GLOBAL_LIST_INIT(nonhuman_positions, list( +GLOBAL_LIST_INIT(original_nonhuman_positions, list( "AI", "Cyborg", ROLE_PAI)) +GLOBAL_LIST_INIT(alt_command_positions, list( + "Station Commander", "Facility Overseer", + "Chief of Staff", "Head of Internal Affairs", + "Security Commander", "Security Chief", + "Head of Engineering", "Engineering Director", + "Chief Science Officer", "Head of Research", + "Medical Director", "Head of Medical")) + +GLOBAL_LIST_INIT(alt_engineering_positions, list( + "Head of Engineering", "Engineering Director", + "Engine Technician", "Solar Engineer", "Project Engineer", "Junior Engineer", "Construction Specialist", + "Habitation Technician", "Fire Suppression Technician", "Atmospherics Trainee", "Environmental Maintainer", + "NTSL Programmer", "Comms Tech", "Station IT Support" + )) + +GLOBAL_LIST_INIT(alt_medical_positions, list( + "Medical Director", "Head of Medical", + "Physician", "Surgeon", "Nurse", "Medical Resident", "Attending Physician", "Chief Surgeon", "Attending Physician", "Chief Surgeon", "Medical Subdirector", "General Practitioner", + "DNA Mechanic", "Bioengineer", "Junior Geneticist", "Gene Splicer", + "Microbiologist", "Pathologist", "Junior Disease Researcher", "Epidemiologist", + "Pharmacist", "Chemical Analyst", "Chemistry Lab Technician", "Chemical Specialist", + "EMT", "Paramedic Trainee", "Rapid Response Medic", + "Councilor", "Therapist", "Mentalist", + "Mining Medical Support", "Lavaland Medical Care Unit", "Junior Mining Medic", "Planetside Health Officer")) + +GLOBAL_LIST_INIT(alt_science_positions, list( + "Chief Science Officer", "Head of Research", + "Researcher", "Toxins Specialist", "Physicist", "Science Intern", "Anomalist", "Quantum Physicist", "Xenobiologist", "Bomb Specialist", + "Augmentation Theorist", "Cyborg Maintainer", "Robotics Intern", "Biomechanical Engineer", "Mechatronic Engineer")) + +GLOBAL_LIST_INIT(alt_supply_positions, list( + "Chief of Staff", "Head of Internal Affairs", + "Stock Controller", "Cargo Coordinator", "Shipping Overseer", + "Deliveryperson", "Mail Service", "Exports Handler", "Cargo Trainee", "Crate Pusher", + "Lavaland Scout", "Prospector", "Junior Miner", "Major Miner")) + +GLOBAL_LIST_INIT(alt_civilian_positions, list( + "Barkeep", "Tapster", "Barista", "Mixologist", + "Ecologist", "Agriculturist", "Botany Greenhorn", "Hydroponicist", + "Chef", "Hash Slinger", "Sous-chef", "Culinary Artist", + "Custodian", "Sanitation Worker", "Cleaner", "Caretaker", + "Librarian", "Journalist", "Archivist", + "Prosecutor", "Defense Attorney", "Paralegal", "Ace Attorney", + "Priest", "Preacher", "Cleric", + "Entertainer", "Comedian", "Jester", + "Mute Entertainer", "Silent Jokester", "Pantomimist", + "Intern", "Apprentice", "Subordinate", "Temporary Worker", "Colleague", "Associate", + "Salesman", "Gift Shop Attendent", "Retail Worker", + "Visitor", "Traveler", "Siteseer", + "Composer", "Artisan" + )) + +GLOBAL_LIST_INIT(alt_security_positions, list( + "Security Commander", "Security Chief", + "Brig Watchman", "Brig Superintendent", "Security Lt. Commander", "Security Dispatcher", "Prison Supervisor", + "Investigator", "Forensic Analyst", "Investigative Cadet", "Private Eye", "Inspector", + "Security Guard", "Threat Response Officer", "Civilan Protection Officer", "Security Cadet", "Security Staff Sergeant", + )) + +GLOBAL_LIST_INIT(alt_nonhuman_positions, list( + "Station Central Processor", "Central Silicon Intelligence", "Station Super Computer", + "Android", "Robot", + ROLE_PAI)) + +GLOBAL_LIST_INIT(command_positions, original_command_positions | alt_command_positions) +GLOBAL_LIST_INIT(engineering_positions, original_engineering_positions | alt_engineering_positions) +GLOBAL_LIST_INIT(medical_positions, original_medical_positions | alt_medical_positions) +GLOBAL_LIST_INIT(science_positions, original_science_positions | alt_science_positions) +GLOBAL_LIST_INIT(supply_positions, original_supply_positions | alt_supply_positions) +GLOBAL_LIST_INIT(security_positions, original_security_positions | alt_security_positions) +GLOBAL_LIST_INIT(nonhuman_positions, original_nonhuman_positions | alt_nonhuman_positions) +GLOBAL_LIST_INIT(civilian_positions, original_civilian_positions | alt_civilian_positions) + GLOBAL_LIST_INIT(exp_jobsmap, list( - EXP_TYPE_CREW = list("titles" = command_positions | engineering_positions | medical_positions | science_positions | supply_positions | security_positions | civilian_positions | list("AI","Cyborg")), // crew positions + EXP_TYPE_CREW = list("titles" = command_positions | engineering_positions | medical_positions | science_positions | supply_positions | security_positions | civilian_positions | nonhuman_positions), // crew positions EXP_TYPE_COMMAND = list("titles" = command_positions), EXP_TYPE_ENGINEERING = list("titles" = engineering_positions), EXP_TYPE_MEDICAL = list("titles" = medical_positions), EXP_TYPE_SCIENCE = list("titles" = science_positions), EXP_TYPE_SUPPLY = list("titles" = supply_positions), EXP_TYPE_SECURITY = list("titles" = security_positions), - EXP_TYPE_SILICON = list("titles" = list("AI","Cyborg")), - EXP_TYPE_SERVICE = list("titles" = civilian_positions), + EXP_TYPE_SILICON = list("titles" = nonhuman_positions), + EXP_TYPE_SERVICE = list("titles" = civilian_positions) )) GLOBAL_LIST_INIT(exp_specialmap, list( @@ -154,3 +214,13 @@ GLOBAL_PROTECT(exp_specialmap) job = para_expand.Replace(job, "paramedic") // yogs end return job + +/proc/get_alternate_titles(var/job) + var/list/jobs = SSjob.occupations + var/list/titles = list() + + for(var/datum/job/J in jobs) + if(J.title == job) + titles = J.alt_titles + + return titles diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index 49f65d2d6535..a31a300e7ad1 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -274,12 +274,12 @@ else if(isnull(departments)) departments = list( CARDCON_DEPARTMENT_COMMAND = list("Captain"),//lol - CARDCON_DEPARTMENT_ENGINEERING = GLOB.engineering_positions, - CARDCON_DEPARTMENT_MEDICAL = GLOB.medical_positions, - CARDCON_DEPARTMENT_SCIENCE = GLOB.science_positions, - CARDCON_DEPARTMENT_SECURITY = GLOB.security_positions, - CARDCON_DEPARTMENT_SUPPLY = GLOB.supply_positions, - CARDCON_DEPARTMENT_SERVICE = GLOB.civilian_positions + CARDCON_DEPARTMENT_ENGINEERING = GLOB.original_engineering_positions, + CARDCON_DEPARTMENT_MEDICAL = GLOB.original_medical_positions, + CARDCON_DEPARTMENT_SCIENCE = GLOB.original_science_positions, + CARDCON_DEPARTMENT_SECURITY = GLOB.original_security_positions, + CARDCON_DEPARTMENT_SUPPLY = GLOB.original_supply_positions, + CARDCON_DEPARTMENT_SERVICE = GLOB.original_civilian_positions ) data["jobs"] = list() for(var/department in departments) diff --git a/yogstation/code/game/objects/items/cards_ids.dm b/yogstation/code/game/objects/items/cards_ids.dm index 1bcd88d44b88..24e5b02e1fcc 100644 --- a/yogstation/code/game/objects/items/cards_ids.dm +++ b/yogstation/code/game/objects/items/cards_ids.dm @@ -7,7 +7,7 @@ ID_fluff() /obj/item/card/id/proc/ID_fluff() - var/job = assignment + var/job = originalassignment var/list/idfluff = list( "Assistant" = list("civillian","green"), "Captain" = list("captain","gold"), diff --git a/yogstation/code/modules/jobs/job_types/clerk.dm b/yogstation/code/modules/jobs/job_types/clerk.dm index 45256ed8c44f..44535c0214cf 100644 --- a/yogstation/code/modules/jobs/job_types/clerk.dm +++ b/yogstation/code/modules/jobs/job_types/clerk.dm @@ -10,7 +10,7 @@ selection_color = "#dddddd" access = list(ACCESS_MANUFACTURING) minimal_access = list(ACCESS_MANUFACTURING) - + alt_titles = list("Salesman", "Gift Shop Attendent", "Retail Worker") outfit = /datum/outfit/job/clerk paycheck = PAYCHECK_EASY paycheck_department = ACCOUNT_SRV diff --git a/yogstation/code/modules/jobs/job_types/mining_medic.dm b/yogstation/code/modules/jobs/job_types/mining_medic.dm index cfda9318ba5a..57538d9c0d39 100644 --- a/yogstation/code/modules/jobs/job_types/mining_medic.dm +++ b/yogstation/code/modules/jobs/job_types/mining_medic.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/miningmedic + alt_titles = list("Mining Medical Support", "Lavaland Medical Care Unit", "Junior Mining Medic", "Planetside Health Officer") + minimal_character_age = 24 // "According to age statistics published by the Association of American Medical Colleges, the average age among medical students who matriculated at U.S. medical schools in the 2017-2018 school year was 24" access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CARGO, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM, ACCESS_MECH_MINING, ACCESS_MECH_MEDICAL) diff --git a/yogstation/code/modules/jobs/job_types/paramedic.dm b/yogstation/code/modules/jobs/job_types/paramedic.dm index 870c2c10fb24..7b085fdcb095 100644 --- a/yogstation/code/modules/jobs/job_types/paramedic.dm +++ b/yogstation/code/modules/jobs/job_types/paramedic.dm @@ -8,6 +8,7 @@ spawn_positions = 2 supervisors = "the chief medical officer" selection_color = "#d4ebf2" + alt_titles = list("EMT", "Paramedic Trainee", "Rapid Response Medic") outfit = /datum/outfit/job/paramedic diff --git a/yogstation/code/modules/jobs/job_types/psychiatrist.dm b/yogstation/code/modules/jobs/job_types/psychiatrist.dm index f6603bd052fc..45153da1b146 100644 --- a/yogstation/code/modules/jobs/job_types/psychiatrist.dm +++ b/yogstation/code/modules/jobs/job_types/psychiatrist.dm @@ -8,6 +8,7 @@ spawn_positions = 1 supervisors = "the chief medical officer" selection_color = "#d4ebf2" + alt_titles = list("Counsellor", "Therapist", "Mentalist") outfit = /datum/outfit/job/psych @@ -33,4 +34,4 @@ l_hand = /obj/item/storage/briefcase glasses = /obj/item/clothing/glasses/regular belt = /obj/item/pda - ears = /obj/item/radio/headset/headset_med \ No newline at end of file + ears = /obj/item/radio/headset/headset_med diff --git a/yogstation/code/modules/jobs/job_types/signal_technician.dm b/yogstation/code/modules/jobs/job_types/signal_technician.dm index c52a5c679c80..22642d50c7a2 100644 --- a/yogstation/code/modules/jobs/job_types/signal_technician.dm +++ b/yogstation/code/modules/jobs/job_types/signal_technician.dm @@ -11,6 +11,8 @@ outfit = /datum/outfit/job/signal_tech + alt_titles = list("NTSL Programmer", "Comms Tech", "Station IT Support") + access = list(ACCESS_TCOMSAT, ACCESS_TCOM_ADMIN, ACCESS_TECH_STORAGE, ACCESS_RC_ANNOUNCE, ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS, ACCESS_MECH_ENGINE) minimal_access = list(ACCESS_TCOMSAT, ACCESS_TCOM_ADMIN, ACCESS_TECH_STORAGE, ACCESS_RC_ANNOUNCE, ACCESS_CONSTRUCTION, ACCESS_MECH_ENGINE) @@ -41,4 +43,4 @@ satchel = /obj/item/storage/backpack/satchel/eng duffelbag = /obj/item/storage/backpack/duffelbag/engineering box = /obj/item/storage/box/engineer - pda_slot = SLOT_L_STORE \ No newline at end of file + pda_slot = SLOT_L_STORE diff --git a/yogstation/code/modules/jobs/job_types/tourist.dm b/yogstation/code/modules/jobs/job_types/tourist.dm index 4770909b1b29..826766b68b00 100644 --- a/yogstation/code/modules/jobs/job_types/tourist.dm +++ b/yogstation/code/modules/jobs/job_types/tourist.dm @@ -9,7 +9,7 @@ selection_color = "#dddddd" access = list() minimal_access = list() - + alt_titles = list("Visitor", "Traveler", "Siteseer") outfit = /datum/outfit/job/tourist paycheck = PAYCHECK_EASY paycheck_department = ACCOUNT_CIV @@ -26,4 +26,4 @@ backpack_contents = list(/obj/item/camera_film, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c20) r_hand = /obj/item/camera l_pocket = /obj/item/camera_film - r_pocket = /obj/item/camera_film \ No newline at end of file + r_pocket = /obj/item/camera_film