Merge pull request #11259 from Markolie/flukeops

Nuke Ops updates and buffs
This commit is contained in:
variableundefined
2019-04-18 07:16:31 +08:00
committed by GitHub
12 changed files with 435 additions and 227 deletions
+122 -59
View File
@@ -10,72 +10,115 @@
/obj/item/antag_spawner/proc/equip_antag(mob/target)
return
/obj/item/antag_spawner/borg_tele
name = "syndicate cyborg teleporter"
desc = "A single-use teleporter used to deploy a Syndicate Cyborg on the field."
///////////BORGS AND OPERATIVES
/obj/item/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/checking = FALSE
var/TC_cost = 0
var/borg_to_spawn
var/upload_mind
var/list/possible_types = list("Assault", "Medical", "Saboteur")
var/checking = FALSE
/obj/item/antag_spawner/borg_tele/attack_self(mob/user)
/obj/item/antag_spawner/nuke_ops/proc/before_candidate_search(user)
return TRUE
/obj/item/antag_spawner/nuke_ops/proc/check_usability(mob/user)
if(used)
to_chat(user, "<span class='warning'>[src] is out of power!</span>")
return
return FALSE
if(!(user.mind in ticker.mode.syndicates))
to_chat(user, "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>")
return FALSE
if(checking)
to_chat(user, "<span class='warning'>[src] is already checking for possible borgs.</span>")
return
borg_to_spawn = input("What type of borg would you like to teleport?", "Cyborg Type", type) as null|anything in possible_types
if(!borg_to_spawn || checking || used)
return
upload_mind = input("Would you like to continue playing as an operative or take over the cyborg? (Another player will control your old self)", "Play as") as null|anything in list("Nuclear Operative", "Syndicate Cyborg")
if(!upload_mind || checking || used)
return
if(upload_mind == "Nuclear Operative")
checking = TRUE
to_chat(user, "<span class='notice'>The device is now checking for possible borgs.</span>")
var/list/borg_candidates = pollCandidates("Do you want to play as a Syndicate [borg_to_spawn] borg?", ROLE_OPERATIVE, 1)
if(borg_candidates.len > 0 && !used)
checking = FALSE
used = TRUE
var/mob/M = pick(borg_candidates)
var/client/C = M.client
spawn_antag(C, get_turf(loc), "syndieborg")
qdel(src)
else
checking = FALSE
to_chat(user, "<span class='notice'>Unable to connect to Syndicate command. Please wait and try again later or refund your teleporter through your uplink.</span>")
return
else if(upload_mind == "Syndicate Cyborg")
checking = TRUE
to_chat(user, "<span class='notice'>You attempt to upload your consciousness into a new syndicate cyborg.</span>")
var/list/nuclear_candidates = pollCandidates("Do you want to play as the Syndicate Nuclear Operative [user.real_name]?", ROLE_OPERATIVE, 1)
if(nuclear_candidates.len > 0 && !used)
checking = FALSE
used = TRUE
var/mob/M = pick(nuclear_candidates)
var/client/nukeop_client = M.client
var/client/borg_client = user.client
spawn_antag(borg_client, get_turf(loc), "syndieborg")
user.key = nukeop_client.key
ticker.mode.greet_syndicate(user.mind)
qdel(src)
else
checking = FALSE
to_chat(user, "<span class='notice'>Unable to connect to Syndicate command. Please wait and try again later or refund your teleporter through your uplink.</span>")
return
to_chat(user, "<span class='danger'>The device is already connecting to Syndicate command. Please wait.</span>")
return FALSE
return TRUE
/obj/item/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
/obj/item/antag_spawner/nuke_ops/attack_self(mob/user)
if(!(check_usability(user)))
return
var/continue_proc = before_candidate_search(user)
if(!continue_proc)
return
checking = TRUE
to_chat(user, "<span class='notice'>You activate [src] and wait for confirmation.</span>")
var/list/nuke_candidates = pollCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg" : "operative"]?", ROLE_OPERATIVE, TRUE, 150)
if(LAZYLEN(nuke_candidates))
checking = FALSE
if(QDELETED(src) || !check_usability(user))
return
used = TRUE
var/mob/dead/observer/G = pick(nuke_candidates)
spawn_antag(G.client, get_turf(src), user.mind)
do_sparks(4, TRUE, src)
qdel(src)
else
checking = FALSE
to_chat(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/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
var/agent_number = LAZYLEN(ticker.mode.syndicates)
M.real_name = "[syndicate_name()] Operative #[agent_number]"
set_syndicate_values(C, M)
ticker.mode.create_syndicate(M.mind)
ticker.mode.equip_syndicate(M, 0)
ticker.mode.update_syndicate_id(M.mind, FALSE)
/obj/item/antag_spawner/nuke_ops/proc/set_syndicate_values(client/C, mob/living/M)
M.key = C.key
ticker.mode.syndicates += M.mind
ticker.mode.update_synd_icons_added(M.mind)
M.mind.assigned_role = SPECIAL_ROLE_NUKEOPS
M.mind.special_role = SPECIAL_ROLE_NUKEOPS
M.mind.offstation_role = TRUE
M.faction = list("syndicate")
ticker.mode.forge_syndicate_objectives(M.mind)
ticker.mode.greet_syndicate(M.mind)
//////SYNDICATE BORG
/obj/item/antag_spawner/nuke_ops/borg_tele
name = "syndicate cyborg teleporter"
desc = "A single-use teleporter designed to quickly reinforce operatives in the field."
var/switch_roles = FALSE
/obj/item/antag_spawner/nuke_ops/borg_tele/assault
name = "syndicate assault cyborg teleporter"
borg_to_spawn = "Assault"
/obj/item/antag_spawner/nuke_ops/borg_tele/medical
name = "syndicate medical teleporter"
borg_to_spawn = "Medical"
/obj/item/antag_spawner/nuke_ops/borg_tele/saboteur
name = "syndicate saboteur teleporter"
borg_to_spawn = "Saboteur"
/obj/item/antag_spawner/nuke_ops/borg_tele/before_candidate_search(mob/user)
var/switch_roles_choice = input("Would you like to continue playing as an operative or take over as the cyborg? If you play as the cyborg, another player will control your old self.", "Play As") as null|anything in list("Nuclear Operative", "Syndicate Cyborg")
if(!switch_roles_choice || !(check_usability(user)))
return FALSE
if(switch_roles_choice == "Syndicate Cyborg")
switch_roles = TRUE
else
switch_roles = FALSE
return TRUE
/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, datum/mind/user)
if(!(user in ticker.mode.syndicates))
used = FALSE
return
do_sparks(4, 1, src)
var/mob/living/silicon/robot/R
switch(borg_to_spawn)
if("Medical")
@@ -84,11 +127,29 @@
R = new /mob/living/silicon/robot/syndicate/saboteur(T)
else
R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default
R.key = C.key
ticker.mode.syndicates += R.mind
ticker.mode.update_synd_icons_added(R.mind)
R.mind.special_role = SPECIAL_ROLE_NUKEOPS
R.faction = list("syndicate")
var/brainfirstname = pick(GLOB.first_names_male)
if(prob(50))
brainfirstname = pick(GLOB.first_names_female)
var/brainopslastname = pick(GLOB.last_names)
if(syndicate_name()) //the brain inside the syndiborg has the same last name as the other ops.
brainopslastname = syndicate_name()
var/brainopsname = "[brainfirstname] [brainopslastname]"
R.mmi.name = "[initial(R.mmi.name)]: [brainopsname]"
R.mmi.brainmob.real_name = brainopsname
R.mmi.brainmob.name = brainopsname
if(!switch_roles)
set_syndicate_values(C, R)
else
var/mob/living/L = user.current
set_syndicate_values(user.current.client, R)
L.key = C.key
ticker.mode.greet_syndicate(L.mind)
///////////SLAUGHTER DEMON
/obj/item/antag_spawner/slaughter_demon //Warning edgiest item in the game
name = "vial of blood"
@@ -159,6 +220,8 @@
objective_verb = "Hug and Tickle"
demon_type = /mob/living/simple_animal/slaughter/laughter
///////////MORPH
/obj/item/antag_spawner/morph
name = "vial of ooze"
desc = "A magically infused bottle of ooze, distilled by methods rather not be spoken of. Used to awaken an all-consuming monstrosity."
@@ -213,4 +276,4 @@
M.mind.objectives += KillDaCrew
to_chat(M, "<B>Objective #[1]</B>: [KillDaWiz.explanation_text]")
to_chat(M, "<B>Objective #[2]</B>: [KillDaCrew.explanation_text]")
M << 'sound/magic/mutate.ogg'
M << 'sound/magic/mutate.ogg'
+8 -1
View File
@@ -16,4 +16,11 @@
icon_state = "tactifool"
item_state = "bl_suit"
item_color = "tactifool"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/under/syndicate/sniper
name = "Tactical turtleneck suit"
desc = "A double seamed tactical turtleneck disguised as a civilian grade silk suit. Intended for the most formal operator. The collar is really sharp."
icon_state = "really_black_suit"
item_state = "bl_suit"
item_color = "black_suit"
@@ -70,12 +70,17 @@
/mob/living/silicon/robot/syndicate/saboteur/init()
..()
module = new /obj/item/robot_module/syndicate_saboteur(src)
var/obj/item/borg/upgrade/selfrepair/SR = new /obj/item/borg/upgrade/selfrepair(src)
SR.cyborg = src
SR.icon_state = "selfrepair_off"
var/datum/action/A = new /datum/action/item_action/toggle(SR)
A.Grant(src)
var/datum/action/self_repair = new /datum/action/item_action/toggle(SR)
self_repair.Grant(src)
var/datum/action/thermals = new /datum/action/innate/robot_sight/thermal()
thermals.Grant(src)
/mob/living/silicon/robot/syndicate/saboteur/verb/modify_name()
set name = "Modify Name"
set desc = "Change your systems' registered name to fool Nanotrasen systems. No cost."