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