Merge pull request #13734 from KorPhaeron/reinforcements

Allows nuke ops to purchase reinforcements
This commit is contained in:
tkdrg
2015-12-18 21:47:01 -03:00
5 changed files with 101 additions and 32 deletions
+2 -2
View File
@@ -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("<B>Syndicate Nuclear Bomb Code</B>: [nuke_code]", 0, 0)
+13 -5
View File
@@ -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."
+69 -16
View File
@@ -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 << "<span class='warning'>[src] is out of power!</span>"
return
return 0
if(!(user.mind in ticker.mode.syndicates))
user << "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>"
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 << "<span class='warning'>[src] is out of range! It can only be used at your base!</span>"
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 << "<span class='warning'>Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.</span>"
/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."
+15 -7
View File
@@ -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)
+2 -2
View File
@@ -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)