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)