diff --git a/code/__DEFINES/~skyrat_defines/jobs.dm b/code/__DEFINES/~skyrat_defines/jobs.dm new file mode 100644 index 00000000000..c62efae5e83 --- /dev/null +++ b/code/__DEFINES/~skyrat_defines/jobs.dm @@ -0,0 +1,4 @@ +#define JOB_UNAVAILABLE_QUIRK 6 + +#define SEC_RESTRICTED_QUIRKS "Blind" = TRUE, "Blood Deficiency" = TRUE, "Brain Tumor" = TRUE, "Deaf" = TRUE, "Paraplegic" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE +#define HEAD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 1693a56e771..53c3cf3d8e7 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -85,6 +85,10 @@ SUBSYSTEM_DEF(job) return FALSE if(!job.player_old_enough(player.client)) return FALSE + //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + if(job.has_banned_quirk(player.client.prefs)) + return FALSE + //SKYRAT EDIT END if(job.required_playtime_remaining(player.client)) return FALSE var/position_limit = job.total_positions @@ -109,6 +113,11 @@ SUBSYSTEM_DEF(job) if(!job.player_old_enough(player.client)) JobDebug("FOC player not old enough, Player: [player]") continue + //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + if(job.has_banned_quirk(player.client.prefs)) + JobDebug("FOC job not compatible with quirks, Player: [player]") + continue + //SKYRAT EDIT END if(job.required_playtime_remaining(player.client)) JobDebug("FOC player not enough xp, Player: [player]") continue @@ -147,6 +156,12 @@ SUBSYSTEM_DEF(job) JobDebug("GRJ player not old enough, Player: [player]") continue + //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + if(job.has_banned_quirk(player.client.prefs)) + JobDebug("GRJ player has incompatible quirk, Player: [player]") + continue + //SKYRAT EDIT END + if(job.required_playtime_remaining(player.client)) JobDebug("GRJ player not enough xp, Player: [player]") continue @@ -327,6 +342,12 @@ SUBSYSTEM_DEF(job) JobDebug("DO player not old enough, Player: [player], Job:[job.title]") continue + //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + if(job.has_banned_quirk(player.client.prefs)) + JobDebug("DO player has incompatible quirk, Player: [player], Job:[job.title]") + continue + //SKYRAT EDIT END + if(job.required_playtime_remaining(player.client)) JobDebug("DO player not enough xp, Player: [player], Job:[job.title]") continue diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 6d189cfc5de..0526e6fd154 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -255,6 +255,10 @@ return "Your account is not old enough for [jobtitle]." if(JOB_UNAVAILABLE_SLOTFULL) return "[jobtitle] is already filled to capacity." + //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + if(JOB_UNAVAILABLE_QUIRK) + return "[jobtitle] is restricted from your quirks." + //SKYRAT EDIT END return "Error: Unknown job availability." /mob/dead/new_player/proc/IsJobUnavailable(rank, latejoin = FALSE) @@ -278,6 +282,10 @@ return JOB_UNAVAILABLE_ACCOUNTAGE if(job.required_playtime_remaining(client)) return JOB_UNAVAILABLE_PLAYTIME + //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + if(job.has_banned_quirk(client.prefs)) + return JOB_UNAVAILABLE_QUIRK + //SKYRAT EDIT END if(latejoin && !job.special_check_latejoin(client)) return JOB_UNAVAILABLE_GENERIC return JOB_AVAILABLE diff --git a/modular_skyrat/modules/customization/datums/traits/negative.dm b/modular_skyrat/modules/customization/datums/traits/negative.dm new file mode 100644 index 00000000000..ee1d30848d7 --- /dev/null +++ b/modular_skyrat/modules/customization/datums/traits/negative.dm @@ -0,0 +1,15 @@ +/datum/quirk/mute + name = "Mute" + desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak." + value = -2 //HALP MAINTS + gain_text = "You find yourself unable to speak!" + lose_text = "You feel a growing strength in your vocal chords." + medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity." + +/datum/quirk/mute/add() + var/mob/living/carbon/human/H = quirk_holder + H.gain_trauma(new /datum/brain_trauma/severe/mute, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/quirk/mute/remove() + var/mob/living/carbon/human/H = quirk_holder + H?.cure_trauma_type(/datum/brain_trauma/severe/mute, TRAUMA_RESILIENCE_ABSOLUTE) diff --git a/modular_skyrat/modules/customization/modules/client/preferences.dm b/modular_skyrat/modules/customization/modules/client/preferences.dm index 38c8a0180f6..a9793ee56ff 100644 --- a/modular_skyrat/modules/customization/modules/client/preferences.dm +++ b/modular_skyrat/modules/customization/modules/client/preferences.dm @@ -1213,6 +1213,9 @@ var/available_in_days = job.available_in_days(user.client) HTML += "[rank] \[IN [(available_in_days)] DAYS\]" continue + if(job.has_banned_quirk(src)) + HTML += "[rank] \[BAD QUIRKS\]" + continue if((job_preferences[SSjob.overflow_role] == JP_LOW) && (rank != SSjob.overflow_role) && !is_banned_from(user.ckey, SSjob.overflow_role)) HTML += "[rank]" continue diff --git a/modular_skyrat/modules/customization/modules/jobs/_job.dm b/modular_skyrat/modules/customization/modules/jobs/_job.dm index f48aeb8b931..b0fda34a64f 100644 --- a/modular_skyrat/modules/customization/modules/jobs/_job.dm +++ b/modular_skyrat/modules/customization/modules/jobs/_job.dm @@ -1,7 +1,47 @@ /datum/job ///With this set to TRUE, the loadout will be applied before a job clothing will be var/no_dresscode + //List of banned quirks in their names(dont blame me, that's how they're stored), players can't join as the job if they have the quirk. Associative for the purposes of performance + var/list/banned_quirks +/datum/job/proc/has_banned_quirk(datum/preferences/pref) + if(!pref) //No preferences? We'll let you pass, this time (just a precautionary check,you dont wanna mess up gamemode setting logic) + return FALSE + if(banned_quirks) + for(var/Q in pref.all_quirks) + if(banned_quirks[Q]) + return TRUE + return FALSE /datum/job/assistant no_dresscode = TRUE + +/datum/job/officer + banned_quirks = list(SEC_RESTRICTED_QUIRKS) + +/datum/job/detective + banned_quirks = list(SEC_RESTRICTED_QUIRKS) + +/datum/job/warden + banned_quirks = list(SEC_RESTRICTED_QUIRKS) + +/datum/job/blueshield + banned_quirks = list(SEC_RESTRICTED_QUIRKS) + +/datum/job/hos + banned_quirks = list(SEC_RESTRICTED_QUIRKS, HEAD_RESTRICTED_QUIRKS) + +/datum/job/cmo + banned_quirks = list(HEAD_RESTRICTED_QUIRKS) + +/datum/job/chief_engineer + banned_quirks = list(HEAD_RESTRICTED_QUIRKS, "Paraplegic" = TRUE) + +/datum/job/rd + banned_quirks = list(HEAD_RESTRICTED_QUIRKS) + +/datum/job/hop + banned_quirks = list(HEAD_RESTRICTED_QUIRKS) + +/datum/job/qm + banned_quirks = list(HEAD_RESTRICTED_QUIRKS) diff --git a/modular_skyrat/modules/customization/readme.md b/modular_skyrat/modules/customization/readme.md index 463a24acdca..19540056265 100644 --- a/modular_skyrat/modules/customization/readme.md +++ b/modular_skyrat/modules/customization/readme.md @@ -41,6 +41,9 @@ Re-writes how mutant bodyparts exist and how they're handled. Adds in a per limb ./code/modules/mob/living/carbon/human/species.dm > /datum/species/regenerate_organs() > APPENDED + ./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/FindOccupationCandidates(), /datum/controller/subsystem/job/proc/GiveRandomJob(), /datum/controller/subsystem/job/proc/DivideOccupations(), /datum/controller/subsystem/job/proc/AssignRole() + ./code/modules/mob/dead/new_player/new_player.dm > /mob/dead/new_player/proc/IsJobUnavailable(), /proc/get_job_unavailable_error_message() + ### Defines: ./code/modules/surgery/organs/tongue.dm > var/static/list/languages_possible_base - added 2 languages diff --git a/tgstation.dme b/tgstation.dme index 68df0636cf6..93e85e28873 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -133,6 +133,7 @@ #include "code\__DEFINES\research\anomalies.dm" #include "code\__DEFINES\~skyrat_defines\blueshield.dm" #include "code\__DEFINES\~skyrat_defines\DNA.dm" +#include "code\__DEFINES\~skyrat_defines\jobs.dm" #include "code\__DEFINES\~skyrat_defines\keybindings.dm" #include "code\__DEFINES\~skyrat_defines\logging.dm" #include "code\__DEFINES\~skyrat_defines\obj_flags.dm" @@ -3306,6 +3307,7 @@ #include "modular_skyrat\modules\customization\datums\dna.dm" #include "modular_skyrat\modules\customization\datums\elements\polychromic.dm" #include "modular_skyrat\modules\customization\datums\keybinding\communication.dm" +#include "modular_skyrat\modules\customization\datums\traits\negative.dm" #include "modular_skyrat\modules\customization\game\objects\items\balls.dm" #include "modular_skyrat\modules\customization\game\objects\items\storage\rings.dm" #include "modular_skyrat\modules\customization\game\objects\items\tanks\n2_tanks.dm"