Merge pull request #515 from Markolie/master

Adds Syndiborg to Nuke Ops, enables shortcuts for borgs/drones, notifies the AI of borg changes
This commit is contained in:
Fox-McCloud
2014-11-23 02:25:40 -05:00
27 changed files with 287 additions and 216 deletions
+42
View File
@@ -0,0 +1,42 @@
/obj/item/weapon/antag_spawner
throw_speed = 1
throw_range = 5
w_class = 1.0
var/used = 0
/obj/item/weapon/antag_spawner/proc/spawn_antag(var/client/C, var/turf/T, var/type = "")
return
/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target as mob)
return
/obj/item/weapon/antag_spawner/borg_tele
name = "Syndicate Cyborg Teleporter"
desc = "A single-use teleporter used to deploy a Syndicate Cyborg on the field."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
var/TC_cost = 0
/obj/item/weapon/antag_spawner/borg_tele/attack_self(mob/user as mob)
if(used)
user << "The teleporter is out of power."
return
var/list/borg_candicates = get_candidates(BE_OPERATIVE)
if(borg_candicates.len > 0)
used = 1
var/client/C = pick(borg_candicates)
spawn_antag(C, get_turf(src.loc), "syndieborg")
else
user << "<span class='notice'>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(var/client/C, var/turf/T, var/type = "")
var/datum/effect/effect/system/spark_spread/S = new /datum/effect/effect/system/spark_spread
S.set_up(4, 1, src)
S.start()
var/mob/living/silicon/robot/R = new /mob/living/silicon/robot/syndicate(T)
R.key = C.key
ticker.mode.syndicates += R.mind
ticker.mode.update_synd_icons_added(R.mind)
R.mind.special_role = "syndicate"
R.faction = list("syndicate")
+11 -1
View File
@@ -200,6 +200,10 @@
return list(access_cent_general, access_cent_living, access_cent_storage)
if("Thunderdome Overseer")
return list(access_cent_general, access_cent_thunder)
if("Emergency Response Team")
return list(access_cent_general, access_cent_living, access_cent_storage)
if("Emergency Response Team Leader")
return list(access_cent_general, access_cent_living, access_cent_storage, access_cent_teleporter)
if("Intel Officer")
return list(access_cent_general, access_cent_living)
if("Medical Officer")
@@ -210,6 +214,12 @@
return list(access_cent_general, access_cent_specops, access_cent_medical, access_cent_teleporter, access_cent_storage)
if("BlackOps Commander")
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_living, access_cent_storage, access_cent_creed)
if("Special Operations Officer")
return get_all_centcom_access()
if("NanoTrasen Navy Officer")
return get_all_centcom_access()
if("NanoTrasen Navy Captain")
return get_all_centcom_access()
if("Supreme Commander")
return get_all_centcom_access()
@@ -447,7 +457,7 @@
return all_jobs
/proc/get_all_centcom_jobs()
return list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Supreme Commander")
return list("VIP Guest","Custodian","Thunderdome Overseer","Emergency Response Team","Emergency Response Team Leader","Intel Officer","Medical Officer","Death Commando","Research Officer","BlackOps Commander","Special Operations Officer","NanoTrasen Navy Officer","NanoTrasen Navy Captain","Supreme Commander")
//gets the actual job rank (ignoring alt titles)
//this is used solely for sechuds
+1
View File
@@ -73,6 +73,7 @@
sleep(30)
if(R)
R.lockcharge = !R.lockcharge
R.notify_ai(1)
// Activate the cooldown
cooldown = 1
@@ -296,7 +296,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
// --- Cyborg ---
else if (isrobot(M))
jobname = "Cyborg"
var/mob/living/silicon/robot/B = M
jobname = "[B.designation] Cyborg"
// --- Personal AI (pAI) ---
else if (istype(M, /mob/living/silicon/pai))
@@ -698,6 +699,13 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
/obj/item/device/radio/borg
var/obj/item/device/encryptionkey/keyslot = null//Borg radios can handle a single encryption key
/obj/item/device/radio/borg/syndicate
syndie = 1
keyslot = new /obj/item/device/encryptionkey/syndicate
/obj/item/device/radio/borg/syndicate/New()
..()
set_frequency(SYND_FREQ)
/obj/item/device/radio/borg/attackby(obj/item/weapon/W as obj, mob/user as mob)
// ..()
user.set_machine(src)
@@ -249,6 +249,27 @@ var/list/world_uplinks = list()
src.hidden_uplink.trigger(user)
return 1
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/headset/syndicate/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/antag_spawner/borg_tele))
var/obj/item/weapon/antag_spawner/borg_tele/S = W
if(!S.used)
hidden_uplink.uses += S.TC_cost
qdel(S)
user << "<span class='notice'>Teleporter refunded.</span>"
else
user << "<span class='notice'>This teleporter is already used.</span>"
/obj/item/device/radio/uplink/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/antag_spawner/borg_tele))
var/obj/item/weapon/antag_spawner/borg_tele/S = W
if(!S.used)
hidden_uplink.uses += S.TC_cost
qdel(S)
user << "<span class='notice'>Teleporter refunded.</span>"
else
user << "<span class='notice'>This teleporter is already used.</span>"
// PRESET UPLINKS
// A collection of preset uplinks.
+2 -1
View File
@@ -211,7 +211,8 @@
O.invisibility = 0
O.custom_name = created_name
O.updatename("Default")
if(O.connected_ai)
O.notify_ai(1)
M.brainmob.mind.transfer_to(O)
if(O.mind && O.mind.special_role)
@@ -35,6 +35,7 @@
R.camera.network.Remove(list("Engineering","Medical","MINE"))
R.updatename("Default")
R.status_flags |= CANPUSH
R.notify_ai(2)
R.updateicon()
return 1
@@ -51,6 +52,7 @@
/obj/item/borg/upgrade/rename/action(var/mob/living/silicon/robot/R)
if(..()) return 0
R.notify_ai(3, R.name, heldname)
R.name = heldname
R.custom_name = heldname
R.real_name = heldname
@@ -75,6 +77,9 @@
R.key = ghost.key
R.stat = CONSCIOUS
dead_mob_list -= R //please never forget this ever kthx
living_mob_list += R
R.notify_ai(1)
return 1
@@ -371,7 +371,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
if(isliving(user))
user:brainloss += 20
return
if(locate(/obj/item/weapon/implant/traitor) in H.contents || locate(/obj/item/weapon/implant/traitor) in H.contents)
if(locate(/obj/item/weapon/implant/traitor) in H.contents || locate(/obj/item/weapon/implant/loyalty) in H.contents)
H.visible_message("[H] seems to resist the implant!", "You feel a strange sensation in your head that quickly dissipates.")
return 0
else if(H.mind in ticker.mode.traitors)
@@ -49,6 +49,20 @@
sharp = 1
edge = 1
/obj/item/weapon/melee/energy/sword/cyborg
var/hitcost = 500
/obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
if(R.cell)
var/obj/item/weapon/cell/C = R.cell
if(active && !(C.use(hitcost)))
attack_self()
R << "<span class='notice'>It's out of charge!</span>"
return
C.use(hitcost)
..()
return
/obj/item/weapon/melee/energy/sword/pirate
name = "energy cutlass"
desc = "Arrrr matey."