diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index 896c4812b30..14f7ba9a08b 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -1,11 +1,21 @@
// channel numbers for power
-#define EQUIP 1
-#define LIGHT 2
-#define ENVIRON 3
-#define TOTAL 4 //for total power used only
-#define STATIC_EQUIP 5
-#define STATIC_LIGHT 6
-#define STATIC_ENVIRON 7
+// These are indexes in a list, and indexes for "dynamic" and static channels should be kept contiguous
+#define AREA_USAGE_EQUIP 1
+#define AREA_USAGE_LIGHT 2
+#define AREA_USAGE_ENVIRON 3
+#define AREA_USAGE_STATIC_EQUIP 4
+#define AREA_USAGE_STATIC_LIGHT 5
+#define AREA_USAGE_STATIC_ENVIRON 6
+#define AREA_USAGE_LEN AREA_USAGE_STATIC_ENVIRON // largest idx
+/// Index of the first dynamic usage channel
+#define AREA_USAGE_DYNAMIC_START AREA_USAGE_EQUIP
+/// Index of the last dynamic usage channel
+#define AREA_USAGE_DYNAMIC_END AREA_USAGE_ENVIRON
+/// Index of the first static usage channel
+#define AREA_USAGE_STATIC_START AREA_USAGE_STATIC_EQUIP
+/// Index of the last static usage channel
+#define AREA_USAGE_STATIC_END AREA_USAGE_STATIC_ENVIRON
+
//Power use
#define NO_POWER_USE 0
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 55dcfd04a25..ba41094aee6 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -43,12 +43,6 @@
var/power_equip = TRUE
var/power_light = TRUE
var/power_environ = TRUE
- var/used_equip = 0
- var/used_light = 0
- var/used_environ = 0
- var/static_equip
- var/static_light = 0
- var/static_environ
var/has_gravity = 0
///Are you forbidden from teleporting to the area? (centcom, mobs, wizard, hand teleporter)
@@ -76,6 +70,9 @@
/// typecache to limit the areas that atoms in this area can smooth with, used for shuttles IIRC
var/list/canSmoothWithAreas
+ var/list/power_usage
+
+
/**
* A list of teleport locations
*
@@ -118,6 +115,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
// rather than waiting for atoms to initialize.
if (unique)
GLOB.areas_by_type[type] = src
+ power_usage = new /list(AREA_USAGE_LEN) // Some atoms would like to use power in Initialize()
return ..()
/**
@@ -464,11 +462,11 @@ GLOBAL_LIST_EMPTY(teleportlocs)
if(always_unpowered)
return 0
switch(chan)
- if(EQUIP)
+ if(AREA_USAGE_EQUIP)
return power_equip
- if(LIGHT)
+ if(AREA_USAGE_LIGHT)
return power_light
- if(ENVIRON)
+ if(AREA_USAGE_ENVIRON)
return power_environ
return 0
@@ -489,44 +487,19 @@ GLOBAL_LIST_EMPTY(teleportlocs)
M.power_change() // reverify power status (to update icons etc.)
update_icon()
-/**
- * Return the usage of power per channel
- */
-/area/proc/usage(chan)
- var/used = 0
- switch(chan)
- if(LIGHT)
- used += used_light
- if(EQUIP)
- used += used_equip
- if(ENVIRON)
- used += used_environ
- if(TOTAL)
- used += used_light + used_equip + used_environ
- if(STATIC_EQUIP)
- used += static_equip
- if(STATIC_LIGHT)
- used += static_light
- if(STATIC_ENVIRON)
- used += static_environ
- return used
/**
* Add a static amount of power load to an area
*
* Possible channels
- * *STATIC_EQUIP
- * *STATIC_LIGHT
- * *STATIC_ENVIRON
+ * *AREA_USAGE_STATIC_EQUIP
+ * *AREA_USAGE_STATIC_LIGHT
+ * *AREA_USAGE_STATIC_ENVIRON
*/
/area/proc/addStaticPower(value, powerchannel)
switch(powerchannel)
- if(STATIC_EQUIP)
- static_equip += value
- if(STATIC_LIGHT)
- static_light += value
- if(STATIC_ENVIRON)
- static_environ += value
+ if(AREA_USAGE_STATIC_START to AREA_USAGE_STATIC_END)
+ power_usage[powerchannel] += value
/**
* Clear all power usage in area
@@ -534,22 +507,17 @@ GLOBAL_LIST_EMPTY(teleportlocs)
* Clears all power used for equipment, light and environment channels
*/
/area/proc/clear_usage()
- used_equip = 0
- used_light = 0
- used_environ = 0
+ for(var/i in AREA_USAGE_DYNAMIC_START to AREA_USAGE_DYNAMIC_END)
+ power_usage[i] = 0
/**
* Add a power value amount to the stored used_x variables
*/
/area/proc/use_power(amount, chan)
-
switch(chan)
- if(EQUIP)
- used_equip += amount
- if(LIGHT)
- used_light += amount
- if(ENVIRON)
- used_environ += amount
+ if(AREA_USAGE_DYNAMIC_START to AREA_USAGE_DYNAMIC_END)
+ power_usage[chan] += amount
+
/**
* Call back when an atom enters an area
diff --git a/code/game/area/areas/holodeck.dm b/code/game/area/areas/holodeck.dm
index e511afe361d..0f324d3edba 100644
--- a/code/game/area/areas/holodeck.dm
+++ b/code/game/area/areas/holodeck.dm
@@ -24,26 +24,19 @@
ASSERT(!istype(A, /area/holodeck))
return A.powered(chan)
-/area/holodeck/usage(var/chan)
- if(!linked)
- return 0
- var/area/A = get_area(linked)
- ASSERT(!istype(A, /area/holodeck))
- return A.usage(chan)
-
/area/holodeck/addStaticPower(value, powerchannel)
if(!linked)
return
var/area/A = get_area(linked)
ASSERT(!istype(A, /area/holodeck))
- return A.addStaticPower(value,powerchannel)
+ return ..()
/area/holodeck/use_power(amount, chan)
if(!linked)
return 0
var/area/A = get_area(linked)
ASSERT(!istype(A, /area/holodeck))
- return A.use_power(amount,chan)
+ return ..()
/*
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 00cf7d7899e..5cb3a397978 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -21,9 +21,9 @@ Class Variables:
power_channel (num)
What channel to draw from when drawing power for power mode
Possible Values:
- EQUIP:0 -- Equipment Channel
- LIGHT:2 -- Lighting Channel
- ENVIRON:3 -- Environment Channel
+ AREA_USAGE_EQUIP:0 -- Equipment Channel
+ AREA_USAGE_LIGHT:2 -- Lighting Channel
+ AREA_USAGE_ENVIRON:3 -- Environment Channel
component_parts (list)
A list of component parts of machine used by frame based machines.
@@ -53,11 +53,11 @@ Class Procs:
Default definition uses 'use_power', 'power_channel', 'active_power_usage',
'idle_power_usage', 'powered()', and 'use_power()' implement behavior.
- powered(chan = EQUIP) 'modules/power/power.dm'
+ powered(chan = -1) 'modules/power/power.dm'
Checks to see if area that contains the object has power available for power
- channel given in 'chan'.
+ channel given in 'chan'. -1 defaults to power_channel
- use_power(amount, chan=EQUIP) 'modules/power/power.dm'
+ use_power(amount, chan=-1) 'modules/power/power.dm'
Deducts 'amount' from the power channel 'chan' of the area that contains the object.
power_change() 'modules/power/power.dm'
@@ -105,8 +105,8 @@ Class Procs:
//2 = run auto, use active
var/idle_power_usage = 0
var/active_power_usage = 0
- var/power_channel = EQUIP
- //EQUIP,ENVIRON or LIGHT
+ var/power_channel = AREA_USAGE_EQUIP
+ //AREA_USAGE_EQUIP,AREA_USAGE_ENVIRON or AREA_USAGE_LIGHT
var/wire_compatible = FALSE
var/list/component_parts = null //list of all the parts used to build it, if made from certain kinds of frames.
@@ -416,7 +416,7 @@ Class Procs:
/obj/machinery/CanAllowThrough(atom/movable/mover, turf/target)
. = ..()
-
+
if(mover.pass_flags & PASSMACHINE)
return TRUE
diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm
index a213cb2a816..200488b9cbf 100644
--- a/code/game/machinery/airlock_control.dm
+++ b/code/game/machinery/airlock_control.dm
@@ -90,7 +90,7 @@
name = "airlock sensor"
resistance_flags = FIRE_PROOF
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
var/id_tag
var/master_tag
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index d99e70f754e..97a8e811293 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/stationobjs.dmi'
icon_state = "doorctrl"
var/skin = "doorctrl"
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
var/obj/item/assembly/device
var/obj/item/electronics/airlock/board
var/device_type = null
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index c847d71476f..2a4fd3452fd 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -6,7 +6,7 @@
use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 60
- power_channel = EQUIP
+ power_channel = AREA_USAGE_EQUIP
circuit = /obj/item/circuitboard/machine/cell_charger
pass_flags = PASSTABLE
var/obj/item/stock_parts/cell/charging = null
diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm
index e0d063a0e98..d0d65e3cb65 100644
--- a/code/game/machinery/defibrillator_mount.dm
+++ b/code/game/machinery/defibrillator_mount.dm
@@ -9,7 +9,7 @@
density = FALSE
use_power = IDLE_POWER_USE
idle_power_usage = 0
- power_channel = EQUIP
+ power_channel = AREA_USAGE_EQUIP
req_one_access = list(ACCESS_MEDICAL, ACCESS_HEADS, ACCESS_SECURITY) //used to control clamps
/// The mount's defib
var/obj/item/defibrillator/defib
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 5c26e92b20d..acb0ba691d5 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -7,7 +7,7 @@
density = TRUE
move_resist = MOVE_FORCE_VERY_STRONG
layer = OPEN_DOOR_LAYER
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
max_integrity = 350
armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 70)
CanAtmosPass = ATMOS_PASS_DENSITY
@@ -148,7 +148,7 @@
. = ..()
if(.)
return
-
+
if(istype(mover) && (mover.pass_flags & PASSGLASS))
return !opacity
diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm
index 08844f1adc6..50fc03a4432 100644
--- a/code/game/machinery/embedded_controller/access_controller.dm
+++ b/code/game/machinery/embedded_controller/access_controller.dm
@@ -5,7 +5,7 @@
#define CYCLE_INTERIOR 5
/obj/machinery/doorButtons
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 4
diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm
index 5afa98d3a5f..493929381b4 100644
--- a/code/game/machinery/embedded_controller/airlock_controller.dm
+++ b/code/game/machinery/embedded_controller/airlock_controller.dm
@@ -201,7 +201,7 @@
density = FALSE
frequency = FREQ_AIRLOCK_CONTROL
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
// Setup parameters only
var/id_tag
diff --git a/code/game/machinery/embedded_controller/simple_vent_controller.dm b/code/game/machinery/embedded_controller/simple_vent_controller.dm
index b08a4dab2dd..6de766090c2 100644
--- a/code/game/machinery/embedded_controller/simple_vent_controller.dm
+++ b/code/game/machinery/embedded_controller/simple_vent_controller.dm
@@ -39,7 +39,7 @@
density = FALSE
frequency = FREQ_ATMOS_CONTROL
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
// Setup parameters only
var/airpump_tag
diff --git a/code/game/machinery/fat_sucker.dm b/code/game/machinery/fat_sucker.dm
index 182223b968c..5e22ced2a64 100644
--- a/code/game/machinery/fat_sucker.dm
+++ b/code/game/machinery/fat_sucker.dm
@@ -118,12 +118,12 @@
else
. += "[icon_state]_door_off"
if(occupant)
- if(powered(EQUIP))
+ if(powered())
. += "[icon_state]_stack"
. += "[icon_state]_yellow"
else
. += "[icon_state]_red"
- else if(powered(EQUIP))
+ else if(powered())
. += "[icon_state]_red"
if(panel_open)
. += "[icon_state]_panel"
@@ -131,7 +131,7 @@
/obj/machinery/fat_sucker/process()
if(!processing)
return
- if(!powered(EQUIP) || !occupant || !iscarbon(occupant))
+ if(!powered() || !occupant || !iscarbon(occupant))
open_machine()
return
@@ -152,7 +152,7 @@
use_power(500)
/obj/machinery/fat_sucker/proc/start_extracting()
- if(state_open || !occupant || processing || !powered(EQUIP))
+ if(state_open || !occupant || processing || !powered())
return
if(iscarbon(occupant))
var/mob/living/carbon/C = occupant
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index f863d73710f..b8fd1110220 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -23,7 +23,7 @@
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 6
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
resistance_flags = FIRE_PROOF
light_power = 0
diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index 5b2543ff7ef..f236fcaee7a 100644
--- a/code/game/machinery/harvester.dm
+++ b/code/game/machinery/harvester.dm
@@ -58,7 +58,7 @@
start_harvest()
/obj/machinery/harvester/proc/can_harvest()
- if(!powered(EQUIP) || state_open || !occupant || !iscarbon(occupant))
+ if(!powered() || state_open || !occupant || !iscarbon(occupant))
return
var/mob/living/carbon/C = occupant
if(!allow_clothing)
@@ -95,7 +95,7 @@
/obj/machinery/harvester/proc/harvest()
warming_up = FALSE
update_icon()
- if(!harvesting || state_open || !powered(EQUIP) || !occupant || !iscarbon(occupant))
+ if(!harvesting || state_open || !powered() || !occupant || !iscarbon(occupant))
return
playsound(src, 'sound/machines/juicer.ogg', 20, TRUE)
var/mob/living/carbon/C = occupant
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index a2d565d5974..5841080ad23 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/power.dmi'
icon_state = "light1"
desc = "Make dark."
- power_channel = LIGHT
+ power_channel = AREA_USAGE_LIGHT
/// Set this to a string, path, or area instance to control that area
/// instead of the switch's location.
var/area/area = null
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index e75194742f5..c66f67abe1e 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -25,7 +25,7 @@
idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power
active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power
req_access = list(ACCESS_SEC_DOORS)
- power_channel = EQUIP //drains power from the EQUIPMENT channel
+ power_channel = AREA_USAGE_EQUIP //drains power from the EQUIPMENT channel
var/base_icon_state = "standard"
var/scan_range = 7
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index c6e97bc2b64..420014ea5e1 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -6,7 +6,7 @@
icon_state = "close"
use_power = ACTIVE_POWER_USE
active_power_usage = 60
- power_channel = EQUIP
+ power_channel = AREA_USAGE_EQUIP
density = TRUE
max_integrity = 250
ui_x = 400
diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm
index ab3b9e0442d..e979996cc31 100644
--- a/code/game/mecha/equipment/tools/other_tools.dm
+++ b/code/game/mecha/equipment/tools/other_tools.dm
@@ -280,7 +280,7 @@
energy_drain = 0
range = 0
var/coeff = 100
- var/list/use_channels = list(EQUIP,ENVIRON,LIGHT)
+ var/list/use_channels = list(AREA_USAGE_EQUIP,AREA_USAGE_ENVIRON,AREA_USAGE_LIGHT)
selectable = 0
/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Destroy()
@@ -343,7 +343,7 @@
var/area/A = get_area(chassis)
if(A)
var/pow_chan
- for(var/c in list(EQUIP,ENVIRON,LIGHT))
+ for(var/c in use_channels)
if(A.powered(c))
pow_chan = c
break
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index c59972e3c9d..c4c976a7491 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -106,7 +106,7 @@
if(!A || emped)
on = FALSE
else
- on = A.powered(EQUIP) // set "on" to the power status
+ on = A.powered(AREA_USAGE_EQUIP) // set "on" to the power status
if(!on)
icon_state = "intercom-p"
diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm
index 0c339b4904e..8004d5733fe 100644
--- a/code/game/objects/structures/electricchair.dm
+++ b/code/game/objects/structures/electricchair.dm
@@ -29,9 +29,9 @@
var/area/A = get_area(src)
if(!isarea(A))
return
- if(!A.powered(EQUIP))
+ if(!A.powered(AREA_USAGE_EQUIP))
return
- A.use_power(EQUIP, 5000)
+ A.use_power(AREA_USAGE_EQUIP, 5000)
flick("echair_shock", src)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 1a0765d85a1..496233178b2 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -65,7 +65,7 @@
use_power = IDLE_POWER_USE
idle_power_usage = 4
active_power_usage = 8
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
req_access = list(ACCESS_ATMOSPHERICS)
max_integrity = 250
integrity_failure = 0.33
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index 67cf6a4f11f..d775e10bfc4 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -15,7 +15,7 @@
move_resist = INFINITY //Moving a connected machine without actually doing the normal (dis)connection things will probably cause a LOT of issues.
idle_power_usage = 0
active_power_usage = 0
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
layer = GAS_PIPE_HIDDEN_LAYER //under wires
resistance_flags = FIRE_PROOF
max_integrity = 200
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
index 680dfd16a62..4ee869d4b24 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -295,7 +295,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/high_volume
name = "large air vent"
- power_channel = EQUIP
+ power_channel = AREA_USAGE_EQUIP
/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/New()
..()
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index 239258a4058..ad005278461 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/atmospherics/pipes/meter.dmi'
icon_state = "meterX"
layer = GAS_PUMP_LAYER
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 4
diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm
index f6d42cfb6b4..4b3343a84ff 100644
--- a/code/modules/holodeck/computer.dm
+++ b/code/modules/holodeck/computer.dm
@@ -67,6 +67,11 @@
return
else
linked.linked = src
+ var/area/my_area = get_area(src)
+ if(my_area)
+ linked.power_usage = my_area.power_usage
+ else
+ linked.power_usage = new /list(AREA_USAGE_LEN)
generate_program_list()
load_program(offline_program, FALSE, FALSE)
@@ -75,6 +80,7 @@
emergency_shutdown()
if(linked)
linked.linked = null
+ linked.power_usage = new /list(AREA_USAGE_LEN)
return ..()
/obj/machinery/computer/holodeck/power_change()
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index ac8ceb57ca8..6d681c3dc32 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -154,7 +154,7 @@
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 6
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
/obj/machinery/readybutton/attack_ai(mob/user as mob)
to_chat(user, "The station AI is not to interact with these devices!")
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index b3af8b1ef6f..7e12289d0aa 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -40,8 +40,8 @@
if(!lacks_power())
var/area/home = get_area(src)
- if(home.powered(EQUIP))
- home.use_power(1000, EQUIP)
+ if(home.powered(AREA_USAGE_EQUIP))
+ home.use_power(1000, AREA_USAGE_EQUIP)
if(aiRestorePowerRoutine >= POWER_RESTORATION_SEARCH_APC)
ai_restore_power()
diff --git a/code/modules/modular_computers/hardware/recharger.dm b/code/modules/modular_computers/hardware/recharger.dm
index 13ae6c1f39e..bc01c7a50e4 100644
--- a/code/modules/modular_computers/hardware/recharger.dm
+++ b/code/modules/modular_computers/hardware/recharger.dm
@@ -1,91 +1,91 @@
-/obj/item/computer_hardware/recharger
- critical = 1
- enabled = 1
- var/charge_rate = 100
- device_type = MC_CHARGE
-
-/obj/item/computer_hardware/recharger/proc/use_power(amount, charging=0)
- if(charging)
- return 1
- return 0
-
-/obj/item/computer_hardware/recharger/process()
- ..()
- var/obj/item/computer_hardware/battery/battery_module = holder.all_components[MC_CELL]
- if(!holder || !battery_module || !battery_module.battery)
- return
-
- var/obj/item/stock_parts/cell/cell = battery_module.battery
- if(cell.charge >= cell.maxcharge)
- return
-
- if(use_power(charge_rate, charging=1))
- holder.give_power(charge_rate * GLOB.CELLRATE)
-
-
-/obj/item/computer_hardware/recharger/APC
- name = "area power connector"
- desc = "A device that wirelessly recharges connected device from nearby APC."
- icon_state = "charger_APC"
- w_class = WEIGHT_CLASS_SMALL // Can't be installed into tablets/PDAs
-
-/obj/item/computer_hardware/recharger/APC/use_power(amount, charging=0)
- if(ismachinery(holder.physical))
- var/obj/machinery/M = holder.physical
- if(M.powered())
- M.use_power(amount)
- return 1
-
- else
- var/area/A = get_area(src)
- if(!istype(A))
- return 0
-
- if(A.powered(EQUIP))
- A.use_power(amount, EQUIP)
- return 1
- return 0
-
-/obj/item/computer_hardware/recharger/wired
- name = "wired power connector"
- desc = "A power connector that recharges connected device from nearby power wire. Incompatible with portable computers."
- icon_state = "charger_wire"
- w_class = WEIGHT_CLASS_NORMAL
-
-/obj/item/computer_hardware/recharger/wired/can_install(obj/item/modular_computer/M, mob/living/user = null)
- if(ismachinery(M.physical) && M.physical.anchored)
- return ..()
- to_chat(user, "\The [src] is incompatible with portable computers!")
- return 0
-
-/obj/item/computer_hardware/recharger/wired/use_power(amount, charging=0)
- if(ismachinery(holder.physical) && holder.physical.anchored)
- var/obj/machinery/M = holder.physical
- var/turf/T = M.loc
- if(!T || !istype(T))
- return 0
-
- var/obj/structure/cable/C = T.get_cable_node()
- if(!C || !C.powernet)
- return 0
-
- var/power_in_net = C.powernet.avail-C.powernet.load
-
- if(power_in_net && power_in_net > amount)
- C.powernet.load += amount
- return 1
-
- return 0
-
-
-
-// This is not intended to be obtainable in-game. Intended for adminbus and debugging purposes.
-/obj/item/computer_hardware/recharger/lambda
- name = "lambda coil"
- desc = "A very complex device that draws power from its own bluespace dimension."
- icon_state = "charger_lambda"
- w_class = WEIGHT_CLASS_TINY
- charge_rate = 100000
-
-/obj/item/computer_hardware/recharger/lambda/use_power(amount, charging=0)
- return 1
+/obj/item/computer_hardware/recharger
+ critical = 1
+ enabled = 1
+ var/charge_rate = 100
+ device_type = MC_CHARGE
+
+/obj/item/computer_hardware/recharger/proc/use_power(amount, charging=0)
+ if(charging)
+ return 1
+ return 0
+
+/obj/item/computer_hardware/recharger/process()
+ ..()
+ var/obj/item/computer_hardware/battery/battery_module = holder.all_components[MC_CELL]
+ if(!holder || !battery_module || !battery_module.battery)
+ return
+
+ var/obj/item/stock_parts/cell/cell = battery_module.battery
+ if(cell.charge >= cell.maxcharge)
+ return
+
+ if(use_power(charge_rate, charging=1))
+ holder.give_power(charge_rate * GLOB.CELLRATE)
+
+
+/obj/item/computer_hardware/recharger/APC
+ name = "area power connector"
+ desc = "A device that wirelessly recharges connected device from nearby APC."
+ icon_state = "charger_APC"
+ w_class = WEIGHT_CLASS_SMALL // Can't be installed into tablets/PDAs
+
+/obj/item/computer_hardware/recharger/APC/use_power(amount, charging=0)
+ if(ismachinery(holder.physical))
+ var/obj/machinery/M = holder.physical
+ if(M.powered())
+ M.use_power(amount)
+ return 1
+
+ else
+ var/area/A = get_area(src)
+ if(!istype(A))
+ return 0
+
+ if(A.powered(AREA_USAGE_EQUIP))
+ A.use_power(amount, AREA_USAGE_EQUIP)
+ return 1
+ return 0
+
+/obj/item/computer_hardware/recharger/wired
+ name = "wired power connector"
+ desc = "A power connector that recharges connected device from nearby power wire. Incompatible with portable computers."
+ icon_state = "charger_wire"
+ w_class = WEIGHT_CLASS_NORMAL
+
+/obj/item/computer_hardware/recharger/wired/can_install(obj/item/modular_computer/M, mob/living/user = null)
+ if(ismachinery(M.physical) && M.physical.anchored)
+ return ..()
+ to_chat(user, "\The [src] is incompatible with portable computers!")
+ return 0
+
+/obj/item/computer_hardware/recharger/wired/use_power(amount, charging=0)
+ if(ismachinery(holder.physical) && holder.physical.anchored)
+ var/obj/machinery/M = holder.physical
+ var/turf/T = M.loc
+ if(!T || !istype(T))
+ return 0
+
+ var/obj/structure/cable/C = T.get_cable_node()
+ if(!C || !C.powernet)
+ return 0
+
+ var/power_in_net = C.powernet.avail-C.powernet.load
+
+ if(power_in_net && power_in_net > amount)
+ C.powernet.load += amount
+ return 1
+
+ return 0
+
+
+
+// This is not intended to be obtainable in-game. Intended for adminbus and debugging purposes.
+/obj/item/computer_hardware/recharger/lambda
+ name = "lambda coil"
+ desc = "A very complex device that draws power from its own bluespace dimension."
+ icon_state = "charger_lambda"
+ w_class = WEIGHT_CLASS_TINY
+ charge_rate = 100000
+
+/obj/item/computer_hardware/recharger/lambda/use_power(amount, charging=0)
+ return 1
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index f5bd87893f8..41f3737522b 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -16,7 +16,7 @@
use_power = IDLE_POWER_USE
idle_power_usage = 30
active_power_usage = 200
- power_channel = EQUIP
+ power_channel = AREA_USAGE_EQUIP
max_integrity = 300
integrity_failure = 0.33
var/obj/item/paper/copy = null //what's in the copier!
@@ -31,7 +31,7 @@
/obj/machinery/photocopier/ui_interact(mob/user)
. = ..()
- var/dat = "Photocopier
"
+ var/list/dat = list("Photocopier
")
if(copy || photocopy || doccopy || (ass && (ass.loc == src.loc)))
dat += "Remove Paper
"
if(toner)
@@ -48,7 +48,7 @@
dat += "Current toner level: [toner]"
if(!toner)
dat +="
Please insert a new toner cartridge!"
- user << browse(dat, "window=copier")
+ user << browse(dat.Join(""), "window=copier")
onclose(user, "copier")
/obj/machinery/photocopier/Topic(href, href_list)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 9c1526758c4..a6be374426c 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1188,12 +1188,9 @@
force_update = 1
return
- lastused_light = area.usage(STATIC_LIGHT)
- lastused_light += area.usage(LIGHT)
- lastused_equip = area.usage(EQUIP)
- lastused_equip += area.usage(STATIC_EQUIP)
- lastused_environ = area.usage(ENVIRON)
- lastused_environ += area.usage(STATIC_ENVIRON)
+ lastused_light = area.power_usage[AREA_USAGE_LIGHT] + area.power_usage[AREA_USAGE_STATIC_LIGHT]
+ lastused_equip = area.power_usage[AREA_USAGE_EQUIP] + area.power_usage[AREA_USAGE_STATIC_EQUIP]
+ lastused_environ = area.power_usage[AREA_USAGE_ENVIRON] + area.power_usage[AREA_USAGE_STATIC_ENVIRON]
area.clear_usage()
lastused_total = lastused_light + lastused_equip + lastused_environ
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 91f3c440c16..ad66649894c 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -112,7 +112,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
icon_state = "on_8"
idle_power_usage = 0
active_power_usage = 3000
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
sprite_number = 8
use_power = IDLE_POWER_USE
interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 74419e03a75..00610ada3d7 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -207,7 +207,7 @@
use_power = ACTIVE_POWER_USE
idle_power_usage = 2
active_power_usage = 20
- power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list
+ power_channel = AREA_USAGE_LIGHT //Lights are calc'd via area so they dont need to be in the machine list
var/on = FALSE // 1 if on, 0 if off
var/on_gs = FALSE
var/static_power_used = 0
@@ -390,9 +390,9 @@
on_gs = on
if(on)
static_power_used = brightness * 20 //20W per unit luminosity
- addStaticPower(static_power_used, STATIC_LIGHT)
+ addStaticPower(static_power_used, AREA_USAGE_STATIC_LIGHT)
else
- removeStaticPower(static_power_used, STATIC_LIGHT)
+ removeStaticPower(static_power_used, AREA_USAGE_STATIC_LIGHT)
broken_sparks(start_only=TRUE)
diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm
index e52416131c1..708a47141ac 100644
--- a/code/modules/security_levels/keycard_authentication.dm
+++ b/code/modules/security_levels/keycard_authentication.dm
@@ -12,7 +12,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new)
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 6
- power_channel = ENVIRON
+ power_channel = AREA_USAGE_ENVIRON
req_access = list(ACCESS_KEYCARD_AUTH)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
ui_x = 375