diff --git a/_maps/templates/shelter_1.dmm b/_maps/templates/shelter_1.dmm
index f5b2e141f4..7f95fba10f 100644
--- a/_maps/templates/shelter_1.dmm
+++ b/_maps/templates/shelter_1.dmm
@@ -50,9 +50,7 @@
/area/survivalpod)
"l" = (
/obj/structure/tubes,
-/obj/structure/chair/comfy/black{
- dir = 8
- },
+/obj/machinery/recharge_station,
/turf/open/floor/pod,
/area/survivalpod)
"m" = (
diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm
index 80de4438da..825cb26e3a 100644
--- a/_maps/templates/shelter_2.dmm
+++ b/_maps/templates/shelter_2.dmm
@@ -67,8 +67,7 @@
layer = 3
},
/obj/machinery/door/window/survival_pod{
- dir = 1;
- icon_state = "windoor"
+ dir = 1
},
/turf/open/floor/carpet/black,
/area/survivalpod)
@@ -133,7 +132,6 @@
/area/survivalpod)
"u" = (
/obj/machinery/door/window/survival_pod{
- icon_state = "windoor";
dir = 1
},
/turf/open/floor/carpet/black,
@@ -169,10 +167,10 @@
/area/survivalpod)
"y" = (
/obj/structure/sink/kitchen{
- icon_state = "sink_alt";
dir = 4;
pixel_x = -13
},
+/obj/machinery/recharge_station/upgraded,
/turf/open/floor/carpet/black,
/area/survivalpod)
"z" = (
diff --git a/_maps/templates/shelter_3.dmm b/_maps/templates/shelter_3.dmm
index b71da1fba0..bb400f29ac 100644
--- a/_maps/templates/shelter_3.dmm
+++ b/_maps/templates/shelter_3.dmm
@@ -268,6 +268,10 @@
/obj/structure/fans/tiny,
/turf/open/floor/carpet/black,
/area/survivalpod)
+"T" = (
+/obj/machinery/recharge_station/fullupgrade,
+/turf/open/floor/carpet/black,
+/area/survivalpod)
(1,1,1) = {"
a
@@ -287,7 +291,7 @@ b
f
q
s
-x
+T
y
D
F
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 4ed541ef10..c0f563d44d 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -18,6 +18,28 @@
. = ..()
update_icon()
+/obj/machinery/recharge_station/upgraded
+
+/obj/machinery/recharge_station/upgraded/Initialize()
+ . = ..()
+ component_parts = list()
+ component_parts += new /obj/item/circuitboard/machine/cyborgrecharger(null)
+ component_parts += new /obj/item/stock_parts/capacitor/super(null)
+ component_parts += new /obj/item/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/stock_parts/cell/hyper(null)
+ RefreshParts()
+
+/obj/machinery/recharge_station/fullupgrade
+
+/obj/machinery/recharge_station/fullupgrade/Initialize()
+ . = ..()
+ component_parts = list()
+ component_parts += new /obj/item/circuitboard/machine/cyborgrecharger(null)
+ component_parts += new /obj/item/stock_parts/capacitor/quadratic(null)
+ component_parts += new /obj/item/stock_parts/manipulator/femto(null)
+ component_parts += new /obj/item/stock_parts/cell/bluespace(null)
+ RefreshParts()
+
/obj/machinery/recharge_station/RefreshParts()
recharge_speed = 0
repairs = 0
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index c8265996e7..3b1a542847 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -771,7 +771,6 @@
if(wrapped)
wrapped.forceMove(get_turf(wrapped))
wrapped = null
- to_chat(user, "You drop \the [wrapped].")
return ..()
/obj/item/weapon/gripper/afterattack(var/atom/target, var/mob/living/user, proximity, params)
@@ -823,19 +822,15 @@
desc = "A simple grasping tool for carrying and deploying shelter capsules."
icon_state = "gripper_mining"
can_hold = list(
- /obj/item/survivalcapsule/luxury
+ /obj/item/survivalcapsule
)
-/obj/item/weapon/gripper/mining/afterattack()
- return
-
/obj/item/weapon/gripper/mining/attack_self()
if(wrapped)
wrapped.forceMove(get_turf(wrapped))
wrapped = null
- to_chat(user, "You deploy \the [wrapped].")
wrapped.attack_self()
- return ..()
+ return
/obj/item/gun/energy/plasmacutter/cyborg
name = "cyborg plasma cutter"
@@ -845,4 +840,46 @@
can_charge = FALSE
selfcharge = EGUN_SELFCHARGE_BORG
cell_type = /obj/item/stock_parts/cell/secborg
- charge_delay = 5
\ No newline at end of file
+ charge_delay = 5
+
+/obj/item/cyborg_clamp
+ name = "cyborg loading clamp"
+ desc = "Equipment for supply cyborgs. Lifts objects and loads them into cargo. Will not carry living beings."
+ icon = 'icons/mecha/mecha_equipment.dmi'
+ icon_state = "mecha_clamp"
+ tool_behaviour = TOOL_RETRACTOR
+ var/cargo_capacity = 8
+ var/cargo = list()
+
+/obj/item/cyborg_clamp/afterattack(atom/target, mob/user, proximity)
+ if(isobj(target))
+ var/obj/O = target
+ if(!O.anchored)
+ if(contents.len < cargo_capacity)
+ user.visible_message("[user] lifts [target] and starts to load it into its cargo compartment.")
+ O.anchored = TRUE
+ if(do_mob(user, O, 20))
+ for(var/mob/chump in target.contents)
+ to_chat(user, "Error: Living entity detected in [target]. Cannot load.")
+ O.anchored = initial(O.anchored)
+ return
+ cargo += O
+ O.forceMove(src)
+ O.anchored = FALSE
+ to_chat(user, "[target] successfully loaded.")
+ playsound(loc, 'sound/effects/bin_close.ogg', 50, 0)
+ else
+ O.anchored = initial(O.anchored)
+ else
+ to_chat(user, "Not enough room in cargo compartment! Maximum of eight objects!")
+ else
+ to_chat(user, "[target] is firmly secured!")
+
+/obj/item/cyborg_clamp/attack_self(mob/user)
+ var/obj/chosen_cargo = input(user, "Drop what?") as null|anything in cargo
+ if(!chosen_cargo)
+ return
+ chosen_cargo.forceMove(get_turf(chosen_cargo))
+ cargo -= chosen_cargo
+ user.visible_message("[user] unloads [chosen_cargo] from its cargo.")
+ playsound(loc, 'sound/effects/bin_close.ogg', 50, 0)
\ No newline at end of file
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index eafa79798e..5d29aa7f4f 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -110,6 +110,7 @@
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
var/mob/listeningTo
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+ var/range = null
/obj/item/storage/bag/ore/ComponentInitialize()
. = ..()
@@ -141,12 +142,21 @@
return
if (istype(user.pulling, /obj/structure/ore_box))
box = user.pulling
+ if(issilicon(user))
+ var/mob/living/silicon/robot/borgo = user
+ for(var/obj/item/cyborg_clamp/C in borgo.module.modules)
+ for(var/obj/structure/ore_box/B in C)
+ box = B
+
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
if(STR)
for(var/A in tile)
if (!is_type_in_typecache(A, STR.can_hold))
continue
if (box)
+ if(range)
+ for(var/obj/item/stack/ore/ore in range(range, user))
+ user.transferItemToLoc(A, box)
user.transferItemToLoc(A, box)
show_message = TRUE
else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE))
@@ -168,6 +178,7 @@
/obj/item/storage/bag/ore/cyborg
name = "cyborg mining satchel"
+ range = 1
/obj/item/storage/bag/ore/cyborg/ComponentInitialize()
. = ..()
diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm
index 29c4c3d833..f84bd0d8d6 100644
--- a/code/modules/jobs/job_types/cyborg.dm
+++ b/code/modules/jobs/job_types/cyborg.dm
@@ -5,7 +5,7 @@
department_flag = ENGSEC
faction = "Station"
total_positions = 0
- spawn_positions = 1
+ spawn_positions = 3
supervisors = "your laws and the AI" //Nodrak
selection_color = "#ddffdd"
minimal_player_age = 21
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index e10af3d23f..beae2fedad 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -35,7 +35,7 @@
detonation_damage = 60
wielded = 1
-/obj/item/twohanded/kinetic_crusher/cyborg/wield()
+/obj/item/twohanded/kinetic_crusher/cyborg/unwield()
return
/obj/item/twohanded/kinetic_crusher/Initialize()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 5df24406c5..9202d3a455 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -114,6 +114,10 @@
var/cansprint = 1
+ var/orebox = null
+
+/mob/living/silicon/robot
+
/mob/living/silicon/robot/get_cell()
return cell
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 8ea368cc03..a7aaa660df 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -852,6 +852,8 @@
/obj/item/gun/energy/kinetic_accelerator/cyborg,
/obj/item/gun/energy/plasmacutter/cyborg,
/obj/item/gps/cyborg,
+ /obj/item/weapon/gripper/mining,
+ /obj/item/cyborg_clamp,
/obj/item/stack/marker_beacon)
emag_modules = list(/obj/item/borg/stun)
ratvar_modules = list(
diff --git a/modular_citadel/icons/mob/widerobot.dmi b/modular_citadel/icons/mob/widerobot.dmi
index 568bd3e5b1..c3e4eb09f1 100644
Binary files a/modular_citadel/icons/mob/widerobot.dmi and b/modular_citadel/icons/mob/widerobot.dmi differ