diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 68a9033d7f..86383a50b2 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -12,6 +12,8 @@ #define ROBOTICIST (1<<8) #define AI_JF (1<<9) #define CYBORG (1<<10) +#define JR_OFFICER (1<<11) +#define JR_ENGINEER (1<<12) #define MEDSCI (1<<1) @@ -24,6 +26,8 @@ #define GENETICIST (1<<5) #define VIROLOGIST (1<<6) #define PARAMEDIC (1<<7) +#define JR_DOCTOR (1<<8) +#define JR_SCIENTIST (1<<9) #define CIVILIAN (1<<2) diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index 73f24948d0..9ab900ef36 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -26,7 +26,7 @@ false_report_weight = 1 chaos = 4 restricted_jobs = list("Prisoner", "AI","Cyborg") - protected_jobs = list("Chaplain", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + protected_jobs = list("Chaplain", "Security Cadet", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery required_players = 20 required_enemies = 2 recommended_enemies = 4 diff --git a/code/game/gamemodes/brother/traitor_bro.dm b/code/game/gamemodes/brother/traitor_bro.dm index 511f3bb597..f0bec30545 100644 --- a/code/game/gamemodes/brother/traitor_bro.dm +++ b/code/game/gamemodes/brother/traitor_bro.dm @@ -8,7 +8,7 @@ required_players = 25 chaos = 5 restricted_jobs = list("Prisoner", "AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery announce_span = "danger" announce_text = "There are Syndicate agents and Blood Brothers on the station!\n\ diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 05979867e2..0d25ea2137 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -12,7 +12,7 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th false_report_weight = 10 chaos = 5 restricted_jobs = list("Prisoner", "AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist + GS13 Edit: Excempting cadets from antagery required_players = 15 required_enemies = 1 recommended_enemies = 4 diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 8b7f265b11..186811fefe 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -139,7 +139,7 @@ Credit where due: required_enemies = 3 recommended_enemies = 5 enemy_minimum_age = 7 - protected_jobs = list("Prisoner", "AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //Silicons can eventually be converted + protected_jobs = list("Prisoner", "AI", "Cyborg", "Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //Silicons can eventually be converted + GS13 Edit: Excempting cadets from antagery restricted_jobs = list("Chaplain", "Captain") announce_span = "brass" announce_text = "Servants of Ratvar are trying to summon the Justiciar!\n\ diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 72b3b53989..0168757f2d 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -40,7 +40,7 @@ false_report_weight = 10 chaos = 8 restricted_jobs = list("Prisoner", "AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery required_players = 30 required_enemies = 3 recommended_enemies = 5 diff --git a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm index 2086653012..db38ef27ce 100644 --- a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm +++ b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm @@ -5,7 +5,7 @@ false_report_weight = 5 chaos = 5 restricted_jobs = list("Prisoner", "AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to heretic role blacklist + protected_jobs = list("Security Officer","Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to heretic role blacklist + GS13 Edit: Excempting cadets from antagery required_players = 15 required_enemies = 1 recommended_enemies = 4 diff --git a/code/game/gamemodes/overthrow/overthrow.dm b/code/game/gamemodes/overthrow/overthrow.dm index 6a118567df..711673212e 100644 --- a/code/game/gamemodes/overthrow/overthrow.dm +++ b/code/game/gamemodes/overthrow/overthrow.dm @@ -5,7 +5,7 @@ antag_flag = ROLE_OVERTHROW chaos = 5 restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery required_players = 20 // the core idea is of a swift, bloodless coup, so it shouldn't be as chaotic as revs. required_enemies = 2 // minimum two teams, otherwise it's just nerfed revs. recommended_enemies = 4 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 5b3e742336..961fe0b3d6 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -14,7 +14,7 @@ false_report_weight = 10 chaos = 8 restricted_jobs = list("Prisoner", "AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery required_players = 20 required_enemies = 1 recommended_enemies = 3 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index d180e43d82..6e1f931a36 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -11,7 +11,7 @@ antag_flag = ROLE_TRAITOR false_report_weight = 20 //Reports of traitors are pretty common. restricted_jobs = list("Prisoner", "Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist + GS13 Edit: Excempting cadets from antagery required_players = 0 required_enemies = 1 recommended_enemies = 4 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 00af91d8b9..3cb2e1c7ce 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1570,7 +1570,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) popup.open(FALSE) onclose(user, "capturekeypress", src) -/datum/preferences/proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), widthPerColumn = 295, height = 620) +/datum/preferences/proc/SetChoices(mob/user, limit = 22, list/splitJobs = list("Chief Engineer"), widthPerColumn = 295, height = 620) //GS13 Edit: Expanding out the pref window for new job additions if(!SSjob) return @@ -3025,7 +3025,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/new_wl_rate = input(user, "Choose your weight loss rate from 0.1 (10%) to 2 (200%).\n Decimals such as 0.2 indicate 20% rate.\nDefault recommended rate is 0.5 (50%)", "Character Preference", wl_rate) as num|null if (new_wl_rate) wl_rate = max(min(round(text2num(new_wl_rate),0.01),2),0) - + if("stuckage_chance") var/new_stuckage_chance = input(user, "Choose your chance to get stuck in doors from 0.1 (10%) to 1 (100%).\nDecimals such as 0.2 indicate 20% chance.\nSetting this to 0 restores default values.", "Character Preference", stuckage_chance) as num|null if(new_stuckage_chance) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 35a89b46db..233802f3af 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -353,9 +353,9 @@ /proc/get_all_jobs() return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician", - "Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", - "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Paramedic", - "Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer", "Prisoner") + "Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", "Engineering Intern", + "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Paramedic", "Medical Resident", + "Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Security Cadet", "Prisoner") //Rookie roles /proc/get_all_job_icons() //For all existing HUD icons return get_all_jobs() + list("Prisoner") diff --git a/code/modules/jobs/job_titles.dm b/code/modules/jobs/job_titles.dm index 8518d4950c..4ff3bdaee2 100644 --- a/code/modules/jobs/job_titles.dm +++ b/code/modules/jobs/job_titles.dm @@ -2,7 +2,7 @@ //Engineering /datum/job/chief_engineer - alt_titles = list("Head Engineer", "Construction Coordinator", "Project Manager", "Power Plant Director") + alt_titles = list("Head Engineer", "Construction Coordinator", "Project Manager", "Power Plant Director", "Engineering Foreman") /datum/job/engineer alt_titles = list("Maintenance Technician", "Engine Technician", "Electrician", "Structural Engineer", "Mechanic", "Station Architect", "Nuclear Plant Operator") @@ -10,27 +10,30 @@ /datum/job/atmos alt_titles = list("Firefighter", "Life Support Specialist", "Disposals Technician") +/datum/job/junior_engineer + alt_titles = list("Atmospheric Intern", "Apprentice Engineer") + //Service /datum/job/assistant - alt_titles = list("Civilian", "Morale Officer", "Off-Duty", "Visitor", "Businessman", "Trader", "Entertainer", "Tourist") + alt_titles = list("Civilian", "Morale Officer", "Off-Duty", "Visitor", "Businessman", "Trader", "Entertainer", "Tourist", "Artist", "Businesswoman", "Butler", "Contractor", "Entertainer", "Freelancer", "Fitness Instructor", "Hobbyist", "Performer") /datum/job/cook alt_titles = list("Cook", "Culinary Artist", "Butcher", "Chef de partie", "Poissonier", "Baker", "Taste Tester") /datum/job/hydro - alt_titles = list("Gardener", "Herbalist", "Botanical Researcher", "Hydroponicist", "Farmer", "Beekeeper", "Vintner") + alt_titles = list("Gardener", "Herbalist", "Botanical Researcher", "Hydroponicist", "Apiarist", "Apiculturist", "Farmer", "Beekeeper", "Vintner", "Junior Botanist") /datum/job/curator - alt_titles = list("Journalist", "Librarian", "Keeper") + alt_titles = list("Journalist", "Librarian", "Keeper", "Historian", "Professor", "Archivist") /datum/job/chaplain - alt_titles = list("Priest", "Priestess", "Prior", "Monk", "Nun", "Counselor") + alt_titles = list("Priest", "Priestess", "Prior", "Monk", "Nun", "Counselor", "Cleric", "High Priest", "High Priestess", "Imam", "Oracle", "Preacher", "Pastor", "Pontifex", "Guru", "Rabbi", "Reverend", "Shrine Maiden", "Shrine Guardian") /datum/job/janitor - alt_titles = list("Custodian", "Sanitation Technician", "Maid", "Trash Can", "Disposal Unit") + alt_titles = list("Custodian", "Custodial Technician", "Sanitation Technician", "Maintenance Technician", "Maid", "Trash Can", "Disposal Unit", "Groundskeeper") /datum/job/lawyer - alt_titles = list("Human Resources Agent", "Internal Affairs Agent", "Attorney") + alt_titles = list("Human Resources Agent", "Internal Affairs Agent", "Attorney", "Defense Attorney", "Legal Clerk", "Public Defender") /datum/job/clown alt_titles = list("Jester", "Comedian") @@ -39,61 +42,72 @@ alt_titles = list("Performer", "Pantomime", "Mimic") /datum/job/bartender - alt_titles = list("Mixologist", "Sommelier", "Bar Owner", "Barmaid", "Expediter") + alt_titles = list("Mixologist", "Sommelier", "Bar Owner", "Barmaid", "Expediter", "Barista", "Tavernkeeper") //Science /datum/job/rd - alt_titles = list("Research Manager", "Science Administrator") + alt_titles = list("Research Manager", "Science Administrator", "Chief Science Officer", "Lead Researcher", "Science Director", "Head of Science") /datum/job/scientist - alt_titles = list("Circuitry Designer", "Xenobiologist", "Xenobotanist", "Xenoarcheologist", "Chemical Researcher", "Researcher", "Pyrotechnician") + alt_titles = list("Circuitry Designer", "Xenobiologist", "Xenobotanist", "Xenoarcheologist", "Chemical Researcher", "Researcher", "Pyrotechnician", "Lab Technician", "Theoretical Physicist") /datum/job/roboticist - alt_titles = list("Biomechanical Engineer", "Mechatronic Engineer", "Mechanic") + alt_titles = list("Biomechanical Engineer", "Mechatronic Engineer", "Mechanic", "Machinist") + +/datum/job/junior_scientist + alt_titles = list("Research Intern", "Apprentice Roboticist", "Research Assistant") //Medical /datum/job/cmo - alt_titles = list("Medical Director", "Medical Administrator") + alt_titles = list("Medical Director", "Medical Administrator", "Chief Physician", "Head of Medical", "Head Physician") /datum/job/doctor - alt_titles = list("Nurse", "Surgeon", "Physician", "Paramedic", "Trophologist", "Nutritionist", "Therapist", "Psychiatrist") + alt_titles = list("Nurse", "Surgeon", "Physician", "Trophologist", "Nutritionist", "Therapist", "Psychiatrist") /datum/job/chemist - alt_titles = list("Pharmacist", "Pharmacologist") + alt_titles = list("Pharmacist", "Pharmacologist", "Pharmacy Technician") /datum/job/virologist - alt_titles = list("Microbiologist", "Biochemist", "Pathologist") + alt_titles = list("Microbiologist", "Biochemist", "Pathologist", "Epidemiologist") /datum/job/geneticist - alt_titles = list("Gene Therapist", "Genetics Researcher") + alt_titles = list("Gene Therapist", "Genetics Researcher", "Mutation Researcher", "Gene Tailor") + +/datum/job/paramedic + alt_titles = list ("Emergency Medical Technician", "Search and Rescue Technician", "Trauma Team Responder") + +/datum/job/junior_doctor + alt_titles = list("Medical Student", "Fellow", "Trainee Pharmacy Technician", "Trainee Pharmacist", "Junior Pathologist") //Security /datum/job/hos alt_titles = list("Chief of Security", "Security Commander", "Sheriff") /datum/job/warden - alt_titles = list("Prison Chief", "Armory Manager", "Prison Administrator", "Brig Superintendent") + alt_titles = list("Prison Chief", "Armory Manager", "Prison Administrator", "Brig Superintendent", "Deputy Commissioner of Security") /datum/job/officer - alt_titles = list("Security Agent", "Probation Officer", "Security Peacekeeper", "Security Guard", "Guardsman", "Security Cadet") + alt_titles = list("Security Agent", "Probation Officer", "Security Peacekeeper", "Security Guard", "Security Constable", "Security Operative", "Guardsman") /datum/job/detective alt_titles = list("Forensics Technician", "Private Investigator", "Gumshoe") +/datum/job/junior_officer + alt_titles = list("Security Assistant","Rookie", "Brig Deputy", "Junior Officer") //Supply /datum/job/qm - alt_titles = list("Supply Chief") + alt_titles = list("Supply Chief", "Head of Supply", "Logistics Coordinator", "Warehouse Supervisor") /datum/job/cargo_tech - alt_titles = list("Mail Man", "Mail Woman", "Mailroom Technician", "Deliveries Officer", "Logistics Technician") + alt_titles = list("Mail Man", "Mail Woman", "Mailroom Technician", "Deliveries Officer", "Logistics Technician", "Warehouse Technician") /datum/job/mining - alt_titles = list("Exotic Ore Miner", "Fauna Hunter", "Explorer", "Digger") //Just because you're a hunter does not excuse you from rock collecting!!!!!!!!!!!! + alt_titles = list("Exotic Ore Miner", "Fauna Hunter", "Explorer", "Digger", "Apprentice Miner") //Just because you're a hunter does not excuse you from rock collecting!!!!!!!!!!!! //Command /datum/job/captain - alt_titles = list("Station Director", "Station Commander", "Station Overseer", "Stationmaster", "Commissar") + alt_titles = list("Station Director", "Station Commander", "Station Overseer", "Stationmaster", "Commissar", "Facility Director", "Commanding Officer") /datum/job/hop - alt_titles = list("Personnel Manager", "Staff Administrator", "Records Administrator") + alt_titles = list("Personnel Manager", "Staff Administrator", "Records Administrator", "Crew Supervisor", "Employment Officer", "Executive Officer") diff --git a/code/modules/jobs/job_types/engineer_intern.dm b/code/modules/jobs/job_types/engineer_intern.dm new file mode 100644 index 0000000000..954dc8befe --- /dev/null +++ b/code/modules/jobs/job_types/engineer_intern.dm @@ -0,0 +1,79 @@ +/datum/job/junior_engineer + title = "Engineering Intern" + flag = JR_ENGINEER + department_head = list("Chief Engineer") + department_flag = ENGSEC + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the chief engineer, and any other more experienced engineers" + selection_color = "#ff9b3d" + exp_requirements = 60 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/engineer/junior + plasma_outfit = /datum/outfit/plasmaman/engineering + + access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, + ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, + ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM) + paycheck = PAYCHECK_EASY + paycheck_department = ACCOUNT_ENG + bounty_types = CIV_JOB_ENG + departments = DEPARTMENT_BITFLAG_ENGINEERING + + starting_modifiers = list(/datum/skill_modifier/job/level/wiring, /datum/skill_modifier/job/affinity/wiring) + + display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER + + threat = 1 + + family_heirlooms = list( + /obj/item/clothing/head/hardhat, + /obj/item/screwdriver/brass/family, + /obj/item/wrench/brass/family, + /obj/item/weldingtool/mini, // No brass family variant + /obj/item/crowbar/brass/family, + /obj/item/wirecutters/brass/family + ) + + mail_goodies = list( + /obj/item/storage/box/lights/mixed = 20, + /obj/item/lightreplacer = 10, + /obj/item/holosign_creator/engineering = 8, + /obj/item/clothing/head/hardhat/red/upgraded = 1 + ) + +/datum/outfit/job/engineer/junior + name = "Engineering Intern" + jobtype = /datum/job/junior_engineer + + belt = /obj/item/storage/belt/utility/full/engi + l_pocket = /obj/item/pda/engineering + ears = /obj/item/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/engineering/engineer + shoes = /obj/item/clothing/shoes/workboots + head = /obj/item/clothing/head/hardhat + r_pocket = /obj/item/t_scanner + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + box = /obj/item/storage/box/survival/engineer + pda_slot = ITEM_SLOT_LPOCKET + backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + +/datum/outfit/job/engineer/gloved + name = "Station Engineer (Gloves)" + gloves = /obj/item/clothing/gloves/color/yellow + +/datum/outfit/job/engineer/gloved/rig + name = "Station Engineer (Hardsuit)" + mask = /obj/item/clothing/mask/breath + suit = /obj/item/clothing/suit/space/hardsuit/engine + suit_store = /obj/item/tank/internals/oxygen + head = null + internals_slot = ITEM_SLOT_SUITSTORE + + diff --git a/code/modules/jobs/job_types/medical_intern.dm b/code/modules/jobs/job_types/medical_intern.dm new file mode 100644 index 0000000000..fcbaf2094a --- /dev/null +++ b/code/modules/jobs/job_types/medical_intern.dm @@ -0,0 +1,52 @@ +/datum/job/junior_doctor + title = "Medical Resident" + flag = JR_DOCTOR + department_head = list("Chief Medical Officer") + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the chief medical officer, and any other senior medical staff" + selection_color = "#74b5e0" + + outfit = /datum/outfit/job/doctor/junior + departments = DEPARTMENT_BITFLAG_MEDICAL + plasma_outfit = /datum/outfit/plasmaman/medical + + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) + paycheck = PAYCHECK_EASY + paycheck_department = ACCOUNT_MED + bounty_types = CIV_JOB_MED + + display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR + threat = 0.5 + + starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom + ) + + mail_goodies = list( + /obj/effect/spawner/lootdrop/organ_spawner = 5, +// /obj/effect/spawner/lootdrop/memeorgans = 1 + ) + +/datum/outfit/job/doctor/junior + name = "Medical Resident" + jobtype = /datum/job/junior_doctor + + belt = /obj/item/pda/medical + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical/doctor + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat + l_hand = /obj/item/storage/firstaid/regular + suit_store = /obj/item/flashlight/pen + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + + chameleon_extras = /obj/item/gun/syringe diff --git a/code/modules/jobs/job_types/research_student.dm b/code/modules/jobs/job_types/research_student.dm new file mode 100644 index 0000000000..740f2aee75 --- /dev/null +++ b/code/modules/jobs/job_types/research_student.dm @@ -0,0 +1,49 @@ +/datum/job/junior_scientist + title = "Research Student" + flag = SCIENTIST + department_head = list("Research Director") + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 1 + supervisors = "the research director, and any other senior science staff" + selection_color = "#9574cd" + exp_requirements = 60 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/scientist/junior + plasma_outfit = /datum/outfit/plasmaman/science + + access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS) + minimal_access = list(ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM) + paycheck = PAYCHECK_EASY + paycheck_department = ACCOUNT_SCI + bounty_types = CIV_JOB_SCI + departments = DEPARTMENT_BITFLAG_SCIENCE + starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic) + display_order = JOB_DISPLAY_ORDER_SCIENTIST + threat = 1.2 + + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) + + mail_goodies = list( +// /obj/item/raw_anomaly_core/random = 10, no free cores for probies +// /obj/item/disk/tech_disk/spaceloot = 2, + /obj/item/camera_bug = 1 + ) + +/datum/outfit/job/scientist/junior + name = "Research Student" + jobtype = /datum/job/junior_scientist + + belt = /obj/item/pda/toxins + ears = /obj/item/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/rnd/scientist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/science + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + diff --git a/code/modules/jobs/job_types/security_cadet.dm b/code/modules/jobs/job_types/security_cadet.dm new file mode 100644 index 0000000000..2aeae6db5d --- /dev/null +++ b/code/modules/jobs/job_types/security_cadet.dm @@ -0,0 +1,178 @@ +/datum/job/junior_officer + title = "Security Cadet" + flag = JR_OFFICER + auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY + department_head = list("Head of Security") + department_flag = ENGSEC + faction = "Station" + total_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() + spawn_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() + supervisors = "the head of security, and the head of your assigned department (if applicable), and any other senior officer" + selection_color = "#c02f2f" + minimal_player_age = 3 + exp_requirements = 300 + exp_type = EXP_TYPE_CREW + considered_combat_role = TRUE + + outfit = /datum/outfit/job/security/junior + plasma_outfit = /datum/outfit/plasmaman/security + + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_MINERAL_STOREROOM) // See /datum/job/officer/get_access() + paycheck = PAYCHECK_MEDIUM + paycheck_department = ACCOUNT_SEC + bounty_types = CIV_JOB_SEC + departments = DEPARTMENT_BITFLAG_SECURITY + + mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER + blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia) + threat = 2 + + family_heirlooms = list( + /obj/item/book/manual/gato_spacelaw + ) + + mail_goodies = list( + /obj/item/reagent_containers/food/snacks/donut/caramel = 10, + /obj/item/reagent_containers/food/snacks/donut/matcha = 10, + /obj/item/reagent_containers/food/snacks/donut/blumpkin = 5, +// /obj/item/clothing/mask/whistle = 5, +// /obj/item/melee/baton/boomerang/loaded = 1 + ) + +/datum/job/junior_officer/get_access() + var/list/L = list() + L |= ..() | check_config_for_sec_maint() + return L + + +/datum/job/junior_officer/after_spawn(mob/living/spawned, client/player_client, latejoin = FALSE) + . = ..() + if(!ishuman(spawned)) + return + var/mob/living/carbon/human/H = spawned + // Assign department security + var/department + if(player_client?.prefs) + department = player_client.prefs.prefered_security_department + if(!LAZYLEN(GLOB.available_depts) || department == "None") + return + else if(department in GLOB.available_depts) + LAZYREMOVE(GLOB.available_depts, department) + else + department = pick_n_take(GLOB.available_depts) + var/ears = null + var/accessory = null + var/list/dep_access = null + var/destination = null + var/spawn_point = null + switch(department) + if(SEC_DEPT_SUPPLY) + ears = /obj/item/radio/headset/headset_sec/alt/department/supply + dep_access = list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_CARGO) + destination = /area/security/checkpoint/supply + spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/cargo + if(SEC_DEPT_ENGINEERING) + ears = /obj/item/radio/headset/headset_sec/alt/department/engi + dep_access = list(ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_ATMOSPHERICS) + destination = /area/security/checkpoint/engineering + spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/engine + if(SEC_DEPT_MEDICAL) + ears = /obj/item/radio/headset/headset_sec/alt/department/med + dep_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING) + destination = /area/security/checkpoint/medical + spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/medblue + if(SEC_DEPT_SCIENCE) + ears = /obj/item/radio/headset/headset_sec/alt/department/sci + dep_access = list(ACCESS_RESEARCH, ACCESS_TOX) + destination = /area/security/checkpoint/science + spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/science + + if(accessory) + var/obj/item/clothing/under/U = H.w_uniform + U.attach_accessory(new accessory) + if(ears) + if(H.ears) + qdel(H.ears) + H.equip_to_slot_or_del(new ears(H),ITEM_SLOT_EARS) + + var/obj/item/card/id/W = H.wear_id + W.access |= dep_access + + var/teleport = 0 + if(!CONFIG_GET(flag/sec_start_brig)) + if(destination || spawn_point) + teleport = 1 + if(teleport) + var/turf/T + if(spawn_point) + T = get_turf(spawn_point) + H.Move(T) + else + var/safety = 0 + while(safety < 25) + T = safepick(get_area_turfs(destination)) + if(T && !H.Move(T)) + safety += 1 + continue + else + break + if(department) + to_chat(H, "You have been assigned to [department]!") + else + to_chat(H, "You have not been assigned to any department. Patrol the halls and help where needed.") + +/datum/outfit/job/security/junior + name = "Security Cadet" + jobtype = /datum/job/junior_officer + + belt = /obj/item/pda/security + ears = /obj/item/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/security/officer + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/helmet/sec + suit = /obj/item/clothing/suit/armor/vest/alt + shoes = /obj/item/clothing/shoes/jackboots/sec + l_pocket = /obj/item/restraints/handcuffs + r_pocket = /obj/item/assembly/flash/handheld + suit_store = /obj/item/gun/energy/e_gun/advtaser + backpack_contents = list(/obj/item/melee/baton/loaded=1) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + box = /obj/item/storage/box/survival/security + + implants = list(/obj/item/implant/mindshield) + + chameleon_extras = list(/obj/item/gun/energy/disabler, /obj/item/clothing/glasses/hud/security/sunglasses, /obj/item/clothing/head/helmet) + //The helmet is necessary because /obj/item/clothing/head/helmet/sec is overwritten in the chameleon list by the standard helmet, which has the same name and icon state + + +/obj/item/radio/headset/headset_sec/alt/department/Initialize(mapload) + . = ..() + wires = new/datum/wires/radio(src) + secure_radio_connections = new + recalculateChannels() + +/obj/item/radio/headset/headset_sec/alt/department/engi + keyslot = new /obj/item/encryptionkey/headset_sec + keyslot2 = new /obj/item/encryptionkey/headset_eng + +/obj/item/radio/headset/headset_sec/alt/department/supply + keyslot = new /obj/item/encryptionkey/headset_sec + keyslot2 = new /obj/item/encryptionkey/headset_cargo + +/obj/item/radio/headset/headset_sec/alt/department/med + keyslot = new /obj/item/encryptionkey/headset_sec + keyslot2 = new /obj/item/encryptionkey/headset_med + +/obj/item/radio/headset/headset_sec/alt/department/sci + keyslot = new /obj/item/encryptionkey/headset_sec + keyslot2 = new /obj/item/encryptionkey/headset_sci diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index d91b102599..9df04794ee 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -6,11 +6,12 @@ GLOBAL_LIST_INIT(command_positions, list( "Research Director", "Chief Medical Officer", "Quartermaster")) - +//GS13 edit: Trainee roles GLOBAL_LIST_INIT(engineering_positions, list( "Chief Engineer", "Station Engineer", - "Atmospheric Technician")) + "Atmospheric Technician", + "Engineering Intern")) GLOBAL_LIST_INIT(medical_positions, list( @@ -19,13 +20,15 @@ GLOBAL_LIST_INIT(medical_positions, list( "Geneticist", "Virologist", "Paramedic", - "Chemist")) + "Chemist", + "Medical Resident")) GLOBAL_LIST_INIT(science_positions, list( "Research Director", "Scientist", - "Roboticist")) + "Roboticist", + "Research Student")) GLOBAL_LIST_INIT(supply_positions, list( "Quartermaster", @@ -50,8 +53,9 @@ GLOBAL_LIST_INIT(security_positions, list( "Head of Security", "Warden", "Detective", - "Security Officer")) - + "Security Officer", + "Security Cadet")) +//End Edits GLOBAL_LIST_INIT(nonhuman_positions, list( "AI", diff --git a/hyperstation/code/gamemode/traitor_thief.dm b/hyperstation/code/gamemode/traitor_thief.dm index 56cdde641a..20e50ddcbc 100644 --- a/hyperstation/code/gamemode/traitor_thief.dm +++ b/hyperstation/code/gamemode/traitor_thief.dm @@ -7,7 +7,7 @@ antag_flag = ROLE_TRAITOR false_report_weight = 20 //Reports of traitors are pretty common. restricted_jobs = list("AI","Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //GS13 Edit: Excempting cadets from antagery required_players = 0 required_enemies = 0 diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index 1bd94f2424..178971aa6e 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ diff --git a/tgstation.dme b/tgstation.dme index d5e6d706ab..eacade08ce 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2492,19 +2492,23 @@ #include "code\modules\jobs\job_types\curator.dm" #include "code\modules\jobs\job_types\cyborg.dm" #include "code\modules\jobs\job_types\detective.dm" +#include "code\modules\jobs\job_types\engineer_intern.dm" #include "code\modules\jobs\job_types\geneticist.dm" #include "code\modules\jobs\job_types\head_of_personnel.dm" #include "code\modules\jobs\job_types\head_of_security.dm" #include "code\modules\jobs\job_types\janitor.dm" #include "code\modules\jobs\job_types\lawyer.dm" #include "code\modules\jobs\job_types\medical_doctor.dm" +#include "code\modules\jobs\job_types\medical_intern.dm" #include "code\modules\jobs\job_types\mime.dm" #include "code\modules\jobs\job_types\paramedic.dm" #include "code\modules\jobs\job_types\prisoner.dm" #include "code\modules\jobs\job_types\quartermaster.dm" #include "code\modules\jobs\job_types\research_director.dm" +#include "code\modules\jobs\job_types\research_student.dm" #include "code\modules\jobs\job_types\roboticist.dm" #include "code\modules\jobs\job_types\scientist.dm" +#include "code\modules\jobs\job_types\security_cadet.dm" #include "code\modules\jobs\job_types\security_officer.dm" #include "code\modules\jobs\job_types\shaft_miner.dm" #include "code\modules\jobs\job_types\station_engineer.dm"