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