From 0c870af2c639a72cd530006ed95b19066f14927f Mon Sep 17 00:00:00 2001 From: PhantornRU <41479614+PhantornRU@users.noreply.github.com> Date: Thu, 30 Nov 2023 01:33:59 +1000 Subject: [PATCH] FEAT: Novice rework (#765) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Что этот PR делает Перерабатываем новичков делая из них полноценные должности. Подготавливаем площадку для добавления новых профессий. Делаем всё модульно что делается модульно. Добавлено отображение одежды новичков DATACORE на карте (к сожалению не модульно). **Дополнительно:** Теперь должности новичков напрямую связаны с родительскими должностями, из-за чего их слоты делятся между собой. Если у офицера всего 8 слотов на должность, то в общей сумме офицеров и кадетов не может быть больше 8. Добавлена возможность отказывать в появлении излишков новичковых должностей раундстартом, из-за чего им придется входить уже после начала игры, отдавая приоритеты людям с нормальным профессиям. Лендмарки связаны с лендмарками "старших коллег". Увы, частично модульно ради 1-го условия. Ибо там опять спагетти код. ## Почему это хорошо для игры Читайте предыдущие ПРы. Это хорошо для игры, хорошо для кода. ## Изображения изменений ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/421465f9-b5d1-4a2e-87bd-acf41098525e) ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/bc25db06-c271-4c4e-aad3-9211bfc540c1) ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/2baad139-c5f0-4f46-9510-119c15ab81a7) ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/54106ee9-62db-4cd4-90df-010cad9dbb33) ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/c2c767d2-a043-4de7-8952-c6700ae71504) ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/4d3abd6e-1442-45a2-9359-954b4074845f) ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/eed51d54-b3a8-4b96-aa39-7891f43760e2) ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/170f3d41-813b-4adb-87d4-9d01bb00215b) ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/4cc14c3e-6bf1-44f3-8a45-50ea194da3b2) ## Тестирование ![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/4e48f790-8075-44d7-8b66-5c229870428c) Да. Обычные джобки не сломались. Новые тоже, старые тоже. Всё что могло уйти в модуль ушло в модуль. Связь проверил, всё работает и блокируется когда слотов не остается. Обтестил всё что мог. Консолька всё выдает, карту, айдишники. ## Changelog :cl: tweak: Возвращены переработанные должности новичков (подробности в ПР'е) tweak: Подготовлен модуль для добавления профессий fix: Должности новичков теперь корректно отображаются в преференсах и на карте tweak: Должность новичка вынесена отдельной профессией с приоритетом. tweak: Должность новичка зависит от общего числа слотов "старшей" профессии. Общее число слотов высчитывается по схеме: Кол-во слотов у новичка + кол-во слотов у "старшего" = число допустимых слотов, которые могут "взять" одна из профессий. tweak: Лендмарки (зоны спавна) новичков зависят от "старшей" профессии. /:cl: --------- Co-authored-by: Volodymir Ohorodnytskyi <102746941+Legendaxe@users.noreply.github.com> --- code/controllers/subsystem/SSjobs.dm | 2 +- code/datums/datacore.dm | 19 +++ code/game/jobs/job/engineering_jobs.dm | 2 +- code/game/jobs/job/medical_jobs.dm | 2 + code/game/jobs/job/science_jobs.dm | 1 + code/game/jobs/job/security_jobs.dm | 1 + config/example/config.toml | 4 + modular_ss220/_defines220/_defines220.dme | 1 + .../_defines220/code/jobs_defines.dm | 11 ++ modular_ss220/jobs/_jobs.dm | 10 ++ modular_ss220/jobs/_jobs.dme | 31 +++-- modular_ss220/jobs/code/card_computer.dm | 21 ++++ modular_ss220/jobs/code/card_id.dm | 56 +++++++++ modular_ss220/jobs/code/cards_ids.dm | 101 ---------------- .../code/clothing/engineering_clothing.dm | 8 +- .../jobs/code/clothing/medical_clothing.dm | 8 +- .../jobs/code/clothing/science_clothing.dm | 8 +- .../jobs/code/clothing/security_clothing.dm | 10 +- modular_ss220/jobs/code/departaments.dm | 15 +++ .../jobs/code/job/engineering_jobs.dm | 83 ++++++++----- modular_ss220/jobs/code/job/medical_jobs.dm | 76 +++++++----- modular_ss220/jobs/code/job/science_jobs.dm | 59 ++++++---- modular_ss220/jobs/code/job/security_jobs.dm | 72 +++++++----- modular_ss220/jobs/code/jobs.dm | 72 ++++++++++-- modular_ss220/jobs/code/jobs_character.dm | 110 ++++++++++++++++++ modular_ss220/jobs/code/jobs_gamemodes.dm | 27 +++++ modular_ss220/jobs/code/jobs_global_list.dm | 41 +++++++ .../code/objects/engineering_job_objects.dm | 47 ++++++++ .../jobs/code/objects/job_objects.dm | 31 +++++ .../jobs/code/objects/medical_job_objects.dm | 58 +++++++++ .../jobs/code/objects/science_job_objects.dm | 35 ++++++ .../jobs/code/objects/security_job_objects.dm | 75 ++++++++++++ .../jobs/code/objects/wardrobe_vendors.dm | 40 +++++++ modular_ss220/jobs/icons/hud.dmi | Bin 745 -> 492 bytes modular_ss220/modular_ss220.dme | 16 --- .../text_to_speech/code/tts_subsystem.dm | 2 + 36 files changed, 888 insertions(+), 267 deletions(-) create mode 100644 modular_ss220/_defines220/code/jobs_defines.dm create mode 100644 modular_ss220/jobs/code/card_computer.dm create mode 100644 modular_ss220/jobs/code/card_id.dm delete mode 100644 modular_ss220/jobs/code/cards_ids.dm create mode 100644 modular_ss220/jobs/code/departaments.dm create mode 100644 modular_ss220/jobs/code/jobs_character.dm create mode 100644 modular_ss220/jobs/code/jobs_gamemodes.dm create mode 100644 modular_ss220/jobs/code/jobs_global_list.dm create mode 100644 modular_ss220/jobs/code/objects/engineering_job_objects.dm create mode 100644 modular_ss220/jobs/code/objects/job_objects.dm create mode 100644 modular_ss220/jobs/code/objects/medical_job_objects.dm create mode 100644 modular_ss220/jobs/code/objects/science_job_objects.dm create mode 100644 modular_ss220/jobs/code/objects/security_job_objects.dm create mode 100644 modular_ss220/jobs/code/objects/wardrobe_vendors.dm diff --git a/code/controllers/subsystem/SSjobs.dm b/code/controllers/subsystem/SSjobs.dm index 0f18a2ff0298..2197594c0d64 100644 --- a/code/controllers/subsystem/SSjobs.dm +++ b/code/controllers/subsystem/SSjobs.dm @@ -473,7 +473,7 @@ SUBSYSTEM_DEF(jobs) var/turf/T = null var/obj/S = null for(var/obj/effect/landmark/start/sloc in GLOB.landmarks_list) - if(sloc.name != rank) + if(sloc.name != rank && sloc.name != job.relate_job) // SS220 EDIT - Novice Jobs - Jobs relate module continue if(locate(/mob/living) in sloc.loc) continue diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 7baab0c11f85..d7898ccf2a32 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -480,6 +480,25 @@ GLOBAL_VAR_INIT(record_id_num, 1001) clothes_s = new /icon('icons/mob/clothing/under/rnd.dmi', "robotics_s") clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_open"), ICON_OVERLAY) + + // SS220 ADDITION - START + if("Student Scientist") + clothes_s = new /icon('modular_ss220/jobs/icons/clothing/mob/uniform.dmi', "student_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) + if("Intern") + clothes_s = new /icon('modular_ss220/jobs/icons/clothing/mob/uniform.dmi', "intern_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_open"), ICON_OVERLAY) + if("Security Cadet") + clothes_s = new /icon('modular_ss220/jobs/icons/clothing/mob/uniform.dmi', "cadet_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY) + if("Trainee Engineer") + clothes_s = new /icon('modular_ss220/jobs/icons/clothing/mob/uniform.dmi', "trainee_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "orange"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY) + // SS220 ADDITION - END + if("Syndicate Agent") clothes_s = new /icon('icons/mob/clothing/under/syndicate.dmi', "syndicate_s") clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY) diff --git a/code/game/jobs/job/engineering_jobs.dm b/code/game/jobs/job/engineering_jobs.dm index e3081f425b23..030e3f2d2a86 100644 --- a/code/game/jobs/job/engineering_jobs.dm +++ b/code/game/jobs/job/engineering_jobs.dm @@ -83,7 +83,7 @@ dufflebag = /obj/item/storage/backpack/duffel/engineering box = /obj/item/storage/box/engineer - +/datum/job/engineer/trainee // SS220 ADDITION - new jobs /datum/job/atmos title = "Life Support Specialist" diff --git a/code/game/jobs/job/medical_jobs.dm b/code/game/jobs/job/medical_jobs.dm index 3449f62a653a..38eb18540a7b 100644 --- a/code/game/jobs/job/medical_jobs.dm +++ b/code/game/jobs/job/medical_jobs.dm @@ -76,6 +76,8 @@ satchel = /obj/item/storage/backpack/satchel_med dufflebag = /obj/item/storage/backpack/duffel/medical +/datum/job/doctor/intern // SS220 ADDITION - new jobs + /datum/job/coroner title = "Coroner" flag = JOB_CORONER diff --git a/code/game/jobs/job/science_jobs.dm b/code/game/jobs/job/science_jobs.dm index d6e468418fce..e8c6fad99846 100644 --- a/code/game/jobs/job/science_jobs.dm +++ b/code/game/jobs/job/science_jobs.dm @@ -86,6 +86,7 @@ satchel = /obj/item/storage/backpack/satchel_tox dufflebag = /obj/item/storage/backpack/duffel/science +/datum/job/scientist/student // SS220 ADDITION - new jobs /datum/job/roboticist title = "Roboticist" diff --git a/code/game/jobs/job/security_jobs.dm b/code/game/jobs/job/security_jobs.dm index f7c1a83c16fc..a4875d44b420 100644 --- a/code/game/jobs/job/security_jobs.dm +++ b/code/game/jobs/job/security_jobs.dm @@ -197,3 +197,4 @@ satchel = /obj/item/storage/backpack/satchel_sec dufflebag = /obj/item/storage/backpack/duffel/security +/datum/job/officer/cadet // SS220 ADDITION - new jobs diff --git a/config/example/config.toml b/config/example/config.toml index 9ed6d4634711..a5e6a38d0039 100644 --- a/config/example/config.toml +++ b/config/example/config.toml @@ -418,17 +418,21 @@ job_slot_amounts = [ # Engineering {name = "Life Support Specialist", lowpop = 3, highpop = 4}, {name = "Station Engineer", lowpop = 5, highpop = 6}, + {name = "Trainee Engineer", lowpop = 0, highpop = 0}, # Medical {name = "Chemist", lowpop = 2, highpop = 2}, {name = "Geneticist", lowpop = 2, highpop = 2}, {name = "Medical Doctor", lowpop = 5, highpop = 6}, + {name = "Intern", lowpop = 0, highpop = 0}, {name = "Virologist", lowpop = 1, highpop = 1}, # Science {name = "Roboticist", lowpop = 2, highpop = 2}, {name = "Scientist", lowpop = 6, highpop = 7}, + {name = "Student Scientist", lowpop = 0, highpop = 0}, # Security {name = "Detective", lowpop = 1, highpop = 1}, {name = "Security Officer", lowpop = 8, highpop = 9}, + {name = "Security Cadet", lowpop = 0, highpop = 0}, {name = "Warden", lowpop = 1, highpop = 1}, {name = "Internal Affairs Agent", lowpop = 2, highpop = 2}, # Service diff --git a/modular_ss220/_defines220/_defines220.dme b/modular_ss220/_defines220/_defines220.dme index 5c65e1f6cdf3..898c1b3f08a8 100644 --- a/modular_ss220/_defines220/_defines220.dme +++ b/modular_ss220/_defines220/_defines220.dme @@ -12,4 +12,5 @@ #include "code/hud_ss220.dm" #include "code/layers_ss220.dm" #include "code/signals_atom.dm" +#include "code/jobs_defines.dm" #include "code/donor.dm" diff --git a/modular_ss220/_defines220/code/jobs_defines.dm b/modular_ss220/_defines220/code/jobs_defines.dm new file mode 100644 index 000000000000..fed4ba8651fa --- /dev/null +++ b/modular_ss220/_defines220/code/jobs_defines.dm @@ -0,0 +1,11 @@ +#define NOVICE_JOB_MINUTES 120 +#define NOVICE_CADET_JOB_MINUTES 300 + +// JOBCAT_ENGSEC +#define JOB_TRAINEE (1<<15) +#define JOB_CADET (1<<16) + +// JOBCAT_MEDSCI +#define JOB_INTERN (1<<11) +#define JOB_STUDENT (1<<12) +// Если ОФФы добавят новую должность в отдел, то потребуется смещение diff --git a/modular_ss220/jobs/_jobs.dm b/modular_ss220/jobs/_jobs.dm index 47f40207e7b0..803bc7f75729 100644 --- a/modular_ss220/jobs/_jobs.dm +++ b/modular_ss220/jobs/_jobs.dm @@ -2,3 +2,13 @@ name = "Работы" desc = "Новые джобки и изменения старых" author = "furior, PhantomRU" + +/datum/modpack/jobs/initialize() + . = ..() + + GLOB.security_positions |= GLOB.security_positions_ss220 + GLOB.active_security_positions |= GLOB.security_positions_ss220 + + GLOB.medical_positions |= GLOB.medical_positions_ss220 + GLOB.engineering_positions |= GLOB.engineering_positions_ss220 + GLOB.science_positions |= GLOB.science_positions_ss220 diff --git a/modular_ss220/jobs/_jobs.dme b/modular_ss220/jobs/_jobs.dme index 5d7beee17f91..7a0fc3422801 100644 --- a/modular_ss220/jobs/_jobs.dme +++ b/modular_ss220/jobs/_jobs.dme @@ -1,13 +1,24 @@ #include "_jobs.dm" #include "code/access.dm" -// #include "code/cards_ids.dm" -// #include "code/jobs.dm" -// #include "code/clothing/engineering_clothing.dm" -// #include "code/clothing/medical_clothing.dm" -// #include "code/clothing/science_clothing.dm" -// #include "code/clothing/security_clothing.dm" -// #include "code/job/engineering_jobs.dm" -// #include "code/job/medical_jobs.dm" -// #include "code/job/science_jobs.dm" -// #include "code/job/security_jobs.dm" +#include "code/card_computer.dm" +#include "code/card_id.dm" +#include "code/departaments.dm" +#include "code/jobs_global_list.dm" +#include "code/jobs_character.dm" +#include "code/jobs_gamemodes.dm" +#include "code/jobs.dm" +#include "code/clothing/engineering_clothing.dm" +#include "code/clothing/medical_clothing.dm" +#include "code/clothing/science_clothing.dm" +#include "code/clothing/security_clothing.dm" +#include "code/job/engineering_jobs.dm" +#include "code/job/medical_jobs.dm" +#include "code/job/science_jobs.dm" +#include "code/job/security_jobs.dm" +#include "code/objects/job_objects.dm" +#include "code/objects/engineering_job_objects.dm" +#include "code/objects/medical_job_objects.dm" +#include "code/objects/science_job_objects.dm" +#include "code/objects/security_job_objects.dm" +#include "code/objects/wardrobe_vendors.dm" diff --git a/modular_ss220/jobs/code/card_computer.dm b/modular_ss220/jobs/code/card_computer.dm new file mode 100644 index 000000000000..e9c9e834e77c --- /dev/null +++ b/modular_ss220/jobs/code/card_computer.dm @@ -0,0 +1,21 @@ +/obj/machinery/computer/card/ui_data(mob/user) + var/list/data = ..() + + if(mode == IDCOMPUTER_SCREEN_TRANSFER) // JOB TRANSFER + if(modify && scan && !target_dept) + data["card_skins"] |= format_card_skins(GLOB.card_skins_ss220) + + return data + +/obj/machinery/computer/card/ui_act(action, params) + . = ..() + switch(action) + if("skin") + if(!modify) + return FALSE + var/skin = params["skin_target"] + if(!skin || !(skin in GLOB.card_skins_ss220)) + return FALSE + + modify.icon_state = skin//get_card_skins_ss220(skin) + return TRUE diff --git a/modular_ss220/jobs/code/card_id.dm b/modular_ss220/jobs/code/card_id.dm new file mode 100644 index 000000000000..f00685c26674 --- /dev/null +++ b/modular_ss220/jobs/code/card_id.dm @@ -0,0 +1,56 @@ +/mob/living/carbon/human/sec_hud_set_ID() + var/image/holder = hud_list[ID_HUD] + holder.icon = 'icons/mob/hud/sechud.dmi' + if(wear_id && (wear_id.get_job_name() in GLOB.jobs_positions_ss220)) + holder.icon = 'modular_ss220/jobs/icons/hud.dmi' + . = ..() + +/obj/item/get_job_name() //Used in secHUD icon generation + var/assignmentName = get_ID_assignment(if_no_id = "Unknown") + var/rankName = get_ID_rank(if_no_id = "Unknown") + + var/list/titles = GLOB.jobs_positions_ss220 + + if(assignmentName in titles) //Check if the job has a hud icon + return assignmentName + if(rankName in titles) + return rankName + + . = ..() + +GLOBAL_LIST_INIT(card_skins_ss220, list( + "intern", "student", "trainee", "cadet", +)) + +/obj/item/card/id/medical/intern + name = "Intern ID" + registered_name = "Intern" + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "intern" + item_state = "intern-id" + rank = "Intern" + +/obj/item/card/id/research/student + name = "Student ID" + registered_name = "Student" + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "student" + item_state = "student-id" + +/obj/item/card/id/engineering/trainee + name = "Trainee ID" + registered_name = "Trainee" + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "trainee" + item_state = "trainee-id" + +/obj/item/card/id/security/cadet + name = "Cadet ID" + registered_name = "Cadet" + icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' + icon_state = "cadet" + item_state = "cadet-id" + +/obj/item/card/id/syndicate/Initialize() + . = ..() + appearances |= GLOB.card_skins_ss220 diff --git a/modular_ss220/jobs/code/cards_ids.dm b/modular_ss220/jobs/code/cards_ids.dm deleted file mode 100644 index 5eec7f64ea30..000000000000 --- a/modular_ss220/jobs/code/cards_ids.dm +++ /dev/null @@ -1,101 +0,0 @@ -// Для отрисовки ХУД'ов. -GLOBAL_LIST_INIT(Jobs_SS220, list("intern", "cadet", "trainee", "student")) -GLOBAL_LIST_INIT(Jobs_titles_SS220, list("Intern", "Security Cadet", "Trainee Engineer", "Student Scientist")) - -/proc/get_all_medical_novice_titles() - return list("Intern", "Medical Assistant", "Student Medical Doctor") - -/proc/get_all_security_novice_titles() - return list("Security Cadet", "Security Assistant", "Security Graduate") - -/proc/get_all_engineering_novice_titles() - return list("Trainee Engineer", "Engineer Assistant", "Technical Assistant", "Engineer Student", "Technical Student", "Technical Trainee") - -/proc/get_all_science_novice_titles() - return list("Student Scientist", "Scientist Assistant", "Scientist Pregraduate", "Scientist Graduate", "Scientist Postgraduate") - -/proc/get_all_novice_titles() - return get_all_medical_novice_titles() + get_all_security_novice_titles() + get_all_engineering_novice_titles() + get_all_science_novice_titles() - -/mob/living/carbon/human/sec_hud_set_ID() - var/image/holder = hud_list[ID_HUD] - holder.icon = 'icons/mob/hud/sechud.dmi' - if(wear_id && (wear_id.get_job_name() in GLOB.Jobs_SS220)) - holder.icon = 'modular_ss220/jobs/icons/hud.dmi' - . = ..() - -/obj/item/get_job_name() //Used in secHUD icon generation - var/assignmentName = get_ID_assignment(if_no_id = "Unknown") - var/rankName = get_ID_rank(if_no_id = "Unknown") - - var/novmed = get_all_medical_novice_titles() - var/novsec = get_all_security_novice_titles() - var/noveng = get_all_engineering_novice_titles() - var/novrnd = get_all_science_novice_titles() - - if((assignmentName in novmed) || (rankName in novmed)) - return "intern" - if((assignmentName in novsec) || (rankName in novsec)) - return "cadet" - if((assignmentName in noveng) || (rankName in noveng)) - return "trainee" - if((assignmentName in novrnd) || (rankName in novrnd)) - return "student" - - . = ..() - -/obj/machinery/computer/card/ui_data(mob/user) - var/list/data = ..() - - if(mode == IDCOMPUTER_SCREEN_TRANSFER) // JOB TRANSFER - if(modify && scan && !target_dept) - data["jobs_engineering"] |= "Trainee Engineer" - data["jobs_medical"] |= "Intern" - data["jobs_science"] |= "Student Scientist" - data["jobs_security"] |= "Security Cadet" - data["card_skins"] |= format_card_skins(GLOB.Jobs_SS220) // + format_card_skins(list("intern", "cadet", "trainee", "student")) - - return data - -/obj/machinery/computer/card/ui_act(action, params) - . = ..() - - switch(action) - if("skin") - if(!modify) - return FALSE - var/skin = params["skin_target"] - if(!skin || !(skin in GLOB.Jobs_SS220)) - return FALSE - - modify.icon_state = skin - return TRUE - -/obj/item/card/id/medical/intern - name = "Intern ID" - registered_name = "Intern" - icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' - icon_state = "intern" - item_state = "intern-id" - rank = "Intern" - -/obj/item/card/id/research/student - name = "Student ID" - registered_name = "Student" - icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' - icon_state = "student" - item_state = "student-id" - -/obj/item/card/id/engineering/trainee - name = "Trainee ID" - registered_name = "Trainee" - icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' - icon_state = "trainee" - item_state = "trainee-id" - -/obj/item/card/id/security/cadet - name = "Cadet ID" - registered_name = "Cadet" - icon = 'modular_ss220/aesthetics/better_ids/icons/better_ids.dmi' - icon_state = "cadet" - item_state = "cadet-id" diff --git a/modular_ss220/jobs/code/clothing/engineering_clothing.dm b/modular_ss220/jobs/code/clothing/engineering_clothing.dm index 7e7078bec5c8..9d01c2a5f5d9 100644 --- a/modular_ss220/jobs/code/clothing/engineering_clothing.dm +++ b/modular_ss220/jobs/code/clothing/engineering_clothing.dm @@ -1,4 +1,4 @@ -/obj/item/clothing/under/rank/engineer/trainee +/obj/item/clothing/under/rank/engineering/engineer/trainee name = "engineer trainee jumpsuit" icon = 'modular_ss220/jobs/icons/clothing/uniforms.dmi' icon_override = 'modular_ss220/jobs/icons/clothing/mob/uniform.dmi' @@ -8,18 +8,18 @@ item_color = "trainee" sprite_sheets = null -/obj/item/clothing/under/rank/engineer/trainee/skirt +/obj/item/clothing/under/rank/engineering/engineer/trainee/skirt name = "engineer trainee jumpskirt" icon_state = "traineef_s" item_color = "traineef" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS -/obj/item/clothing/under/rank/engineer/trainee/assistant +/obj/item/clothing/under/rank/engineering/engineer/trainee/assistant name = "engineer assistant jumpsuit" icon_state = "eng_ass_s" item_color = "eng_ass" -/obj/item/clothing/under/rank/engineer/trainee/assistant/skirt +/obj/item/clothing/under/rank/engineering/engineer/trainee/assistant/skirt name = "engineer assistant jumpskirt" icon_state = "eng_ass_f_s" item_color = "eng_ass_f" diff --git a/modular_ss220/jobs/code/clothing/medical_clothing.dm b/modular_ss220/jobs/code/clothing/medical_clothing.dm index 43e99519aacf..f9ffc439ad70 100644 --- a/modular_ss220/jobs/code/clothing/medical_clothing.dm +++ b/modular_ss220/jobs/code/clothing/medical_clothing.dm @@ -1,4 +1,4 @@ -/obj/item/clothing/under/rank/medical/intern +/obj/item/clothing/under/rank/medical/doctor/intern icon = 'modular_ss220/jobs/icons/clothing/uniforms.dmi' icon_override = 'modular_ss220/jobs/icons/clothing/mob/uniform.dmi' //lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' @@ -9,18 +9,18 @@ icon_state = "intern_s" item_color = "intern" -/obj/item/clothing/under/rank/medical/intern/skirt +/obj/item/clothing/under/rank/medical/doctor/intern/skirt name = "intern jumpskirt" icon_state = "internf_s" item_color = "internf" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS -/obj/item/clothing/under/rank/medical/intern/assistant +/obj/item/clothing/under/rank/medical/doctor/intern/assistant name = "medical assistant jumpsuit" icon_state = "med_ass_s" item_color = "med_ass" -/obj/item/clothing/under/rank/medical/intern/assistant/skirt +/obj/item/clothing/under/rank/medical/doctor/intern/assistant/skirt name = "medical assistant jumpskirt" icon_state = "med_ass_f_s" item_color = "med_ass_f" diff --git a/modular_ss220/jobs/code/clothing/science_clothing.dm b/modular_ss220/jobs/code/clothing/science_clothing.dm index d885bff41bbf..4f501916c7b3 100644 --- a/modular_ss220/jobs/code/clothing/science_clothing.dm +++ b/modular_ss220/jobs/code/clothing/science_clothing.dm @@ -1,4 +1,4 @@ -/obj/item/clothing/under/rank/scientist/student +/obj/item/clothing/under/rank/rnd/scientist/student name = "scientist student jumpsuit" icon = 'modular_ss220/jobs/icons/clothing/uniforms.dmi' icon_override = 'modular_ss220/jobs/icons/clothing/mob/uniform.dmi' @@ -8,18 +8,18 @@ item_color = "student" sprite_sheets = null -/obj/item/clothing/under/rank/scientist/student/skirt +/obj/item/clothing/under/rank/rnd/scientist/student/skirt name = "scientist student jumpskirt" icon_state = "studentf_s" item_color = "studentf" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS -/obj/item/clothing/under/rank/scientist/student/assistant +/obj/item/clothing/under/rank/rnd/scientist/student/assistant name = "scientist assistant jumpsuit" icon_state = "sci_ass_s" item_color = "sci_ass" -/obj/item/clothing/under/rank/scientist/student/assistant/skirt +/obj/item/clothing/under/rank/rnd/scientist/student/assistant/skirt name = "scientist assistant jumpskirt" icon_state = "sci_ass_f_s" item_color = "sci_ass_f" diff --git a/modular_ss220/jobs/code/clothing/security_clothing.dm b/modular_ss220/jobs/code/clothing/security_clothing.dm index 681b4581b9ef..a767485df6eb 100644 --- a/modular_ss220/jobs/code/clothing/security_clothing.dm +++ b/modular_ss220/jobs/code/clothing/security_clothing.dm @@ -1,4 +1,4 @@ -/obj/item/clothing/under/rank/security/cadet +/obj/item/clothing/under/rank/security/officer/cadet name = "security cadet jumpsuit" icon = 'modular_ss220/jobs/icons/clothing/uniforms.dmi' icon_override = 'modular_ss220/jobs/icons/clothing/mob/uniform.dmi' @@ -7,19 +7,21 @@ icon_state = "cadet_s" item_color = "cadet" sprite_sheets = null + sensor_mode = SENSOR_COORDS + random_sensor = FALSE -/obj/item/clothing/under/rank/security/cadet/skirt +/obj/item/clothing/under/rank/security/officer/cadet/skirt name = "security cadet jumpskirt" icon_state = "cadetf_s" item_color = "cadetf" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS -/obj/item/clothing/under/rank/security/cadet/assistant +/obj/item/clothing/under/rank/security/officer/cadet/assistant name = "security assistant jumpsuit" icon_state = "sec_ass_s" item_color = "sec_ass" -/obj/item/clothing/under/rank/security/cadet/assistant/skirt +/obj/item/clothing/under/rank/security/officer/cadet/assistant/skirt name = "security assistant jumpskirt" icon_state = "sec_ass_f_s" item_color = "sec_ass_f" diff --git a/modular_ss220/jobs/code/departaments.dm b/modular_ss220/jobs/code/departaments.dm new file mode 100644 index 000000000000..1624d0353f92 --- /dev/null +++ b/modular_ss220/jobs/code/departaments.dm @@ -0,0 +1,15 @@ +/datum/station_department/engineering/New() + . = ..() + department_roles |= GLOB.engineering_positions_ss220 + get_all_engineering_alt_titles_ss220() + +/datum/station_department/medical/New() + . = ..() + department_roles |= GLOB.medical_positions_ss220 + get_all_medical_alt_titles_ss220() + +/datum/station_department/science/New() + . = ..() + department_roles |= GLOB.science_positions_ss220 + get_all_science_alt_titles_ss220() + +/datum/station_department/security/New() + . = ..() + department_roles |= GLOB.security_positions_ss220 + get_all_security_alt_titles_ss220() diff --git a/modular_ss220/jobs/code/job/engineering_jobs.dm b/modular_ss220/jobs/code/job/engineering_jobs.dm index 8b472cde20cf..eb4c3c280f99 100644 --- a/modular_ss220/jobs/code/job/engineering_jobs.dm +++ b/modular_ss220/jobs/code/job/engineering_jobs.dm @@ -1,37 +1,56 @@ -/datum/job/engineer/New() - . = ..() - alt_titles |= get_all_engineering_novice_titles() +/datum/job/engineer/trainee + title = "Trainee Engineer" + flag = JOB_TRAINEE + total_positions = 0 + spawn_positions = 3 + //selection_color = "#dbd6c4" + alt_titles = list("Engineer Assistant", "Technical Assistant", "Engineer Student", "Technical Student", "Technical Trainee") + exp_map = list(EXP_TYPE_CREW = NOVICE_JOB_MINUTES) + outfit = /datum/outfit/job/engineer/trainee + important_information = "Ваша должность ограничена во всех взаимодействиях с рабочим имуществом отдела и экипажем станции, при отсутствии приставленного к нему квалифицированного сотрудника или полученного разрешения от вышестоящего начальства." -/datum/station_department/engineering/New() - . = ..() - department_roles |= get_all_engineering_novice_titles() +/datum/outfit/job/engineer/trainee + name = "Trainee Engineer" + jobtype = /datum/job/engineer/trainee -/datum/outfit/job/engineer/pre_equip(mob/living/carbon/human/H, visualsOnly) + uniform = /obj/item/clothing/under/rank/engineering/engineer/trainee + suit = /obj/item/clothing/suit/storage/hazardvest + belt = /obj/item/storage/belt/utility/full + shoes = /obj/item/clothing/shoes/workboots + gloves = /obj/item/clothing/gloves/color/orange + head = /obj/item/clothing/head/hardhat/orange + l_ear = /obj/item/radio/headset/headset_eng + id = /obj/item/card/id/engineering/trainee + l_pocket = /obj/item/t_scanner + pda = /obj/item/pda/engineering + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel_eng + dufflebag = /obj/item/storage/backpack/duffel/engineering + box = /obj/item/storage/box/engineer + +/datum/outfit/job/engineer/trainee/pre_equip(mob/living/carbon/human/H, visualsOnly) . = ..() - if(H.mind && H.mind.role_alt_title) - if(H.mind.role_alt_title in get_all_engineering_novice_titles()) - uniform = /obj/item/clothing/under/rank/engineer/trainee - if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/engineer/trainee/skirt - id = /obj/item/card/id/engineering/trainee - gloves = /obj/item/clothing/gloves/color/orange - switch(H.mind.role_alt_title) - if("Engineer Assistant") - uniform = /obj/item/clothing/under/rank/engineer/trainee/assistant - if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/engineer/trainee/assistant/skirt - if("Technical Assistant") - uniform = /obj/item/clothing/under/rank/engineer/trainee/assistant - if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/engineer/trainee/assistant/skirt - head = /obj/item/clothing/head/soft/orange - if("Technical Student", "Technical Trainee") - head = /obj/item/clothing/head/soft/orange - if("Engineer Student") - head = /obj/item/clothing/head/beret/eng + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/engineering/engineer/trainee/skirt -// Identification jobs for console -/datum/job/engineer/trainee - title = "Trainee Engineer" - hidden_from_job_prefs = TRUE + switch(H.mind.role_alt_title) + if("Engineer Assistant") + uniform = /obj/item/clothing/under/rank/engineering/engineer/trainee/assistant + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/engineering/engineer/trainee/assistant/skirt + if("Technical Assistant") + uniform = /obj/item/clothing/under/rank/engineering/engineer/trainee/assistant + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/engineering/engineer/trainee/assistant/skirt + head = /obj/item/clothing/head/soft/orange + if("Technical Student", "Technical Trainee") + head = /obj/item/clothing/head/soft/orange + if("Engineer Student") + head = /obj/item/clothing/head/beret/eng + +/datum/outfit/job/engineer/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/engineering/engineer/skirt diff --git a/modular_ss220/jobs/code/job/medical_jobs.dm b/modular_ss220/jobs/code/job/medical_jobs.dm index c1f674bb28c7..1d3623e7f038 100644 --- a/modular_ss220/jobs/code/job/medical_jobs.dm +++ b/modular_ss220/jobs/code/job/medical_jobs.dm @@ -1,37 +1,49 @@ -/datum/job/doctor/New() - . = ..() - alt_titles |= get_all_medical_novice_titles() +/datum/job/doctor/intern + title = "Intern" + flag = JOB_INTERN + total_positions = 0 + spawn_positions = 3 + //selection_color = "#ebe2e3" + alt_titles = list("Medical Assistant", "Student Medical Doctor") + exp_map = list(EXP_TYPE_CREW = NOVICE_JOB_MINUTES) + outfit = /datum/outfit/job/doctor/intern + important_information = "Ваша должность ограничена во всех взаимодействиях с рабочим имуществом отдела и экипажем станции, при отсутствии приставленного к нему квалифицированного сотрудника или полученного разрешения от вышестоящего начальства." -/datum/station_department/medical/New() - . = ..() - department_roles |= get_all_medical_novice_titles() +/datum/outfit/job/doctor/intern + name = "Intern" + jobtype = /datum/job/doctor/intern -/datum/outfit/job/doctor/pre_equip(mob/living/carbon/human/H, visualsOnly) + uniform = /obj/item/clothing/under/rank/medical/doctor/intern + suit = /obj/item/clothing/suit/storage/labcoat + mask = /obj/item/clothing/mask/surgical + gloves = /obj/item/clothing/gloves/color/latex + shoes = /obj/item/clothing/shoes/white + l_ear = /obj/item/radio/headset/headset_med + id = /obj/item/card/id/medical/intern + suit_store = /obj/item/flashlight/pen + l_hand = /obj/item/storage/firstaid/o2 + pda = /obj/item/pda/medical + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel_med + dufflebag = /obj/item/storage/backpack/duffel/medical + +/datum/outfit/job/doctor/intern/pre_equip(mob/living/carbon/human/H, visualsOnly) . = ..() - if(H.mind && H.mind.role_alt_title) - if(H.mind.role_alt_title in get_all_medical_novice_titles()) - uniform = /obj/item/clothing/under/rank/medical/intern - if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/medical/intern/skirt - id = /obj/item/card/id/medical/intern - l_hand = /obj/item/storage/firstaid/o2 - mask = /obj/item/clothing/mask/surgical - gloves = /obj/item/clothing/gloves/color/latex - switch(H.mind.role_alt_title) - if("Intern") - uniform = /obj/item/clothing/under/rank/medical/intern - if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/medical/intern/skirt - if("Medical Assistant") - uniform = /obj/item/clothing/under/rank/medical/intern/assistant - if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/medical/intern/assistant/skirt - if("Student Medical Doctor") - head = /obj/item/clothing/head/surgery/green/light - uniform = /obj/item/clothing/under/rank/medical/scrubs/green/light + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/medical/doctor/intern/skirt -// Identification jobs for console -/datum/job/doctor/intern - title = "Intern" - hidden_from_job_prefs = TRUE + switch(H.mind.role_alt_title) + if("Medical Assistant") + uniform = /obj/item/clothing/under/rank/medical/doctor/intern/assistant + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/medical/doctor/intern/assistant/skirt + if("Student Medical Doctor") + head = /obj/item/clothing/head/surgery/green/light + uniform = /obj/item/clothing/under/rank/medical/scrubs/green/light + +/datum/outfit/job/doctor/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/medical/doctor/skirt diff --git a/modular_ss220/jobs/code/job/science_jobs.dm b/modular_ss220/jobs/code/job/science_jobs.dm index b3387f831acc..fc4cb90bb06c 100644 --- a/modular_ss220/jobs/code/job/science_jobs.dm +++ b/modular_ss220/jobs/code/job/science_jobs.dm @@ -1,27 +1,42 @@ -/datum/job/scientist/New() - . = ..() - alt_titles |= get_all_science_novice_titles() +/datum/job/scientist/student + title = "Student Scientist" + flag = JOB_STUDENT + total_positions = 0 + spawn_positions = 4 + //selection_color = "#ece5ec" + alt_titles = list("Scientist Assistant", "Scientist Pregraduate", "Scientist Graduate", "Scientist Postgraduate") + exp_map = list(EXP_TYPE_CREW = NOVICE_JOB_MINUTES) + outfit = /datum/outfit/job/scientist/student + important_information = "Ваша должность ограничена во всех взаимодействиях с рабочим имуществом отдела и экипажем станции, при отсутствии приставленного к нему квалифицированного сотрудника или полученного разрешения от вышестоящего начальства." -/datum/station_department/science/New() - . = ..() - department_roles |= get_all_science_novice_titles() +/datum/outfit/job/scientist/student + name = "Student Scientist" + jobtype = /datum/job/scientist/student -/datum/outfit/job/scientist/pre_equip(mob/living/carbon/human/H, visualsOnly) + uniform = /obj/item/clothing/under/rank/rnd/scientist/student + suit = /obj/item/clothing/suit/storage/labcoat/science + shoes = /obj/item/clothing/shoes/white + l_ear = /obj/item/radio/headset/headset_sci + id = /obj/item/card/id/research/student + pda = /obj/item/pda/toxins + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel_tox + dufflebag = /obj/item/storage/backpack/duffel/science + +/datum/outfit/job/scientist/student/pre_equip(mob/living/carbon/human/H, visualsOnly) . = ..() - if(H.mind && H.mind.role_alt_title) - if(H.mind.role_alt_title in get_all_science_novice_titles()) - uniform = /obj/item/clothing/under/rank/scientist/student - if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/scientist/student/skirt - id = /obj/item/card/id/research/student - switch(H.mind.role_alt_title) - if("Scientist Assistant") - uniform = /obj/item/clothing/under/rank/scientist/student/assistant - if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/scientist/student/assistant/skirt + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/rnd/scientist/student/skirt -// Identification jobs for console -/datum/job/scientist/student - title = "Student Scientist" - hidden_from_job_prefs = TRUE + switch(H.mind.role_alt_title) + if("Scientist Assistant") + uniform = /obj/item/clothing/under/rank/rnd/scientist/student/assistant + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/rnd/scientist/student/assistant/skirt + +/datum/outfit/job/scientist/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/rnd/scientist/skirt diff --git a/modular_ss220/jobs/code/job/security_jobs.dm b/modular_ss220/jobs/code/job/security_jobs.dm index 6b5e68ba1cea..6cbf63cce39c 100644 --- a/modular_ss220/jobs/code/job/security_jobs.dm +++ b/modular_ss220/jobs/code/job/security_jobs.dm @@ -1,31 +1,51 @@ -/datum/job/officer/New() - . = ..() - alt_titles = get_all_security_novice_titles() // =, а не |=, т.к. отсутствуют альт. названия +/datum/job/officer/cadet + title = "Security Cadet" + flag = JOB_CADET + total_positions = 0 // miss add slots + spawn_positions = 2 + //selection_color = "#efe6e6" + alt_titles = list("Security Assistant", "Security Graduate") + exp_map = list(EXP_TYPE_CREW = NOVICE_CADET_JOB_MINUTES) + outfit = /datum/outfit/job/officer/cadet + important_information = "Космический закон это необходимость, а не рекомендация. Ваша должность ограничена во всех взаимодействиях с рабочим имуществом отдела и экипажем станции, при отсутствии приставленного к нему квалифицированного сотрудника или полученного разрешения от вышестоящего начальства." -/datum/station_department/security/New() - . = ..() - department_roles |= get_all_security_novice_titles() +/datum/outfit/job/officer/cadet + name = "Security Cadet" + jobtype = /datum/job/officer/cadet + uniform = /obj/item/clothing/under/rank/security/officer/cadet + suit = /obj/item/clothing/suit/armor/vest/security + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/jackboots + head = /obj/item/clothing/head/soft/sec + l_ear = /obj/item/radio/headset/headset_sec/alt + id = /obj/item/card/id/security/cadet + l_pocket = /obj/item/reagent_containers/spray/pepper + suit_store = /obj/item/gun/energy/disabler + pda = /obj/item/pda/security + backpack_contents = list( + /obj/item/restraints/handcuffs = 1 + ) + //box = /obj/item/storage/box/survival_security/cadet -/datum/outfit/job/officer/pre_equip(mob/living/carbon/human/H, visualsOnly) + +/datum/outfit/job/officer/cadet/pre_equip(mob/living/carbon/human/H, visualsOnly) . = ..() - if(H.mind && H.mind.role_alt_title) - if(H.mind.role_alt_title in get_all_security_novice_titles()) - uniform = /obj/item/clothing/under/rank/security/cadet + + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/security/officer/cadet/skirt + + switch(H.mind.role_alt_title) + if("Security Assistant") + uniform = /obj/item/clothing/under/rank/security/officer/cadet/assistant if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/security/cadet/skirt - head = /obj/item/clothing/head/soft/sec - id = /obj/item/card/id/security/cadet - l_pocket = /obj/item/reagent_containers/spray/pepper - //box = /obj/item/storage/box/survival_security/cadet - switch(H.mind.role_alt_title) - if("Security Assistant") - uniform = /obj/item/clothing/under/rank/security/cadet/assistant - if(H.gender == FEMALE) - uniform = /obj/item/clothing/under/rank/security/cadet/assistant/skirt - if("Security Graduate") - head = /obj/item/clothing/head/beret/sec + uniform = /obj/item/clothing/under/rank/security/officer/cadet/assistant/skirt + if("Security Graduate") + head = /obj/item/clothing/head/beret/sec -// Identification jobs for console -/datum/job/officer/cadet - title = "Security Cadet" - hidden_from_job_prefs = TRUE +/datum/job/officer + alt_titles = list("Security Trainer", "Junior Security Officer") + +/datum/outfit/job/officer/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(H.gender == FEMALE) + uniform = /obj/item/clothing/under/rank/security/officer/skirt diff --git a/modular_ss220/jobs/code/jobs.dm b/modular_ss220/jobs/code/jobs.dm index 75e8d8db2f55..c1b8d290b371 100644 --- a/modular_ss220/jobs/code/jobs.dm +++ b/modular_ss220/jobs/code/jobs.dm @@ -1,24 +1,76 @@ /datum/nttc_configuration/New() . = ..() var/list/job_radio_dict = list() - - for(var/i in get_all_medical_novice_titles()) + for(var/i in (GLOB.medical_positions_ss220 + get_all_medical_alt_titles_ss220())) job_radio_dict.Add(list("[i]" = "medradio")) - for(var/i in get_all_security_novice_titles()) + for(var/i in (GLOB.security_positions_ss220 + get_all_security_alt_titles_ss220())) job_radio_dict.Add(list("[i]" = "secradio")) - for(var/i in get_all_engineering_novice_titles()) + for(var/i in (GLOB.engineering_positions_ss220 + get_all_engineering_alt_titles_ss220())) job_radio_dict.Add(list("[i]" = "engradio")) - for(var/i in get_all_science_novice_titles()) + for(var/i in (GLOB.science_positions_ss220 + get_all_science_alt_titles_ss220())) job_radio_dict.Add(list("[i]" = "scirradio")) all_jobs |= job_radio_dict + +// ======================================= +// relate jobs for relate job slots +// ======================================= +/datum/job/proc/try_relate_jobs() + return FALSE + +/datum/job + var/relate_job // for novice role and etc + +/datum/job/doctor + relate_job = "Intern" +/datum/job/doctor/intern + relate_job = "Medical Doctor" + +/datum/job/scientist + relate_job = "Student Scientist" +/datum/job/scientist/student + relate_job = "Scientist" + +/datum/job/engineer + relate_job = "Trainee Engineer" +/datum/job/engineer/trainee + relate_job = "Station Engineer" + +/datum/job/officer + relate_job = "Security Cadet" +/datum/job/officer/cadet + relate_job = "Security Officer" + /datum/job/is_position_available() - . = ..() + if(job_banned_gamemode) + return FALSE + if(check_hidden_from_job_prefs()) + return FALSE + + return relate_job ? check_relate_positions() : ..() + +/datum/job/proc/check_relate_positions() + var/datum/job/temp = SSjobs.GetJob(relate_job) + + var/current_count_positions = current_positions + temp.current_positions + var/total_count_positions = total_positions + temp.total_positions + + if(total_positions == -1) + total_count_positions = -1 + + return (current_count_positions < total_count_positions) || (total_count_positions == -1) + +/datum/job/proc/check_hidden_from_job_prefs() if(hidden_from_job_prefs) - for(var/job_title in GLOB.Jobs_titles_SS220) + for(var/job_title in GLOB.jobs_positions_ss220) if(job_title in alt_titles) - return FALSE - if(title in GLOB.Jobs_titles_SS220) - return FALSE + return TRUE + if(title in GLOB.jobs_positions_ss220) + return TRUE + return FALSE + +// OFFICIAL parameters: 17 / HOS, Bart / 400 / 700 +/datum/character_save/SetChoices(mob/user, limit = 18, list/splitJobs = list("Head of Security", "Bartender"), widthPerColumn = 450, height = 700) + . = ..() diff --git a/modular_ss220/jobs/code/jobs_character.dm b/modular_ss220/jobs/code/jobs_character.dm new file mode 100644 index 000000000000..4e526b4c4aa1 --- /dev/null +++ b/modular_ss220/jobs/code/jobs_character.dm @@ -0,0 +1,110 @@ +// Будь прокляты те кто вставлял списки прямо в код. Это не ТОГЭ. Поэтому оставь здравомыслие всяк сюда входящий. +/datum/species/plasmaman/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + var/current_job = J.title + var/datum/outfit/plasmaman/O = new /datum/outfit/plasmaman + switch(current_job) + + if("Security Cadet") + O = new /datum/outfit/plasmaman/security + + if("Intern") + O = new /datum/outfit/plasmaman/medical + + if("Student Scientist") + O = new /datum/outfit/plasmaman/science + + if("Trainee Engineer") + O = new /datum/outfit/plasmaman/engineering + + H.equipOutfit(O, visualsOnly) + H.internal = H.r_hand + H.update_action_buttons_icon() + return FALSE + + +// это копипаст мерзопакости. Я не буду рефакторить это в модуле, я шо, ебанутый? +// Оно работает и ладно. И я не буду этот комментарий на английский переводить. +// Эту хуйню должен видеть каждый кто сюда зайдет и полезет посмотреть какой в родителе оригинальный код на 1000 строчек. +/datum/character_save/update_preview_icon(for_observer=0) + . = ..() + + // qdel(preview_icon_front) + // qdel(preview_icon_side) + // qdel(preview_icon) + + var/g = "" + if(gender == FEMALE) + g = "f" + + var/icon/clothes_s = null + + if(job_medsci_high) + switch(job_medsci_high) + if(JOB_STUDENT) + clothes_s = new /icon('modular_ss220/jobs/icons/clothing/mob/uniform.dmi', "student[g]_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "metroid"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-tox"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) + + if(JOB_INTERN) + clothes_s = new /icon('modular_ss220/jobs/icons/clothing/mob/uniform.dmi', "intern[g]_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_open"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "medicalpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-med"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) + + else if(job_engsec_high) + switch(job_engsec_high) + if(JOB_CADET) + clothes_s = new /icon('modular_ss220/jobs/icons/clothing/mob/uniform.dmi', "cadet[g]_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "justice_up"), ICON_OVERLAY) + else + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "secsoft"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "securitypack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-sec"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) + + if(JOB_TRAINEE) + clothes_s = new /icon('modular_ss220/jobs/icons/clothing/mob/uniform.dmi', "trainee[g]_s") + clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "orange"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "hardhat0_orange"), ICON_OVERLAY) + if(prob(70)) + clothes_s.Blend(new /icon('icons/mob/clothing/hands.dmi', "orangegloves"), ICON_OVERLAY) + if(prob(70)) + clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "hazard"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "engiepack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-eng"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) + + if(clothes_s) + preview_icon.Blend(clothes_s, ICON_OVERLAY) + + preview_icon_front = new(preview_icon, dir = SOUTH) + preview_icon_side = new(preview_icon, dir = WEST) + + qdel(clothes_s) diff --git a/modular_ss220/jobs/code/jobs_gamemodes.dm b/modular_ss220/jobs/code/jobs_gamemodes.dm new file mode 100644 index 000000000000..4db68643f8f3 --- /dev/null +++ b/modular_ss220/jobs/code/jobs_gamemodes.dm @@ -0,0 +1,27 @@ +/datum/game_mode/changeling/New() + . = ..() + protected_jobs |= GLOB.security_positions_ss220 + +/datum/game_mode/cult/New() + . = ..() + restricted_jobs |= GLOB.security_positions_ss220 + +/datum/game_mode/revolution/New() + . = ..() + restricted_jobs |= GLOB.security_positions_ss220 + +/datum/game_mode/traitor/New() + . = ..() + protected_jobs |= GLOB.security_positions_ss220 + +/datum/game_mode/trifecta/New() + . = ..() + protected_jobs |= GLOB.security_positions_ss220 + +/datum/game_mode/traitor/vampire/New() + . = ..() + protected_jobs |= GLOB.security_positions_ss220 + +/datum/game_mode/vampire/New() + . = ..() + protected_jobs |= GLOB.security_positions_ss220 diff --git a/modular_ss220/jobs/code/jobs_global_list.dm b/modular_ss220/jobs/code/jobs_global_list.dm new file mode 100644 index 000000000000..3ae7787fba1f --- /dev/null +++ b/modular_ss220/jobs/code/jobs_global_list.dm @@ -0,0 +1,41 @@ +GLOBAL_LIST_INIT(medical_positions_ss220, list( + "Intern", +)) + +GLOBAL_LIST_INIT(science_positions_ss220, list( + "Student Scientist", +)) + +GLOBAL_LIST_INIT(engineering_positions_ss220, list( + "Trainee Engineer", +)) + +GLOBAL_LIST_INIT(security_positions_ss220, list( + "Security Cadet", +)) + +GLOBAL_LIST_INIT(jobs_positions_ss220, (list() + ( + medical_positions_ss220 + science_positions_ss220 + engineering_positions_ss220 + security_positions_ss220))) + +/proc/get_alt_titles(list/positions) + var/list/all_titles = list() + for(var/rank in positions) + var/datum/job/job = SSjobs.GetJob(rank) + if(length(job.alt_titles)) + all_titles |= job.alt_titles + return all_titles + +/proc/get_all_medical_alt_titles_ss220() + return get_alt_titles(GLOB.medical_positions_ss220) + +/proc/get_all_security_alt_titles_ss220() + return get_alt_titles(GLOB.security_positions_ss220) + +/proc/get_all_engineering_alt_titles_ss220() + return get_alt_titles(GLOB.engineering_positions_ss220) + +/proc/get_all_science_alt_titles_ss220() + return get_alt_titles(GLOB.science_positions_ss220) + +/proc/get_all_alt_titles_ss220() + return get_all_medical_alt_titles_ss220() + get_all_security_alt_titles_ss220() + get_all_engineering_alt_titles_ss220() + get_all_science_alt_titles_ss220() diff --git a/modular_ss220/jobs/code/objects/engineering_job_objects.dm b/modular_ss220/jobs/code/objects/engineering_job_objects.dm new file mode 100644 index 000000000000..907234ddf11b --- /dev/null +++ b/modular_ss220/jobs/code/objects/engineering_job_objects.dm @@ -0,0 +1,47 @@ +// others +/obj/item/envelope/engineering/Initialize(mapload) + . = ..() + job_list |= GLOB.engineering_positions_ss220 + +/datum/uplink_item/jobspecific/powergloves/New() + . = ..() + job |= GLOB.engineering_positions_ss220 + +/datum/theft_objective/supermatter_sliver/New() + . = ..() + protected_jobs |= GLOB.engineering_positions_ss220 + + +// loadout +/datum/gear/accessory/armband_job/engineering/New() + . = ..() + allowed_roles |= GLOB.engineering_positions_ss220 + +/datum/gear/mug/department/eng/New() + . = ..() + allowed_roles |= GLOB.engineering_positions_ss220 + +/datum/gear/hat/hhat_yellow/New() + . = ..() + allowed_roles |= GLOB.engineering_positions_ss220 + +/datum/gear/hat/hhat_orange/New() + . = ..() + allowed_roles |= GLOB.engineering_positions_ss220 + +/datum/gear/hat/hhat_blue/New() + . = ..() + allowed_roles |= GLOB.engineering_positions_ss220 + +/datum/gear/hat/beret_job/eng/New() + . = ..() + allowed_roles |= GLOB.engineering_positions_ss220 + +/datum/gear/suit/coat/job/engi/New() + . = ..() + allowed_roles |= GLOB.engineering_positions_ss220 + +/datum/gear/uniform/skirt/job/eng/New() + . = ..() + allowed_roles |= GLOB.engineering_positions_ss220 + diff --git a/modular_ss220/jobs/code/objects/job_objects.dm b/modular_ss220/jobs/code/objects/job_objects.dm new file mode 100644 index 000000000000..fe18b83d9c6a --- /dev/null +++ b/modular_ss220/jobs/code/objects/job_objects.dm @@ -0,0 +1,31 @@ +/obj/machinery/computer/arcade/recruiter/Initialize(mapload) + . = ..() + jobs |= GLOB.jobs_positions_ss220 + get_all_alt_titles_ss220() + incorrect_jobs |= list( + "Medical Sasistant", "Shitcurity Cadet", "Traneer Enginer", "Assistant Captain", "Engineer Cadet", + "Traine Engener", "Intarn", "Entern", "Student Directar", "Head of Scientest", "Junior Codet" + ) + +/obj/effect/mob_spawn/human/intern + name = "Intern" + mob_name = "Intern" + id_job = "Intern" + outfit = /datum/outfit/job/doctor/intern + +/obj/effect/mob_spawn/human/trainee + name = "Trainee Engineer" + mob_name = "Trainee Engineer" + id_job = "Trainee Engineer" + outfit = /datum/outfit/job/engineer/trainee + +/obj/effect/mob_spawn/human/student + name = "Student Scientist" + mob_name = "Student Scientist" + id_job = "Student Scientist" + outfit = /datum/outfit/job/scientist/student + +/obj/effect/mob_spawn/human/cadet + name = "Security Cadet" + mob_name = "Security Cadet" + id_job = "Security Cadet" + outfit = /datum/outfit/job/officer/cadet diff --git a/modular_ss220/jobs/code/objects/medical_job_objects.dm b/modular_ss220/jobs/code/objects/medical_job_objects.dm new file mode 100644 index 000000000000..76b3e9782d87 --- /dev/null +++ b/modular_ss220/jobs/code/objects/medical_job_objects.dm @@ -0,0 +1,58 @@ +// others +/obj/item/envelope/medical/Initialize(mapload) + . = ..() + job_list |= GLOB.medical_positions_ss220 + +/datum/uplink_item/jobspecific/viral_injector/New() + . = ..() + job |= GLOB.medical_positions_ss220 + + +// loadout +/datum/gear/accessory/stethoscope/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/accessory/armband_job/medical/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/medhudgoggles/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/mug/department/med/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/hat/beret_job/med/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/hat/surgicalcap_purple/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/hat/surgicalcap_green/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/racial/taj/med/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/suit/coat/job/med/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/uniform/skirt/job/med/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/uniform/medical/pscrubs/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 + +/datum/gear/uniform/medical/gscrubs/New() + . = ..() + allowed_roles |= GLOB.medical_positions_ss220 diff --git a/modular_ss220/jobs/code/objects/science_job_objects.dm b/modular_ss220/jobs/code/objects/science_job_objects.dm new file mode 100644 index 000000000000..b5cfd535d901 --- /dev/null +++ b/modular_ss220/jobs/code/objects/science_job_objects.dm @@ -0,0 +1,35 @@ +// others +/obj/item/envelope/science/Initialize(mapload) + . = ..() + job_list |= GLOB.science_positions_ss220 + +/datum/uplink_item/jobspecific/stims/New() + . = ..() + job |= GLOB.science_positions_ss220 + +/datum/theft_objective/reactive/New() + . = ..() + protected_jobs |= GLOB.science_positions_ss220 + + +// loadout +/datum/gear/accessory/armband_job/sci/New() + . = ..() + allowed_roles |= GLOB.science_positions_ss220 + +/datum/gear/diaghudgoggles/New() + . = ..() + allowed_roles |= GLOB.science_positions_ss220 + +/datum/gear/mug/department/sci/New() + . = ..() + allowed_roles |= GLOB.science_positions_ss220 + +/datum/gear/hat/beret_job/sci/New() + . = ..() + allowed_roles |= GLOB.science_positions_ss220 + +/datum/gear/suit/coat/job/sci/New() + . = ..() + allowed_roles |= GLOB.science_positions_ss220 + diff --git a/modular_ss220/jobs/code/objects/security_job_objects.dm b/modular_ss220/jobs/code/objects/security_job_objects.dm new file mode 100644 index 000000000000..6eb2167daa48 --- /dev/null +++ b/modular_ss220/jobs/code/objects/security_job_objects.dm @@ -0,0 +1,75 @@ +/obj/item/envelope/security/Initialize(mapload) + . = ..() + job_list |= GLOB.security_positions_ss220 + +/datum/gear/accessory/holobadge/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/accessory/holobadge_n/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/accessory/armband_job/sec/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/sechud/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/sechudgoggles/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/mug/department/sec/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/hat/capcsec/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/hat/capsec/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/hat/beret_job/sec/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/racial/taj/sec/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/suit/coat/job/sec/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/suit/bomber/job/sec/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/suit/secjacket/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/uniform/skirt/job/security/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/uniform/sec/formal/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/uniform/sec/secorporate/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/uniform/sec/dispatch/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 + +/datum/gear/uniform/sec/casual/New() + . = ..() + allowed_roles |= GLOB.security_positions_ss220 diff --git a/modular_ss220/jobs/code/objects/wardrobe_vendors.dm b/modular_ss220/jobs/code/objects/wardrobe_vendors.dm new file mode 100644 index 000000000000..f508f3d87774 --- /dev/null +++ b/modular_ss220/jobs/code/objects/wardrobe_vendors.dm @@ -0,0 +1,40 @@ +/obj/machinery/economy/vending/medidrobe/Initialize(mapload) + . = ..() + products |= list( + /obj/item/clothing/under/rank/medical/doctor/intern = 5, + /obj/item/clothing/under/rank/medical/doctor/intern/skirt = 5, + /obj/item/clothing/under/rank/medical/doctor/intern/assistant = 5, + /obj/item/clothing/under/rank/medical/doctor/intern/assistant/skirt = 5, + /obj/item/clothing/head/surgery/green/light = 5, + /obj/item/clothing/under/rank/medical/scrubs/green/light = 5, + ) + + +/obj/machinery/economy/vending/secdrobe/Initialize(mapload) + . = ..() + products |= list( + /obj/item/clothing/under/rank/security/officer/cadet = 5, + /obj/item/clothing/under/rank/security/officer/cadet/skirt = 5, + /obj/item/clothing/under/rank/security/officer/cadet/assistant = 5, + /obj/item/clothing/under/rank/security/officer/cadet/assistant/skirt = 5, + ) + + +/obj/machinery/economy/vending/scidrobe/Initialize(mapload) + . = ..() + products |= list( + /obj/item/clothing/under/rank/rnd/scientist/student = 5, + /obj/item/clothing/under/rank/rnd/scientist/student/skirt = 5, + /obj/item/clothing/under/rank/rnd/scientist/student/assistant = 5, + /obj/item/clothing/under/rank/rnd/scientist/student/assistant/skirt = 5, + ) + + +/obj/machinery/economy/vending/engidrobe/Initialize(mapload) + . = ..() + products |= list( + /obj/item/clothing/under/rank/engineering/engineer/trainee = 5, + /obj/item/clothing/under/rank/engineering/engineer/trainee/skirt = 5, + /obj/item/clothing/under/rank/engineering/engineer/trainee/assistant = 5, + /obj/item/clothing/under/rank/engineering/engineer/trainee/assistant/skirt = 5, + ) diff --git a/modular_ss220/jobs/icons/hud.dmi b/modular_ss220/jobs/icons/hud.dmi index b2a80ca3a66dea0c658d9d84078b04f6571653d9..cc08b6d4a546230bdd1922696fbd6f535880feea 100644 GIT binary patch delta 478 zcmV<40U`eB1?&Tm7=Hu<0000N8gD%S001OVOjJd{z`%V=- z0C=2@kk1OjFbu}e?NgNPF8;fEkqz0wy+di^8q|z6sl&IoI)4N&LNCepk?)s4YIAH) zU2mFmrymd*M=}SqU#+#8(M!l?x78{D4nY>fVg<6SLh>xh0|`6K6_fQECM!NEptp69TP1`r0hrR#> z(`hSALBnRs#7zLwX6bv!|08|M^ U?fyQ^%K!iX07*qoM6N<$f+^I_WdHyG literal 745 zcmeAS@N?(olHy`uVBq!ia0vp^2|(fY?zU(0a%OWcIRzLp0W z7?{{ST^vIy=DeM~(2vPbW0j&yqm}aPn zziMDh$rh|-{NVoVgzW7Nylr>S|B2tU^KI^A-)FODM;lI0i=1X7zxP>Z``7NPSIYnI zx0Kyi{oVfMT9=#kSKd~Af1eWh;qT?m*DCkj%&Zibch5hl8u8)v*InhgX0utRCmg&V zwc*=@mgyUw{JXK^jo9_&hjpIJpc0D1ed(CZ^MHN-V$z12`UVv6U#DubMF6^o_y@~L+Qypn+#9QD0{!>xA~^IA9^F@ zk9*EDk^Xn}q{$AJUH12z?!Vu@H@o?u#g3MpLRShN?g8 zxVxg-?tFTDuiN3`ymiSM6+BnJGwM`v9`<19VL3oLQN!qZ`q0d9^~F5Ew9DY>>gTe~ HDWM4fZ