diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index e9d3af9abb71..1cee0fe1c84c 100644
--- a/code/__DEFINES/jobs.dm
+++ b/code/__DEFINES/jobs.dm
@@ -35,6 +35,10 @@
// CRIMSON EDIT ADD START
#define JOB_UNAVAILABLE_DONATOR 18
+#define JOB_UNAVAILABLE_BANNED_SPLAT 19
+#define JOB_UNAVAILABLE_BANNED_TRIBE 20
+#define JOB_UNAVAILABLE_BANNED_CLAN 21
+#define JOB_UNAVAILABLE_BANNED_AUSPICE 22
// CRIMSON EDIT ADD END
diff --git a/code/__HELPERS/~~crimson_helpers/text.dm b/code/__HELPERS/~~crimson_helpers/text.dm
index cb6383f2e031..ba03bab47c28 100644
--- a/code/__HELPERS/~~crimson_helpers/text.dm
+++ b/code/__HELPERS/~~crimson_helpers/text.dm
@@ -4,3 +4,17 @@
if(isnull(http_regex))
http_regex = new("^https?://")
return findtext(text, http_regex)
+
+// example: my_ass_hurts -> MyAssHurts or My Ass Hurts (with underscore_as_space)
+/// Snakecake to pascalcase
+/proc/snake_to_pascal(text, underscore_as_space = FALSE)
+ var/list/parts = splittext(text, "_")
+ var/result = ""
+
+ for (var/part in parts)
+ if (underscore_as_space)
+ if (result)
+ result += " "
+ result += uppertext(copytext(part, 1, 2)) + copytext(part, 2)
+
+ return result
diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm
index d922c3c1438f..2c16519937e1 100644
--- a/code/modules/admin/sql_ban_system.dm
+++ b/code/modules/admin/sql_ban_system.dm
@@ -362,6 +362,14 @@
"}
break_counter++
output += ""
+ // CRIMSON EDIT ADD START - SUBSPLAT_BANS
+ var/list/clan_list = list()
+ for(var/key in GLOB.vampire_clan_list)
+ var/datum/subsplat/vampire_clan/clan = GLOB.vampire_clan_list[key]
+ if(clan)
+ clan_list += clan.name
+ // CRIMSON EDIT END
+
var/list/long_job_lists = list(
"Ghost and Other Roles" = list(
ROLE_PAI,
@@ -405,6 +413,42 @@
ROLE_VOIDWALKER,
ROLE_WIZARD,
),
+ // CRIMSON EDIT ADD START - SUBSPLAT_BANS
+ // SPLAT_* and VAMPIRE_* defines are in snake_case, so below we'll have the label converted with snake_to_pascal
+ "Splats" = list(
+ SPLAT_KINDRED,
+ SPLAT_GHOUL,
+ SPLAT_KINFOLK,
+ SPLAT_GAROU,
+ SPLAT_CORAX,
+ ),
+ "Clans" = clan_list,
+ "Tribes" = list(
+ TRIBE_RONIN,
+ TRIBE_BLACK_FURIES,
+ TRIBE_BONE_GNAWERS,
+ TRIBE_CHILDREN_OF_GAIA,
+ TRIBE_FIANNA,
+ TRIBE_GALESTALKERS,
+ TRIBE_GET_OF_FENRIS,
+ TRIBE_UKTENA,
+ TRIBE_GLASS_WALKERS,
+ TRIBE_RED_TALONS,
+ TRIBE_SHADOW_LORDS,
+ TRIBE_SILENT_STRIDERS,
+ TRIBE_SILVER_FANGS,
+ TRIBE_STARGAZERS,
+ TRIBE_BLACK_SPIRAL_DANCERS,
+ ),
+ "Auspice" = list( // body wash cant block odor for 16 hours
+ AUSPICE_NONE,
+ AUSPICE_RAGABASH,
+ AUSPICE_THEURGE,
+ AUSPICE_PHILODOX,
+ AUSPICE_AHROUN,
+ AUSPICE_GALLIARD,
+ )
+ // CRIMSON EDIT ADD END
)
for(var/department in long_job_lists)
output += "
"
@@ -412,7 +456,8 @@
for(var/job in long_job_lists[department])
if(break_counter > 0 && (break_counter % 10 == 0))
output += "
"
- output += {"