diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index c565740299b..3395da858a9 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -1332,7 +1332,7 @@
ticker.mode.finalize_traitor(src)
ticker.mode.greet_traitor(src)
-/datum/mind/proc/make_Nuke(turf/spawnloc,nuke_code,leader=0)
+/datum/mind/proc/make_Nuke(turf/spawnloc,nuke_code,leader=0, telecrystals = TRUE)
if(!(src in ticker.mode.syndicates))
ticker.mode.syndicates += src
ticker.mode.update_synd_icons_added(src)
@@ -1353,7 +1353,7 @@
qdel(H.wear_suit)
qdel(H.w_uniform)
- ticker.mode.equip_syndicate(current)
+ ticker.mode.equip_syndicate(current, telecrystals)
if (nuke_code)
store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0)
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index a8cb643e6cd..e0a972e4d01 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -245,20 +245,28 @@ var/list/uplink_items = list()
gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
-/datum/uplink_item/dangerous/syndieborg
+/datum/uplink_item/dangerous/reinforcement/syndieborg
name = "Syndicate Cyborg"
desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel."
- item = /obj/item/weapon/antag_spawner/borg_tele
+ item = /obj/item/weapon/antag_spawner/nuke_ops/borg_tele
cost = 50
gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
-//for refunding the syndieborg teleporter
-/datum/uplink_item/dangerous/syndieborg/spawn_item()
- var/obj/item/weapon/antag_spawner/borg_tele/T = ..()
+/datum/uplink_item/dangerous/reinforcement
+ name = "Reinforcements"
+ desc = "Call in an additional team member. They won't come with any gear, so you'll have to save some telecrystals to arm them as well."
+ item = /obj/item/weapon/antag_spawner/nuke_ops
+ cost = 25
+ gamemodes = list(/datum/game_mode/nuclear)
+ surplus = 0
+
+/datum/uplink_item/dangerous/reinforcement/spawn_item()
+ var/obj/item/weapon/antag_spawner/nuke_ops/T = ..()
if(istype(T))
T.TC_cost = cost
+
/datum/uplink_item/dangerous/guardian
name = "Holoparasites"
desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an organic host as a home base and source of fuel."
diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index 77f14f919f3..c32244b01e1 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -10,6 +10,9 @@
/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target)
return
+
+///////////WIZARD
+
/obj/item/weapon/antag_spawner/contract
name = "contract"
desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid."
@@ -119,40 +122,81 @@
target.equip_to_slot_or_del(new /obj/item/weapon/storage/box(target), slot_in_backpack)
target.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(target), slot_r_store)
-/obj/item/weapon/antag_spawner/borg_tele
- name = "syndicate cyborg teleporter"
- desc = "A single-use teleporter designed to deploy a single Syndicate cyborg onto the field."
+
+
+
+
+
+///////////BORGS AND OPERATIVES
+
+
+/obj/item/weapon/antag_spawner/nuke_ops
+ name = "syndicate operative teleporter"
+ desc = "A single-use teleporter designed to quickly reinforce operatives in the field."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
var/TC_cost = 0
var/borg_to_spawn
var/list/possible_types = list("Assault", "Medical")
-/obj/item/weapon/antag_spawner/borg_tele/attack_self(mob/user)
+/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user)
if(used)
user << "[src] is out of power!"
- return
+ return 0
if(!(user.mind in ticker.mode.syndicates))
user << "AUTHENTICATION FAILURE. ACCESS DENIED."
return 0
- borg_to_spawn = input("What type?", "Cyborg Type", type) as null|anything in possible_types
- if(!borg_to_spawn)
+ if(user.z != ZLEVEL_CENTCOM)
+ user << "[src] is out of range! It can only be used at your base!"
+ return 0
+ return 1
+
+
+/obj/item/weapon/antag_spawner/nuke_ops/attack_self(mob/user)
+ if(!(check_usability(user)))
return
- var/list/borg_candicates = get_candidates(ROLE_OPERATIVE, 3000, "operative")
- if(borg_candicates.len > 0)
+
+ var/list/nuke_candidates = get_candidates(ROLE_OPERATIVE, 3000, "operative")
+ if(nuke_candidates.len > 0)
used = 1
- var/client/C = pick(borg_candicates)
+ var/client/C = pick(nuke_candidates)
spawn_antag(C, get_turf(src.loc), "syndieborg")
+ var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread
+ S.set_up(4, 1, src)
+ S.start()
else
user << "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded."
-/obj/item/weapon/antag_spawner/borg_tele/spawn_antag(client/C, turf/T, type = "")
- if(!borg_to_spawn) //If there's no type at all, let it still be used but don't do anything
- used = 0
+/obj/item/weapon/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T)
+ var/nuke_code = "Ask your leader!"
+ var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
+ C.prefs.copy_to(M)
+ M.key = C.key
+ var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in nuke_list
+ if(nuke)
+ nuke.r_code = nuke_code
+ M.mind.make_Nuke(T, nuke_code, 0, FALSE)
+
+
+
+
+
+//////SYNDICATE BORG
+
+/obj/item/weapon/antag_spawner/nuke_ops/borg_tele
+ name = "syndicate cyborg teleporter"
+ desc = "A single-use teleporter designed to quickly reinforce operatives in the field.."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "locator"
+
+
+/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/attack_self(mob/user)
+ borg_to_spawn = input("What type?", "Cyborg Type", type) as null|anything in possible_types
+ if(!borg_to_spawn)
return
- var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread
- S.set_up(4, 1, src)
- S.start()
+ ..()
+
+/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T)
var/mob/living/silicon/robot/R
switch(borg_to_spawn)
if("Medical")
@@ -166,6 +210,15 @@
R.faction = list("syndicate")
+
+
+
+
+
+
+///////////SLAUGHTER DEMON
+
+
/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game
name = "vial of blood"
desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures."
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 1b49780d386..da015bfe940 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -160,8 +160,11 @@
return 1337 // WHY??? -- Doohl
-/datum/game_mode/proc/equip_syndicate(mob/living/carbon/human/synd_mob)
- synd_mob.equipOutfit(/datum/outfit/syndicate)
+/datum/game_mode/proc/equip_syndicate(mob/living/carbon/human/synd_mob, telecrystals = TRUE)
+ if(telecrystals)
+ synd_mob.equipOutfit(/datum/outfit/syndicate)
+ else
+ synd_mob.equipOutfit(/datum/outfit/syndicate/no_crystals)
return 1
@@ -305,16 +308,21 @@
var/tc = 20
+/datum/outfit/syndicate/no_crystals
+ tc = 0
+
+
/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H)
var/obj/item/device/radio/R = H.ears
R.set_frequency(SYND_FREQ)
R.freqlock = 1
- var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(H)
- U.hidden_uplink.uplink_owner="[H.key]"
- U.hidden_uplink.uses = tc
- U.hidden_uplink.mode_override = /datum/game_mode/nuclear //Goodies
- H.equip_to_slot_or_del(U, slot_in_backpack)
+ if(tc)
+ var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(H)
+ U.hidden_uplink.uplink_owner="[H.key]"
+ U.hidden_uplink.uses = tc
+ U.hidden_uplink.mode_override = /datum/game_mode/nuclear //Goodies
+ H.equip_to_slot_or_del(U, slot_in_backpack)
var/obj/item/weapon/implant/weapons_auth/W = new/obj/item/weapon/implant/weapons_auth(H)
W.implant(H)
diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm
index de4801caf63..d60f5efddd1 100644
--- a/code/game/objects/items/devices/uplinks.dm
+++ b/code/game/objects/items/devices/uplinks.dm
@@ -175,8 +175,8 @@ var/list/world_uplinks = list()
return 0
//Refund proc for the borg teleporter (later I'll make a general refund proc if there is demand for it)
/obj/item/device/radio/uplink/attackby(obj/item/weapon/W, mob/user, params)
- if(istype(W, /obj/item/weapon/antag_spawner/borg_tele))
- var/obj/item/weapon/antag_spawner/borg_tele/S = W
+ if(istype(W, /obj/item/weapon/antag_spawner/nuke_ops))
+ var/obj/item/weapon/antag_spawner/nuke_ops/S = W
if(!S.used)
hidden_uplink.uses += S.TC_cost
qdel(S)