diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm
index 3c8141459d1..d282ae01b7f 100644
--- a/code/game/objects/items/robot/items/generic.dm
+++ b/code/game/objects/items/robot/items/generic.dm
@@ -402,6 +402,37 @@
COOLDOWN_START(src, alarm_cooldown, HARM_ALARM_NO_SAFETY_COOLDOWN)
user.log_message("used an emagged Cyborg Harm Alarm", LOG_ATTACK)
+/obj/item/shield_module
+ name = "Shield Activator"
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "module_miner"
+ var/active = FALSE
+ var/mutable_appearance/shield_overlay
+
+/obj/item/shield_module/Initialize(mapload)
+ . = ..()
+ shield_overlay = mutable_appearance('icons/mob/effects/durand_shield.dmi', "borg_shield")
+
+/obj/item/shield_module/attack_self(mob/living/silicon/borg)
+ active = !active
+ if(active)
+ playsound(src, 'sound/vehicles/mecha/mech_shield_raise.ogg', 50, FALSE)
+ RegisterSignal(borg, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_shield_overlay_update), override = TRUE)
+ else
+ playsound(src, 'sound/vehicles/mecha/mech_shield_drop.ogg', 50, FALSE)
+ UnregisterSignal(borg, COMSIG_ATOM_UPDATE_OVERLAYS)
+ borg.update_appearance()
+
+/obj/item/shield_module/cyborg_unequip(mob/living/silicon/robot/borg)
+ active = FALSE
+ playsound(src, 'sound/vehicles/mecha/mech_shield_drop.ogg', 50, FALSE)
+ borg.cut_overlay(shield_overlay)
+
+/obj/item/shield_module/proc/on_shield_overlay_update(atom/source, list/overlays)
+ SIGNAL_HANDLER
+ if(active)
+ overlays += shield_overlay
+
#undef HUG_MODE_NICE
#undef HUG_MODE_HUG
#undef HUG_MODE_SHOCK
diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm
index e7975fac9f2..88349a65f4d 100644
--- a/code/game/objects/items/robot/items/storage.dm
+++ b/code/game/objects/items/robot/items/storage.dm
@@ -253,11 +253,11 @@
///Apparatus to allow Engineering/Sabo borgs to manipulate any material sheets.
/obj/item/borg/apparatus/sheet_manipulator
name = "material manipulation apparatus"
- desc = "An apparatus for carrying, deploying, and manipulating sheets of material. The device can also carry custom floor tiles and shuttle frame rods."
+ desc = "An apparatus for carrying, deploying, and manipulating sheets of material. The device can also carry custom floor tiles and various rods."
icon_state = "borg_stack_apparatus"
storable = list(/obj/item/stack/sheet,
/obj/item/stack/tile,
- /obj/item/stack/rods/shuttle)
+ /obj/item/stack/rods)
/obj/item/borg/apparatus/sheet_manipulator/Initialize(mapload)
update_appearance()
@@ -285,21 +285,23 @@
. += "The apparatus currently has [stored] secured."
. += span_notice(" Alt-click will drop the currently stored sheets. ")
-///Apparatus allowing Engineer/Sabo borgs to manipulate Machine and Computer circuit boards
-/obj/item/borg/apparatus/circuit
- name = "circuit manipulation apparatus"
- desc = "A special apparatus for carrying and manipulating circuit boards and power cells."
+///Apparatus allowing Engineer/Sabo borgs to manipulate circuit boards and more
+/obj/item/borg/apparatus/engineering
+ name = "engineering apparatus"
+ desc = "A special apparatus for carrying and manipulating circuit boards, lights and power cells."
icon_state = "borg_hardware_apparatus"
- storable = list(/obj/item/circuitboard,
+ storable = list(
+ /obj/item/circuitboard,
/obj/item/electronics,
/obj/item/stock_parts/power_store,
+ /obj/item/light,
)
-/obj/item/borg/apparatus/circuit/Initialize(mapload)
+/obj/item/borg/apparatus/engineering/Initialize(mapload)
update_appearance()
return ..()
-/obj/item/borg/apparatus/circuit/update_overlays()
+/obj/item/borg/apparatus/engineering/update_overlays()
. = ..()
var/mutable_appearance/arm = mutable_appearance(icon, "borg_hardware_apparatus_arm1")
if(stored)
@@ -317,19 +319,19 @@
. += stored_copy
. += arm
-/obj/item/borg/apparatus/circuit/examine()
+/obj/item/borg/apparatus/engineering/examine()
. = ..()
if(stored)
. += "The apparatus currently has [stored] secured."
- . += span_notice(" Alt-click will drop the currently stored circuit. ")
+ . += span_notice(" Alt-click will drop the currently stored item. ")
-/obj/item/borg/apparatus/circuit/pre_attack(atom/atom, mob/living/user, list/modifiers, list/attack_modifiers)
+/obj/item/borg/apparatus/engineering/pre_attack(atom/atom, mob/living/user, list/modifiers, list/attack_modifiers)
if(istype(atom, /obj/item/ai_module) && !stored) //If an admin wants a borg to upload laws, who am I to stop them? Otherwise, we can hint that it fails
to_chat(user, span_warning("This circuit board doesn't seem to have standard robot apparatus pin holes. You're unable to pick it up."))
return ..()
// stops them from cell interactions with other borgos
-/obj/item/borg/apparatus/circuit/interact_with_atom(atom/movable/interacting_with, mob/living/user, list/modifiers)
+/obj/item/borg/apparatus/engineering/interact_with_atom(atom/movable/interacting_with, mob/living/user, list/modifiers)
if(iscyborg(user) && iscyborg(interacting_with))
balloon_alert(user, "your manipulator isn't dexterous enough to interact with this properly.")
return ITEM_INTERACT_FAILURE
@@ -347,7 +349,6 @@
/obj/item/reagent_containers/cup/soup_pot,
/obj/item/seeds,
/obj/item/graft,
- /obj/item/fish,
)
/obj/item/borg/apparatus/service/Initialize(mapload)
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index db3d0c90588..a44bcd4e487 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -631,8 +631,8 @@
borg.update_transform(0.5)
/obj/item/borg/upgrade/rped
- name = "engineering cyborg RPED"
- desc = "A rapid part exchange device for the engineering cyborg."
+ name = "engineering cyborg RPED (expanded)"
+ desc = "An expanded rapid part exchange device for the engineering cyborg."
icon_state = "module_engineer"
require_model = TRUE
model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur)
@@ -640,6 +640,27 @@
items_to_add = list(/obj/item/storage/part_replacer/cyborg)
+/obj/item/borg/upgrade/smallrped
+ name = "engineering cyborg RPED"
+ desc = "A regular version of rapid part exchange device for the engineering cyborg."
+ icon_state = "module_engineer"
+ require_model = TRUE
+ model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur)
+ model_flags = BORG_MODEL_ENGINEERING
+ items_to_add = list(/obj/item/storage/part_replacer/cyborg/small)
+
+/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/borg, mob/living/user = usr)
+ . = ..()
+ if(!.)
+ return .
+ var/obj/item/borg/upgrade/smallrped/upgrade = locate() in borg
+ var/obj/item/storage/part_replacer/cyborg/small/replacer = locate() in borg.model.modules
+ if(upgrade)
+ to_chat(user, span_notice("The old RPED module is now expanded and gets more space"))
+ replacer.emptyStorage()
+ replacer.forceMove(get_turf(borg))
+ qdel(upgrade)
+
/obj/item/borg/upgrade/inducer
name = "engineering integrated power inducer"
desc = "An integrated inducer that can charge a device's internal cell from power provided by the cyborg."
@@ -703,15 +724,15 @@
icon_state = "module_honk"
new_model = /obj/item/robot_model/clown
-/obj/item/borg/upgrade/circuit_app
- name = "circuit manipulation apparatus"
- desc = "An engineering cyborg upgrade allowing for manipulation of circuit boards."
+/obj/item/borg/upgrade/engineering_app
+ name = "engineering manipulation apparatus"
+ desc = "An engineering cyborg upgrade allowing for manipulation of circuit boards and other engineering matter."
icon_state = "module_engineer"
require_model = TRUE
model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur)
model_flags = BORG_MODEL_ENGINEERING
- items_to_add = list(/obj/item/borg/apparatus/circuit)
+ items_to_add = list(/obj/item/borg/apparatus/engineering)
/obj/item/borg/upgrade/beaker_app
name = "beaker storage apparatus"
@@ -723,6 +744,17 @@
items_to_add = list(/obj/item/borg/apparatus/beaker/extra)
+/obj/item/borg/upgrade/bs_syringe
+ name = "advanced syringe"
+ desc = "Bluespace technology that expands capacity of your standard cyborg syringe."
+ icon_state = "module_medical"
+ require_model = TRUE
+ model_type = list(/obj/item/robot_model/medical)
+ model_flags = BORG_MODEL_MEDICAL
+
+ items_to_add = list(/obj/item/reagent_containers/syringe/bluespace)
+ items_to_remove = list(/obj/item/reagent_containers/syringe)
+
/obj/item/borg/upgrade/drink_app
name = "glass storage apparatus"
desc = "A supplementary drinking glass storage apparatus for service cyborgs."
diff --git a/code/game/objects/items/tools/painter/decal_painter.dm b/code/game/objects/items/tools/painter/decal_painter.dm
index fe547664702..f1c934d028d 100644
--- a/code/game/objects/items/tools/painter/decal_painter.dm
+++ b/code/game/objects/items/tools/painter/decal_painter.dm
@@ -141,3 +141,18 @@
name = "extreme decal painter"
icon_state = "decal_sprayer_ex"
initial_ink_type = /obj/item/toner/extreme
+
+/obj/item/airlock_painter/decal/cyborg
+ icon_state = "decal_sprayer_borg"
+ initial_ink_type = /obj/item/toner/infinite
+
+/obj/item/airlock_painter/decal/cyborg/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
+ . = ..()
+ var/mob/living/silicon/robot/cyborg = user
+ if(!iscyborg(user) || !cyborg.cell)
+ return
+ if(cyborg.cell && cyborg.cell.charge > 0)
+ cyborg.cell.use(0.025 * STANDARD_CELL_CHARGE)
+ else if(cyborg.cell.charge <= 0)
+ balloon_alert(user, "not enough energy!")
+ return
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 4f910463b9b..eb9eb2d2fc0 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -312,6 +312,12 @@
eye_lights.icon = icon
add_overlay(eye_lights)
+ var/obj/item/shield_module/shield_module = locate(/obj/item/shield_module) in src
+ if(shield_module && shield_module.active)
+ add_overlay(shield_module.shield_overlay)
+ else if (shield_module && !shield_module.active)
+ cut_overlay(shield_module.shield_overlay)
+
if(opened)
if(wiresexposed)
add_overlay("ov-opencover +w")
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index 0306e8b5664..e198a254c8b 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -109,6 +109,24 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
return ITEM_INTERACT_SUCCESS
return ITEM_INTERACT_BLOCKING
+ if(istype(tool, /obj/item/storage/part_replacer))
+ var/obj/item/storage/part_replacer/replacer = tool
+ if(!opened)
+ balloon_alert(user, "chassis cover is closed!")
+ return ITEM_INTERACT_BLOCKING
+ if(!istype(model, /obj/item/robot_model/engineering))
+ balloon_alert(user, "wrong cyborg model!")
+ return ITEM_INTERACT_BLOCKING
+ if(locate(/obj/item/borg/upgrade/rped) in src)
+ balloon_alert(user, "already has a RPED!")
+ return ITEM_INTERACT_BLOCKING
+ qdel(tool)
+ var/obj/item/borg/upgrade/smallrped/lilrped = new
+ if(apply_upgrade(lilrped, user))
+ balloon_alert(user, "[replacer] installed")
+ return ITEM_INTERACT_SUCCESS
+ return ITEM_INTERACT_BLOCKING
+
if(istype(tool, /obj/item/ai_module))
if(!opened)
balloon_alert(user, "chassis cover is closed!")
@@ -517,3 +535,25 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
spark_system.start()
. = TRUE
return ..() || .
+
+/mob/living/silicon/robot/apply_damage(damage, damagetype, def_zone, blocked, forced, spread_damage, wound_bonus, exposed_wound_bonus, sharpness, attack_direction, attacking_item)
+ var/mob/living/silicon/robot/borg = src
+ var/obj/item/shield_module/shield = locate() in borg
+ if(!shield)
+ return ..()
+ if(borg.cell.charge <= 0.4 * STANDARD_CELL_CHARGE)
+ balloon_alert(borg, "not enough energy!")
+ if(shield.active)
+ shield.active = FALSE
+ playsound(src, 'sound/vehicles/mecha/mech_shield_drop.ogg', 50, FALSE)
+ borg.cut_overlay(shield.shield_overlay)
+ return
+ if(shield && shield.active)
+ if(!lavaland_equipment_pressure_check(get_turf(borg)))
+ balloon_alert(borg, "the shield didn't absorb the damage!")
+ return ..()
+ playsound(src, 'sound/vehicles/mecha/mech_shield_deflect.ogg', 100, TRUE)
+ balloon_alert(borg, "absorbed!")
+ borg.cell.use(damage * (STANDARD_CELL_CHARGE / 15), force = TRUE)
+ damage *= 0.5
+ return ..()
diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm
index 866602cc718..8c8e2708092 100644
--- a/code/modules/mob/living/silicon/robot/robot_model.dm
+++ b/code/modules/mob/living/silicon/robot/robot_model.dm
@@ -386,7 +386,6 @@
name = "Engineering"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
- /obj/item/borg/sight/meson,
/obj/item/construction/rcd/borg,
/obj/item/pipe_dispenser,
/obj/item/extinguisher,
@@ -404,6 +403,7 @@
/obj/item/stack/rods/cyborg,
/obj/item/construction/rtd/borg,
/obj/item/stack/cable_coil,
+ /obj/item/airlock_painter/decal/cyborg,
)
radio_channels = list(RADIO_CHANNEL_ENGINEERING)
emag_modules = list(
@@ -413,6 +413,36 @@
model_select_icon = "engineer"
model_traits = list(TRAIT_NEGATES_GRAVITY)
hat_offset = list("north" = list(0, -4), "south" = list(0, -4), "east" = list(4, -4), "west" = list(-4, -4))
+ var/datum/weakref/night_vision_ref
+
+/datum/action/cooldown/borg_meson
+ name = "Toggle Meson Vision"
+ button_icon = 'icons/mob/actions/actions_mecha.dmi'
+ button_icon_state = "meson"
+
+/datum/action/cooldown/borg_meson/Activate()
+ if(usr.sight & SEE_TURFS)
+ usr.clear_sight(SEE_TURFS)
+ owner.lighting_cutoff_red += 5
+ owner.lighting_cutoff_green += 15
+ owner.lighting_cutoff_blue += 5
+ else
+ usr.add_sight(SEE_TURFS)
+ owner.lighting_cutoff_red -= 5
+ owner.lighting_cutoff_green -= 15
+ owner.lighting_cutoff_blue -= 5
+
+/obj/item/robot_model/engineering/be_transformed_to(obj/item/robot_model/old_model, forced = FALSE)
+ var/datum/action/cooldown/borg_meson/night_vision = new(loc)
+ . = ..()
+ if(!.)
+ return
+ night_vision.Grant(loc)
+ night_vision_ref = WEAKREF(night_vision)
+
+/obj/item/robot_model/engineering/Destroy()
+ QDEL_NULL(night_vision_ref)
+ return ..()
/obj/item/robot_model/janitor
name = "Janitor"
@@ -701,6 +731,8 @@
/obj/item/stack/medical/bone_gel,
/obj/item/borg/apparatus/organ_storage,
/obj/item/borg/lollipop,
+ /obj/item/storage/bag/chemistry,
+
)
radio_channels = list(RADIO_CHANNEL_MEDICAL)
emag_modules = list(
@@ -718,7 +750,6 @@
name = "Miner"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
- /obj/item/borg/sight/meson,
/obj/item/storage/bag/ore/cyborg,
/obj/item/pickaxe/drill,
/obj/item/shovel,
@@ -730,6 +761,7 @@
/obj/item/gps/cyborg,
/obj/item/stack/marker_beacon,
/obj/item/t_scanner/adv_mining_scanner/cyborg,
+ /obj/item/shield_module,
)
radio_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SUPPLY)
emag_modules = list(
@@ -743,6 +775,19 @@
"Spider Miner" = list(SKIN_ICON_STATE = "spidermin", SKIN_HAT_OFFSET = list("north" = list(0, -2), "south" = list(0, -2), "east" = list(-2, -2), "west" = list(2, -2))),
"Lavaland Miner" = list(SKIN_ICON_STATE = "miner"),
)
+ var/datum/weakref/night_vision_ref
+
+/obj/item/robot_model/miner/be_transformed_to(obj/item/robot_model/old_model, forced = FALSE)
+ var/datum/action/cooldown/borg_meson/night_vision = new(loc)
+ . = ..()
+ if(!.)
+ return
+ night_vision.Grant(loc)
+ night_vision_ref = WEAKREF(night_vision)
+
+/obj/item/robot_model/miner/Destroy()
+ QDEL_NULL(night_vision_ref)
+ return ..()
/obj/item/robot_model/peacekeeper
name = "Peacekeeper"
@@ -902,6 +947,7 @@
/obj/item/stack/medical/bone_gel,
/obj/item/gun/medbeam,
/obj/item/borg/apparatus/organ_storage,
+ /obj/item/storage/bag/chemistry,
)
cyborg_base_icon = "synd_medical"
model_select_icon = "malf"
@@ -912,7 +958,6 @@
name = "Syndicate Saboteur"
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,
@@ -926,6 +971,7 @@
/obj/item/borg/apparatus/sheet_manipulator,
/obj/item/stack/rods/cyborg,
/obj/item/construction/rtd/borg,
+ /obj/item/airlock_painter/decal/cyborg,
/obj/item/dest_tagger/borg,
/obj/item/stack/cable_coil,
/obj/item/pinpointer/syndicate_cyborg,
@@ -937,6 +983,33 @@
model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NEGATES_GRAVITY)
hat_offset = list("north" = list(0, -4), "south" = list(0, -4), "east" = list(4, -4), "west" = list(-4, -4))
canDispose = TRUE
+ var/datum/weakref/thermal_vision_ref
+
+/datum/action/cooldown/borg_thermal
+ name = "Toggle Thermal Night Vision"
+ button_icon = 'icons/mob/actions/actions_mecha.dmi'
+ button_icon_state = "meson"
+
+/datum/action/cooldown/borg_thermal/Activate()
+ if(usr.sight & SEE_TURFS)
+ usr.clear_sight(SEE_TURFS|SEE_MOBS)
+ usr.lighting_cutoff = LIGHTING_CUTOFF_VISIBLE
+ else
+ usr.add_sight(SEE_TURFS|SEE_MOBS)
+ usr.lighting_cutoff = LIGHTING_CUTOFF_HIGH
+ usr.sync_lighting_plane_cutoff()
+
+/obj/item/robot_model/saboteur/be_transformed_to(obj/item/robot_model/old_model, forced = FALSE)
+ var/datum/action/cooldown/borg_thermal/thermal_vision = new(loc)
+ . = ..()
+ if(!.)
+ return
+ thermal_vision.Grant(loc)
+ thermal_vision_ref = WEAKREF(thermal_vision)
+
+/obj/item/robot_model/saboteur/Destroy()
+ QDEL_NULL(thermal_vision_ref)
+ return ..()
/obj/item/robot_model/syndicate/kiltborg
name = "Highlander"
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 1801a23b155..2c0cac37b40 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -892,6 +892,12 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks())
charges = 200
max_charges = 200
+/obj/item/toner/infinite
+ name = "infinite toner cartridge"
+ desc = "...are you satisfied now?"
+ charges = INFINITY
+ max_charges = INFINITY
+
#undef PHOTOCOPIER_FEE
#undef BLANKS_FILE_NAME
#undef PAPER_PAPER_USE
diff --git a/code/modules/projectiles/ammunition/energy/plasma.dm b/code/modules/projectiles/ammunition/energy/plasma.dm
index f68879fc757..840244a3d67 100644
--- a/code/modules/projectiles/ammunition/energy/plasma.dm
+++ b/code/modules/projectiles/ammunition/energy/plasma.dm
@@ -9,3 +9,4 @@
projectile_type = /obj/projectile/plasma/adv
delay = 10
e_cost = LASER_SHOTS(100, STANDARD_CELL_CHARGE)
+
diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm
index 7da09b56729..adba89e4d88 100644
--- a/code/modules/projectiles/projectile/special/plasma.dm
+++ b/code/modules/projectiles/projectile/special/plasma.dm
@@ -38,3 +38,4 @@
damage = 24
range = 7
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
+
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index 274f5f8b11d..261b3104bd8 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -1652,13 +1652,14 @@
search_metadata = "boris"
/datum/design/borg_upgrade_rped
- name = "Rapid Part Exchange Device"
+ name = "Rapid Part Exchange Device Expanded"
id = "borg_upgrade_rped"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/rped
materials = list(
- /datum/material/iron =SHEET_MATERIAL_AMOUNT*5,
- /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5,
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT*2.5,
+ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT*2.5
)
construction_time = 12 SECONDS
category = list(
@@ -1676,11 +1677,11 @@
RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING
)
-/datum/design/borg_upgrade_circuit_app
- name = "Circuit Manipulator"
- id = "borg_upgrade_circuitapp"
+/datum/design/borg_upgrade_engineering_app
+ name = "Engineering Apparatus"
+ id = "borg_upgrade_engineeringapp"
build_type = MECHFAB
- build_path = /obj/item/borg/upgrade/circuit_app
+ build_path = /obj/item/borg/upgrade/engineering_app
materials = list(
/datum/material/iron =SHEET_MATERIAL_AMOUNT,
/datum/material/titanium =SMALL_MATERIAL_AMOUNT*5,
@@ -1718,6 +1719,22 @@
RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL
)
+/datum/design/borg_upgrade_syringe
+ name = "Advanced Syringe"
+ id = "borg_upgrade_syringe"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/bs_syringe
+ materials = list(
+ /datum/material/iron =SHEET_MATERIAL_AMOUNT,
+ /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5
+ )
+ construction_time = 12 SECONDS
+ category = list(
+ RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL
+ )
+
/datum/design/borg_upgrade_broomer
name = "Experimental Push Broom"
id = "borg_upgrade_broomer"
diff --git a/code/modules/research/part_replacer.dm b/code/modules/research/part_replacer.dm
index 0b4619a862a..fea7c8211d0 100644
--- a/code/modules/research/part_replacer.dm
+++ b/code/modules/research/part_replacer.dm
@@ -169,3 +169,8 @@
lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi'
storage_type = /datum/storage/rped/bluespace
+
+/obj/item/storage/part_replacer/cyborg/small
+ desc = "Special mechanical module made to store, sort, and apply standard machine parts. This one has as much space, as your regular RPED"
+ icon_state = "RPED"
+ storage_type = /datum/storage/rped
diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm
index 87300c7e70c..4cab2dd3f08 100644
--- a/code/modules/research/techweb/nodes/cyborg_nodes.dm
+++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm
@@ -89,6 +89,7 @@
"borg_upgrade_piercinghypospray",
"borg_upgrade_surgicalprocessor",
"borg_upgrade_surgicalomnitool",
+ "borg_upgrade_syringe",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE)
@@ -125,7 +126,7 @@
design_ids = list(
"borg_upgrade_rped",
"borg_upgrade_engineeringomnitool",
- "borg_upgrade_circuitapp",
+ "borg_upgrade_engineeringapp",
"borg_upgrade_inducer",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
diff --git a/icons/mob/actions/actions_mecha.dmi b/icons/mob/actions/actions_mecha.dmi
index 60df1b5ed1a..82f09466995 100644
Binary files a/icons/mob/actions/actions_mecha.dmi and b/icons/mob/actions/actions_mecha.dmi differ
diff --git a/icons/mob/effects/durand_shield.dmi b/icons/mob/effects/durand_shield.dmi
index 8f9016ed74b..c4a18d1b599 100644
Binary files a/icons/mob/effects/durand_shield.dmi and b/icons/mob/effects/durand_shield.dmi differ
diff --git a/icons/obj/devices/tool.dmi b/icons/obj/devices/tool.dmi
index 035f73b0aca..9075c0d2063 100644
Binary files a/icons/obj/devices/tool.dmi and b/icons/obj/devices/tool.dmi differ
diff --git a/icons/obj/weapons/guns/energy.dmi b/icons/obj/weapons/guns/energy.dmi
index a6ea9700698..bbb4ff06316 100644
Binary files a/icons/obj/weapons/guns/energy.dmi and b/icons/obj/weapons/guns/energy.dmi differ