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