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]