diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index c20ca8468a..6f3041dd6d 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -196,47 +196,51 @@
if(icon_update_tick == 0)
build_overlays()
-/obj/machinery/recharge_station/Bumped(var/mob/AM)
- move_inside(AM)
+/obj/machinery/recharge_station/Bumped(var/mob/living/silicon/robot/R)
+ if(istype(R))
+ go_in(R)
+
+/obj/machinery/recharge_station/proc/go_in(var/mob/living/silicon/robot/R)
+ if(!istype(R))
+ return
+ if(occupant)
+ return
+
+ R.reset_view(src)
+ R.forceMove(src)
+ occupant = R
+ update_icon()
/obj/machinery/recharge_station/proc/go_out()
- if(!(occupant))
+ if(!occupant)
return
- occupant.loc = loc
+
+ occupant.forceMove(loc)
occupant.reset_view()
occupant = null
update_icon()
- return
/obj/machinery/recharge_station/verb/move_eject()
set category = "Object"
+ set name = "Eject Recharger"
set src in oview(1)
- if(usr.stat != 0)
+
+ // TODO : Change to incapacitated() on merge.
+ if(usr.stat || usr.lying || usr.resting || usr.buckled)
return
+
go_out()
add_fingerprint(usr)
return
/obj/machinery/recharge_station/verb/move_inside()
set category = "Object"
+ set name = "Enter Recharger"
set src in oview(1)
- if(usr.stat == DEAD)
- return
- if(occupant)
- usr << "\The [src] is already occupied!"
+ // TODO : Change to incapacitated() on merge.
+ if(usr.stat || usr.lying || usr.resting || usr.buckled)
return
- var/mob/living/silicon/robot/R = usr
- if(!istype(R))
- usr << "Only synthetics may enter the recharger!"
- return
- if(!R.cell)
- usr << "Without a powercell, you can't be recharged."
- return
-
- usr.reset_view(src)
- usr.loc = src
- occupant = usr
+ go_in(usr)
add_fingerprint(usr)
- update_icon()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 914664bbda..bf3393f903 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -394,8 +394,8 @@
// returns whether this light has power
// true if area has power and lightswitch is on
/obj/machinery/light/proc/has_power()
- var/area/A = src.loc.loc
- return A.lightswitch && (!A.requires_power || A.power_light)
+ var/area/A = get_area(src)
+ return A && A.lightswitch && (!A.requires_power || A.power_light)
/obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
if(flickering) return