mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 12:37:26 +01:00
Merge pull request #11259 from Markolie/flukeops
Nuke Ops updates and buffs
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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."
|
||||
|
||||
Reference in New Issue
Block a user