From 1f9cb08102e0af3ad2b55cac46779c50f6abaf7b Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Thu, 4 Dec 2014 11:43:14 +0100 Subject: [PATCH] Syndicate borg code refactoring. Refactors the borg syndicate code to be more accessible to adminbus. Syndicate borgs have a jetpack module. Overrides canUseTopic() to limit what the Syndi-borg can interact. Still has all access, may be more limited in the future if Bump() is refactored /tg/ style. Admins: Spawn with care. --- .../items/devices/radio/encryptionkey.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 89 ++++++++++++------- .../mob/living/silicon/robot/robot_modules.dm | 18 +++- 4 files changed, 76 insertions(+), 35 deletions(-) diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index e3e4408a47..8067fd3329 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -1,7 +1,7 @@ /obj/item/device/encryptionkey/ name = "Standard Encrpytion Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon = 'icons/obj/radio.dmi' icon_state = "cypherkey" item_state = "" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index e6738936c9..77aa73cb72 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -131,7 +131,7 @@ var/list/ai_verbs_default = list( //Languages add_language("Robot Talk", 1) - add_language("Galactic Common", 0) + add_language("Galactic Common", 1) add_language("Sol Common", 0) add_language("Sinta'unathi", 0) add_language("Siik'tajr", 0) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index ad06e19ec1..f2aa919eb0 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -78,25 +78,22 @@ var/list/robot_verbs_default = list( var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. var/braintype = "Cyborg" -/mob/living/silicon/robot/drain_power(var/drain_check) +/mob/living/silicon/robot/syndicate + lawupdate = 0 + scrambledcodes = 1 + icon_state = "securityrobot" + modtype = "Security" + lawchannel = "State" - if(drain_check) - return 1 +/mob/living/silicon/robot/syndicate/New() + if(!cell) + cell = new /obj/item/weapon/cell(src) + cell.maxcharge = 25000 + cell.charge = 25000 - if(!cell || !cell.charge) - return 0 + ..() - if(cell.charge) - src << "Warning: Unauthorized access through power channel 12 detected." - var/drained_power = rand(200,400) - if(cell.charge < drained_power) - drained_power = cell.charge - cell.use(drained_power) - return drained_power - - return 0 - -/mob/living/silicon/robot/New(loc,var/syndie = 0,var/unfinished = 0) +/mob/living/silicon/robot/New(loc,var/unfinished = 0) spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) @@ -112,23 +109,11 @@ var/list/robot_verbs_default = list( updatename("Default") updateicon() - if(syndie) - if(!cell) - cell = new /obj/item/weapon/cell(src) - - laws = new /datum/ai_laws/antimov() - lawupdate = 0 - scrambledcodes = 1 - cell.maxcharge = 25000 - cell.charge = 25000 - module = new /obj/item/weapon/robot_module/syndicate(src) - hands.icon_state = "standard" - icon_state = "secborg" - modtype = "Security" - init() - radio = new /obj/item/device/radio/borg(src) common_radio = radio + + init() + if(!scrambledcodes && !camera) camera = new /obj/machinery/camera(src) camera.c_tag = real_name @@ -182,6 +167,36 @@ var/list/robot_verbs_default = list( playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) +/mob/living/silicon/robot/syndicate/init() + aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) + + laws = new /datum/ai_laws/syndicate_override + module = new /obj/item/weapon/robot_module/syndicate(src) + + radio.keyslot = new /obj/item/device/encryptionkey/syndicate(radio) + radio.recalculateChannels() + + playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0) + + +/mob/living/silicon/robot/drain_power(var/drain_check) + + if(drain_check) + return 1 + + if(!cell || !cell.charge) + return 0 + + if(cell.charge) + src << "Warning: Unauthorized access through power channel 12 detected." + var/drained_power = rand(200,400) + if(cell.charge < drained_power) + drained_power = cell.charge + cell.use(drained_power) + return drained_power + + return 0 + // setup the PDA and its name /mob/living/silicon/robot/proc/setup_PDA() if (!rbPDA) @@ -1293,6 +1308,16 @@ var/list/robot_verbs_default = list( return 1 return 0 +/mob/living/silicon/robot/syndicate/canUseTopic(atom/movable/M) + if(stat || lockcharge || stunned || weakened) + return + if(z in config.admin_levels) + return 1 + if(istype(M, /obj/machinery)) + var/obj/machinery/Machine = M + return Machine.emagged + return 1 + /mob/living/silicon/robot/proc/notify_ai(var/notifytype, var/oldname, var/newname) if(!connected_ai) return @@ -1302,4 +1327,4 @@ var/list/robot_verbs_default = list( if(2) //New Module connected_ai << "

NOTICE - Cyborg module change detected: [name] has loaded the [module.name] module.
" if(3) //New Name - connected_ai << "

NOTICE - Cyborg reclassification detected: [oldname] is now designated as [newname].
" \ No newline at end of file + connected_ai << "

NOTICE - Cyborg reclassification detected: [oldname] is now designated as [newname].
" diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 9dddac9cca..2fd766d65a 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -376,14 +376,30 @@ /obj/item/weapon/robot_module/syndicate name = "illegal robot module" - New() + New(var/mob/living/silicon/robot/R) + loc = R + src.modules += new /obj/item/device/flashlight(src) src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/melee/energy/sword(src) src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src) src.modules += new /obj/item/weapon/card/emag(src) + + var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src) + src.modules += jetpack + R.internals = jetpack + return +/obj/item/weapon/robot_module/syndicate/add_languages(var/mob/living/silicon/robot/R) + //full set of languages + R.add_language("Sol Common", 1) + R.add_language("Tradeband", 1) + R.add_language("Sinta'unathi", 0) + R.add_language("Siik'tajr", 0) + R.add_language("Skrellian", 0) + R.add_language("Gutter", 1) + /obj/item/weapon/robot_module/combat name = "combat robot module"