diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index d1bee2bb62e..ce2f0616add 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -58,6 +58,10 @@ pulledby = null return ..() +//Returns an atom's power cell, if it has one. Overload for individual items. +/atom/movable/proc/get_cell() + return + /atom/movable/proc/start_pulling(atom/movable/AM, state, force = move_force, supress_message = FALSE) if(QDELETED(AM)) return FALSE diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 81006be3fdd..b8f2d153d9f 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -8,6 +8,7 @@ idle_power_usage = 4 active_power_usage = 250 var/obj/item/charging = null + var/using_power = FALSE var/list/allowed_devices = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/modular_computer, /obj/item/rcs, /obj/item/bodyanalyzer) var/icon_state_off = "rechargeroff" var/icon_state_charged = "recharger2" @@ -81,22 +82,21 @@ if(stat & (NOPOWER|BROKEN) || !anchored) return - var/using_power = 0 + using_power = FALSE if(charging) if(istype(charging, /obj/item/gun/energy)) var/obj/item/gun/energy/E = charging if(E.power_supply.charge < E.power_supply.maxcharge) E.power_supply.give(E.power_supply.chargerate) use_power(250) - using_power = 1 - + using_power = TRUE if(istype(charging, /obj/item/melee/baton)) var/obj/item/melee/baton/B = charging if(B.bcell) if(B.bcell.give(B.bcell.chargerate)) use_power(200) - using_power = 1 + using_power = TRUE if(istype(charging, /obj/item/modular_computer)) var/obj/item/modular_computer/C = charging @@ -107,21 +107,21 @@ if(B.battery.charge < B.battery.maxcharge) B.battery.give(B.battery.chargerate) use_power(200) - using_power = 1 + using_power = TRUE if(istype(charging, /obj/item/rcs)) var/obj/item/rcs/R = charging if(R.rcell) if(R.rcell.give(R.rcell.chargerate)) use_power(200) - using_power = 1 + using_power = TRUE if(istype(charging, /obj/item/bodyanalyzer)) var/obj/item/bodyanalyzer/B = charging if(B.power_supply) if(B.power_supply.give(B.power_supply.chargerate)) use_power(200) - using_power = 1 + using_power = TRUE update_icon(using_power) @@ -141,7 +141,7 @@ B.bcell.charge = 0 ..(severity) -/obj/machinery/recharger/update_icon(using_power = 0) //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. +/obj/machinery/recharger/update_icon(using_power = FALSE) //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. if(stat & (NOPOWER|BROKEN) || !anchored) icon_state = icon_state_off return @@ -153,6 +153,23 @@ return icon_state = icon_state_idle +/obj/machinery/recharger/examine(mob/user) + ..() + if(charging && (!in_range(user, src) && !issilicon(user) && !isobserver(user))) + to_chat(user, "You're too far away to examine [src]'s contents and display!") + return + + if(charging) + to_chat(user, "\The [src] contains:") + to_chat(user, "- \A [charging].") + if(!(stat & (NOPOWER|BROKEN))) + var/obj/item/stock_parts/cell/C = charging.get_cell() + to_chat(user, "The status display reads:") + if(using_power) + to_chat(user, "- Recharging [(C.chargerate/C.maxcharge)*100]% cell charge per cycle.") + if(charging) + to_chat(user, "- \The [charging]'s cell is at [C.percent()]%.") + // Atlantis: No need for that copy-pasta code, just use var to store icon_states instead. /obj/machinery/recharger/wallcharger name = "wall recharger" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 9bb036c4d05..cad4ae25ac8 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -591,6 +591,9 @@ REAGENT SCANNER var/scan_time = 10 SECONDS //how long does it take to scan var/scan_cd = 60 SECONDS //how long before we can scan again +/obj/item/bodyanalyzer/get_cell() + return power_supply + /obj/item/bodyanalyzer/advanced cell_type = /obj/item/stock_parts/cell/upgraded/plus diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index f128b874eaa..526340daea5 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -20,6 +20,9 @@ user.visible_message("[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide.") return FIRELOSS +/obj/item/melee/baton/get_cell() + return bcell + /obj/item/melee/baton/New() ..() update_icon() diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm index 65b4ef1f640..98f1ab5667e 100644 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ b/code/modules/modular_computers/hardware/battery_module.dm @@ -8,6 +8,9 @@ var/obj/item/stock_parts/cell/battery = null device_type = MC_CELL +/obj/item/computer_hardware/battery/get_cell() + return battery + /obj/item/computer_hardware/battery/New(loc, battery_type = null) if(battery_type) battery = new battery_type(src) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 4719ff75261..33b423c6360 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -19,6 +19,9 @@ var/ratingdesc = TRUE var/grown_battery = FALSE // If it's a grown that acts as a battery, add a wire overlay to it. +/obj/item/stock_parts/cell/get_cell() + return src + /obj/item/stock_parts/cell/New() ..() START_PROCESSING(SSobj, src) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index b25420b5491..cbc230c1e98 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -23,6 +23,9 @@ power_supply.use(round(power_supply.charge / severity)) update_icon() +/obj/item/gun/energy/get_cell() + return power_supply + /obj/item/gun/energy/New() ..() if(cell_type) diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 2f3667a645f..893e9719fb4 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -128,11 +128,13 @@ var/teleporting = 0 var/chargecost = 1000 +/obj/item/rcs/get_cell() + return rcell + /obj/item/rcs/New() ..() rcell = new(src) - /obj/item/rcs/examine(mob/user) ..(user) to_chat(user, "There are [round(rcell.charge/chargecost)] charge\s left.")