Merge pull request #4116 from Neerti/10/20/2017_syndie_borgs_are_back

Syndicate Borgs II, Return of the Salt
This commit is contained in:
Anewbe
2017-10-21 13:58:52 -05:00
committed by GitHub
21 changed files with 502 additions and 95 deletions
@@ -1241,7 +1241,7 @@
W.message = message
W.add_fingerprint(src)
/mob/living/carbon/human/can_inject(var/mob/user, var/error_msg, var/target_zone)
/mob/living/carbon/human/can_inject(var/mob/user, var/error_msg, var/target_zone, var/ignore_thickness = FALSE)
. = 1
if(!target_zone)
@@ -1261,10 +1261,10 @@
else
switch(target_zone)
if(BP_HEAD)
if(head && head.item_flags & THICKMATERIAL)
if(head && (head.item_flags & THICKMATERIAL) && !ignore_thickness)
. = 0
else
if(wear_suit && wear_suit.item_flags & THICKMATERIAL)
if(wear_suit && (wear_suit.item_flags & THICKMATERIAL) && !ignore_thickness)
. = 0
if(!. && error_msg && user)
if(!fail_msg)
@@ -26,12 +26,13 @@
)
var/id
// All syndie modules get these, and the base borg items (flash, crowbar, etc).
/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R)
..()
loc = R
src.modules += new /obj/item/weapon/pinpointer/shuttle/merc(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
@@ -43,3 +44,141 @@
src.modules -= id
id = null
return ..()
// Gets a big shield and a gun that shoots really fast to scare the opposing force.
/obj/item/weapon/robot_module/robot/syndicate/protector
name = "protector robot module"
sprites = list(
"Cerberus - Treaded" = "syndie_treadhound",
"Cerberus" = "syndie_bloodhound",
"Ares" = "squats",
"XI-ALP" = "syndi-heavy"
)
/obj/item/weapon/robot_module/robot/syndicate/protector/New(var/mob/living/silicon/robot/R)
..()
src.modules += new /obj/item/shield_projector/rectangle/weak(src)
src.modules += new /obj/item/weapon/gun/energy/dakkalaser(src)
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
src.modules += new /obj/item/weapon/melee/baton/robot(src)
// 95% engi-borg and 15% roboticist.
/obj/item/weapon/robot_module/robot/syndicate/mechanist
name = "mechanist robot module"
sprites = list(
"XI-GUS" = "spidersyndi",
"WTOperator" = "sleekhos"
)
/obj/item/weapon/robot_module/robot/syndicate/mechanist/New(var/mob/living/silicon/robot/R)
..()
// General engineering/hacking.
src.modules += new /obj/item/borg/sight/meson(src)
src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src)
src.modules += new /obj/item/weapon/screwdriver/cyborg(src)
src.modules += new /obj/item/weapon/wrench/cyborg(src)
src.modules += new /obj/item/weapon/wirecutters/cyborg(src)
src.modules += new /obj/item/device/multitool/ai_detector(src)
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
src.modules += new /obj/item/weapon/rcd/borg/lesser(src) // Can't eat rwalls to prevent AI core cheese.
src.modules += new /obj/item/weapon/melee/energy/sword/ionic_rapier(src)
// FBP repair.
src.modules += new /obj/item/device/robotanalyzer(src)
src.modules += new /obj/item/weapon/shockpaddles/robot/jumper(src)
src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src)
// Hacking other things.
src.modules += new /obj/item/weapon/card/robot(src)
src.modules += new /obj/item/weapon/card/emag(src)
// Materials.
var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000)
synths += nanite
var/datum/matter_synth/wire = new /datum/matter_synth/wire()
synths += wire
var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000)
synths += metal
var/datum/matter_synth/glass = new /datum/matter_synth/glass(40000)
synths += glass
var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src)
N.uses_charge = 1
N.charge_costs = list(1000)
N.synths = list(nanite)
src.modules += N
var/obj/item/stack/material/cyborg/steel/M = new (src)
M.synths = list(metal)
src.modules += M
var/obj/item/stack/material/cyborg/glass/G = new (src)
G.synths = list(glass)
src.modules += G
var/obj/item/stack/rods/cyborg/rods = new /obj/item/stack/rods/cyborg(src)
rods.synths = list(metal)
src.modules += rods
var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src)
C.synths = list(wire)
src.modules += C
var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src)
RG.synths = list(metal, glass)
src.modules += RG
// Mediborg optimized for on-the-field healing, but can also do surgery if needed.
/obj/item/weapon/robot_module/robot/syndicate/combat_medic
name = "combat medic robot module"
sprites = list(
"Telemachus" = "toiletbotantag"
)
/obj/item/weapon/robot_module/robot/syndicate/combat_medic/New(var/mob/living/silicon/robot/R)
..()
src.modules += new /obj/item/borg/sight/hud/med(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/weapon/reagent_containers/borghypo/merc(src)
// Surgery things.
src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src)
src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src)
src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src)
src.modules += new /obj/item/weapon/surgical/cautery/cyborg(src)
src.modules += new /obj/item/weapon/surgical/bonegel/cyborg(src)
src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src)
src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src)
src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src)
src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src)
src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
// General healing.
src.modules += new /obj/item/weapon/gripper/medical(src)
src.modules += new /obj/item/weapon/shockpaddles/robot/combat(src)
src.modules += new /obj/item/weapon/reagent_containers/dropper(src) // Allows borg to fix necrosis apparently
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
src.modules += new /obj/item/roller_holder(src)
// Materials.
var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000)
synths += medicine
var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src)
var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src)
var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src)
O.uses_charge = 1
O.charge_costs = list(1000)
O.synths = list(medicine)
B.uses_charge = 1
B.charge_costs = list(1000)
B.synths = list(medicine)
S.uses_charge = 1
S.charge_costs = list(1000)
S.synths = list(medicine)
src.modules += O
src.modules += B
src.modules += S
@@ -6,6 +6,7 @@
lawchannel = "State"
braintype = "Drone"
idcard_type = /obj/item/weapon/card/id
icon_selected = FALSE
/mob/living/silicon/robot/gravekeeper/init()
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
@@ -6,6 +6,7 @@
lawchannel = "State"
braintype = "Drone"
idcard_type = /obj/item/weapon/card/id
icon_selected = FALSE
/mob/living/silicon/robot/lost/init()
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
@@ -0,0 +1,46 @@
/mob/living/silicon/robot/syndicate
lawupdate = 0
scrambledcodes = 1
icon_state = "syndie_bloodhound"
modtype = "Syndicate"
lawchannel = "State"
braintype = "Drone"
idcard_type = /obj/item/weapon/card/id/syndicate
icon_selected = FALSE
/mob/living/silicon/robot/syndicate/init()
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
mmi = new /obj/item/device/mmi/digital/robot(src) // Explicitly a drone.
overlays.Cut()
init_id()
updatename("Syndicate")
if(!cell)
cell = new /obj/item/weapon/cell/high(src) // 15k cell, because Antag.
laws = new /datum/ai_laws/syndicate_override()
radio.keyslot = new /obj/item/device/encryptionkey/syndicate(radio)
radio.recalculateChannels()
playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0)
/mob/living/silicon/robot/syndicate/protector/init()
..()
module = new /obj/item/weapon/robot_module/robot/syndicate/protector(src)
updatename("Protector")
/mob/living/silicon/robot/syndicate/mechanist/init()
..()
module = new /obj/item/weapon/robot_module/robot/syndicate/mechanist(src)
updatename("Mechanist")
/mob/living/silicon/robot/syndicate/combat_medic/init()
..()
module = new /obj/item/weapon/robot_module/robot/syndicate/combat_medic(src)
updatename("Combat Medic")
/mob/living/silicon/robot/syndicate/speech_bubble_appearance()
return "synthetic_evil"
@@ -177,4 +177,24 @@ obj/item/weapon/gun/energy/staff/focus
charge_cost = 200
user << "<span class='warning'>The [src.name] will now strike only a single person.</span>"
projectile_type = "/obj/item/projectile/forcebolt"
*/
*/
/obj/item/weapon/gun/energy/dakkalaser
name = "suppression gun"
desc = "A massive weapon, designed to pressure the opposition by raining down a torrent of energy pellets."
icon_state = "dakkalaser"
item_state = "dakkalaser"
fire_sound = 'sound/weapons/Laser.ogg'
w_class = ITEMSIZE_HUGE
charge_cost = 24 // 100 shots, it's a spray and pray (to RNGesus) weapon.
projectile_type = /obj/item/projectile/energy/blue_pellet
self_recharge = 1
accuracy = 5 // Suppressive weapons don't work too well if there's no risk of being hit.
burst_delay = 1 // Burst faster than average.
origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_ILLEGAL = 6)
firemodes = list(
list(mode_name="single shot", burst = 1, burst_accuracy = list(5), dispersion = list(0), charge_cost = 24),
list(mode_name="five shot burst", burst = 5, burst_accuracy = list(5,5,5,5,5), dispersion = list(1,1,1,1,1)),
list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(5,5,5,5,5,5,5,5,5,5), dispersion = list(2,2,2,2,2,2,2,2,2,2)),
)
+14 -1
View File
@@ -182,4 +182,17 @@
/obj/item/projectile/energy/plasmastun/on_hit(var/atom/target)
bang(target)
. = ..()
. = ..()
/obj/item/projectile/energy/blue_pellet
name = "suppressive pellet"
icon_state = "blue_pellet"
damage = 5
armor_penetration = 75
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage_type = BURN
check_armour = "energy"
light_color = "#0000FF"
embed_chance = 0
muzzle_type = /obj/effect/projectile/pulse/muzzle
@@ -691,4 +691,21 @@
else
if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
data = world.time
to_chat(M, "<span class='notice'>You feel invigorated and calm.</span>")
to_chat(M, "<span class='notice'>You feel invigorated and calm.</span>")
// This exists to cut the number of chemicals a merc borg has to juggle on their hypo.
/datum/reagent/healing_nanites
name = "Restorative Nanites"
id = "healing_nanites"
description = "Miniature medical robots that swiftly restore bodily damage."
taste_description = "metal"
reagent_state = SOLID
color = "#555555"
metabolism = REM * 4 // Nanomachines gotta go fast.
scannable = 1
/datum/reagent/healing_nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.heal_organ_damage(2 * removed, 2 * removed)
M.adjustOxyLoss(-4 * removed)
M.adjustToxLoss(-2 * removed)
M.adjustCloneLoss(-2 * removed)
@@ -12,6 +12,7 @@
var/charge_cost = 50
var/charge_tick = 0
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
var/bypass_protection = FALSE // If true, can inject through things like spacesuits and armor.
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "anti_toxin", "tramadol", "dexalin" ,"spaceacillin")
var/list/reagent_volumes = list()
@@ -26,6 +27,13 @@
/obj/item/weapon/reagent_containers/borghypo/lost
reagent_ids = list("tricordrazine", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/merc
name = "advanced cyborg hypospray"
desc = "An advanced nanite and chemical synthesizer and injection system, designed for heavy-duty medical equipment. This type is capable of safely bypassing \
thick materials that other hyposprays would struggle with."
bypass_protection = TRUE // Because mercs tend to be in spacesuits.
reagent_ids = list("healing_nanites", "hyperzine", "tramadol", "oxycodone", "spaceacillin", "peridaxon", "osteodaxon", "myelamine")
/obj/item/weapon/reagent_containers/borghypo/New()
..()
@@ -72,7 +80,7 @@
user << "<span class='danger'>You cannot inject a robotic limb.</span>"
return
if (M.can_inject(user, 1))
if(M.can_inject(user, 1, ignore_thickness = bypass_protection))
user << "<span class='notice'>You inject [M] with the injector.</span>"
M << "<span class='notice'>You feel a tiny prick!</span>"