diff --git a/aurorastation.dme b/aurorastation.dme index 342d9ece4ee..1142acaf889 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -3150,6 +3150,7 @@ #include "code\modules\power\fractal_reactor.dm" #include "code\modules\power\generator.dm" #include "code\modules\power\gravitygenerator.dm" +#include "code\modules\power\outlet.dm" #include "code\modules\power\portgen.dm" #include "code\modules\power\power.dm" #include "code\modules\power\power_usage.dm" diff --git a/code/modules/modular_computers/computers/modular_computer/power.dm b/code/modules/modular_computers/computers/modular_computer/power.dm index 74f7542d5cc..fb25e226004 100644 --- a/code/modules/modular_computers/computers/modular_computer/power.dm +++ b/code/modules/modular_computers/computers/modular_computer/power.dm @@ -37,8 +37,12 @@ // At this point, we know that APC can power us for this tick. Check if we also need to charge our battery, and then actually use the power. if(battery_module && (battery_module.battery.charge < battery_module.battery.maxcharge)) - power_usage += tesla_link.passive_charging_rate - battery_module.battery.give(tesla_link.passive_charging_rate * CELLRATE) + var/power_to_get = tesla_link.passive_charging_rate + if(istype(tesla_link, /obj/item/computer_hardware/tesla_link/charging_cable)) + var/obj/item/computer_hardware/tesla_link/charging_cable/cable = tesla_link + power_to_get += cable.source.active_power_usage + power_usage += power_to_get + battery_module.battery.give(power_to_get * CELLRATE) A.use_power_oneoff(power_usage, EQUIP) return TRUE diff --git a/code/modules/power/outlet.dm b/code/modules/power/outlet.dm new file mode 100644 index 00000000000..a201780ba57 --- /dev/null +++ b/code/modules/power/outlet.dm @@ -0,0 +1,65 @@ +// A simple power outlet that lets people charge modular computers + +/obj/machinery/power/outlet + name = "power outlet" + desc = "A simple power outlet. You can charge your PDA or other modular computer device here." + icon = 'icons/obj/power.dmi' + icon_state = "outlet" + density = TRUE + anchored = TRUE + use_power = POWER_USE_OFF // doesn't use power by default, only when drawing power + + active_power_usage = 200 // this variable serves to indicate the extra amount of juice this outlet will provide the tesla charger, since it's a dedicated machine + + component_types = list( + /obj/item/stack/cable_coil{amount = 5}, + /obj/item/stock_parts/capacitor, + /obj/item/circuitboard/outlet + ) + +/obj/machinery/power/outlet/Initialize() + . = ..() + connect_to_network() + +/obj/machinery/power/outlet/update_icon() + icon_state = panel_open ? "[initial(icon_state)]-open" : initial(icon_state) + +/obj/machinery/power/outlet/RefreshParts() + var/part_level = 0 + for(var/obj/item/stock_parts/SP in component_parts) + part_level += SP.rating + active_power_usage = initial(active_power_usage) * part_level + +/obj/machinery/power/outlet/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/modular_computer)) + var/obj/item/modular_computer/C = attacking_item + if(istype(C.tesla_link, /obj/item/computer_hardware/tesla_link/charging_cable)) + var/obj/item/computer_hardware/tesla_link/charging_cable/CC = C.tesla_link + CC.toggle(src, user) + return + else if(default_part_replacement(user, attacking_item)) + return + else if(default_deconstruction_screwdriver(user, attacking_item)) + return + else if(default_deconstruction_crowbar(user, attacking_item)) + return + + // since we'll mostly be on tables, don't block putting things on them if it's not a computer + var/obj/structure/table/table_underneath = locate() in loc + if(table_underneath) + return table_underneath.attackby(attacking_item, user, params) + + return ..() + +/obj/item/circuitboard/outlet + name = T_BOARD("power outlet") + build_path = /obj/machinery/power/outlet + board_type = BOARD_MACHINE + origin_tech = list( + TECH_ENGINEERING = 1, + TECH_POWER = 1 + ) + req_components = list( + "/obj/item/stack/cable_coil" = 5, + "/obj/item/stock_parts/capacitor" = 1 + ) diff --git a/code/modules/research/designs/circuit/machine_circuits.dm b/code/modules/research/designs/circuit/machine_circuits.dm index 90976f4f112..20ba0aead96 100644 --- a/code/modules/research/designs/circuit/machine_circuits.dm +++ b/code/modules/research/designs/circuit/machine_circuits.dm @@ -241,3 +241,8 @@ name = "oxygen regenerator" req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) build_path = /obj/item/circuitboard/oxyregenerator + +/datum/design/circuit/power_outlet + name = "Power Outlet" + req_tech = list(TECH_ENGINEERING = 1, TECH_POWER = 1) + build_path = /obj/item/circuitboard/outlet diff --git a/html/changelogs/geeves-finally_usb_c.yml b/html/changelogs/geeves-finally_usb_c.yml new file mode 100644 index 00000000000..00c4e0cbd0c --- /dev/null +++ b/html/changelogs/geeves-finally_usb_c.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Added power outlets to the service area. More can be printed at RnD. The capacitor can be upgraded to improve charging speed for connected devices." diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index db06702b0eb..6f1b6910412 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ diff --git a/maps/sccv_horizon/sccv_horizon.dmm b/maps/sccv_horizon/sccv_horizon.dmm index f57c1029295..48dabc4993c 100644 --- a/maps/sccv_horizon/sccv_horizon.dmm +++ b/maps/sccv_horizon/sccv_horizon.dmm @@ -26451,6 +26451,7 @@ pixel_x = -6; pixel_y = 16 }, +/obj/machinery/power/outlet, /turf/simulated/floor/wood/mahogany, /area/horizon/crew_quarters/lounge/bar) "dRu" = ( @@ -33375,6 +33376,16 @@ /obj/machinery/atmospherics/portables_connector, /turf/simulated/floor/tiled/dark, /area/rnd/xenobiology/xenoflora) +"eTZ" = ( +/obj/structure/table/stone/marble, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + id = "shutters_deck2_kitchendesk"; + name = "Kitchen Desk Shutter" + }, +/obj/machinery/power/outlet, +/turf/simulated/floor/tiled/dark, +/area/horizon/kitchen) "eUe" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/manifold/visible/red, @@ -36655,6 +36666,17 @@ /obj/structure/table/stone/marble, /turf/simulated/floor/tiled/dark/full, /area/horizon/kitchen) +"fsr" = ( +/obj/structure/table/stone/marble, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "shutters_deck2_kitchendesk"; + name = "Kitchen Desk Shutter" + }, +/obj/machinery/power/outlet, +/turf/simulated/floor/tiled/dark, +/area/horizon/kitchen) "fst" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -38826,6 +38848,7 @@ /obj/item/flame/candle{ pixel_y = 16 }, +/obj/machinery/power/outlet, /turf/simulated/floor/wood, /area/horizon/crew_quarters/lounge/bar) "fKB" = ( @@ -93581,6 +93604,7 @@ id = "bar_shutter"; name = "Bar Shutter" }, +/obj/machinery/power/outlet, /turf/simulated/floor/tiled/dark, /area/horizon/bar) "nRQ" = ( @@ -108036,6 +108060,7 @@ pixel_x = 7; pixel_y = 9 }, +/obj/machinery/power/outlet, /turf/simulated/floor/carpet/red, /area/horizon/library) "pZC" = ( @@ -121860,6 +121885,7 @@ /obj/random/pottedplant_small{ pixel_x = 6 }, +/obj/machinery/power/outlet, /turf/simulated/floor/carpet/red, /area/horizon/library) "sdV" = ( @@ -122338,6 +122364,7 @@ id = "bar_shutter"; name = "Bar Shutter" }, +/obj/machinery/power/outlet, /turf/simulated/floor/tiled/dark, /area/horizon/bar) "shJ" = ( @@ -125293,6 +125320,7 @@ "sEW" = ( /obj/structure/table/wood, /obj/item/toy/desk/newtoncradle, +/obj/machinery/power/outlet, /turf/simulated/floor/carpet/red, /area/horizon/library) "sFd" = ( @@ -128158,6 +128186,7 @@ id = "bar_shutter"; name = "Bar Shutter" }, +/obj/machinery/power/outlet, /turf/simulated/floor/tiled/dark, /area/horizon/bar) "taS" = ( @@ -138860,6 +138889,7 @@ name = "random potted plant, small (25% nothing)"; pixel_y = -2 }, +/obj/machinery/power/outlet, /turf/simulated/floor/carpet/red, /area/horizon/crew_quarters/lounge/bar) "uDs" = ( @@ -139019,6 +139049,7 @@ id = "bar_shutter"; name = "Bar Shutter" }, +/obj/machinery/power/outlet, /turf/simulated/floor/tiled/dark, /area/horizon/bar) "uEF" = ( @@ -144161,6 +144192,7 @@ pixel_x = -7; pixel_y = 3 }, +/obj/machinery/power/outlet, /turf/simulated/floor/carpet/red, /area/horizon/bar) "vsi" = ( @@ -148448,6 +148480,7 @@ id = "bar_shutter"; name = "Bar Shutter" }, +/obj/machinery/power/outlet, /turf/simulated/floor/tiled/dark, /area/horizon/bar) "wan" = ( @@ -157772,6 +157805,7 @@ id = "bar_shutter"; name = "Bar Shutter" }, +/obj/machinery/power/outlet, /turf/simulated/floor/tiled/dark, /area/horizon/bar) "xpP" = ( @@ -159480,6 +159514,7 @@ pixel_x = -4; pixel_y = -2 }, +/obj/machinery/power/outlet, /turf/simulated/floor/wood, /area/horizon/crew_quarters/lounge/bar) "xBf" = ( @@ -164387,6 +164422,7 @@ pixel_x = -9; pixel_y = 8 }, +/obj/machinery/power/outlet, /turf/simulated/floor/wood, /area/horizon/crew_quarters/lounge/bar) "ykQ" = ( @@ -263986,7 +264022,7 @@ ooh hEG txd cJn -nsT +fsr nsT wav wav @@ -264242,7 +264278,7 @@ wZO cpI eeA jBV -woe +eTZ vAQ wpe acK