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