From 18313328a1748bbfb52545affeb922d7fbf3b95a Mon Sep 17 00:00:00 2001
From: HelmCrab <90987989+Thera-Pissed@users.noreply.github.com>
Date: Sun, 26 May 2024 23:15:54 -0500
Subject: [PATCH] Idle & Active power rework and defines (#2632)
## About The Pull Request
Implements new defines set in power.dm for nearly all machines using
idle/active_power_usage
Kills auto_use_power() in favor of useStaticPower() procs
Standardizes power draws for most things using said defines
Decreases power used for lighting by half
Generally increases power used by machinery, especially those that are
only active for short periods.
SSUs now consume power when decontaminating, ORMs and vending machines
now take idle power.
![image](https://github.com/shiptest-ss13/Shiptest/assets/90987989/071f8fa8-0639-4fb5-9c3c-5b4b4ad254e4)
If you have any feedback, feel free to share it! Most of these numbers
are based on their original values, so definitely could be changed.
## Why It's Good For The Game
This PR standardizes the draw of most machinery, while making it easier
to change power use across the board.
Additionally, lighting takes less power, while actual machines have been
tweaked to fill this gap.
## Changelog
:cl:
tweak: SSUs draw power to decontaminate
balance: lights no longer take 60% of a ships power, machines use more
to account for this.
code: added standardized defines for power usage
/:cl:
---------
Signed-off-by: HelmCrab <90987989+Thera-Pissed@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
---
code/__DEFINES/power.dm | 13 +++++
code/controllers/subsystem/machines.dm | 5 +-
code/game/machinery/PDApainter.dm | 2 +
code/game/machinery/Sleeper.dm | 7 ++-
code/game/machinery/_machinery.dm | 30 +++++++++---
code/game/machinery/airlock_cycle_control.dm | 4 +-
code/game/machinery/announcement_system.dm | 4 +-
code/game/machinery/autolathe.dm | 11 +++--
code/game/machinery/bank_machine.dm | 2 +-
code/game/machinery/buttons.dm | 2 +-
code/game/machinery/camera/camera.dm | 4 +-
code/game/machinery/cell_charger.dm | 4 +-
code/game/machinery/cloning.dm | 2 +
code/game/machinery/computer/_computer.dm | 4 +-
code/game/machinery/computer/crew.dm | 4 +-
code/game/machinery/computer/dna_console.dm | 4 +-
code/game/machinery/dance_machine.dm | 2 +
code/game/machinery/defibrillator_mount.dm | 2 +-
code/game/machinery/dish_drive.dm | 4 +-
code/game/machinery/dna_scanner.dm | 4 +-
code/game/machinery/doppler_array.dm | 2 +
code/game/machinery/droneDispenser.dm | 2 +
.../embedded_controller/access_controller.dm | 4 +-
code/game/machinery/firealarm.dm | 4 +-
code/game/machinery/gulag_item_reclaimer.dm | 4 +-
code/game/machinery/gulag_teleporter.dm | 4 +-
code/game/machinery/harvester.dm | 4 +-
code/game/machinery/hologram.dm | 11 +++--
code/game/machinery/hypnochair.dm | 2 +
code/game/machinery/igniter.dm | 4 +-
code/game/machinery/launch_pad.dm | 8 ++--
code/game/machinery/limbgrower.dm | 4 +-
code/game/machinery/mass_driver.dm | 4 +-
code/game/machinery/medical_kiosk.dm | 2 +
code/game/machinery/medipen_refiller.dm | 2 +-
.../machinery/porta_turret/portable_turret.dm | 6 +--
code/game/machinery/prisonlabor.dm | 4 +-
code/game/machinery/quantum_pad.dm | 4 +-
code/game/machinery/recharger.dm | 8 ++--
code/game/machinery/rechargestation.dm | 8 ++--
code/game/machinery/recycler.dm | 2 +
code/game/machinery/roulette_machine.dm | 4 +-
code/game/machinery/scan_gate.dm | 2 +-
code/game/machinery/sheetifier.dm | 4 +-
code/game/machinery/shieldgen.dm | 4 +-
code/game/machinery/shuttle/ship_gravity.dm | 4 +-
code/game/machinery/shuttle/shuttle_heater.dm | 2 +-
code/game/machinery/slotmachine.dm | 2 +-
code/game/machinery/stasis.dm | 8 ++--
code/game/machinery/status_display.dm | 2 +-
code/game/machinery/suit_storage_unit.dm | 3 ++
.../telecomms/machines/broadcaster.dm | 2 +-
code/game/machinery/telecomms/machines/bus.dm | 2 +-
code/game/machinery/telecomms/machines/hub.dm | 2 +-
.../telecomms/machines/message_server.dm | 8 ++--
.../machinery/telecomms/machines/processor.dm | 2 +-
.../machinery/telecomms/machines/receiver.dm | 2 +-
.../machinery/telecomms/machines/relay.dm | 2 +-
.../machinery/telecomms/machines/server.dm | 2 +-
code/game/machinery/teleporter.dm | 8 ++--
code/game/mecha/mech_fabricator.dm | 8 ++--
code/modules/NTNet/relays.dm | 8 ++--
.../atmospherics/machinery/airalarm.dm | 8 ++--
.../components/binary_devices/pump.dm | 12 +++++
.../components/binary_devices/valve.dm | 3 ++
.../components/binary_devices/volume_pump.dm | 12 +++++
.../components/trinary_devices/filter.dm | 12 +++++
.../components/trinary_devices/mixer.dm | 12 +++++
.../components/unary_devices/thermomachine.dm | 12 ++++-
.../components/unary_devices/vent_scrubber.dm | 13 +++--
.../atmospherics/machinery/other/meter.dm | 4 +-
.../atmospherics/machinery/other/miner.dm | 4 +-
.../machinery/portable/scrubber.dm | 10 ++--
code/modules/awaymissions/gateway.dm | 8 ++--
.../cargo/blackmarket/blackmarket_telepad.dm | 2 +-
.../modules/fishing/fishing_portal_machine.dm | 6 +--
.../kitchen_machinery/coffeemaker.dm | 5 +-
.../kitchen_machinery/deep_fryer.dm | 2 +-
.../kitchen_machinery/gibber.dm | 4 +-
.../kitchen_machinery/microwave.dm | 9 ++--
.../kitchen_machinery/monkeyrecycler.dm | 4 +-
.../kitchen_machinery/processor.dm | 4 +-
.../kitchen_machinery/smartfridge.dm | 12 ++---
code/modules/holodeck/items.dm | 4 +-
code/modules/hydroponics/biogenerator.dm | 2 +-
code/modules/hydroponics/hydroponics.dm | 13 +++--
code/modules/mining/machine_bluespaceminer.dm | 2 +-
code/modules/mining/machine_processing.dm | 1 +
.../computers/machinery/modular_console.dm | 4 +-
.../overmap/missions/research_mission.dm | 4 +-
code/modules/paperwork/photocopier.dm | 4 +-
.../plumbing/plumbers/_plumb_machinery.dm | 2 +-
code/modules/plumbing/plumbers/pumps.dm | 4 +-
code/modules/power/floodlight.dm | 4 +-
code/modules/power/gravitygenerator.dm | 7 ++-
code/modules/power/lighting.dm | 14 +++---
code/modules/power/monitor.dm | 10 ++--
code/modules/power/power.dm | 48 ++++++++++++++++---
code/modules/power/singularity/emitter.dm | 6 +--
.../particle_accelerator/particle_control.dm | 12 ++---
code/modules/power/solar.dm | 2 +-
.../chemistry/machinery/chem_dispenser.dm | 2 +-
.../chemistry/machinery/chem_heater.dm | 2 +-
.../chemistry/machinery/chem_master.dm | 2 +-
.../reagents/chemistry/machinery/pandemic.dm | 4 +-
.../chemistry/machinery/reagentgrinder.dm | 13 +++--
code/modules/research/bepis.dm | 8 ++--
.../modules/research/machinery/_production.dm | 10 +++-
.../research/nanites/nanite_chamber.dm | 4 +-
.../research/nanites/public_chamber.dm | 4 +-
.../security_levels/keycard_authentication.dm | 4 +-
code/modules/station_goals/dna_vault.dm | 2 +-
code/modules/vending/_vending.dm | 2 +
113 files changed, 416 insertions(+), 230 deletions(-)
diff --git a/code/__DEFINES/power.dm b/code/__DEFINES/power.dm
index a95fec219552..29d6e72dffa5 100644
--- a/code/__DEFINES/power.dm
+++ b/code/__DEFINES/power.dm
@@ -12,3 +12,16 @@
#define TESLA_DEFAULT_POWER 1738260
#define TESLA_MINI_POWER 869130
+
+#define LIGHT_DRAW 10 // mulitplied by brightness, typically 4-8
+
+#define IDLE_DRAW_MINIMAL 50 // 20x = 1kw, used for small things and computers on stand-by
+#define IDLE_DRAW_LOW 200 //5x = 1kw, used for always-active computers
+#define IDLE_DRAW_MEDIUM 500 //2x = 1kw
+#define IDLE_DRAW_HIGH 1000 //1kw
+
+#define ACTIVE_DRAW_MINIMAL 200 //5x = 1kw
+#define ACTIVE_DRAW_LOW 500 //2x = 1kw
+#define ACTIVE_DRAW_MEDIUM 1000 //microwaves use this
+#define ACTIVE_DRAW_HIGH 2000
+#define ACTIVE_DRAW_EXTREME 5000 //highest this value should be in most cases
diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm
index 4440d1c17b33..e8285abafde1 100644
--- a/code/controllers/subsystem/machines.dm
+++ b/code/controllers/subsystem/machines.dm
@@ -47,10 +47,7 @@ SUBSYSTEM_DEF(machines)
while(currentrun.len)
var/obj/machinery/thing = currentrun[currentrun.len]
currentrun.len--
- if(!QDELETED(thing) && thing.process(seconds) != PROCESS_KILL)
- if(thing.use_power)
- thing.auto_use_power() //add back the power state
- else
+ if(QDELETED(thing) || thing.process(seconds) == PROCESS_KILL)
processing -= thing
if (!QDELETED(thing))
thing.datum_flags &= ~DF_ISPROCESSING
diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm
index e9906a6a0089..b423b28ce4d2 100644
--- a/code/game/machinery/PDApainter.dm
+++ b/code/game/machinery/PDApainter.dm
@@ -5,6 +5,8 @@
icon_state = "pdapainter"
base_icon_state = "pdapainter"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
max_integrity = 200
var/obj/item/pda/storedpda = null
var/list/colorlist = list()
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index f0a1c403cfa4..3d4d05336c3c 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -11,6 +11,8 @@
icon_state = "sleeper"
base_icon_state = "sleeper"
density = FALSE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
state_open = TRUE
circuit = /obj/item/circuitboard/machine/sleeper
clicksound = 'sound/machines/pda_button1.ogg'
@@ -100,7 +102,7 @@
playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = rand(5120, 8800))
target.apply_status_effect(STATUS_EFFECT_STASIS, STASIS_MACHINE_EFFECT)
target.ExtinguishMob()
- use_power = ACTIVE_POWER_USE
+ set_active_power()
/obj/machinery/sleeper/proc/thaw_them(mob/living/target)
if(IS_IN_STASIS(target))
@@ -109,7 +111,8 @@
/obj/machinery/sleeper/process()
if(!occupant || !isliving(occupant))
- use_power = IDLE_POWER_USE
+ if(use_static_power != IDLE_POWER_USE)
+ set_idle_power()
return
var/mob/living/L_occupant = occupant
if(stasis_running())
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index a17b9c705dc1..4cddf93b2478 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -21,7 +21,7 @@ Class Variables:
power_channel (num)
What channel to draw from when drawing power for power mode
Possible Values:
- AREA_USAGE_EQUIP:0 -- Equipment Channel
+ AREA_USAGE_EQUIP:1 -- Equipment Channel
AREA_USAGE_LIGHT:2 -- Lighting Channel
AREA_USAGE_ENVIRON:3 -- Environment Channel
@@ -44,7 +44,7 @@ Class Procs:
auto_use_power() 'game/machinery/machine.dm'
This proc determines how power mode power is deducted by the machine.
'auto_use_power()' is called by the 'master_controller' game_controller every
- tick.
+ tick. (not anymore)
Return Value:
return:1 -- if object is powered
@@ -102,6 +102,7 @@ Class Procs:
//0 = dont run the auto
//1 = run auto, use idle
//2 = run auto, use active
+ var/use_static_power = NO_POWER_USE
var/idle_power_usage = 0
var/active_power_usage = 0
var/power_channel = AREA_USAGE_EQUIP
@@ -151,7 +152,11 @@ Class Procs:
if(occupant_typecache)
occupant_typecache = typecacheof(occupant_typecache)
-
+ switch(use_power)
+ if(IDLE_POWER_USE)
+ set_idle_power()
+ if(ACTIVE_POWER_USE)
+ set_active_power()
return INITIALIZE_HINT_LATELOAD
/// Helper proc for telling a machine to start processing with the subsystem type that is located in its `subsystem_type` var.
@@ -168,7 +173,16 @@ Class Procs:
. = ..()
power_change()
become_area_sensitive(ROUNDSTART_TRAIT)
- RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(power_change))
+ RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(enter_area))
+ RegisterSignal(src, COMSIG_EXIT_AREA, PROC_REF(exit_area))
+
+/obj/machinery/proc/enter_area(datum/source, area/A)
+ SIGNAL_HANDLER
+ power_change(A)
+
+/obj/machinery/proc/exit_area(datum/source, area/A)
+ SIGNAL_HANDLER
+ set_no_power(A)
/obj/machinery/Destroy()
GLOB.machines.Remove(src)
@@ -177,6 +191,7 @@ Class Procs:
lose_area_sensitivity(ROUNDSTART_TRAIT)
QDEL_NULL(circuit)
QDEL_LIST(component_parts)
+ set_no_power()
return ..()
/obj/machinery/proc/locate_machinery()
@@ -273,8 +288,8 @@ Class Procs:
target.forceMove(src)
updateUsrDialog()
update_appearance()
-
-/obj/machinery/proc/auto_use_power()
+/*
+/obj/machinery/proc/auto_use_power() //obsolete, tick controller doesn't call this anymore because machines use addStaticPower now.
if(!powered(power_channel))
return 0
if(use_power == 1)
@@ -282,7 +297,7 @@ Class Procs:
else if(use_power >= 2)
use_power(active_power_usage,power_channel)
return 1
-
+*/
///Called when we want to change the value of the `is_operational` variable. Boolean.
/obj/machinery/proc/set_is_operational(new_value)
@@ -618,6 +633,7 @@ Class Procs:
//called on deconstruction before the final deletion
/obj/machinery/proc/on_deconstruction()
+ set_no_power()
return
/obj/machinery/proc/can_be_overridden()
diff --git a/code/game/machinery/airlock_cycle_control.dm b/code/game/machinery/airlock_cycle_control.dm
index 76094e803cd3..7ba391fae782 100644
--- a/code/game/machinery/airlock_cycle_control.dm
+++ b/code/game/machinery/airlock_cycle_control.dm
@@ -67,8 +67,8 @@
icon = 'icons/obj/monitors.dmi'
icon_state = "aac"
use_power = IDLE_POWER_USE
- idle_power_usage = 4
- active_power_usage = 8
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
power_channel = AREA_USAGE_ENVIRON
req_access = list(ACCESS_ATMOSPHERICS)
max_integrity = 250
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index f275d234fca7..d4057603957d 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -12,8 +12,8 @@ GLOBAL_LIST_EMPTY(announcement_systems)
verb_ask = "queries"
verb_exclaim = "alarms"
- idle_power_usage = 20
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/announcement_system
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index d83831f2c634..5e61d276b226 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -9,8 +9,9 @@
icon_state = "autolathe"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_HIGH
+ power_channel = AREA_USAGE_EQUIP
circuit = /obj/item/circuitboard/machine/autolathe
layer = BELOW_OBJ_LAYER
@@ -223,7 +224,7 @@
for(var/MAT in being_built.materials)
total_amount += being_built.materials[MAT]
- var/power = max(active_power_usage, (total_amount)*multiplier/5) //Change this to use all materials
+ var/power = max(active_power_usage, total_amount) //Change this to use all materials
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
@@ -252,6 +253,7 @@
use_power(power)
icon_state = "autolathe_n"
var/time = is_stack ? 32 : (32 * coeff * multiplier) ** 0.8
+ set_active_power()
addtimer(CALLBACK(src, PROC_REF(make_item), power, materials_used, custom_materials, multiplier, coeff, is_stack, usr), time)
. = TRUE
else
@@ -326,12 +328,13 @@
else
flick("autolathe_o", src) //plays metal insertion animation
- use_power(min(1000, amount_inserted / 100))
+ use_power(min(active_power_usage, amount_inserted))
/obj/machinery/autolathe/proc/make_item(power, list/materials_used, list/picked_materials, multiplier, coeff, is_stack, mob/user)
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/atom/A = drop_location()
use_power(power)
+ set_idle_power()
materials.use_materials(materials_used)
diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm
index 2e93cd179ed5..83f3e366e8a3 100644
--- a/code/game/machinery/bank_machine.dm
+++ b/code/game/machinery/bank_machine.dm
@@ -3,7 +3,7 @@
desc = "A machine used to deposit and withdraw funds."
icon_screen = "vault"
icon_keyboard = "security_key"
- idle_power_usage = 100
+ idle_power_usage = IDLE_DRAW_LOW
var/siphoning = FALSE
var/next_warning = 0
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 1a89a2b011cc..b10dba436e0d 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -12,7 +12,7 @@
var/initialized_button = 0
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 70)
use_power = IDLE_POWER_USE
- idle_power_usage = 2
+ idle_power_usage = IDLE_DRAW_MINIMAL
resistance_flags = LAVA_PROOF | FIRE_PROOF
/obj/machinery/button/indestructible
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index c1cca432efd4..fda41eab7789 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -9,8 +9,8 @@
icon_state = "camera" //mapping icon to represent upgrade states. if you want a different base icon, update default_camera_icon as well as this.
light_color = "#CDDDFF"
use_power = ACTIVE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 10
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = IDLE_DRAW_MINIMAL*2
layer = WALL_OBJ_LAYER
resistance_flags = FIRE_PROOF
damage_deflection = 12
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index e1be8d8e4453..85d2d5651203 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/power.dmi'
icon_state = "ccharger"
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 60
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
power_channel = AREA_USAGE_EQUIP
circuit = /obj/item/circuitboard/machine/cell_charger
pass_flags = PASSTABLE
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index c71e94a0948a..ad4cd3834f06 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -16,6 +16,8 @@
density = TRUE
icon = 'icons/obj/machines/cloning.dmi'
icon_state = "pod_0"
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
req_access = list(ACCESS_CLONING) //FOR PREMATURE UNLOCKING.
verb_say = "states"
circuit = /obj/item/circuitboard/machine/clonepod
diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm
index bdbadf79a943..3a36603c5070 100644
--- a/code/game/machinery/computer/_computer.dm
+++ b/code/game/machinery/computer/_computer.dm
@@ -4,8 +4,8 @@
icon_state = "computer"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 300
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_LOW
max_integrity = 200
integrity_failure = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 20)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index f875defd6044..c1a1171e57cc 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -6,8 +6,8 @@
icon_screen = "crew"
icon_keyboard = "med_key"
use_power = IDLE_POWER_USE
- idle_power_usage = 250
- active_power_usage = 500
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/computer/crew
light_color = LIGHT_COLOR_BLUE
diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm
index ffeabbdc4e0a..815e2496d41b 100644
--- a/code/game/machinery/computer/dna_console.dm
+++ b/code/game/machinery/computer/dna_console.dm
@@ -43,8 +43,8 @@
circuit = /obj/item/circuitboard/computer/scan_consolenew
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 400
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_MEDIUM
light_color = LIGHT_COLOR_BLUE
/// Link to the techweb's stored research. Used to retrieve stored mutations
diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm
index 20c3d66e8585..8419ee80ce1e 100644
--- a/code/game/machinery/dance_machine.dm
+++ b/code/game/machinery/dance_machine.dm
@@ -5,6 +5,8 @@
icon_state = "jukebox-"
verb_say = "states"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
var/active = FALSE
var/list/rangers = list()
var/stop = 0
diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm
index f3fa616032d3..645e8eee762f 100644
--- a/code/game/machinery/defibrillator_mount.dm
+++ b/code/game/machinery/defibrillator_mount.dm
@@ -165,7 +165,7 @@
name = "PENLITE defibrillator mount"
desc = "Holds defibrillators. You can grab the paddles if one is mounted. This PENLITE variant also allows for slow, passive recharging of the defibrillator."
icon_state = "penlite_mount"
- idle_power_usage = 1
+ idle_power_usage = 0
wallframe_type = /obj/item/wallframe/defib_mount/charging
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index baf3d6ae2cc1..740ea5c935fa 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -5,8 +5,8 @@
Or you can just drop your plates on the floor, like civilized folk."
icon = 'icons/obj/kitchen.dmi'
icon_state = "synthesizer"
- idle_power_usage = 8 //5 with default parts
- active_power_usage = 13 //10 with default parts
+ idle_power_usage = IDLE_DRAW_MINIMAL //lower
+ active_power_usage = ACTIVE_DRAW_MINIMAL //lower ingame because stockparts
density = FALSE
circuit = /obj/item/circuitboard/machine/dish_drive
pass_flags = PASSTABLE
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index 7f61dde6ef79..a45aaa474438 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -6,8 +6,8 @@
base_icon_state = "scanner"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 50
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/brain)
circuit = /obj/item/circuitboard/machine/dnascanner
var/locked = FALSE
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index aa3e4ece65e9..25da902ea3f5 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -6,6 +6,8 @@
icon = 'icons/obj/machines/research.dmi'
base_icon_state = "tdoppler"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
verb_say = "states coldly"
var/cooldown = 10
var/next_announce = 0
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm
index dbf055d98079..4603044ab285 100644
--- a/code/game/machinery/droneDispenser.dm
+++ b/code/game/machinery/droneDispenser.dm
@@ -9,6 +9,8 @@
icon = 'icons/obj/machines/droneDispenser.dmi'
icon_state = "on"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
max_integrity = 250
integrity_failure = 0.33
diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm
index 9d190b2e1369..34d4bb320c46 100644
--- a/code/game/machinery/embedded_controller/access_controller.dm
+++ b/code/game/machinery/embedded_controller/access_controller.dm
@@ -7,8 +7,8 @@
/obj/machinery/doorButtons
power_channel = AREA_USAGE_ENVIRON
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 4
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/idSelf
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index faceb46419d5..6cbd6eaed278 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -23,8 +23,8 @@
integrity_failure = 0.4
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 6
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
power_channel = AREA_USAGE_ENVIRON
resistance_flags = FIRE_PROOF
diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm
index 8833a20d90c4..81c422ea31fa 100644
--- a/code/game/machinery/gulag_item_reclaimer.dm
+++ b/code/game/machinery/gulag_item_reclaimer.dm
@@ -6,8 +6,8 @@
req_access = list(ACCESS_SECURITY) //REQACCESS TO ACCESS ALL STORED ITEMS
density = FALSE
use_power = IDLE_POWER_USE
- idle_power_usage = 100
- active_power_usage = 2500
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = IDLE_DRAW_MEDIUM
var/list/stored_items = list()
var/obj/machinery/gulag_teleporter/linked_teleporter = null
diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm
index e147e24717ca..3632c204f36b 100644
--- a/code/game/machinery/gulag_teleporter.dm
+++ b/code/game/machinery/gulag_teleporter.dm
@@ -15,8 +15,8 @@ The console is located at computer/gulag_teleporter.dm
state_open = FALSE
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 200
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_EXTREME
circuit = /obj/item/circuitboard/machine/gulag_teleporter
var/locked = FALSE
var/message_cooldown
diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index 9cf4470cab5c..1b0093458e49 100644
--- a/code/game/machinery/harvester.dm
+++ b/code/game/machinery/harvester.dm
@@ -2,12 +2,14 @@
name = "organ harvester"
desc = "An advanced machine used for harvesting organs and limbs from the deceased."
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
icon = 'icons/obj/machines/harvester.dmi'
icon_state = "harvester"
base_icon_state = "harvester"
verb_say = "states"
state_open = FALSE
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/harvester
light_color = LIGHT_COLOR_BLUE
var/interval = 20
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 4a31d650f9a1..9b2591bd59cd 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -36,8 +36,8 @@ Possible to do for anyone motivated enough:
plane = FLOOR_PLANE
req_access = list(ACCESS_KEYCARD_AUTH) //Used to allow for forced connecting to other (not secure) holopads. Anyone can make a call, though.
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
max_integrity = 300
armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
circuit = /obj/item/circuitboard/machine/holopad
@@ -446,8 +446,11 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/holopad/proc/SetLightsAndPower()
var/total_users = LAZYLEN(masters) + LAZYLEN(holo_calls)
- use_power = total_users > 0 ? ACTIVE_POWER_USE : IDLE_POWER_USE
- active_power_usage = HOLOPAD_PASSIVE_POWER_USAGE + (HOLOGRAM_POWER_USAGE * total_users)
+ if(total_users > 0)
+ set_active_power()
+ else
+ set_idle_power()
+ active_power_usage = initial(active_power_usage) * total_users
if(total_users || replay_mode)
set_light(2)
else
diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm
index b31dd9925375..e14756815bb2 100644
--- a/code/game/machinery/hypnochair.dm
+++ b/code/game/machinery/hypnochair.dm
@@ -6,6 +6,8 @@
base_icon_state = "hypnochair"
circuit = /obj/item/circuitboard/machine/hypnochair
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
opacity = FALSE
var/mob/living/carbon/victim = null ///Keeps track of the victim to apply effects if it teleports away
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 8117ad2c251a..c82d67a9df62 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -6,8 +6,8 @@
base_icon_state = "igniter"
plane = FLOOR_PLANE
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 4
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
max_integrity = 300
armor = list("melee" = 50, "bullet" = 30, "laser" = 70, "energy" = 50, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
resistance_flags = FIRE_PROOF
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index c7752a8cbfaa..c3e6bead671a 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -3,9 +3,9 @@
desc = "A bluespace pad able to thrust matter through bluespace, teleporting it to or from nearby locations."
icon = 'icons/obj/telescience.dmi'
icon_state = "lpad-idle"
- use_power = TRUE
- idle_power_usage = 200
- active_power_usage = 2500
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_EXTREME
hud_possible = list(DIAG_LAUNCHPAD_HUD)
circuit = /obj/item/circuitboard/machine/launchpad
var/icon_teleport = "lpad-beam"
@@ -149,7 +149,7 @@
teleporting = FALSE
// use a lot of power
- use_power(1000)
+ use_power(active_power_usage)
var/turf/source = target
var/list/log_msg = list()
diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm
index 40f405ad4a16..c0f296c1ffcf 100644
--- a/code/game/machinery/limbgrower.dm
+++ b/code/game/machinery/limbgrower.dm
@@ -7,8 +7,8 @@
icon_state = "limbgrower_idleoff"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/limbgrower
/// The category of limbs we're browing in our UI.
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 4f91bea3ab7a..7316e5b42422 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/stationobjs.dmi'
icon_state = "mass_driver"
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
var/power = 1
var/code = 1
var/id = 1
diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm
index d7be7fea98ee..52933a5aba74 100644
--- a/code/game/machinery/medical_kiosk.dm
+++ b/code/game/machinery/medical_kiosk.dm
@@ -18,6 +18,8 @@
base_icon_state = "kiosk"
layer = ABOVE_MOB_LAYER
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/medical_kiosk
var/obj/item/scanner_wand
/// Emag mode
diff --git a/code/game/machinery/medipen_refiller.dm b/code/game/machinery/medipen_refiller.dm
index e104257b5493..ceb0ed389c17 100644
--- a/code/game/machinery/medipen_refiller.dm
+++ b/code/game/machinery/medipen_refiller.dm
@@ -5,7 +5,7 @@
icon_state = "medipen_refiller"
density = TRUE
circuit = /obj/item/circuitboard/machine/medipen_refiller
- idle_power_usage = 100
+ idle_power_usage = IDLE_DRAW_LOW
/// list of medipen subtypes it can refill
var/list/allowed = list(
/obj/item/reagent_containers/hypospray/medipen = /datum/reagent/medicine/epinephrine,
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index 75498600b007..5891898ef6dc 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -33,8 +33,8 @@ DEFINE_BITFIELD(turret_flags, list(
density = TRUE
desc = "A covered turret that shoots at its enemies."
use_power = IDLE_POWER_USE //this turret uses and requires power
- 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
+ idle_power_usage = IDLE_DRAW_MINIMAL //when inactive, this turret takes up constant 50 Equipment power
+ active_power_usage = ACTIVE_DRAW_LOW //when active, this turret takes up constant 300 Equipment power
req_access = list(ACCESS_SECURITY) /// Only people with Security access
power_channel = AREA_USAGE_EQUIP //drains power from the EQUIPMENT channel
max_integrity = 160 //the turret's health
@@ -795,7 +795,7 @@ DEFINE_BITFIELD(turret_flags, list(
max_integrity = 300
always_up = 1
use_power = ACTIVE_POWER_USE
- active_power_usage = 300
+ active_power_usage = ACTIVE_DRAW_MINIMAL
has_cover = 0
scan_range = 9
stun_projectile = /obj/projectile/beam/disabler
diff --git a/code/game/machinery/prisonlabor.dm b/code/game/machinery/prisonlabor.dm
index 6fe329ed4a71..76612018d87a 100644
--- a/code/game/machinery/prisonlabor.dm
+++ b/code/game/machinery/prisonlabor.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/machines/prison.dmi'
icon_state = "offline"
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
var/obj/item/stack/license_plates/empty/current_plate
var/pressing = FALSE
diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm
index cc9f8f6d3d59..7d0455ab82f0 100644
--- a/code/game/machinery/quantum_pad.dm
+++ b/code/game/machinery/quantum_pad.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/telescience.dmi'
icon_state = "qpad-idle"
use_power = IDLE_POWER_USE
- idle_power_usage = 200
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_EXTREME
obj_flags = CAN_BE_HIT | UNIQUE_RENAME
circuit = /obj/item/circuitboard/machine/quantumpad
var/teleport_cooldown = 400 //30 seconds base due to base parts
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index c604b3eeccf6..2720443d2424 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -5,8 +5,8 @@
base_icon_state = "recharger"
desc = "A charging dock for energy based weaponry."
use_power = IDLE_POWER_USE
- idle_power_usage = 4
- active_power_usage = 250
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/recharger
pass_flags = PASSTABLE
var/obj/item/charging = null
@@ -50,11 +50,11 @@
if (new_charging)
START_PROCESSING(SSmachines, src)
finished_recharging = FALSE
- use_power = ACTIVE_POWER_USE
+ set_active_power()
using_power = TRUE
update_appearance()
else
- use_power = IDLE_POWER_USE
+ set_idle_power()
using_power = FALSE
update_appearance()
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 14e253298070..cedf6c0a56ff 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -5,8 +5,8 @@
icon_state = "borgcharger0"
density = FALSE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 1000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
req_access = list(ACCESS_ROBOTICS)
state_open = TRUE
circuit = /obj/item/circuitboard/machine/cyborgrecharger
@@ -90,12 +90,12 @@
/obj/machinery/recharge_station/open_machine()
. = ..()
- use_power = IDLE_POWER_USE
+ set_idle_power()
/obj/machinery/recharge_station/close_machine()
. = ..()
if(occupant)
- use_power = ACTIVE_POWER_USE //It always tries to charge, even if it can't.
+ set_active_power() //It always tries to charge, even if it can't.
add_fingerprint(occupant)
/obj/machinery/recharge_station/update_icon_state()
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index b548ecf73125..af0c08162311 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -7,6 +7,8 @@
icon_state = "grinder-o0"
layer = ABOVE_ALL_MOB_LAYER // Overhead
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/recycler
var/safety_mode = FALSE // Temporarily stops machine if it detects a mob
var/icon_name = "grinder-o"
diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm
index c9e1d108c1e5..351f1c42ae5e 100644
--- a/code/game/machinery/roulette_machine.dm
+++ b/code/game/machinery/roulette_machine.dm
@@ -26,8 +26,8 @@
density = TRUE
use_power = IDLE_POWER_USE
anchored = FALSE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
max_integrity = 500
armor = list("melee" = 45, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 10, "bio" = 30, "rad" = 30, "fire" = 30, "acid" = 30)
var/static/list/numbers = list("0" = "green", "1" = "red", "3" = "red", "5" = "red", "7" = "red", "9" = "red", "12" = "red", "14" = "red", "16" = "red",\
diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm
index 1ffb03200183..cf83233598aa 100644
--- a/code/game/machinery/scan_gate.dm
+++ b/code/game/machinery/scan_gate.dm
@@ -27,7 +27,7 @@
icon = 'icons/obj/machines/scangate.dmi'
icon_state = "scangate"
use_power = IDLE_POWER_USE
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/scanner_gate
var/scanline_timer
diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm
index 569bfa4b6f9e..ec9f0f5ff5a3 100644
--- a/code/game/machinery/sheetifier.dm
+++ b/code/game/machinery/sheetifier.dm
@@ -5,8 +5,8 @@
icon_state = "base_machine"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/sheetifier
layer = BELOW_OBJ_LAYER
var/busy_processing = FALSE
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index bc578a856300..9f2f56e2e1ce 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -219,8 +219,8 @@
req_access = list(ACCESS_TELEPORTER)
flags_1 = CONDUCT_1
use_power = NO_POWER_USE
- idle_power_usage = 10
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
circuit = /obj/item/circuitboard/machine/shieldwallgen
max_integrity = 300
var/active = FALSE
diff --git a/code/game/machinery/shuttle/ship_gravity.dm b/code/game/machinery/shuttle/ship_gravity.dm
index bfcf937f341a..4f63c60d7824 100644
--- a/code/game/machinery/shuttle/ship_gravity.dm
+++ b/code/game/machinery/shuttle/ship_gravity.dm
@@ -9,8 +9,8 @@
icon_state = "shipgrav"
base_icon_state = "shipgrav"
density = TRUE
- idle_power_usage = 10
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_EXTREME
circuit = /obj/item/circuitboard/machine/ship_gravity
var/charging = FALSE
var/active = FALSE
diff --git a/code/game/machinery/shuttle/shuttle_heater.dm b/code/game/machinery/shuttle/shuttle_heater.dm
index 94735ba4ab25..8f5fd9cbad34 100644
--- a/code/game/machinery/shuttle/shuttle_heater.dm
+++ b/code/game/machinery/shuttle/shuttle_heater.dm
@@ -16,7 +16,7 @@
icon_state = "heater_pipe"
var/icon_state_closed = "heater_pipe"
var/icon_state_open = "heater_pipe_open"
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/shuttle/heater
density = TRUE
diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm
index 0ae88638d5b3..2038612c2791 100644
--- a/code/game/machinery/slotmachine.dm
+++ b/code/game/machinery/slotmachine.dm
@@ -22,7 +22,7 @@
base_icon_state = "slots"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/computer/slot_machine
light_color = LIGHT_COLOR_BROWN
unique_icon = TRUE
diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm
index 37e079715dcd..2582c57da903 100644
--- a/code/game/machinery/stasis.dm
+++ b/code/game/machinery/stasis.dm
@@ -9,8 +9,8 @@
can_buckle = TRUE
buckle_lying = 90
circuit = /obj/item/circuitboard/machine/stasis
- idle_power_usage = 40
- active_power_usage = 340
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
var/stasis_enabled = TRUE
var/last_stasis_sound = FALSE
var/stasis_can_toggle = 0
@@ -112,12 +112,12 @@
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 2, frequency = freq)
target.apply_status_effect(STATUS_EFFECT_STASIS, STASIS_MACHINE_EFFECT)
target.ExtinguishMob()
- use_power = ACTIVE_POWER_USE
+ set_active_power()
/obj/machinery/stasis/proc/thaw_them(mob/living/target)
target.remove_status_effect(STATUS_EFFECT_STASIS, STASIS_MACHINE_EFFECT)
if(target == occupant)
- use_power = IDLE_POWER_USE
+ set_idle_power()
/obj/machinery/stasis/post_buckle_mob(mob/living/L)
if(!can_be_occupant(L))
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 1e402ee02e5a..9e1b5b28690b 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -22,7 +22,7 @@
icon_state = "frame"
density = FALSE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
+ idle_power_usage = IDLE_DRAW_MINIMAL
maptext_height = 26
maptext_width = 32
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index e86d4ae9f0f9..960df9263c81 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -6,6 +6,8 @@
icon_state = "ssu_classic"
base_icon_state = "ssu_classic"
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
max_integrity = 250
var/obj/item/clothing/suit/space/suit = null
@@ -403,6 +405,7 @@
uv = TRUE
locked = TRUE
update_appearance()
+ use_power(ACTIVE_DRAW_HIGH)
if(occupant)
if(uv_super)
mob_occupant.adjustFireLoss(rand(20, 36))
diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm
index f9cbc692e050..2a12e6bcf937 100644
--- a/code/game/machinery/telecomms/machines/broadcaster.dm
+++ b/code/game/machinery/telecomms/machines/broadcaster.dm
@@ -14,7 +14,7 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages
desc = "A dish-shaped machine used to broadcast processed subspace signals."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 25
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/broadcaster
/obj/machinery/telecomms/broadcaster/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from)
diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm
index 2496ee41c874..6428456d1614 100644
--- a/code/game/machinery/telecomms/machines/bus.dm
+++ b/code/game/machinery/telecomms/machines/bus.dm
@@ -14,7 +14,7 @@
desc = "A mighty piece of hardware used to send massive amounts of data quickly."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
netspeed = 40
circuit = /obj/item/circuitboard/machine/telecomms/bus
var/change_frequency = 0
diff --git a/code/game/machinery/telecomms/machines/hub.dm b/code/game/machinery/telecomms/machines/hub.dm
index dedf7c7f3a77..a01225b4f4fd 100644
--- a/code/game/machinery/telecomms/machines/hub.dm
+++ b/code/game/machinery/telecomms/machines/hub.dm
@@ -14,7 +14,7 @@
desc = "A mighty piece of hardware used to send/receive massive amounts of data."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 80
+ idle_power_usage = IDLE_DRAW_MINIMAL
long_range_link = TRUE
netspeed = 40
circuit = /obj/item/circuitboard/machine/telecomms/hub
diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index d11067c290fd..d9f927a7c355 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -12,8 +12,8 @@
name = "Blackbox Recorder"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
var/obj/item/stored
@@ -80,8 +80,8 @@
desc = "A machine that processes and routes PDA and request console messages."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/message_server
var/list/datum/data_pda_msg/pda_msgs = list()
diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm
index 86bc02438d95..6c13ee65d510 100644
--- a/code/game/machinery/telecomms/machines/processor.dm
+++ b/code/game/machinery/telecomms/machines/processor.dm
@@ -12,7 +12,7 @@
desc = "This machine is used to process large quantities of information."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 30
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/processor
var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals
diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm
index 79b989648d55..33b0bc7028ec 100644
--- a/code/game/machinery/telecomms/machines/receiver.dm
+++ b/code/game/machinery/telecomms/machines/receiver.dm
@@ -12,7 +12,7 @@
desc = "This machine has a dish-like shape and green lights. It is designed to detect and process subspace radio activity."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 30
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/receiver
/obj/machinery/telecomms/receiver/receive_signal(datum/signal/subspace/signal)
diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm
index ffaeda72e26d..763c42dbbf9c 100644
--- a/code/game/machinery/telecomms/machines/relay.dm
+++ b/code/game/machinery/telecomms/machines/relay.dm
@@ -12,7 +12,7 @@
desc = "A mighty piece of hardware used to send massive amounts of data far away."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 30
+ idle_power_usage = IDLE_DRAW_MINIMAL
netspeed = 5
long_range_link = 1
circuit = /obj/item/circuitboard/machine/telecomms/relay
diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm
index 664d45b5b1c1..5607b6bbec8c 100644
--- a/code/game/machinery/telecomms/machines/server.dm
+++ b/code/game/machinery/telecomms/machines/server.dm
@@ -11,7 +11,7 @@
desc = "A machine used to store data and network statistics."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 15
+ idle_power_usage = IDLE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/telecomms/server
var/list/log_entries = list()
var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 6e0551b25d41..1a342f0554cd 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -9,8 +9,8 @@
icon_state = "tele0"
base_icon_state = "tele"
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 2000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
circuit = /obj/item/circuitboard/machine/teleporter_hub
var/accuracy = 0
var/obj/machinery/teleport/station/power_station
@@ -106,8 +106,8 @@
icon_state = "controller"
base_icon_state = "controller"
use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 2000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
circuit = /obj/item/circuitboard/machine/teleporter_station
var/engaged = FALSE
var/obj/machinery/computer/teleporter/teleporter_console
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 6814f0cc2e7f..83a2c4861c90 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -5,8 +5,8 @@
desc = "Nothing is being built."
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 20
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
req_access = list(ACCESS_ROBOTICS)
circuit = /obj/item/circuitboard/machine/mechfab
var/time_coeff = 1
@@ -196,10 +196,10 @@
rmat.silo_log(src, "built", -1, "[D.name]", res_coef)
add_overlay("fab-active")
- use_power = ACTIVE_POWER_USE
+ set_active_power()
updateUsrDialog()
sleep(get_construction_time_w_coeff(D))
- use_power = IDLE_POWER_USE
+ set_idle_power()
cut_overlay("fab-active")
desc = initial(desc)
diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm
index 9a1b01403eda..f161eced8060 100644
--- a/code/modules/NTNet/relays.dm
+++ b/code/modules/NTNet/relays.dm
@@ -3,8 +3,8 @@
name = "NTNet Quantum Relay"
desc = "A very complex router and transmitter capable of connecting electronic devices together. Looks fragile."
use_power = ACTIVE_POWER_USE
- active_power_usage = 10000 //10kW, apropriate for machine that keeps massive cross-Zlevel wireless network operational. Used to be 20 but that actually drained the smes one round
- idle_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_EXTREME //Since NTnet is barely used, this has been lowered by half.
icon = 'icons/obj/machines/telecomms.dmi'
icon_state = "bus"
density = TRUE
@@ -64,9 +64,9 @@
/obj/machinery/ntnet_relay/process()
if(is_operational)
- use_power = ACTIVE_POWER_USE
+ set_active_power()
else
- use_power = IDLE_POWER_USE
+ set_idle_power()
update_appearance()
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index bef2f277f7e1..895bfdc96cf4 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -65,8 +65,8 @@
icon = 'icons/obj/monitors.dmi'
icon_state = "alarm"
use_power = IDLE_POWER_USE
- idle_power_usage = 4
- active_power_usage = 1200
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
power_channel = AREA_USAGE_ENVIRON
//req_access = list(ACCESS_ATMOSPHERICS)
max_integrity = 250
@@ -753,14 +753,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27)
visible_message("The air alarm makes a quiet click as it stops heating the area")
playsound(src, 'sound/machines/terminal_off.ogg', 40)
heating_current_mode = "Idle"
- use_power = IDLE_POWER_USE
+ set_idle_power()
return
if(wanted_mode == "Heat" & heating_current_mode == "Idle")
visible_message("The air alarm makes a quiet click as it starts heating the area")
playsound(src, 'sound/machines/terminal_on.ogg', 40)
heating_current_mode = "Heat"
- use_power = ACTIVE_POWER_USE
+ set_active_power()
if(heating_current_mode == "Heat")
var/temperature = environment.return_temperature()
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index 8579d70a1165..8cd12ddf27cf 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -18,6 +18,10 @@
can_unwrench = TRUE
shift_underlay_only = FALSE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = ACTIVE_DRAW_MINIMAL
+
var/target_pressure = ONE_ATMOSPHERE
var/frequency = 0
@@ -30,6 +34,10 @@
/obj/machinery/atmospherics/components/binary/pump/CtrlClick(mob/user)
if(can_interact(user))
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
return ..()
@@ -110,6 +118,10 @@
switch(action)
if("power")
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("pressure")
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
index 020570f34785..24ef0997406d 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
@@ -73,6 +73,9 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
return
..()
+/obj/machinery/atmospherics/components/binary/valve/digital/toggle()
+ use_power(ACTIVE_DRAW_MINIMAL)
+ . = ..()
/obj/machinery/atmospherics/components/binary/valve/layer2
piping_layer = 2
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
index 03b41df05e32..c32a750848da 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -18,6 +18,10 @@
can_unwrench = TRUE
shift_underlay_only = FALSE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = ACTIVE_DRAW_MINIMAL
+
var/transfer_rate = MAX_TRANSFER_RATE
var/overclocked = FALSE
@@ -31,6 +35,10 @@
/obj/machinery/atmospherics/components/binary/volume_pump/CtrlClick(mob/user)
if(can_interact(user))
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
return ..()
@@ -130,6 +138,10 @@
switch(action)
if("power")
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("rate")
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 404ecbf46eb2..d196bca1c3b3 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -5,6 +5,10 @@
name = "gas filter"
desc = "Very useful for filtering gasses."
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = ACTIVE_DRAW_MINIMAL
+
can_unwrench = TRUE
var/transfer_rate = MAX_TRANSFER_RATE
var/filter_type = null
@@ -17,6 +21,10 @@
/obj/machinery/atmospherics/components/trinary/filter/CtrlClick(mob/user)
if(can_interact(user))
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
return ..()
@@ -114,6 +122,10 @@
switch(action)
if("power")
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("rate")
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
index c1ce88286b4c..9ea52bd847be 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
@@ -5,6 +5,10 @@
name = "gas mixer"
desc = "Very useful for mixing gasses."
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = ACTIVE_DRAW_MINIMAL
+
can_unwrench = TRUE
var/target_pressure = ONE_ATMOSPHERE
@@ -19,6 +23,10 @@
/obj/machinery/atmospherics/components/trinary/mixer/CtrlClick(mob/user)
if(can_interact(user))
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
return ..()
@@ -137,6 +145,10 @@
switch(action)
if("power")
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("pressure")
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 1b6df20c721e..bcb46dedf147 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -6,6 +6,7 @@
desc = "Heats or cools gas in connected pipes."
density = TRUE
+ idle_power_usage = IDLE_DRAW_LOW
max_integrity = 300
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30)
layer = OBJ_LAYER
@@ -83,7 +84,7 @@
var/temperature_delta= abs(old_temperature - air_contents.return_temperature())
if(temperature_delta > 1)
- active_power_usage = (heat_capacity * temperature_delta) / 10 + idle_power_usage
+ active_power_usage = (heat_capacity * temperature_delta) / 5 + idle_power_usage
update_parents()
else
active_power_usage = idle_power_usage
@@ -152,7 +153,10 @@
switch(action)
if("power")
on = !on
- use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
. = TRUE
if("target")
@@ -182,6 +186,10 @@
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
return
on = !on
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
index c55b8da80436..dc8b278959f6 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -48,8 +48,8 @@
radio_connection = null
adjacent_turfs.Cut()
return ..()
-
-/obj/machinery/atmospherics/components/unary/vent_scrubber/auto_use_power()
+/*
+/obj/machinery/atmospherics/components/unary/vent_scrubber/auto_use_power() //auto_use_power no longer called
if(!on || welded || !is_operational || !powered(power_channel))
return FALSE
@@ -64,7 +64,7 @@
amount += amount * (adjacent_turfs.len * (adjacent_turfs.len / 2))
use_power(amount, power_channel)
return TRUE
-
+*/
/obj/machinery/atmospherics/components/unary/vent_scrubber/update_icon_nopipes()
cut_overlays()
if(showpipe)
@@ -138,13 +138,20 @@
..()
if(welded || !on || !is_operational)
+ if(use_static_power != NO_POWER_USE)
+ set_no_power()
return FALSE
if(!nodes[1])
return FALSE
scrub(loc)
if(widenet)
+ if(use_static_power != ACTIVE_POWER_USE)
+ set_active_power()
for(var/turf/tile in adjacent_turfs)
scrub(tile)
+ else
+ if(use_static_power != IDLE_POWER_USE)
+ set_idle_power()
return TRUE
/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/scrub(turf/tile)
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index 811979dd4c39..07aca0757568 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -6,8 +6,8 @@
layer = GAS_PUMP_LAYER
power_channel = AREA_USAGE_ENVIRON
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 4
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = IDLE_DRAW_MINIMAL
max_integrity = 150
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 0)
var/frequency = 0
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index 37045635cf1a..ca85e9cc5569 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -26,8 +26,8 @@
var/power_draw_dynamic_kpa_coeff = 0.5
var/broken = FALSE
var/broken_message = "ERROR"
- idle_power_usage = 150
- active_power_usage = 2000
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_HIGH
/obj/machinery/atmospherics/miner/Initialize()
. = ..()
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index b608d5849e38..8e71222ab4d4 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -113,8 +113,8 @@
name = "huge air scrubber"
icon_state = "scrubber:0"
anchored = TRUE
- active_power_usage = 500
- idle_power_usage = 10
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
overpressure_m = 200
volume_rate = 1500
@@ -137,8 +137,10 @@
if((!anchored && !movable) || !is_operational)
on = FALSE
update_appearance()
- use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE
- if(!on)
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
return
..()
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index a643be115aab..51ab76479657 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -157,8 +157,8 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 100
- active_power_usage = 5000
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_EXTREME
var/calibrated = TRUE
/// Type of instanced gateway destination, needs to be subtype of /datum/gateway_destination/gateway
@@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
target = null
dest.deactivate(src)
QDEL_NULL(portal)
- use_power = IDLE_POWER_USE
+ set_idle_power()
update_appearance()
portal_visuals.reset_visuals()
@@ -221,7 +221,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
target.activate(destination)
portal_visuals.setup_visuals(target)
generate_bumper()
- use_power = ACTIVE_POWER_USE
+ set_active_power()
update_appearance()
/obj/machinery/gateway/proc/Transfer(atom/movable/AM)
diff --git a/code/modules/cargo/blackmarket/blackmarket_telepad.dm b/code/modules/cargo/blackmarket/blackmarket_telepad.dm
index 0dea6c59b819..14211cad6878 100644
--- a/code/modules/cargo/blackmarket/blackmarket_telepad.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_telepad.dm
@@ -16,7 +16,7 @@
circuit = /obj/item/circuitboard/machine/ltsrbt
density = TRUE
- idle_power_usage = 200
+ idle_power_usage = IDLE_DRAW_LOW
/// Divider for power_usage_per_teleport.
var/power_efficiency = 1
diff --git a/code/modules/fishing/fishing_portal_machine.dm b/code/modules/fishing/fishing_portal_machine.dm
index 0cbeae7c3dac..a070e7b7f797 100644
--- a/code/modules/fishing/fishing_portal_machine.dm
+++ b/code/modules/fishing/fishing_portal_machine.dm
@@ -6,7 +6,7 @@
icon_state = "portal_off"
idle_power_usage = 0
- active_power_usage = 2000
+ active_power_usage = ACTIVE_DRAW_HIGH
anchored = FALSE
density = TRUE
@@ -35,12 +35,12 @@
/obj/machinery/fishing_portal_generator/proc/activate()
active = AddComponent(/datum/component/fishing_spot, fishing_source)
- use_power = ACTIVE_POWER_USE
+ set_active_power()
update_appearance()
/obj/machinery/fishing_portal_generator/proc/deactivate()
QDEL_NULL(active)
- use_power = IDLE_POWER_USE
+ set_idle_power()
update_appearance()
/obj/machinery/fishing_portal_generator/on_set_is_operational(old_value)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm b/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm
index 7b98be6a16c4..bebf3dda83a4 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm
@@ -6,6 +6,8 @@
icon = 'icons/obj/machines/coffeemaker.dmi'
icon_state = "coffeemaker_nopot_nocart"
base_icon_state = "coffeemaker"
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/coffeemaker
var/obj/item/reagent_containers/food/drinks/bottle/coffeepot/coffeepot = null
@@ -375,11 +377,12 @@
if(!silent)
playsound(src, 'sound/machines/coffeemaker_brew.ogg', 20, vary = TRUE)
toggle_steam()
- use_power(active_power_usage * time * 0.1) // .1 needed here to convert time (in deciseconds) to seconds such that watts * seconds = joules
+ set_active_power()
addtimer(CALLBACK(src, PROC_REF(stop_operating)), time / speed)
/obj/machinery/coffeemaker/proc/stop_operating()
brewing = FALSE
+ set_idle_power()
toggle_steam()
/obj/machinery/coffeemaker/proc/brew()
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 4fa5354339c5..8eccd04c8404 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -25,7 +25,7 @@
icon_state = "fryer_off"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
+ idle_power_usage = IDLE_DRAW_LOW
layer = BELOW_OBJ_LAYER
var/obj/item/reagent_containers/food/snacks/deepfryholder/frying //What's being fried RIGHT NOW?
var/cook_time = 0
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index fad3c3bc963f..7be027c012f4 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -5,8 +5,8 @@
icon_state = "grinder"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 500
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/gibber
var/operating = FALSE //Is it on?
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index 4a739d2ab7fc..678016182428 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -8,8 +8,8 @@
layer = BELOW_OBJ_LAYER
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/microwave
pass_flags = PASSTABLE
light_color = LIGHT_COLOR_YELLOW
@@ -275,6 +275,7 @@
/obj/machinery/microwave/proc/start()
wzhzhzh()
+ set_active_power()
loop(MICROWAVE_NORMAL, 10)
/obj/machinery/microwave/proc/start_can_fail()
@@ -303,11 +304,11 @@
pre_success()
return
time--
- use_power(500)
addtimer(CALLBACK(src, PROC_REF(loop), type, time, wait), wait)
/obj/machinery/microwave/proc/loop_finish()
operating = FALSE
+ set_idle_power()
var/metal = 0
for(var/obj/item/O in ingredients)
@@ -330,6 +331,7 @@
/obj/machinery/microwave/proc/pre_fail()
broken = 2
operating = FALSE
+ set_idle_power()
spark()
after_finish_loop()
@@ -338,6 +340,7 @@
/obj/machinery/microwave/proc/muck_finish()
visible_message("\The [src] gets covered in muck!")
+ set_idle_power()
dirty = 100
dirty_anim_playing = FALSE
diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
index 005ffa7632ba..79382343e1ae 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
@@ -8,8 +8,8 @@ GLOBAL_LIST_EMPTY(monkey_recyclers)
layer = BELOW_OBJ_LAYER
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/monkey_recycler
var/stored_matter = 0
var/cube_production = 0.2
diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
index ba26a265f8ee..bc17a9fd22af 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
@@ -7,8 +7,8 @@
layer = BELOW_OBJ_LAYER
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 50
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/processor
var/broken = FALSE
var/processing = FALSE
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index ed1347fb5124..d2e919f00882 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -9,8 +9,8 @@
layer = BELOW_OBJ_LAYER
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/machine/smartfridge
var/max_n_of_items = 1500
@@ -245,8 +245,8 @@
icon = 'icons/obj/hydroponics/equipment.dmi'
icon_state = "drying_rack"
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 200
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
visible_contents = FALSE
var/drying = FALSE
@@ -326,10 +326,10 @@
/obj/machinery/smartfridge/drying_rack/proc/toggle_drying(forceoff)
if(drying || forceoff)
drying = FALSE
- use_power = IDLE_POWER_USE
+ set_idle_power()
else
drying = TRUE
- use_power = ACTIVE_POWER_USE
+ set_active_power()
update_appearance()
/obj/machinery/smartfridge/drying_rack/proc/rack_dry()
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index f1a5862649a4..d56fd4f9c32c 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -152,8 +152,8 @@
var/eventstarted = FALSE
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 6
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
power_channel = AREA_USAGE_ENVIRON
/obj/machinery/readybutton/attack_ai(mob/user as mob)
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index e9e40fd167b8..c3bcc09940d0 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -5,7 +5,7 @@
icon_state = "biogen-empty"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 40
+ idle_power_usage = IDLE_DRAW_LOW
circuit = /obj/item/circuitboard/machine/biogenerator
var/processing = FALSE
var/obj/item/reagent_containers/glass/beaker = null
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index a5e66f6df4ef..66e4904e64d4 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -6,7 +6,9 @@
pixel_z = 1
obj_flags = CAN_BE_HIT | UNIQUE_RENAME
circuit = /obj/item/circuitboard/machine/hydroponics
- idle_power_usage = 0
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_HIGH
var/waterlevel = 100 //The amount of water in the tray (max 100)
var/maxwater = 100 //The maximum amount of water in the tray
var/nutridrain = 1 // How many units of nutrient will be drained in the tray
@@ -114,7 +116,7 @@
if(!powered() && self_sustaining)
visible_message("[name]'s auto-grow functionality shuts off!")
- idle_power_usage = 0
+ set_idle_power()
self_sustaining = FALSE
update_appearance()
@@ -671,7 +673,10 @@
if(!anchored)
return
self_sustaining = !self_sustaining
- idle_power_usage = self_sustaining ? 1250 : 0
+ if(self_sustaining)
+ set_active_power()
+ else
+ set_idle_power()
to_chat(user, "You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].")
update_appearance()
@@ -702,7 +707,7 @@
desc = initial(desc)
TRAY_NAME_UPDATE
if(self_sustaining) //No reason to pay for an empty tray.
- idle_power_usage = 0
+ set_idle_power()
self_sustaining = FALSE
update_appearance()
diff --git a/code/modules/mining/machine_bluespaceminer.dm b/code/modules/mining/machine_bluespaceminer.dm
index feffb562a7e0..f44775d20c20 100644
--- a/code/modules/mining/machine_bluespaceminer.dm
+++ b/code/modules/mining/machine_bluespaceminer.dm
@@ -7,7 +7,7 @@
circuit = /obj/item/circuitboard/machine/bluespace_miner
layer = BELOW_OBJ_LAYER
use_power = NO_POWER_USE
- idle_power_usage = 50000
+ idle_power_usage = ACTIVE_DRAW_EXTREME * 10
var/powered = FALSE
var/active = FALSE
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index bbc84ec7ee68..74d35e830a7e 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -3,6 +3,7 @@
/**********************Mineral processing unit console**************************/
/obj/machinery/mineral
+ idle_power_usage = IDLE_DRAW_MINIMAL
processing_flags = START_PROCESSING_MANUALLY
subsystem_type = /datum/controller/subsystem/processing/fastprocess
/// The current direction of `input_turf`, in relation to the machine.
diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm
index 6213cba441a6..a1af42ca3169 100644
--- a/code/modules/modular_computers/computers/machinery/modular_console.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_console.dm
@@ -9,8 +9,8 @@
screen_icon_state_menu = "menu"
hardware_flag = PROGRAM_CONSOLE
density = TRUE
- base_idle_power_usage = 100
- base_active_power_usage = 500
+ base_idle_power_usage = IDLE_DRAW_MINIMAL
+ base_active_power_usage = ACTIVE_DRAW_LOW
max_hardware_size = 4
steel_sheet_cost = 10
light_strength = 2
diff --git a/code/modules/overmap/missions/research_mission.dm b/code/modules/overmap/missions/research_mission.dm
index a84b07b6529a..9481556d33be 100644
--- a/code/modules/overmap/missions/research_mission.dm
+++ b/code/modules/overmap/missions/research_mission.dm
@@ -106,7 +106,7 @@
density = FALSE
anchored = FALSE
use_power = NO_POWER_USE
- idle_power_usage = 400
+ idle_power_usage = IDLE_DRAW_MEDIUM
processing_flags = START_PROCESSING_MANUALLY
/obj/machinery/mission_scanner/wrench_act(mob/living/user, obj/item/I)
@@ -122,7 +122,7 @@
if(anchorvalue)
set_is_operational(TRUE)
START_PROCESSING(SSmachines, src)
- use_power = IDLE_POWER_USE
+ set_idle_power()
else
set_is_operational(FALSE)
STOP_PROCESSING(SSmachines, src)
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index f85bd0bc77f9..40b0771981e4 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -24,8 +24,8 @@
anchored = TRUE
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 30
- active_power_usage = 200
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
power_channel = AREA_USAGE_EQUIP
max_integrity = 300
integrity_failure = 0.33
diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm
index 87096bad7e56..f4448c4a53ac 100644
--- a/code/modules/plumbing/plumbers/_plumb_machinery.dm
+++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm
@@ -8,7 +8,7 @@
icon = 'icons/obj/plumbing/plumbers.dmi'
icon_state = "pump"
density = TRUE
- active_power_usage = 30
+ active_power_usage = ACTIVE_DRAW_MINIMAL
use_power = ACTIVE_POWER_USE
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
///Plumbing machinery is always gonna need reagents, so we might aswell put it here
diff --git a/code/modules/plumbing/plumbers/pumps.dm b/code/modules/plumbing/plumbers/pumps.dm
index 331e3fc24d89..294b50eff748 100644
--- a/code/modules/plumbing/plumbers/pumps.dm
+++ b/code/modules/plumbing/plumbers/pumps.dm
@@ -7,8 +7,8 @@
base_icon_state = "pump"
anchored = FALSE
density = TRUE
- idle_power_usage = 10
- active_power_usage = 1000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
rcd_cost = 30
rcd_delay = 40
diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm
index e112b38f2fd7..0fe0b51c6193 100644
--- a/code/modules/power/floodlight.dm
+++ b/code/modules/power/floodlight.dm
@@ -61,8 +61,8 @@
density = TRUE
max_integrity = 100
integrity_failure = 0.8
- idle_power_usage = 100
- active_power_usage = 1000
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
anchored = FALSE
light_power = 1.75
var/list/light_setting_list = list(0, 5, 10, 15)
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index a6020d0fae11..3ed7e262a53d 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -115,7 +115,7 @@
/obj/machinery/gravity_generator/main
icon_state = "on_8"
idle_power_usage = 0
- active_power_usage = 3000
+ active_power_usage = ACTIVE_DRAW_EXTREME
power_channel = AREA_USAGE_ENVIRON
sprite_number = 8
use_power = IDLE_POWER_USE
@@ -286,7 +286,10 @@
/obj/machinery/gravity_generator/main/proc/set_state(new_state)
charging_state = POWER_IDLE
on = new_state
- use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE
+ if(on)
+ set_active_power()
+ else
+ set_idle_power()
// Sound the alert if gravity was just enabled or disabled.
var/alert = FALSE
if(SSticker.IsRoundInProgress())
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 5b0655ddd42d..b4748c674fc6 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -217,9 +217,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/light_construct/small, 28)
desc = "A lighting fixture."
layer = WALL_OBJ_LAYER
max_integrity = 100
- use_power = ACTIVE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 20
+ use_power = IDLE_POWER_USE
+ idle_power_usage = 0
+ active_power_usage = 0
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
@@ -360,6 +360,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light/small/built, 28)
addtimer(CALLBACK(src, PROC_REF(update), 0), 1)
/obj/machinery/light/Destroy()
+ if(on)
+ removeStaticPower(static_power_used, AREA_USAGE_STATIC_LIGHT)
var/area/A = get_area(src)
if(A)
on = FALSE
@@ -420,22 +422,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light/small/built, 28)
if(trigger)
burn_out()
else
- use_power = ACTIVE_POWER_USE
set_light(BR, PO, CO)
else if(has_emergency_power(LIGHT_EMERGENCY_POWER_USE) && !turned_off())
- use_power = IDLE_POWER_USE
emergency_mode = TRUE
START_PROCESSING(SSmachines, src)
else
- use_power = IDLE_POWER_USE
set_light(0)
update_appearance()
- active_power_usage = (brightness * 10)
if(on != on_gs)
on_gs = on
if(on)
- static_power_used = brightness * 20 //20W per unit luminosity
+ static_power_used = brightness * LIGHT_DRAW //defined in power defines
addStaticPower(static_power_used, AREA_USAGE_STATIC_LIGHT)
else
removeStaticPower(static_power_used, AREA_USAGE_STATIC_LIGHT)
diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm
index b1c2a95a938f..debdba4946bf 100644
--- a/code/modules/power/monitor.dm
+++ b/code/modules/power/monitor.dm
@@ -7,8 +7,8 @@
icon_keyboard = "power_key"
light_color = LIGHT_COLOR_YELLOW
use_power = ACTIVE_POWER_USE
- idle_power_usage = 20
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
circuit = /obj/item/circuitboard/computer/powermonitor
tgui_id = "PowerMonitor"
@@ -49,10 +49,12 @@
/obj/machinery/computer/monitor/process()
if(!get_powernet())
- use_power = IDLE_POWER_USE
+ if(use_static_power != IDLE_POWER_USE)
+ set_idle_power()
search()
else
- use_power = ACTIVE_POWER_USE
+ if(use_static_power != ACTIVE_POWER_USE)
+ set_active_power()
record()
/obj/machinery/computer/monitor/proc/search() //keep in sync with /datum/computer_file/program/power_monitor's version
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 3cf5f5766097..a386a739622d 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -19,6 +19,7 @@
/obj/machinery/power/Destroy()
disconnect_from_network()
+ set_no_power()
return ..()
///////////////////////////////
@@ -96,14 +97,47 @@
chan = power_channel
A.use_power(amount, chan)
-/obj/machinery/proc/addStaticPower(value, powerchannel)
- var/area/A = get_area(src)
+/obj/machinery/proc/addStaticPower(value, powerchannel, area/A)
if(!A)
- return
+ if(get_area(src))
+ A = get_area(src)
+ else
+ return
A.addStaticPower(value, powerchannel)
-/obj/machinery/proc/removeStaticPower(value, powerchannel)
- addStaticPower(-value, powerchannel)
+/obj/machinery/proc/removeStaticPower(value, powerchannel, area/A)
+ addStaticPower(-value, powerchannel, A)
+
+/obj/machinery/proc/set_idle_power(area/A)
+ set_no_power(A)
+ if(use_power == NO_POWER_USE)
+ return
+ use_static_power = IDLE_POWER_USE
+ addStaticPower(idle_power_usage, power_channel + 3, A)
+
+/obj/machinery/proc/set_active_power(area/A)
+ set_no_power(A)
+ if(use_power == NO_POWER_USE)
+ return
+ use_static_power = ACTIVE_POWER_USE
+ addStaticPower(active_power_usage, power_channel + 3, A)
+
+/obj/machinery/proc/set_no_power(area/A)
+ switch(use_static_power)
+ if(IDLE_POWER_USE)
+ removeStaticPower(idle_power_usage, power_channel + 3, A)
+ if(ACTIVE_POWER_USE)
+ removeStaticPower(active_power_usage, power_channel + 3, A)
+ use_static_power = NO_POWER_USE
+
+/obj/machinery/proc/set_static_power(area/A)//used to set the actual draw to the value of use_static_power
+ switch(use_power)
+ if(NO_POWER_USE)
+ set_no_power(A)
+ if(IDLE_POWER_USE)
+ set_idle_power(A)
+ if(ACTIVE_POWER_USE)
+ set_active_power(A)
/**
* Called whenever the power settings of the containing area change
@@ -112,13 +146,15 @@
*
* Returns TRUE if the NOPOWER flag was toggled
*/
-/obj/machinery/proc/power_change()
+/obj/machinery/proc/power_change(area/A)
SIGNAL_HANDLER
SHOULD_CALL_PARENT(1)
+ set_no_power(A)
if(machine_stat & BROKEN)
return
if(powered(power_channel))
+ set_static_power(A)
if(machine_stat & NOPOWER)
SEND_SIGNAL(src, COMSIG_MACHINERY_POWER_RESTORED)
. = TRUE
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index d17e12264706..2dcaa224a71e 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -11,8 +11,8 @@
circuit = /obj/item/circuitboard/machine/emitter
use_power = NO_POWER_USE
- idle_power_usage = 10
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_LOW
var/icon_state_on = "emitter_+a"
var/icon_state_underpowered = "emitter_+u"
@@ -67,7 +67,7 @@
var/max_firedelay = 120
var/firedelay = 120
var/min_firedelay = 24
- var/power_usage = 350
+ var/power_usage = ACTIVE_DRAW_LOW
for(var/obj/item/stock_parts/micro_laser/L in component_parts)
max_firedelay -= 20 * L.rating
min_firedelay -= 4 * L.rating
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 7bc3fa552ad3..ddcaf026a40e 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -6,8 +6,8 @@
anchored = FALSE
density = TRUE
use_power = NO_POWER_USE
- idle_power_usage = 500
- active_power_usage = 10000
+ idle_power_usage = IDLE_DRAW_MEDIUM
+ active_power_usage = ACTIVE_DRAW_EXTREME * 2
dir = NORTH
mouse_opacity = MOUSE_OPACITY_OPAQUE
var/strength_upper_limit = 2
@@ -53,7 +53,7 @@
connected_parts.Cut()
return
if(!part_scan())
- use_power = IDLE_POWER_USE
+ set_idle_power()
active = FALSE
connected_parts.Cut()
@@ -106,7 +106,7 @@
active = FALSE
use_power = NO_POWER_USE
else if(!machine_stat && construction_state == PA_CONSTRUCTION_COMPLETE)
- use_power = IDLE_POWER_USE
+ set_idle_power()
/obj/machinery/particle_accelerator/control_box/process()
if(active)
@@ -175,14 +175,14 @@
message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? ADMIN_LOOKUPFLW(usr) : "outside forces"] in [ADMIN_VERBOSEJMP(src)]")
log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? "[key_name(usr)]" : "outside forces"] at [AREACOORD(src)]")
if(active)
- use_power = ACTIVE_POWER_USE
+ set_active_power()
for(var/CP in connected_parts)
var/obj/structure/particle_accelerator/part = CP
part.strength = strength
part.powered = TRUE
part.update_appearance()
else
- use_power = IDLE_POWER_USE
+ set_idle_power()
for(var/CP in connected_parts)
var/obj/structure/particle_accelerator/part = CP
part.strength = null
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 8ca409051d6c..d25fc732abe7 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -324,7 +324,7 @@
icon_state = "computer"
density = TRUE
use_power = IDLE_POWER_USE
- idle_power_usage = 250
+ idle_power_usage = IDLE_DRAW_LOW
max_integrity = 200
integrity_failure = 0.5
var/icon_screen = "solar"
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 290aec1f6c54..037256db302f 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -19,7 +19,7 @@
icon_state = "dispenser"
base_icon_state = "dispenser"
use_power = IDLE_POWER_USE
- idle_power_usage = 40
+ idle_power_usage = IDLE_DRAW_MINIMAL
interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/chem_dispenser
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index e8892390e189..88e7973dd29c 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -5,7 +5,7 @@
icon_state = "mixer0b"
base_icon_state = "mixer"
use_power = IDLE_POWER_USE
- idle_power_usage = 40
+ idle_power_usage = IDLE_DRAW_MINIMAL
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/chem_heater
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index e53a7f20ae16..c9791666b54f 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -7,7 +7,7 @@
icon_state = "mixer0"
base_icon_state = "mixer"
use_power = IDLE_POWER_USE
- idle_power_usage = 20
+ idle_power_usage = IDLE_DRAW_MINIMAL
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/chem_master
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 65bcf56ef25c..6c85e75ccd86 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -8,8 +8,8 @@
icon = 'icons/obj/chemical/misc.dmi'
icon_state = "pandemic0"
base_icon_state = "pandemic"
- use_power = TRUE
- idle_power_usage = 20
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
resistance_flags = ACID_PROOF
circuit = /obj/item/circuitboard/computer/pandemic
unique_icon = TRUE
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 5e5bd21747dc..5beaca629934 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -8,8 +8,8 @@
base_icon_state = "juicer"
layer = BELOW_OBJ_LAYER
use_power = IDLE_POWER_USE
- idle_power_usage = 5
- active_power_usage = 100
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MEDIUM
circuit = /obj/item/circuitboard/machine/reagentgrinder
pass_flags = PASSTABLE
resistance_flags = ACID_PROOF
@@ -261,10 +261,11 @@
operating = FALSE
/obj/machinery/reagentgrinder/proc/juice()
- power_change()
if(!beaker || machine_stat & (NOPOWER|BROKEN) || beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
return
+ set_active_power()
operate_for(50, juicing = TRUE)
+ set_idle_power()
for(var/obj/item/i in holdingitems)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
@@ -281,10 +282,11 @@
remove_object(I)
/obj/machinery/reagentgrinder/proc/grind(mob/user)
- power_change()
if(!beaker || machine_stat & (NOPOWER|BROKEN) || beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
return
+ set_active_power()
operate_for(60)
+ set_idle_power()
for(var/i in holdingitems)
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
@@ -310,10 +312,11 @@
/obj/machinery/reagentgrinder/proc/mix(mob/user)
//For butter and other things that would change upon shaking or mixing
- power_change()
if(!beaker || machine_stat & (NOPOWER|BROKEN))
return
+ set_active_power()
operate_for(50, juicing = TRUE)
+ set_idle_power()
addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/reagentgrinder, mix_complete)), 50)
/obj/machinery/reagentgrinder/proc/mix_complete()
diff --git a/code/modules/research/bepis.dm b/code/modules/research/bepis.dm
index 84d948f7c2b9..a033b59b56ae 100644
--- a/code/modules/research/bepis.dm
+++ b/code/modules/research/bepis.dm
@@ -17,7 +17,7 @@
density = TRUE
layer = ABOVE_MOB_LAYER
use_power = IDLE_POWER_USE
- active_power_usage = 1500
+ active_power_usage = ACTIVE_DRAW_HIGH
circuit = /obj/item/circuitboard/machine/bepis
var/banking_amount = 100
@@ -254,7 +254,7 @@
return
calcsuccess()
use_power(MACHINE_OPERATION * power_saver) //This thing should eat your APC battery if you're not careful.
- use_power = IDLE_POWER_USE //Machine shuts off after use to prevent spam and look better visually.
+ set_idle_power() //Machine shuts off after use to prevent spam and look better visually.
update_icon_state()
if("amount")
var/input = text2num(params["amount"])
@@ -262,9 +262,9 @@
banking_amount = input
if("toggle_power")
if(use_power == ACTIVE_POWER_USE)
- use_power = IDLE_POWER_USE
+ set_idle_power()
else
- use_power = ACTIVE_POWER_USE
+ set_active_power()
update_icon_state()
if("account_reset")
if(use_power == IDLE_POWER_USE)
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 36a22dac2cc7..0f8c2eb53c1d 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -2,6 +2,10 @@
name = "technology fabricator"
desc = "Makes researched and prototype items with materials and energy."
layer = BELOW_OBJ_LAYER
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_LOW
+ active_power_usage = ACTIVE_DRAW_HIGH
+ power_channel = AREA_USAGE_EQUIP
var/consoleless_interface = FALSE //Whether it can be used without a console.
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
var/list/categories = list()
@@ -96,6 +100,7 @@
if(notify_admins)
investigate_log("[key_name(usr)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH)
message_admins("[ADMIN_LOOKUPFLW(usr)] has built [amount] of [path] at \a [src]([type]).")
+ set_idle_power()
for(var/i in 1 to amount)
var/obj/item/I = new path(get_turf(src))
if(efficient_with(I.type))
@@ -142,11 +147,11 @@
if(materials.on_hold())
say("Mineral access is on hold, please contact the quartermaster.")
return FALSE
- var/power = 1000
+ var/power = active_power_usage
amount = clamp(amount, 1, 50)
for(var/M in D.materials)
power += round(D.materials[M] * amount / 35)
- power = min(3000, power)
+ power = min(ACTIVE_DRAW_EXTREME, power)
use_power(power)
var/coeff = efficient_with(D.build_path) ? efficiency_coeff : 1
var/list/efficient_mats = list()
@@ -168,6 +173,7 @@
flick(production_animation, src)
var/timecoeff = D.lathe_time_factor / efficiency_coeff
addtimer(CALLBACK(src, PROC_REF(reset_busy)), (30 * timecoeff * amount) ** 0.5)
+ set_active_power()
addtimer(CALLBACK(src, PROC_REF(do_print), D.build_path, amount, efficient_mats, D.dangerous_construction), (32 * timecoeff * amount) ** 0.8)
return TRUE
diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm
index d5d5fa79e8ca..eb50a70af0bb 100644
--- a/code/modules/research/nanites/nanite_chamber.dm
+++ b/code/modules/research/nanites/nanite_chamber.dm
@@ -9,8 +9,8 @@
use_power = IDLE_POWER_USE
anchored = TRUE
density = TRUE
- idle_power_usage = 50
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
var/locked = FALSE
var/breakout_time = 1200
diff --git a/code/modules/research/nanites/public_chamber.dm b/code/modules/research/nanites/public_chamber.dm
index 9e39486c2052..b149fda6baae 100644
--- a/code/modules/research/nanites/public_chamber.dm
+++ b/code/modules/research/nanites/public_chamber.dm
@@ -8,8 +8,8 @@
use_power = IDLE_POWER_USE
anchored = TRUE
density = TRUE
- idle_power_usage = 50
- active_power_usage = 300
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_HIGH
var/cloud_id = 1
var/locked = FALSE
diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm
index 7f3693e98760..58e75c399d81 100644
--- a/code/modules/security_levels/keycard_authentication.dm
+++ b/code/modules/security_levels/keycard_authentication.dm
@@ -10,8 +10,8 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new)
icon = 'icons/obj/monitors.dmi'
icon_state = "auth_off"
use_power = IDLE_POWER_USE
- idle_power_usage = 2
- active_power_usage = 6
+ idle_power_usage = IDLE_DRAW_MINIMAL
+ active_power_usage = ACTIVE_DRAW_MINIMAL
power_channel = AREA_USAGE_ENVIRON
req_access = list(ACCESS_KEYCARD_AUTH)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index 9679aa860c9c..b894f99c255d 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -120,7 +120,7 @@
icon_state = "vault"
density = TRUE
anchored = TRUE
- idle_power_usage = 5000
+ idle_power_usage = ACTIVE_DRAW_EXTREME
pixel_x = -32
pixel_y = -64
light_range = 3
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 93fcacba45b1..4c97b3f7eaa2 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -47,6 +47,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "generic"
layer = BELOW_OBJ_LAYER
density = TRUE
+ use_power = IDLE_POWER_USE
+ idle_power_usage = IDLE_DRAW_MINIMAL
verb_say = "beeps"
verb_ask = "beeps"
verb_exclaim = "beeps"