Fix wormhole jaunter behavior with chasms and EMP (#61055)

Wormhole jaunters will now save the user from a chasm if they fall in and it's on their belt. Wormhole jaunters also are affected by EMP correctly. Before it would only be affected by an EMP if it was in the belt storage area which made no sense.

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>

(Lots of good work here, thank you tim)
This commit is contained in:
Tim
2021-09-08 17:13:07 -07:00
committed by GitHub
co-authored by LemonInTheDark
parent 00bd087824
commit 9eec84f84c
2 changed files with 54 additions and 38 deletions
@@ -20,13 +20,14 @@
activate(user, TRUE)
/obj/item/wormhole_jaunter/proc/turf_check(mob/user)
var/turf/device_turf = get_turf(user)
var/turf/device_turf = get_turf(src)
if(!device_turf || is_centcom_level(device_turf.z) || is_reserved_level(device_turf.z))
to_chat(user, span_notice("You're having difficulties getting the [src.name] to work."))
if(user)
to_chat(user, span_notice("You're having difficulties getting the [src.name] to work."))
return FALSE
return TRUE
/obj/item/wormhole_jaunter/proc/get_destinations(mob/user)
/obj/item/wormhole_jaunter/proc/get_destinations()
var/list/destinations = list()
for(var/obj/item/beacon/B in GLOB.teleportbeacons)
@@ -36,47 +37,61 @@
return destinations
/obj/item/wormhole_jaunter/proc/activate(mob/user, adjacent)
if(!turf_check(user))
return
/obj/item/wormhole_jaunter/proc/can_jaunter_teleport()
var/list/destinations = get_destinations()
return destinations.len > 0
/obj/item/wormhole_jaunter/proc/activate(mob/user, adjacent, teleport)
if(!turf_check(user))
return FALSE
if(!can_jaunter_teleport())
if(user)
to_chat(user, span_notice("\The [src] found no beacons in the world to anchor a wormhole to."))
else
visible_message(span_notice("\The [src] found no beacons in the world to anchor a wormhole to!"))
return TRUE // used for chasm code
var/list/destinations = get_destinations()
var/chosen_beacon = pick(destinations)
var/obj/effect/portal/jaunt_tunnel/tunnel = new (get_turf(src), 100, null, FALSE, get_turf(chosen_beacon))
if(teleport)
tunnel.teleport(user)
else if(adjacent)
try_move_adjacent(tunnel)
var/list/L = get_destinations(user)
if(!L.len)
to_chat(user, span_notice("The [src.name] found no beacons in the world to anchor a wormhole to."))
return
var/chosen_beacon = pick(L)
var/obj/effect/portal/jaunt_tunnel/J = new (get_turf(src), 100, null, FALSE, get_turf(chosen_beacon))
if(adjacent)
try_move_adjacent(J)
playsound(src,'sound/effects/sparks4.ogg',50,TRUE)
qdel(src)
return FALSE // used for chasm code
/obj/item/wormhole_jaunter/emp_act(power)
. = ..()
if(. & EMP_PROTECT_SELF)
return
var/mob/M = loc
if(istype(M))
var/triggered = FALSE
if(M.get_item_by_slot(ITEM_SLOT_BELT) == src)
if(power == 1)
triggered = TRUE
else if(power == 2 && prob(50))
triggered = TRUE
var/triggered = FALSE
if(power == 1)
triggered = TRUE
else if(power == 2 && prob(50))
triggered = TRUE
if(triggered)
M.visible_message(span_warning("[src] overloads and activates!"))
SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation
activate(M)
var/mob/M = loc
if(istype(M) && triggered)
M.visible_message(span_warning("Your [src.name] overloads and activates!"))
SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation
activate(M, FALSE, TRUE)
else if(triggered)
visible_message(span_warning("\The [src] overloads and activates!"))
activate()
/obj/item/wormhole_jaunter/proc/chasm_react(mob/user)
if(user.get_item_by_slot(ITEM_SLOT_BELT) == src)
to_chat(user, span_notice("Your [name] activates, saving you from the chasm!"))
var/fall_into_chasm = activate(user, FALSE, TRUE)
if(!fall_into_chasm)
to_chat(user, span_notice("Your [src.name] activates, saving you from the chasm!"))
SSblackbox.record_feedback("tally", "jaunter", 1, "Chasm") // chasm automatic activation
activate(user, FALSE)
else
to_chat(user, span_userdanger("[src] is not attached to your belt, preventing it from saving you from the chasm. RIP."))
return fall_into_chasm
//jaunter tunnel
/obj/effect/portal/jaunt_tunnel