diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 4c83841809..ebae5b1bac 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -1143,3 +1143,67 @@
max_energy = 30
recharge_rate = 1
name = "Wrapping Paper Storage"
+
+/obj/item/robot_module/syndicate/spider// used for space ninja and their cyborg hacking special objective
+ basic_modules = list(
+ /obj/item/assembly/flash/cyborg,
+ /obj/item/extinguisher/mini,
+ /obj/item/crowbar/cyborg,
+ /obj/item/melee/transforming/energy/sword/cyborg,
+ /obj/item/gun/energy/printer,
+ /obj/item/crowbar/cyborg)
+
+ cyborg_base_icon = "spider_sec"
+
+/obj/item/robot_module/syndicate_medical/spider// ditto
+ basic_modules = list(
+ /obj/item/assembly/flash/cyborg,
+ /obj/item/extinguisher/mini,
+ /obj/item/crowbar/cyborg,
+ /obj/item/reagent_containers/borghypo/syndicate,
+ /obj/item/shockpaddles/syndicate,
+ /obj/item/healthanalyzer/advanced,
+ /obj/item/surgical_drapes/advanced,
+ /obj/item/retractor,
+ /obj/item/hemostat,
+ /obj/item/cautery,
+ /obj/item/surgicaldrill,
+ /obj/item/scalpel,
+ /obj/item/bonesetter,
+ /obj/item/stack/medical/bone_gel,
+ /obj/item/melee/transforming/energy/sword/cyborg/saw,
+ /obj/item/roller/robo,
+ /obj/item/stack/medical/gauze/cyborg,
+ /obj/item/gun/medbeam,
+ /obj/item/organ_storage)
+
+ cyborg_base_icon = "spider_medical"
+
+/obj/item/robot_module/saboteur/spider// ditto
+ basic_modules = list(
+ /obj/item/assembly/flash/cyborg,
+ /obj/item/borg/sight/thermal,
+ /obj/item/construction/rcd/borg/syndicate,
+ /obj/item/pipe_dispenser,
+ /obj/item/restraints/handcuffs/cable/zipties,
+ /obj/item/extinguisher,
+ /obj/item/weldingtool/largetank/cyborg,
+ /obj/item/screwdriver/nuke,
+ /obj/item/wrench/cyborg,
+ /obj/item/crowbar/cyborg,
+ /obj/item/wirecutters/cyborg,
+ /obj/item/multitool/cyborg,
+ /obj/item/storage/part_replacer/cyborg,
+ /obj/item/holosign_creator/atmos,
+ /obj/item/weapon/gripper,
+ /obj/item/lightreplacer/cyborg,
+ /obj/item/stack/sheet/metal/cyborg,
+ /obj/item/stack/sheet/glass/cyborg,
+ /obj/item/stack/sheet/rglass/cyborg,
+ /obj/item/stack/rods/cyborg,
+ /obj/item/stack/tile/plasteel/cyborg,
+ /obj/item/destTagger/borg,
+ /obj/item/stack/cable_coil/cyborg,
+ /obj/item/borg_chameleon)
+
+ cyborg_base_icon = "spider_engi"
diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm
index afe804e668..c50a58e291 100644
--- a/code/modules/ninja/energy_katana.dm
+++ b/code/modules/ninja/energy_katana.dm
@@ -114,10 +114,8 @@
if(msg)
to_chat(user, "[msg]")
-
-
/datum/action/innate/dash/ninja
current_charges = 3
max_charges = 3
- charge_rate = 100
+ charge_rate = 200
recharge_sound = null
diff --git a/code/modules/ninja/ninja_explosive.dm b/code/modules/ninja/ninja_explosive.dm
index 604830d284..1e9fe344a4 100644
--- a/code/modules/ninja/ninja_explosive.dm
+++ b/code/modules/ninja/ninja_explosive.dm
@@ -31,9 +31,10 @@
/obj/item/grenade/plastic/c4/ninja/prime(mob/living/lanced_by)
. = ..()
+ anchored = TRUE
//Since we already did the checks in afterattack, the denonator must be a ninja with the bomb objective.
if(!detonator)
return
var/datum/antagonist/ninja/ninja_antag = detonator.mind.has_antag_datum(/datum/antagonist/ninja)
var/datum/objective/plant_explosive/objective = locate() in ninja_antag.objectives
- objective.completed = TRUE
+ objective.completed = TRUE
\ No newline at end of file
diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm
index 5a580b3290..b5f39098ad 100644
--- a/code/modules/ninja/suit/gloves.dm
+++ b/code/modules/ninja/suit/gloves.dm
@@ -29,10 +29,14 @@
var/mindrain = 200
///Maximum amount of power we can drain in a single drain action
var/maxdrain = 400
+ ///Whether or not the security console hack was used to set everyone to arrest
+ var/security_console_hack_success = FALSE
///Whether or not the communication console hack was used to summon another antagonist
var/communication_console_hack_success = FALSE
///How many times the gloves have been used to force open doors.
var/door_hack_counter = 0
+ ///Whether or not the cyborg hack was used to syndify a cyborg
+ var/borg_hack_success = FALSE
var/stunforce = 100
/obj/item/clothing/gloves/space_ninja/Touch(atom/A,proximity)
diff --git a/code/modules/ninja/suit/head.dm b/code/modules/ninja/suit/head.dm
index 6f9bc7ef4c..99dde98f09 100644
--- a/code/modules/ninja/suit/head.dm
+++ b/code/modules/ninja/suit/head.dm
@@ -11,7 +11,7 @@
name = "ninja hood"
icon_state = "s-ninja"
item_state = "s-ninja_mask"
- armor = list(MELEE = 40, BULLET = 30, LASER = 20,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 25, FIRE = 100, ACID = 100)
+ armor = list("melee" = 40, "bullet" = 30, "laser" = 20,"energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100)
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
blockTracking = TRUE//Roughly the only unique thing about this helmet.
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm
index 018f4e9fec..783061ba5d 100644
--- a/code/modules/ninja/suit/ninjaDrainAct.dm
+++ b/code/modules/ninja/suit/ninjaDrainAct.dm
@@ -143,6 +143,8 @@
/obj/machinery/computer/secure_data/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
if(!ninja_suit || !ninja || !ninja_gloves)
return INVALID_DRAIN
+ if(ninja_gloves.security_console_hack_success)
+ return
to_chat(ninja, "Hacking \the [src]...")
AI_notify_hack()
if(do_after(ninja, 200))
@@ -152,6 +154,7 @@
var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja)
if(!ninja_antag)
return
+ ninja_gloves.security_console_hack_success = TRUE
var/datum/objective/security_scramble/objective = locate() in ninja_antag.objectives
if(objective)
objective.completed = TRUE
@@ -169,11 +172,11 @@
var/announcement_pick = rand(0, 1)
switch(announcement_pick)
if(0)
- priority_announce("Attention crew, it appears that someone on your station has made unexpected communication with an alien device in nearby space.", "[command_name()] High-Priority Update")
- var/datum/round_event_control/spawn_swarmer/swarmer_event = new/datum/round_event_control/spawn_swarmer
- swarmer_event.runEvent()
+ priority_announce("Attention crew, it appears that something on your station has caused an unexpected disruption with the station's airlock network.", "[command_name()] High-Priority Update")
+ var/datum/round_event_control/grey_tide/greytide_event = new/datum/round_event_control/grey_tide
+ greytide_event.runEvent()
if(1)
- priority_announce("Attention crew, it appears that someone on your station has made unexpected communication with a syndicate ship in nearby space.", "[command_name()] High-Priority Update")
+ priority_announce("Attention crew, it appears that something on your station has made unexpected communication with a syndicate ship in nearby space.", "[command_name()] High-Priority Update")
var/datum/round_event_control/pirates/pirate_event = new/datum/round_event_control/pirates
pirate_event.runEvent()
ninja_gloves.communication_console_hack_success = TRUE
@@ -272,7 +275,8 @@
/mob/living/silicon/robot/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves)
if(!ninja_suit || !ninja || !ninja_gloves || (ROLE_NINJA in faction))
return INVALID_DRAIN
-
+ if(ninja_gloves.borg_hack_success)
+ return
to_chat(src, "Warni-***BZZZZZZZZZRT*** UPLOADING SPYDERPATCHER VERSION 9.5.2...")
if (do_after(ninja, 60, target = src))
spark_system.start()
@@ -283,11 +287,12 @@
UnlinkSelf()
ionpulse = TRUE
laws = new /datum/ai_laws/ninja_override()
- module.transform_to(pick(/obj/item/robot_module/syndicate, /obj/item/robot_module/syndicate_medical, /obj/item/robot_module/saboteur))
+ module.transform_to(pick(/obj/item/robot_module/syndicate/spider, /obj/item/robot_module/syndicate_medical/spider, /obj/item/robot_module/saboteur/spider))
var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja)
if(!ninja_antag)
return
+ ninja_gloves.borg_hack_success = TRUE
var/datum/objective/cyborg_hijack/objective = locate() in ninja_antag.objectives
if(objective)
objective.completed = TRUE
diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm
index 9fa094f092..6fba60a6ef 100644
--- a/code/modules/ninja/suit/shoes.dm
+++ b/code/modules/ninja/suit/shoes.dm
@@ -14,7 +14,7 @@
permeability_coefficient = 0.01
clothing_flags = NOSLIP
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- armor = list(MELEE = 40, BULLET = 30, LASER = 20,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100)
+ armor = list("melee" = 40, "bullet" = 30, "laser" = 20,"energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100)
cold_protection = FEET
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
heat_protection = FEET
diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm
index af653a1ca6..30f3be6f35 100644
--- a/code/modules/ninja/suit/suit.dm
+++ b/code/modules/ninja/suit/suit.dm
@@ -16,7 +16,7 @@
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/stock_parts/cell)
slowdown = 1
resistance_flags = LAVA_PROOF | ACID_PROOF
- armor = list(MELEE = 40, BULLET = 30, LASER = 20,ENERGY = 30, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100)
+ armor = list("melee" = 40, "bullet" = 30, "laser" = 20,"energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100)
actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjastatus, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth)
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index 082bfb3c3e..21af40ff8f 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ