diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index be015b02bdd..a9aa4a6aa51 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -266,6 +266,12 @@ proc/isInSight(var/atom/A, var/atom/B)
else
return get_step(start, EAST)
+/proc/try_move_adjacent(atom/movable/AM)
+ var/turf/T = get_turf(AM)
+ for(var/direction in cardinal)
+ if(AM.Move(get_step(T, direction)))
+ break
+
/proc/get_mob_by_key(var/key)
for(var/mob/M in mob_list)
if(M.ckey == lowertext(key))
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index a9dcdc537dc..567cbfe5284 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -67,15 +67,25 @@
attack_hand(mob/user)
if(charging)
- usr.put_in_hands(charging)
+ user.put_in_hands(charging)
charging.add_fingerprint(user)
charging.updateicon()
- src.charging = null
+ charging = null
user.visible_message("[user] removes the cell from the charger.", "You remove the cell from the charger.")
chargelevel = -1
updateicon()
+ attack_tk(mob/user)
+ if(charging)
+ charging.loc = loc
+ charging.updateicon()
+ user << "You telekinetically remove [charging] from [src]."
+
+ charging = null
+ chargelevel = -1
+ updateicon()
+
attack_ai(mob/user)
return
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 4f0550868f3..4968f427ea2 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -54,10 +54,16 @@
use_power = 1
update_icon()
-
/obj/machinery/recharger/attack_paw(mob/user)
return attack_hand(user)
+/obj/machinery/recharger/attack_tk(mob/user)
+ if(charging)
+ charging.update_icon()
+ charging.loc = loc
+ charging = null
+ use_power = 1
+ update_icon()
/obj/machinery/recharger/process()
if(stat & (NOPOWER|BROKEN) || !anchored)
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 8a088f3cb86..83b21f8694a 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -879,9 +879,10 @@
set category = "Exosuit Interface"
set src = usr.loc
set popup_menu = 0
- if(!src.occupant) return
- if(usr!=src.occupant)
- return
+
+ if(usr.stat) return
+ if(usr != src.occupant) return
+
var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc
if(possible_port)
if(connect(possible_port))
@@ -901,9 +902,10 @@
set category = "Exosuit Interface"
set src = usr.loc
set popup_menu = 0
- if(!src.occupant) return
- if(usr!=src.occupant)
- return
+
+ if(usr.stat) return
+ if(usr != src.occupant) return
+
if(disconnect())
src.occupant_message("\blue [name] disconnects from the port.")
src.verbs -= /obj/mecha/verb/disconnect_from_port
@@ -916,7 +918,10 @@
set category = "Exosuit Interface"
set src = usr.loc
set popup_menu = 0
- if(usr!=occupant) return
+
+ if(usr.stat) return
+ if(usr != occupant) return
+
lights = !lights
if(lights) SetLuminosity(luminosity + lights_power)
else SetLuminosity(luminosity - lights_power)
@@ -930,8 +935,10 @@
set category = "Exosuit Interface"
set src = usr.loc
set popup_menu = 0
- if(usr!=src.occupant)
- return
+
+ if(usr.stat) return
+ if(usr != src.occupant) return
+
use_internal_tank = !use_internal_tank
src.occupant_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].")
src.log_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].")
@@ -1090,8 +1097,9 @@
set category = "Exosuit Interface"
set src = usr.loc
set popup_menu = 0
- if(usr!=src.occupant)
- return
+
+ if(usr != src.occupant) return
+
src.go_out()
add_fingerprint(usr)
return
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index 0e243048570..c35d49dc9ec 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -165,7 +165,8 @@ Frequency:
var/T = L[t1]
for(var/mob/O in hearers(user, null))
O.show_message("Locked In.", 2)
- new /obj/effect/portal( get_turf(src), T, src )
+ var/obj/effect/portal/P = new /obj/effect/portal(get_turf(src), T, src)
+ try_move_adjacent(P)
active_portals++
src.add_fingerprint(user)
return
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index ffc00aed53d..b11fa29d273 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -46,6 +46,11 @@
dizziness = 0
jitteriness = 0
+ if(istype(loc, /obj/mecha))
+ var/obj/mecha/M = loc
+ if(M.occupant == src)
+ M.go_out()
+
if(!gibbed)
emote("deathgasp") //let the world KNOW WE ARE DEAD