diff --git a/code/game/jobs/faction/eridani.dm b/code/game/jobs/faction/eridani.dm
index c5ccb868738..01195f26fbf 100644
--- a/code/game/jobs/faction/eridani.dm
+++ b/code/game/jobs/faction/eridani.dm
@@ -49,6 +49,14 @@
"Corporate Liaison" = /datum/outfit/job/representative/eridani
)
+ job_species_blacklist = list(
+ "Corporate Liaison" = list(
+ "Tajara",
+ "M'sai Tajara",
+ "Zhan-Khazan Tajara"
+ )
+ )
+
/datum/outfit/job/officer/eridani
name = "Security Officer - Eridani"
uniform = /obj/item/clothing/under/rank/security/eridani
diff --git a/code/game/jobs/faction/faction.dm b/code/game/jobs/faction/faction.dm
index b60cd8bde7b..d549319f5ad 100644
--- a/code/game/jobs/faction/faction.dm
+++ b/code/game/jobs/faction/faction.dm
@@ -5,6 +5,7 @@
var/list/allowed_role_types
var/list/allowed_species_types
+ var/list/job_species_blacklist //will override the normal job species list for a member of this faction
var/is_default = FALSE
@@ -25,7 +26,10 @@
. = list()
for (var/path in allowed_role_types)
- . += SSjobs.type_occupations[path]
+ var/datum/job/role = SSjobs.type_occupations[path]
+ if(LAZYACCESS(job_species_blacklist, role.title))
+ role.blacklisted_species = job_species_blacklist[role.title]
+ . += role
/datum/faction/proc/get_selection_error(datum/preferences/prefs)
if (!length(allowed_species_types))
@@ -60,4 +64,4 @@
objective = pick("Collect [rand(3,7)] pictures of secure station areas",
"Make sure that [rand(2,4)] complaints related to contractors are solved on the station")
- return objective
\ No newline at end of file
+ return objective
diff --git a/code/game/jobs/faction/hephaestus.dm b/code/game/jobs/faction/hephaestus.dm
index e79c536a0de..bac58af6169 100644
--- a/code/game/jobs/faction/hephaestus.dm
+++ b/code/game/jobs/faction/hephaestus.dm
@@ -66,6 +66,14 @@
"Corporate Liaison" = /datum/outfit/job/representative/hephaestus
)
+ job_species_blacklist = list(
+ "Corporate Liaison" = list(
+ "Tajara",
+ "M'sai Tajara",
+ "Zhan-Khazan Tajara"
+ )
+ )
+
/datum/outfit/job/engineer/hephaestus
name = "Station Engineer - Hephaestus"
uniform = /obj/item/clothing/under/rank/hephaestus
diff --git a/code/game/jobs/faction/idris.dm b/code/game/jobs/faction/idris.dm
index 6e14368673b..4828e48e62e 100644
--- a/code/game/jobs/faction/idris.dm
+++ b/code/game/jobs/faction/idris.dm
@@ -66,6 +66,14 @@
"Corporate Liaison" = /datum/outfit/job/representative/idris
)
+ job_species_blacklist = list(
+ "Corporate Liaison" = list(
+ "Tajara",
+ "M'sai Tajara",
+ "Zhan-Khazan Tajara"
+ )
+ )
+
/datum/outfit/job/officer/idris
name = "Security Officer - Idris"
uniform = /obj/item/clothing/under/rank/security/idris
diff --git a/code/game/jobs/faction/necropolis.dm b/code/game/jobs/faction/necropolis.dm
index aafedcab66e..7cd73904be6 100644
--- a/code/game/jobs/faction/necropolis.dm
+++ b/code/game/jobs/faction/necropolis.dm
@@ -48,7 +48,8 @@
/datum/species/human,
/datum/species/skrell,
/datum/species/unathi,
- /datum/species/diona
+ /datum/species/diona,
+ /datum/species/machine
)
titles_to_loadout = list(
@@ -72,6 +73,20 @@
"Corporate Liaison" = /datum/outfit/job/representative/necropolis
)
+ job_species_blacklist = list(
+ "Corporate Liaison" = list(
+ "Baseline Frame",
+ "Hephaestus G1 Industrial Frame",
+ "Hephaestus G2 Industrial Frame",
+ "Xion Industrial Frame",
+ "Zeng-Hu Mobility Frame",
+ "Bishop Accessory Frame",
+ "Shell Frame"
+ )
+ )
+
+
+
/datum/outfit/job/officer/necropolis
name = "Security Officer - Necropolis"
uniform = /obj/item/clothing/under/rank/security/necropolis
diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm
index eb382b0328c..8308086ab75 100644
--- a/code/modules/client/preference_setup/occupation/occupation.dm
+++ b/code/modules/client/preference_setup/occupation/occupation.dm
@@ -284,10 +284,17 @@
if (!SSjobs.name_factions[pref.faction])
pref.faction = SSjobs.default_faction.name
- to_client_chat("Your faction selection has been reset to [pref.faction].")
- to_client_chat("Your jobs have been reset due to this!")
+ to_client_chat(SPAN_DANGER("Your faction selection has been reset to [pref.faction]."))
+ to_client_chat(SPAN_DANGER("Your jobs have been reset due to this!"))
ResetJobs()
+ var/datum/faction/faction = SSjobs.name_factions[pref.faction]
+ for(var/datum/job/job in faction.get_occupations())
+ if(pref.species in job.blacklisted_species)
+ to_client_chat(SPAN_DANGER("Your faction selection does not permit this species-occupation combination."))
+ to_client_chat(SPAN_DANGER("Your jobs have been reset due to this!"))
+ ResetJobs()
+
/datum/category_item/player_setup_item/occupation/proc/SetPlayerAltTitle(datum/job/job, new_title)
// remove existing entry
pref.player_alt_titles -= job.title
diff --git a/html/changelogs/paradoxspace-t1000.yml b/html/changelogs/paradoxspace-t1000.yml
new file mode 100644
index 00000000000..26ff3d8e086
--- /dev/null
+++ b/html/changelogs/paradoxspace-t1000.yml
@@ -0,0 +1,42 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: ParadoxSpace & Myazaki
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "IPCs can now be Necropolis contractors. However, they cannot be corp reps."
+ - rscadd: "Tajara can only be NT/Independent corp reps."
\ No newline at end of file