mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 00:29:02 +01:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user