diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index a470b7ec6c7..d625c4211d7 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -16,7 +16,7 @@
/obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob, params)
if(istype(user,/mob/living/silicon))
return
- if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton) || istype(G,/obj/item/device/laptop))
+ if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton) || istype(G,/obj/item/device/laptop) || istype(G, /obj/item/weapon/rcs))
if(charging)
return
@@ -95,6 +95,14 @@
use_power(2500)
else
icon_state = icon_state_charged
+ if(istype(charging, /obj/item/weapon/rcs))
+ var/obj/item/weapon/rcs/R = charging
+ if(R.rcell && R.rcell.charge < R.rcell.maxcharge)
+ R.rcell.charge += 1750
+ icon_state = icon_state_charging
+ use_power(2000)
+ else
+ icon_state = icon_state_charged
return
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 0854fa6ed76..b15fa393e9b 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -180,7 +180,7 @@
if(user in contents) //to prevent self-teleporting.
return
var/obj/item/weapon/rcs/E = W
- if(E.rcharges != 0)
+ if(E.rcell && (E.rcell.charge >= E.chargecost))
if(!(src.z in config.contact_levels))
user << "The rapid-crate-sender can't locate any telepads!"
return
@@ -210,14 +210,8 @@
s.set_up(5, 1, src)
s.start()
do_teleport(src, E.pad, 0)
- E.rcharges--
- if(E.rcharges != 1)
- user << "\blue Teleport successful. [E.rcharges] charges left."
- E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left."
- return
- else
- user << "\blue Teleport successful. [E.rcharges] charge left."
- E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left."
+ E.rcell.use(E.chargecost)
+ user << "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left."
return
else
E.rand_x = rand(50,200)
@@ -234,17 +228,11 @@
s.set_up(5, 1, src)
s.start()
do_teleport(src, L)
- E.rcharges--
- if(E.rcharges != 1)
- user << "\blue Teleport successful. [E.rcharges] charges left."
- E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left."
- return
- else
- user << "\blue Teleport successful. [E.rcharges] charge left."
- E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left."
- return
+ E.rcell.use(E.chargecost)
+ user << "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left."
+ return
else
- user << "\red Out of charges."
+ user << "Out of charges."
return
if(src.opened)
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 0bb355570a0..657c4a6249f 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -81,7 +81,7 @@
/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/rcs) && !src.opened)
var/obj/item/weapon/rcs/E = W
- if(E.rcharges != 0)
+ if(E.rcell && (E.rcell.charge >= E.chargecost))
if(!(src.z in config.player_levels))
user << "The rapid-crate-sender can't locate any telepads!"
return
@@ -111,14 +111,8 @@
s.set_up(5, 1, src)
s.start()
do_teleport(src, E.pad, 0)
- E.rcharges--
- if(E.rcharges != 1)
- user << "\blue Teleport successful. [E.rcharges] charges left."
- E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left."
- return
- else
- user << "\blue Teleport successful. [E.rcharges] charge left."
- E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left."
+ E.rcell.use(E.chargecost)
+ user << "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left."
return
else
E.rand_x = rand(50,200)
@@ -135,17 +129,11 @@
s.set_up(5, 1, src)
s.start()
do_teleport(src, L)
- E.rcharges--
- if(E.rcharges != 1)
- user << "\blue Teleport successful. [E.rcharges] charges left."
- E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left."
- return
- else
- user << "\blue Teleport successful. [E.rcharges] charge left."
- E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left."
- return
+ E.rcell.use(E.chargecost)
+ user << "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left."
+ return
else
- user << "\red Out of charges."
+ user << "Out of charges."
return
if(opened)
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 17225c64caa..7b497dc731b 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -119,36 +119,30 @@
throwforce = 10.0
throw_speed = 2
throw_range = 5
- var/rcharges = 10
+ var/obj/item/weapon/stock_parts/cell/high/rcell = null
var/obj/machinery/pad = null
- var/last_charge = 30
var/mode = 0
var/rand_x = 0
var/rand_y = 0
var/emagged = 0
var/teleporting = 0
+ var/chargecost = 1500
/obj/item/weapon/rcs/New()
..()
- processing_objects.Add(src)
+ rcell = new(src)
+
/obj/item/weapon/rcs/examine(mob/user)
..(user)
- user << "There are [rcharges] charge\s left."
+ user << "There are [round(rcell.charge/chargecost)] charge\s left."
/obj/item/weapon/rcs/Destroy()
- processing_objects.Remove(src)
+ if(rcell)
+ qdel(rcell)
+ rcell = null
return ..()
-/obj/item/weapon/rcs/process()
- if(rcharges > 10)
- rcharges = 10
- if(last_charge == 0)
- rcharges++
- last_charge = 30
- else
- last_charge--
-
/obj/item/weapon/rcs/attack_self(mob/user)
if(emagged)
if(mode == 0)