diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index d85a89606ea..0d4455399b0 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -8,6 +8,7 @@
idle_power_usage = 5
active_power_usage = 60
power_channel = EQUIP
+ pass_flags = PASSTABLE
var/obj/item/stock_parts/cell/charging = null
var/chargelevel = -1
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 9e91e254950..c82257bddc5 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -330,6 +330,14 @@ to destroy them and players will be able to make replacements.
name = "circuit board (Freezer)"
to_chat(user, "You set the board to cooling.")
+/obj/item/circuitboard/recharger
+ name = "circuit board (Recharger)"
+ build_path = /obj/machinery/recharger
+ board_type = "machine"
+ origin_tech = "powerstorage=3;materials=2"
+ frame_desc = "Requires 1 Capacitor"
+ req_components = list(/obj/item/stock_parts/capacitor = 1)
+
/obj/item/circuitboard/snow_machine
name = "circuit board (snow machine)"
build_path = /obj/machinery/snow_machine
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 81006be3fdd..e98fb9968fc 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -6,13 +6,26 @@
anchored = 1
use_power = IDLE_POWER_USE
idle_power_usage = 4
- active_power_usage = 250
+ active_power_usage = 200
+ pass_flags = PASSTABLE
var/obj/item/charging = null
var/list/allowed_devices = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/modular_computer, /obj/item/rcs, /obj/item/bodyanalyzer)
var/icon_state_off = "rechargeroff"
var/icon_state_charged = "recharger2"
var/icon_state_charging = "recharger1"
var/icon_state_idle = "recharger0"
+ var/recharge_coeff = 1
+
+/obj/machinery/recharger/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/circuitboard/recharger(null)
+ component_parts += new /obj/item/stock_parts/capacitor(null)
+ RefreshParts()
+
+/obj/machinery/recharger/RefreshParts()
+ for(var/obj/item/stock_parts/capacitor/C in component_parts)
+ recharge_coeff = C.rating
/obj/machinery/recharger/attackby(obj/item/G, mob/user, params)
if(iswrench(G))
@@ -53,8 +66,16 @@
else
to_chat(user, "[src] isn't connected to anything!")
return 1
- else
- return ..()
+
+ if(anchored && !charging)
+ if(default_deconstruction_screwdriver(user, "rechargeropen", "recharger0", G))
+ return
+
+ if(panel_open && istype(G, /obj/item/crowbar))
+ default_deconstruction_crowbar(G)
+ return
+
+ return ..()
/obj/machinery/recharger/attack_hand(mob/user)
if(issilicon(user))
@@ -87,7 +108,7 @@
var/obj/item/gun/energy/E = charging
if(E.power_supply.charge < E.power_supply.maxcharge)
E.power_supply.give(E.power_supply.chargerate)
- use_power(250)
+ use_power(200 * recharge_coeff)
using_power = 1
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 999e90cd89f..fa011fe2eda 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -91,6 +91,12 @@
if(climber)
climber.Weaken(2)
climber.visible_message("[climber.name] has been knocked off the table", "You've been knocked off the table", "You see [climber.name] get knocked off the table")
+ else if(user.pulling.pass_flags & PASSTABLE)
+ user.Move_Pulled(src)
+ if (user.pulling.loc == loc)
+ user.visible_message("[user] places [user.pulling] onto [src].",
+ "You place [user.pulling] onto [src].")
+ user.stop_pulling()
/obj/structure/table/attack_tk() // no telehulk sorry
return
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index 446e919a4a4..c5cf20ce10f 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -11,6 +11,7 @@
broken_icon = "mwb"
dirty_icon = "mwbloody"
open_icon = "mw-o"
+ pass_flags = PASSTABLE
// see code/modules/food/recipes_microwave.dm for recipes
diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index a9511b00fcd..10e135f5fe6 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -2,6 +2,7 @@
name = "plant DNA manipulator"
desc = "An advanced device designed to manipulate plant genetic makeup."
icon = 'icons/obj/hydroponics/equipment.dmi'
+ pass_flags = PASSTABLE
icon_state = "dnamod"
density = 1
anchored = 1
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index 13d85941a79..ac5b18e23c7 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -9,6 +9,7 @@ var/global/list/fax_blacklist = list()
icon = 'icons/obj/library.dmi'
icon_state = "fax"
insert_anim = "faxsend"
+ pass_flags = PASSTABLE
var/fax_network = "Local Fax Network"
var/long_range_enabled = 0 // Can we send messages off the station?
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index a23378f5513..15aacf06581 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -12,6 +12,16 @@
build_path = /obj/item/circuitboard/thermomachine
category = list ("Engineering Machinery")
+/datum/design/recharger
+ name = "Machine Board(Weapon Recharger)"
+ desc = "The circuit board for a weapon recharger"
+ id = "recharger"
+ build_path = /obj/item/circuitboard/recharger
+ materials = list(MAT_GLASS = 1000)
+ build_type = IMPRINTER
+ req_tech = list("powerstorage" = 3, "materials" = 3)
+ category = list("Misc. Machinery")
+
/datum/design/smes
name = "Machine Board (SMES)"
desc = "The circuit board for a SMES."
diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi
index c8a9abd40f3..c33efec0f5f 100755
Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ