diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 5c5dba3c34..68954b0dc5 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -162,3 +162,8 @@
#define CAT_NORMAL 1
#define CAT_HIDDEN 2
#define CAT_COIN 4
+
+//Antag Faction Visbility
+#define ANTAG_HIDDEN "Hidden"
+#define ANTAG_SHARED "Shared"
+#define ANTAG_KNOWN "Known"
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index cc603aa2df..2043febdb6 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -228,6 +228,8 @@
L.fields["faction"] = H.personal_faction
L.fields["religion"] = H.religion
L.fields["image"] = getFlatIcon(H) //This is god-awful
+ L.fields["antagfac"] = H.antag_faction
+ L.fields["antagvis"] = H.antag_vis
if(H.exploit_record && !jobban_isbanned(H, "Records"))
L.fields["exploit_record"] = H.exploit_record
else
diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm
index 571b0462df..b9b854f76a 100644
--- a/code/game/objects/items/devices/uplink.dm
+++ b/code/game/objects/items/devices/uplink.dm
@@ -6,6 +6,7 @@
var/list/nanoui_items // List of items for NanoUI use
var/nanoui_menu = 0 // The current menu we are in
var/list/nanoui_data = new // Additional data for NanoUI use
+ var/faction = "" //Antag faction holder.
var/list/purchase_log = new
var/datum/mind/uplink_owner = null
@@ -96,6 +97,9 @@
var/title = "Remote Uplink"
var/data[0]
uses = user.mind.tcrystals
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ faction = H.antag_faction
data["welcome"] = welcome
data["crystals"] = uses
@@ -188,7 +192,10 @@
nanoui_data["exploit"]["faction"] = html_encode(L.fields["faction"])
nanoui_data["exploit"]["religion"] = html_encode(L.fields["religion"])
nanoui_data["exploit"]["fingerprint"] = html_encode(L.fields["fingerprint"])
-
+ if(L.fields["antagvis"] == ANTAG_KNOWN || (faction == L.fields["antagfac"] && (L.fields["antagvis"] == ANTAG_SHARED)))
+ nanoui_data["exploit"]["antagfaction"] = html_encode(L.fields["antagfac"])
+ else
+ nanoui_data["exploit"]["antagfaction"] = html_encode("None")
nanoui_data["exploit_exists"] = 1
break
diff --git a/code/modules/client/preference_setup/antagonism/01_basic.dm b/code/modules/client/preference_setup/antagonism/01_basic.dm
index af9c22c99b..e0a60b6313 100644
--- a/code/modules/client/preference_setup/antagonism/01_basic.dm
+++ b/code/modules/client/preference_setup/antagonism/01_basic.dm
@@ -7,19 +7,29 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
/datum/category_item/player_setup_item/antagonism/basic/load_character(var/savefile/S)
S["uplinklocation"] >> pref.uplinklocation
S["exploit_record"] >> pref.exploit_record
+ S["antag_faction"] >> pref.antag_faction
+ S["antag_vis"] >> pref.antag_vis
/datum/category_item/player_setup_item/antagonism/basic/save_character(var/savefile/S)
S["uplinklocation"] << pref.uplinklocation
S["exploit_record"] << pref.exploit_record
+ S["antag_faction"] << pref.antag_faction
+ S["antag_vis"] << pref.antag_vis
/datum/category_item/player_setup_item/antagonism/basic/sanitize_character()
pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation))
+ if(!pref.antag_faction) pref.antag_faction = "None"
+ if(!pref.antag_vis) pref.antag_vis = "Hidden"
// Moved from /datum/preferences/proc/copy_to()
/datum/category_item/player_setup_item/antagonism/basic/copy_to_mob(var/mob/living/carbon/human/character)
character.exploit_record = pref.exploit_record
+ character.antag_faction = pref.antag_faction
+ character.antag_vis = pref.antag_vis
/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user)
+ . += "Faction: [pref.antag_faction]
"
+ . += "Visibility: [pref.antag_vis]
"
. +="Uplink Type : [pref.uplinklocation]"
. +="
"
. +="Exploitable information:
"
@@ -38,5 +48,25 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
if(!isnull(exploitmsg) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
pref.exploit_record = exploitmsg
return TOPIC_REFRESH
+
+ if(href_list["antagfaction"])
+ var/choice = input(user, "Please choose an antagonistic faction to work for.", "Character Preference", pref.antag_faction) as null|anything in antag_faction_choices + list("None","Other")
+ if(!choice || !CanUseTopic(user))
+ return TOPIC_NOACTION
+ if(choice == "Other")
+ var/raw_choice = sanitize(input(user, "Please enter a faction.", "Character Preference") as text|null, MAX_NAME_LEN)
+ if(raw_choice)
+ pref.antag_faction = raw_choice
+ else
+ pref.antag_faction = choice
+ return TOPIC_REFRESH
+
+ if(href_list["antagvis"])
+ var/choice = input(user, "Please choose an antagonistic visibility level.", "Character Preference", pref.antag_vis) as null|anything in antag_visiblity_choices
+ if(!choice || !CanUseTopic(user))
+ return TOPIC_NOACTION
+ else
+ pref.antag_vis = choice
+ return TOPIC_REFRESH
return ..()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 0bcaff2491..4aeaf7c800 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -54,8 +54,10 @@ datum/preferences
//Some faction information.
var/home_system = "Unset" //System of birth.
var/citizenship = "None" //Current home system.
- var/faction = "None" //Antag faction/general associated faction.
+ var/faction = "None" //General associated faction.
var/religion = "None" //Religious association.
+ var/antag_faction = "None" //Antag associated faction.
+ var/antag_vis = "Hidden" //How visible antag association is to others.
//Mob preview
var/icon/preview_icon = null
diff --git a/code/modules/client/preferences_factions.dm b/code/modules/client/preferences_factions.dm
index 61d6810224..030c8d08a3 100644
--- a/code/modules/client/preferences_factions.dm
+++ b/code/modules/client/preferences_factions.dm
@@ -1,6 +1,7 @@
var/global/list/seen_citizenships = list()
var/global/list/seen_systems = list()
var/global/list/seen_factions = list()
+var/global/list/seen_antag_factions = list()
var/global/list/seen_religions = list()
//Commenting this out for now until I work the lists it into the event generator/journalist/chaplain.
@@ -25,6 +26,7 @@ var/global/list/home_system_choices = list(
starsys_name,
"Nyx",
"Tau Ceti",
+ "Qerr'Vallis",
"Epsilon Ursae Minoris",
"S'randarr"
)
@@ -42,6 +44,14 @@ var/global/list/faction_choices = list(
"Zeng-Hu Pharmaceuticals",
"Hesphaistos Industries"
)
+
+var/global/list/antag_faction_choices = list() //Should be populated after brainstorming. Leaving as blank in case brainstorming does not occur.
+
+var/global/list/antag_visiblity_choices = list(
+ "Hidden",
+ "Shared",
+ "Known"
+ )
var/global/list/religion_choices = list(
"Unitarianism",
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 13f4f2f25a..99bbe8ffcf 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -43,6 +43,8 @@
var/citizenship = ""
var/personal_faction = ""
var/religion = ""
+ var/antag_faction = ""
+ var/antag_vis = ""
//Equipment slots
var/obj/item/wear_suit = null
diff --git a/html/changelogs/Datraen-AntagFactions1.yml b/html/changelogs/Datraen-AntagFactions1.yml
new file mode 100644
index 0000000000..c778523bf3
--- /dev/null
+++ b/html/changelogs/Datraen-AntagFactions1.yml
@@ -0,0 +1,4 @@
+ author: Datraen
+delete-after: True
+changes:
+ - rscadd: "Antagonistic factions can now be set and viewed on the uplink. Visibilities can be set for these as well, to help identify sympathizers/potential aids, or to hide the information from those outside of your faction."
\ No newline at end of file
diff --git a/nano/templates/uplink.tmpl b/nano/templates/uplink.tmpl
index ed799677bc..470f27064c 100644
--- a/nano/templates/uplink.tmpl
+++ b/nano/templates/uplink.tmpl
@@ -77,16 +77,17 @@ Used In File(s): \code\game\objects\items\devices\uplinks.dm