Files
Bubberstation/code/game/objects/items/scrolls.dm
SkyratBot 7aec36565e [MIRROR] Scroll of teleportation tweaks (#2409)
* Scroll tweaks (#55609)

This PR makes a few changes regarding scrolls of teleportation.

Scrolls of teleportation no longer use outdated HTML based interface and will take you straight into a list of a possible destinations upon use. That interface had a very little point of existing in the first place, the only possibly useful information was number of remaining uses, which is solved by a point below.

Scrolls of teleportation now show a number of remaining uses upon examination and also give proper feedback messages upon teleportation.

Scrolls of teleportation now crumble to dust when out of uses. They are a consumable item and cannot be recharged, which made them utterly useless when out of uses, creating only clutter.

* Scroll of teleportation tweaks

Co-authored-by: Arkatos1 <43862960+Arkatos1@users.noreply.github.com>
2021-01-01 14:32:33 +01:00

73 lines
2.1 KiB
Plaintext

/obj/item/teleportation_scroll
name = "scroll of teleportation"
desc = "A scroll for moving around."
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
worn_icon_state = "scroll"
w_class = WEIGHT_CLASS_SMALL
inhand_icon_state = "paper"
throw_speed = 3
throw_range = 7
resistance_flags = FLAMMABLE
/// Number of uses remaining
var/uses = 4
/obj/item/teleportation_scroll/apprentice
name = "lesser scroll of teleportation"
uses = 1
/obj/item/teleportation_scroll/examine(mob/user)
. = ..()
if(uses > 0)
. += "It has [uses] use\s remaining."
/obj/item/teleportation_scroll/attack_self(mob/user)
if(!uses)
return
if(!ishuman(user))
return
var/mob/living/carbon/human/human_user = user
if(human_user.incapacitated())
return
if(!human_user.is_holding(src))
return
teleportscroll(human_user)
/**
* Shows a list of a possible teleport destinations to a user and then teleports him to to his chosen destination
*
* Arguments:
* * user The mob that is being teleported
*/
/obj/item/teleportation_scroll/proc/teleportscroll(mob/user)
var/A
A = input(user, "Area to jump to", "BOOYEA", A) as null|anything in GLOB.teleportlocs
if(!src || QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !A || !uses)
return
var/area/thearea = GLOB.teleportlocs[A]
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(2, user.loc)
smoke.attach(user)
smoke.start()
var/list/L = list()
for(var/turf/T in get_area_turfs(thearea.type))
if(!T.is_blocked_turf())
L += T
if(!L.len)
to_chat(user, "<span class='warning'>The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.</span>")
return
if(do_teleport(user, pick(L), forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE))
smoke.start()
uses--
if(!uses)
to_chat(user, "<span class='warning'>[src] has run out of uses and crumbles to dust!</span>")
qdel(src)
else
to_chat(user, "<span class='notice'>[src] has [uses] use\s remaining.</span>")
else
to_chat(user, "<span class='warning'>The spell matrix was disrupted by something near the destination.</span>")