diff --git a/code/game/gamemodes/vox/heist/heist.dm b/code/game/gamemodes/vox/heist/heist.dm
index 00b9b919859..75ef808141e 100644
--- a/code/game/gamemodes/vox/heist/heist.dm
+++ b/code/game/gamemodes/vox/heist/heist.dm
@@ -94,6 +94,7 @@ VOX HEIST ROUNDTYPE
vox.real_name = capitalize(newname)
vox.name = vox.real_name
+ raider.name = vox.name
vox.age = rand(12,20)
vox.dna.mutantrace = "vox"
vox.set_species("Vox")
@@ -232,6 +233,34 @@ VOX HEIST ROUNDTYPE
..()
+datum/game_mode/proc/auto_declare_completion_heist()
+ if(raiders.len)
+ var/check_return = 0
+ if(ticker && istype(ticker.mode,/datum/game_mode/vox/heist))
+ check_return = 1
+ var/text = "The vox raiders were:"
+
+ for(var/datum/mind/vox in raiders)
+ text += "
[vox.key] was [vox.name] ("
+ if(check_return)
+ var/obj/stack = raiders[vox]
+ if(get_area(stack) != locate(/area/shuttle/vox/station))
+ text += "left behind)"
+ continue
+ if(vox.current)
+ if(vox.current.stat == DEAD)
+ text += "died"
+ else
+ text += "survived"
+ if(vox.current.real_name != vox.name)
+ text += " as [vox.current.real_name]"
+ else
+ text += "body destroyed"
+ text += ")"
+
+ world << text
+ return 1
+
/datum/game_mode/vox/heist/check_finished()
if (!(is_vox_crew_alive()) || (vox_shuttle_location && (vox_shuttle_location == "start")))
return 1
diff --git a/code/game/gamemodes/vox/trade/trade.dm b/code/game/gamemodes/vox/trade/trade.dm
index 906636471bf..b6ca65984ad 100644
--- a/code/game/gamemodes/vox/trade/trade.dm
+++ b/code/game/gamemodes/vox/trade/trade.dm
@@ -94,6 +94,7 @@ VOX TRADE ROUNDTYPE
vox.real_name = capitalize(newname)
vox.name = vox.real_name
+ trader.name = vox.name
vox.age = rand(12,20)
vox.dna.mutantrace = "vox"
vox.set_species("Vox")
@@ -208,6 +209,34 @@ VOX TRADE ROUNDTYPE
..()
+datum/game_mode/proc/auto_declare_completion_trade()
+ if(traders.len)
+ var/check_return = 0
+ if(ticker && istype(ticker.mode,/datum/game_mode/vox/trade))
+ check_return = 1
+ var/text = "The vox traders were:"
+
+ for(var/datum/mind/vox in traders)
+ text += "
[vox.key] was [vox.name] ("
+ if(check_return)
+ var/obj/stack = traders[vox]
+ if(get_area(stack) != locate(/area/shuttle/vox/station))
+ text += "left behind)"
+ continue
+ if(vox.current)
+ if(vox.current.stat == DEAD)
+ text += "died"
+ else
+ text += "survived"
+ if(vox.current.real_name != vox.name)
+ text += " as [vox.current.real_name]"
+ else
+ text += "body destroyed"
+ text += ")"
+
+ world << text
+ return 1
+
/datum/game_mode/vox/trade/check_finished()
if (!(is_vox_crew_alive()) || (vox_shuttle_location && (vox_shuttle_location == "start")))
return 1
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 130ff6c4b53..f11885912ec 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -196,7 +196,7 @@
/obj/item/weapon/card/id/syndicate
name = "agent card"
- access = list(access_maint_tunnels, access_syndicate, access_external_airlocks)
+ access = list(access_maint_tunnels, access_syndicate)
origin_tech = "syndicate=3"
/obj/item/weapon/card/id/syndicate/afterattack(var/obj/item/weapon/O as obj, mob/user as mob, proximity)
@@ -208,7 +208,7 @@
if(user.mind.special_role)
usr << "\blue The card's microscanners activate as you pass it over the ID, copying its access."
-
+/obj/item/weapon/card/id/syndicate/var/mob/registered_user = null
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
if(!src.registered_name)
//Stop giving the players unsanitized unputs! You are giving ways for players to intentionally crash clients! -Nodrak
@@ -226,6 +226,27 @@
src.assignment = u
src.name = "[src.registered_name]'s ID Card ([src.assignment])"
user << "\blue You successfully forge the ID card."
+ registered_user = user
+ else if(registered_user == user)
+ switch(alert("Would you like to display the ID, or retitle it?","Choose.","Rename","Show"))
+ if("Rename")
+ var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)),1,26)
+ if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/new_player/prefrences.dm
+ alert("Invalid name.")
+ return
+ src.registered_name = t
+
+ var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")),1,MAX_MESSAGE_LEN)
+ if(!u)
+ alert("Invalid assignment.")
+ src.registered_name = ""
+ return
+ src.assignment = u
+ src.name = "[src.registered_name]'s ID Card ([src.assignment])"
+ user << "\blue You successfully forge the ID card."
+ return
+ if("Show")
+ ..()
else
..()
diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm
index 598a0b89546..8d17ba10d90 100644
--- a/code/modules/admin/verbs/vox_raiders.dm
+++ b/code/modules/admin/verbs/vox_raiders.dm
@@ -60,9 +60,10 @@ var/global/vox_tick = 1
var/obj/item/weapon/card/id/syndicate/W = new(src)
W.name = "[real_name]'s Legitimate Human ID Card"
W.icon_state = "id"
- W.access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage, access_syndicate)
+ W.access = list(access_syndicate)
W.assignment = "Trader"
W.registered_name = real_name
+ W.registered_user = src
equip_to_slot_or_del(W, slot_wear_id)
var/obj/item/weapon/implant/cortical/I = new(src)
@@ -75,9 +76,11 @@ var/global/vox_tick = 1
if(ticker.mode && ( istype(ticker.mode,/datum/game_mode/vox/heist) ) )
var/datum/game_mode/vox/heist/M = ticker.mode
M.cortical_stacks += I
+ M.raiders[mind] = I
else if(ticker.mode && ( istype(ticker.mode,/datum/game_mode/vox/trade) ) )
var/datum/game_mode/vox/trade/M = ticker.mode
M.cortical_stacks += I
+ M.traders[mind] = I
vox_tick++
if (vox_tick > 4) vox_tick = 1