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 c09f5b1b65..a0d58709c8 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -814,3 +814,93 @@ return else to_chat(user, "Your gripper cannot hold \the [target].") + +/obj/item/weapon/gripper/mining + name = "shelter capsule deployer" + desc = "A simple grasping tool for carrying and deploying shelter capsules." + icon_state = "gripper_mining" + can_hold = list( + /obj/item/survivalcapsule + ) + +/obj/item/weapon/gripper/mining/attack_self() + if(wrapped) + wrapped.forceMove(get_turf(wrapped)) + wrapped.attack_self() + wrapped = null + return + +/obj/item/gun/energy/plasmacutter/cyborg + name = "cyborg plasma cutter" + desc = "A basic variation of the plasma cutter, compressed into a cyborg chassis. Less effective than normal plasma cutters." + force = 15 + ammo_type = list(/obj/item/ammo_casing/energy/plasma/weak) + can_charge = FALSE + selfcharge = EGUN_SELFCHARGE_BORG + cell_type = /obj/item/stock_parts/cell/secborg + 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 + item_flags = NOBLUDGEON + flags_1 = NONE + var/cargo_capacity = 8 + var/cargo = list() + +/obj/item/cyborg_clamp/attack(mob/M, mob/user, def_zone) + return + +/obj/item/cyborg_clamp/afterattack(atom/movable/target, mob/user, proximity) + . = ..() + if(!proximity) + return FALSE + 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.GetAllContents()) + to_chat(user, "Error: Living entity detected in [target]. Cannot load.") + O.anchored = initial(O.anchored) + return + for(var/obj/item/disk/nuclear/diskie in target.GetAllContents()) + to_chat(user, "Error: Nuclear class authorization device detected in [target]. Cannot load.") + O.anchored = initial(O.anchored) + return + if(contents.len < cargo_capacity) //check both before and after + cargo += O + O.forceMove(src) + O.anchored = FALSE + to_chat(user, "[target] successfully loaded.") + playsound(loc, 'sound/effects/bin_close.ogg', 50, 0) + else + to_chat(user, "Not enough room in cargo compartment! Maximum of [cargo_capacity] objects!") + O.anchored = initial(O.anchored) + return + 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) + +/obj/item/card/id/miningborg + name = "mining point card" + desc = "A robotic ID strip used for claiming and transferring mining points. Must be held in an active slot to transfer points." + access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) + icon_state = "data_1" \ No newline at end of file diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index bf363f959c..cc1cfec818 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -173,32 +173,64 @@ R.module.basic_modules += S R.module.add_module(S, FALSE, TRUE) -/obj/item/borg/upgrade/soh - name = "mining cyborg satchel of holding" - desc = "A satchel of holding replacement for mining cyborg's ore satchel module." +/obj/item/borg/upgrade/premiumka + name = "mining cyborg premium KA" + desc = "A premium kinetic accelerator replacement for the mining module's standard kinetic accelerator." icon_state = "cyborg_upgrade3" require_module = 1 module_type = list(/obj/item/robot_module/miner) -/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R) +/obj/item/borg/upgrade/premiumka/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) - for(var/obj/item/storage/bag/ore/cyborg/S in R.module) - R.module.remove_module(S, TRUE) + for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA in R.module) + for(var/obj/item/borg/upgrade/modkit/M in KA.modkits) + M.uninstall(src) + R.module.remove_module(KA, TRUE) - var/obj/item/storage/bag/ore/holding/H = new /obj/item/storage/bag/ore/holding(R.module) - R.module.basic_modules += H - R.module.add_module(H, FALSE, TRUE) + var/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg/PKA = new /obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg(R.module) + R.module.basic_modules += PKA + R.module.add_module(PKA, FALSE, TRUE) -/obj/item/borg/upgrade/soh/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/premiumka/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if (.) - for(var/obj/item/storage/bag/ore/holding/H in R.module) - R.module.remove_module(H, TRUE) + for(var/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg/PKA in R.module) + for(var/obj/item/borg/upgrade/modkit/M in PKA.modkits) + M.uninstall(src) + R.module.remove_module(PKA, TRUE) - var/obj/item/storage/bag/ore/cyborg/S = new (R.module) - R.module.basic_modules += S - R.module.add_module(S, FALSE, TRUE) + var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA = new (R.module) + R.module.basic_modules += KA + R.module.add_module(KA, FALSE, TRUE) + + +/obj/item/borg/upgrade/advcutter + name = "mining cyborg advanced plasma cutter" + desc = "An upgrade for the mining cyborgs plasma cutter, bringing it to advanced operation." + icon_state = "cyborg_upgrade3" + require_module = 1 + module_type = list(/obj/item/robot_module/miner) + +/obj/item/borg/upgrade/advcutter/action(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + for(var/obj/item/gun/energy/plasmacutter/cyborg/C in R.module) + C.name = "advanced cyborg plasma cutter" + C.desc = "An improved version of the cyborg plasma cutter. Baring functionality identical to the standard hand held version." + C.icon_state = "adv_plasmacutter" + for(var/obj/item/ammo_casing/energy/plasma/weak/L in C.ammo_type) + L.projectile_type = /obj/item/projectile/plasma/adv + +/obj/item/borg/upgrade/advcutter/deactivate(mob/living/silicon/robot/R, user = usr) + . = ..() + if (.) + for(var/obj/item/gun/energy/plasmacutter/cyborg/C in R.module) + C.name = initial(name) + C.desc = initial(desc) + C.icon_state = initial(icon_state) + for(var/obj/item/ammo_casing/energy/plasma/weak/L in C.ammo_type) + L.projectile_type = initial(L.projectile_type) /obj/item/borg/upgrade/tboh name = "janitor cyborg trash bag of holding" diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 03f62f48d4..7664da6ce4 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() . = ..() @@ -142,12 +143,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(ore, box) user.transferItemToLoc(A, box) show_message = TRUE else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE)) @@ -169,6 +179,7 @@ /obj/item/storage/bag/ore/cyborg name = "cyborg mining satchel" + range = 1 /obj/item/storage/bag/ore/cyborg/ComponentInitialize() . = ..() diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index aeadceb2e5..73c1c465cd 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -47,7 +47,8 @@ return ..() -/turf/closed/mineral/attackby(obj/item/I, mob/user, params) +/turf/closed/mineral/attackby(obj/item/pickaxe/I, mob/user, params) + var/stored_dir = user.dir if (!user.IsAdvancedToolUser()) to_chat(usr, "You don't have the dexterity to do this!") return @@ -63,7 +64,12 @@ to_chat(user, "You start picking...") if(I.use_tool(src, user, 40, volume=50)) + var/range = I.digrange //Store the current digrange so people don't cheese digspeed swapping for faster mining if(ismineralturf(src)) + if(I.digrange > 0) + for(var/turf/closed/mineral/M in range(user,range)) + if(get_dir(user,M)&stored_dir) + M.gets_drilled() to_chat(user, "You finish cutting into the rock.") gets_drilled(user) SSblackbox.record_feedback("tally", "pick_used_mining", 1, I.type) diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index aa1abe56b4..d885372f5f 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -488,8 +488,7 @@ /obj/item/grenade/clusterbuster/smoke = 15, /obj/item/clothing/under/chameleon = 13, /obj/item/clothing/shoes/chameleon/noslip = 10, - /obj/item/borg/upgrade/ddrill = 3, - /obj/item/borg/upgrade/soh = 3) + /obj/item/borg/upgrade/ddrill = 3) /obj/effect/spawner/lootdrop/snowdin/dungeonmid name = "dungeon mid" 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 eb3e6a5b58..b2c0c1cc87 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -29,6 +29,15 @@ var/light_on = FALSE var/brightness_on = 7 +/obj/item/twohanded/kinetic_crusher/cyborg //probably give this a unique sprite later + desc = "An integrated version of the standard kinetic crusher with a grinded down axe head to dissuade mis-use against crewmen. Deals damage equal to the standard crusher against creatures, however." + force = 10 //wouldn't want to give a borg a 20 brute melee weapon unemagged now would we + detonation_damage = 60 + wielded = 1 + +/obj/item/twohanded/kinetic_crusher/cyborg/unwield() + return + /obj/item/twohanded/kinetic_crusher/Initialize() . = ..() AddComponent(/datum/component/butchering, 60, 110) //technically it's huge and bulky, but this provides an incentive to use it diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index e02f38b7e3..d776628def 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -16,6 +16,20 @@ toolspeed = 1 usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg') attack_verb = list("hit", "pierced", "sliced", "attacked") + var/digrange = 1 + +/obj/item/pickaxe/attack_self(mob/user) + if(initial(digrange) > 0) + if(digrange == 0) + digrange = initial(digrange) + toolspeed = initial(toolspeed) + to_chat(user, "You increase the tools dig range, decreasing its mining speed.") + else + digrange = 0 + toolspeed = toolspeed/2 + to_chat(user, "You decrease the tools dig range, increasing its mining speed.") + else + to_chat(user, "Tool does not have a configureable dig range.") /obj/item/pickaxe/suicide_act(mob/living/user) user.visible_message("[user] begins digging into [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide!") @@ -66,6 +80,7 @@ name = "cyborg mining drill" desc = "An integrated electric mining drill." flags_1 = NONE + toolspeed = 0.5 /obj/item/pickaxe/drill/cyborg/Initialize() . = ..() @@ -74,23 +89,25 @@ /obj/item/pickaxe/drill/diamonddrill name = "diamond-tipped mining drill" icon_state = "diamonddrill" - toolspeed = 0.2 + toolspeed = 0.4 desc = "Yours is the drill that will pierce the heavens!" /obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version! name = "diamond-tipped cyborg mining drill" //To inherit the NODROP_1 flag, and easier to change borg specific drill mechanics. icon_state = "diamonddrill" - toolspeed = 0.1 + toolspeed = 0.4 + digrange = 2 /obj/item/pickaxe/drill/jackhammer name = "sonic jackhammer" icon_state = "jackhammer" item_state = "jackhammer" w_class = WEIGHT_CLASS_HUGE - toolspeed = 0.1 //the epitome of powertools. extremely fast mining, laughs at puny walls + toolspeed = 0.2 //the epitome of powertools. extremely fast mining, laughs at puny walls usesound = 'sound/weapons/sonic_jackhammer.ogg' hitsound = 'sound/weapons/sonic_jackhammer.ogg' desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls." + digrange = 2 /obj/item/shovel name = "shovel" diff --git a/code/modules/mining/point_bank.dm b/code/modules/mining/point_bank.dm new file mode 100644 index 0000000000..8d0bb4e1e4 --- /dev/null +++ b/code/modules/mining/point_bank.dm @@ -0,0 +1,49 @@ +/obj/machinery/point_bank + name = "mining point bank" + desc = "A wall mounted machine that can be used to store and transfer mining points. Sharing is caring!" + icon = 'icons/obj/machines/mining_machines.dmi' + icon_state = "ore_redemption" + density = FALSE + req_access = list(ACCESS_MINERAL_STOREROOM) + circuit = null + layer = BELOW_OBJ_LAYER + var/points = 0 + +/obj/machinery/point_bank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "point_bank", "Point Bank", 200, 100, master_ui, state) + ui.open() + +/obj/machinery/point_bank/ui_data(mob/user) + var/list/data = list() + data["totalPoints"] = points + return data + +/obj/machinery/mineral/ore_redemption/ui_act(action, params) + if(..()) + return + switch(action) + if("Claim") + var/mob/M = usr + var/obj/item/card/id/I = M.get_idcard(TRUE) + if(points) + if(I) + I.mining_points += points + points = 0 + else + to_chat(usr, "No ID detected.") + else + to_chat(usr, "No points to claim.") + return TRUE + +/obj/machinery/point_bank/power_change() + ..() + update_icon() + +/obj/machinery/point_bank/update_icon() + if(powered()) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]-off" + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 102bc6fc3d..998fd3770f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -988,4 +988,4 @@ if(H.clothing_flags & SCAN_REAGENTS) return TRUE if(isclothing(wear_mask) && (wear_mask.clothing_flags & SCAN_REAGENTS)) - return TRUE + return TRUE \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 5f7d3ca243..86e3ccad24 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 ece7fe9ecb..1d8e5ed21b 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -121,6 +121,10 @@ else if(istype(S, /obj/item/stack/marker_beacon)) S.cost = 1 S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon) + + else if(istype(S, /obj/item/stack/packageWrap)) + S.cost = 1 + S.source = get_or_create_estorage(/datum/robot_energy_storage/wrapping_paper) if(S && S.source) S.materials = list() @@ -139,6 +143,9 @@ //Adds flavoursome dogborg items to dogborg variants without mechanical benefits /obj/item/robot_module/proc/dogborg_equip() + has_snowflake_deadsprite = TRUE + cyborg_pixel_offset = -16 + hat_offset = INFINITY var/obj/item/I = new /obj/item/analyzer/nose/flavour(src) basic_modules += I I = new /obj/item/soap/tongue/flavour(src) @@ -362,30 +369,21 @@ sleeper_overlay = "msleeper" moduleselect_icon = "medihound" moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' - has_snowflake_deadsprite = TRUE dogborg = TRUE - cyborg_pixel_offset = -16 - hat_offset = INFINITY if("Medihound Dark") cyborg_base_icon = "medihounddark" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' sleeper_overlay = "mdsleeper" moduleselect_icon = "medihound" moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' - has_snowflake_deadsprite = TRUE dogborg = TRUE - cyborg_pixel_offset = -16 - hat_offset = INFINITY if("Vale") cyborg_base_icon = "valemed" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' sleeper_overlay = "valemedsleeper" moduleselect_icon = "medihound" moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' - has_snowflake_deadsprite = TRUE dogborg = TRUE - cyborg_pixel_offset = -16 - hat_offset = INFINITY if("Alina") cyborg_base_icon = "alina-med" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' @@ -393,10 +391,7 @@ sleeper_overlay = "alinasleeper" moduleselect_icon = "medihound" moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' - has_snowflake_deadsprite = TRUE dogborg = TRUE - cyborg_pixel_offset = -16 - hat_offset = INFINITY return ..() /obj/item/robot_module/engineering @@ -477,29 +472,20 @@ cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi' if("Pup Dozer") cyborg_base_icon = "pupdozer" - hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE - dogborg = TRUE - cyborg_pixel_offset = -16 sleeper_overlay = "dozersleeper" + dogborg = TRUE if("Vale") cyborg_base_icon = "valeeng" - hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE - dogborg = TRUE - cyborg_pixel_offset = -16 sleeper_overlay = "valeengsleeper" + dogborg = TRUE if("Alina") cyborg_base_icon = "alina-eng" special_light_key = "alina" - hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE - dogborg = TRUE - cyborg_pixel_offset = -16 sleeper_overlay = "alinasleeper" + dogborg = TRUE return ..() /obj/item/robot_module/security @@ -558,36 +544,24 @@ if("K9") cyborg_base_icon = "k9" sleeper_overlay = "ksleeper" - hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE dogborg = TRUE - cyborg_pixel_offset = -16 if("Alina") cyborg_base_icon = "alina-sec" special_light_key = "alina" sleeper_overlay = "alinasleeper" - hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE dogborg = TRUE - cyborg_pixel_offset = -16 if("K9 Dark") cyborg_base_icon = "k9dark" sleeper_overlay = "k9darksleeper" - hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE dogborg = TRUE - cyborg_pixel_offset = -16 if("Vale") cyborg_base_icon = "valesec" sleeper_overlay = "valesecsleeper" - hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE dogborg = TRUE - cyborg_pixel_offset = -16 return ..() /obj/item/robot_module/security/Initialize() @@ -795,24 +769,18 @@ if("(Service) DarkK9") cyborg_base_icon = "k50" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE - dogborg = TRUE - cyborg_pixel_offset = -16 sleeper_overlay = "ksleeper" + dogborg = TRUE if("(Service) Vale") cyborg_base_icon = "valeserv" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE - dogborg = TRUE - cyborg_pixel_offset = -16 sleeper_overlay = "valeservsleeper" + dogborg = TRUE if("(Service) ValeDark") cyborg_base_icon = "valeservdark" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE - dogborg = TRUE - cyborg_pixel_offset = -16 sleeper_overlay = "valeservsleeper" + dogborg = TRUE if("(Janitor) Default") cyborg_base_icon = "janitor" if("(Janitor) Marina") @@ -830,10 +798,8 @@ if("(Janitor) Scrubpuppy") cyborg_base_icon = "scrubpup" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' - has_snowflake_deadsprite = TRUE - cyborg_pixel_offset = -16 - dogborg = TRUE sleeper_overlay = "jsleeper" + dogborg = TRUE return ..() /obj/item/robot_module/miner @@ -845,13 +811,19 @@ /obj/item/borg/sight/meson, /obj/item/storage/bag/ore/cyborg, /obj/item/pickaxe/drill/cyborg, - /obj/item/shovel, + /obj/item/twohanded/kinetic_crusher/cyborg, /obj/item/weldingtool/mini, /obj/item/storage/bag/sheetsnatcher/borg, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator/cyborg, + /obj/item/gun/energy/plasmacutter/cyborg, /obj/item/gps/cyborg, - /obj/item/stack/marker_beacon) + /obj/item/weapon/gripper/mining, + /obj/item/cyborg_clamp, + /obj/item/card/id/miningborg, + /obj/item/stack/marker_beacon, + /obj/item/destTagger, + /obj/item/stack/packageWrap) emag_modules = list(/obj/item/borg/stun) ratvar_modules = list( /obj/item/clockwork/slab/cyborg/miner, @@ -863,7 +835,7 @@ /obj/item/robot_module/miner/be_transformed_to(obj/item/robot_module/old_module) var/mob/living/silicon/robot/R = loc - var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Heavy", "Sleek", "Marina", "Can", "Spider", "Asteroid", "Droid") + var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Heavy", "Sleek", "Marina", "Can", "Spider", "Asteroid", "Droid", "Blade") if(!borg_icon) return FALSE switch(borg_icon) @@ -891,6 +863,11 @@ if("Heavy") cyborg_base_icon = "heavymin" cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi' + if("Blade") + cyborg_base_icon = "blade" + cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' + sleeper_overlay = "bladesleeper" + dogborg = TRUE return ..() /obj/item/robot_module/syndicate @@ -1036,3 +1013,8 @@ max_energy = 30 recharge_rate = 1 name = "Marker Beacon Storage" + +/datum/robot_energy_storage/wrapping_paper + max_energy = 30 + recharge_rate = 1 + name = "Wrapping Paper Storage" diff --git a/code/modules/projectiles/ammunition/energy/plasma.dm b/code/modules/projectiles/ammunition/energy/plasma.dm index d02abf9c88..3a71254508 100644 --- a/code/modules/projectiles/ammunition/energy/plasma.dm +++ b/code/modules/projectiles/ammunition/energy/plasma.dm @@ -9,3 +9,7 @@ projectile_type = /obj/item/projectile/plasma/adv delay = 10 e_cost = 10 + +/obj/item/ammo_casing/energy/plasma/weak + projectile_type = /obj/item/projectile/plasma/weak + e_cost = 100 \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index b216d8d536..ecd906f2a9 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -112,7 +112,10 @@ /obj/item/gun/energy/kinetic_accelerator/cyborg holds_charge = TRUE unique_frequency = TRUE - max_mod_capacity = 80 + +/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg + holds_charge = TRUE + unique_frequency = TRUE /obj/item/gun/energy/kinetic_accelerator/minebot trigger_guard = TRIGGER_GUARD_ALLOW_ALL @@ -280,7 +283,7 @@ . += "Occupies [cost]% of mod capacity." /obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user) - if(istype(A, /obj/item/gun/energy/kinetic_accelerator) && !issilicon(user)) + if(istype(A, /obj/item/gun/energy/kinetic_accelerator)) install(A, user) else ..() diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm index aeafb6157a..4c05c42fb3 100644 --- a/code/modules/projectiles/projectile/special/plasma.dm +++ b/code/modules/projectiles/projectile/special/plasma.dm @@ -47,3 +47,9 @@ damage = 24 range = 7 pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + +/obj/item/projectile/plasma/weak + dismemberment = 0 + damage = 10 + range = 4 + mine_range = 0 \ No newline at end of file diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 113a6262c9..5fab7705a8 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -624,12 +624,21 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") -/datum/design/borg_upgrade_holding - name = "Cyborg Upgrade (Ore Satchel of Holding)" - id = "borg_upgrade_holding" +/datum/design/borg_upgrade_advcutter + name = "Cyborg Upgrade (Advanced Plasma Cutter)" + id = "borg_upgrade_advcutter" build_type = MECHFAB - build_path = /obj/item/borg/upgrade/soh - materials = list(MAT_METAL = 10000, MAT_GOLD = 250, MAT_URANIUM = 500) + build_path = /obj/item/borg/upgrade/advcutter + materials = list(MAT_METAL=8000, MAT_PLASMA=2000, MAT_GOLD= 2000) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + +/datum/design/borg_upgrade_premiumka + name = "Cyborg Upgrade (Premium Kinetic Accelerator)" + id = "borg_upgrade_premiumka" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/premiumka + materials = list(MAT_METAL=8000, MAT_GLASS=4000, MAT_TITANIUM=2000) construction_time = 120 category = list("Cyborg Upgrade Modules") diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index af4148d194..a44495fccb 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -365,7 +365,7 @@ display_name = "Advanced Robotics Research" description = "It can even do the dishes!" prereq_ids = list("robotics") - design_ids = list("borg_upgrade_diamonddrill", "borg_upgrade_advancedmop") + design_ids = list("borg_upgrade_diamonddrill", "borg_upgrade_advancedmop", "borg_upgrade_advcutter", "borg_upgrade_premiumka") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) export_price = 5000 @@ -391,7 +391,7 @@ display_name = "Cyborg Upgrades: Utility" description = "Utility upgrades for cyborgs." prereq_ids = list("engineering", "robotics") - design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair", "borg_upgrade_expand", "borg_upgrade_rped") + design_ids = list("borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair", "borg_upgrade_expand", "borg_upgrade_rped") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) export_price = 5000 diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 73eb12fd6a..4cb7e02e03 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/modular_citadel/icons/mob/widerobot.dmi b/modular_citadel/icons/mob/widerobot.dmi index 7e9da953c9..43a6863ece 100644 Binary files a/modular_citadel/icons/mob/widerobot.dmi and b/modular_citadel/icons/mob/widerobot.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 1a79c32dcb..0bad708dc4 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2031,6 +2031,7 @@ #include "code\modules\mining\mint.dm" #include "code\modules\mining\money_bag.dm" #include "code\modules\mining\ores_coins.dm" +#include "code\modules\mining\point_bank.dm" #include "code\modules\mining\satchel_ore_boxdm.dm" #include "code\modules\mining\shelters.dm" #include "code\modules\mining\equipment\explorer_gear.dm" diff --git a/tgui/src/interfaces/point_bank.ract b/tgui/src/interfaces/point_bank.ract new file mode 100644 index 0000000000..837a66427a --- /dev/null +++ b/tgui/src/interfaces/point_bank.ract @@ -0,0 +1,60 @@ + + + Current stored points: {{data.totalPoints}} +
+
+ + -All + +
+
+ + -1000 + +
+
+ + -100 + +
+
+ + -10 + +
+
+ + -1 + +
+
+ Transfer Points +
+
+ + +1 + +
+
+ + +10 + +
+
+ + +100 + +
+
+ + +1000 + +
+
+ + +All + +
+
+
+