diff --git a/baystation12.dme b/baystation12.dme
index 68d5ab3d3d0..78f58149999 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -710,6 +710,7 @@
#include "code\modules\admin\verbs\striketeam_syndicate.dm"
#include "code\modules\admin\verbs\ticklag.dm"
#include "code\modules\admin\verbs\tripAI.dm"
+#include "code\modules\admin\verbs\vox_raiders.dm"
#include "code\modules\assembly\assembly.dm"
#include "code\modules\assembly\bomb.dm"
#include "code\modules\assembly\helpers.dm"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 292327ca274..6303e8d0da0 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -11,31 +11,31 @@
if("1")
log_admin("[key_name(usr)] has spawned a traitor.")
if(!src.makeTraitors())
- usr << "\red Unfortunatly there were no candidates available"
+ usr << "\red Unfortunately there weren't enough candidates available."
if("2")
log_admin("[key_name(usr)] has spawned a changeling.")
if(!src.makeChanglings())
- usr << "\red Unfortunatly there were no candidates available"
+ usr << "\red Unfortunately there weren't enough candidates available."
if("3")
log_admin("[key_name(usr)] has spawned revolutionaries.")
if(!src.makeRevs())
- usr << "\red Unfortunatly there were no candidates available"
+ usr << "\red Unfortunately there weren't enough candidates available."
if("4")
log_admin("[key_name(usr)] has spawned a cultists.")
if(!src.makeCult())
- usr << "\red Unfortunatly there were no candidates available"
+ usr << "\red Unfortunately there weren't enough candidates available."
if("5")
log_admin("[key_name(usr)] has spawned a malf AI.")
if(!src.makeMalfAImode())
- usr << "\red Unfortunatly there were no candidates available"
+ usr << "\red Unfortunately there weren't enough candidates available."
if("6")
log_admin("[key_name(usr)] has spawned a wizard.")
if(!src.makeWizard())
- usr << "\red Unfortunatly there were no candidates available"
+ usr << "\red Unfortunately there weren't enough candidates available."
if("7")
log_admin("[key_name(usr)] has spawned a nuke team.")
if(!src.makeNukeTeam())
- usr << "\red Unfortunatly there were no candidates available"
+ usr << "\red Unfortunately there weren't enough candidates available."
if("8")
log_admin("[key_name(usr)] has spawned a ninja.")
src.makeSpaceNinja()
@@ -44,8 +44,10 @@
src.makeAliens()
if("10")
log_admin("[key_name(usr)] has spawned a death squad.")
- if(!src.makeDeathsquad())
- usr << "\red Unfortunatly there were no candidates available"
+ if("11")
+ log_admin("[key_name(usr)] has spawned vox raiders.")
+ if(!src.makeVoxRaiders())
+ usr << "\red Unfortunately there weren't enough candidates available."
else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"])
var/adminckey = href_list["dbsearchadmin"]
var/playerckey = href_list["dbsearchckey"]
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 8ef53eb0232..823d1adc2f0 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -17,6 +17,7 @@ client/proc/one_click_antag()
Make Cult
Make Malf AI
Make Wizard (Requires Ghosts)
+ Make Vox Raiders (Requires Ghosts)
"}
/* These dont work just yet
Ninja, aliens and deathsquad I have not looked into yet
@@ -429,4 +430,96 @@ client/proc/one_click_antag()
ticker.mode.traitors += new_syndicate_commando.mind
new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected)
- return new_syndicate_commando
\ No newline at end of file
+ return new_syndicate_commando
+
+/datum/admins/proc/makeVoxRaiders()
+
+ var/list/mob/dead/observer/candidates = list()
+ var/mob/dead/observer/theghost = null
+ var/time_passed = world.time
+ var/input = "Disregard shinies, acquire hardware."
+
+ var/leader_chosen = 0 //when the leader is chosen. The last person spawned.
+
+ //Generates a list of candidates from active ghosts. The admin picks which players to respawn as the vox.
+ for(var/mob/dead/observer/G in player_list)
+ spawn(0)
+ if(is_alien_whitelisted(src, "Vox") || !config.usealienwhitelist)
+ switch(alert(G,"Do you wish to be considered for a vox raiding party arriving on the station?","Please answer in 30 seconds!","Yes","No"))
+ if("Yes")
+ if((world.time-time_passed)>300)//If more than 30 game seconds passed.
+ return
+ candidates += G
+ if("No")
+ return
+ else
+ return
+
+ sleep(300) //Debug.
+
+ for(var/mob/dead/observer/G in candidates)
+ if(!G.key)
+ candidates.Remove(G)
+
+ if(candidates.len)
+ var/raiders = 1
+ //Spawns vox raiders and equips them. Two raiders, two engineers.
+ for (var/obj/effect/landmark/L in world)
+ if(L.name == "Response Team")
+ if(raiders<=0)
+ break
+
+ var/mob/living/carbon/human/new_vox = create_vox_raider(L, leader_chosen)
+
+ while((!theghost || !theghost.client) && candidates.len)
+ theghost = pick(candidates)
+ candidates.Remove(theghost)
+
+ if(!theghost)
+ del(new_vox)
+ break
+
+ new_vox.key = theghost.key
+ new_vox << "\blue You are a Vox Primalis, fresh out of the Shoal. Your crew has arrived at the NSV Exodus to begin pillaging! Your current goal is: \red [input]"
+ new_vox << "\red Don't forget to turn on your nitrogen internals!"
+
+ raiders--
+ if(raiders >= 4)
+ return 0
+ else
+ return 0
+ return 1
+
+/datum/admins/proc/create_vox_raider(obj/spawn_location, leader_chosen = 0)
+ var/mob/living/carbon/human/new_vox = new(spawn_location.loc)
+
+ new_vox.gender = pick(MALE, FEMALE)
+ var/datum/preferences/A = new() //Randomize appearance for the raider.
+ A.randomize_appearance_for(new_vox)
+ new_vox.h_style = "Short Vox Quills"
+ new_vox.regenerate_icons()
+
+ var/sounds = rand(2,10)
+ var/i = 0
+ var/newname = ""
+
+ while(i<=sounds)
+ i++
+ newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah"))
+
+ new_vox.real_name = capitalize(newname)
+ new_vox.name = new_vox.real_name
+ new_vox.age = rand(12,20)
+
+ new_vox.dna.ready_dna(new_vox) // Creates DNA.
+ new_vox.dna.mutantrace = "vox" // Actually makes the vox! How about that.
+ new_vox.mind_initialize()
+ new_vox.mind.assigned_role = "MODE"
+ new_vox.mind.special_role = "Vox Raider"
+
+ //Adds them to current traitor list. Which is really the extra antagonist list.
+ ticker.mode.traitors += new_vox.mind
+ new_vox.equip_vox_raider()
+
+ usr << "\red Returning vox."
+ return new_vox
\ No newline at end of file
diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm
new file mode 100644
index 00000000000..4aa9b323a97
--- /dev/null
+++ b/code/modules/admin/verbs/vox_raiders.dm
@@ -0,0 +1,66 @@
+/mob/living/carbon/human/proc/equip_vox_raider()
+
+ var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate(src)
+ R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode.
+ equip_to_slot_or_del(R, slot_ears)
+
+ equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_robes(src), slot_w_uniform)
+ equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(src), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES.
+ equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves) // AS ABOVE.
+
+ switch(rand(1,4)) // Come up with a better way of doing this - ticker of some sort maybe.
+ if(1) // Vox raider!
+ equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit)
+ equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(src), slot_head)
+ equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(src), slot_belt)
+ equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
+ equip_to_slot_or_del(new /obj/item/device/chameleon(src), slot_l_store)
+
+ var/obj/item/weapon/crossbow/W = new(src)
+ W.cell = new /obj/item/weapon/cell/crap(W)
+ W.cell.charge = 500
+ equip_to_slot_or_del(W, slot_r_hand)
+
+ if(2) // Vox engineer!
+ equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/pressure(src), slot_wear_suit)
+ equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/pressure(src), slot_head)
+ equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt)
+ equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
+ equip_to_slot_or_del(new /obj/item/weapon/storage/box/emps(src), slot_l_store)
+
+ equip_to_slot_or_del(new /obj/item/weapon/pickaxe/plasmacutter(src), slot_r_hand)
+
+ if(3) // Vox saboteur!
+ equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit)
+ equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(src), slot_head)
+ equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt)
+ equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
+ equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_l_store)
+
+ var/obj/item/weapon/storage/pneumatic/W = new(src)
+ W.tank = new /obj/item/weapon/tank/nitrogen(W)
+ equip_to_slot_or_del(W, slot_r_hand)
+
+ if(4) // Vox medic!
+ equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/pressure(src), slot_wear_suit)
+ equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/pressure(src), slot_head)
+ equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt) // Who needs actual surgical tools?
+ equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
+ equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray(src), slot_l_store)
+
+ equip_to_slot_or_del(new /obj/item/weapon/circular_saw(src), slot_l_hand)
+ equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/toxin(src), slot_r_hand)
+
+ equip_to_slot_or_del(new /obj/item/clothing/mask/breath/vox(src), slot_wear_mask)
+ equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_back)
+ equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store)
+
+ 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.assignment = "Trader"
+ W.registered_name = real_name
+ equip_to_slot_or_del(W, slot_wear_id)
+
+ return 1
\ No newline at end of file
diff --git a/icons/mob/human_races/r_def_vox.dmi b/icons/mob/human_races/r_def_vox.dmi
index 4dad2129d50..2024f52583b 100644
Binary files a/icons/mob/human_races/r_def_vox.dmi and b/icons/mob/human_races/r_def_vox.dmi differ
diff --git a/icons/mob/human_races/r_vox.dmi b/icons/mob/human_races/r_vox.dmi
index 4dad2129d50..6aada937c25 100644
Binary files a/icons/mob/human_races/r_vox.dmi and b/icons/mob/human_races/r_vox.dmi differ