mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 13:38:41 +01:00
[MIRROR] Completely removes proc_holders from existence. Refactors all wizard, xeno, spider, and genetics powers to be actions. Also refactors and sorts ton of accompanying code. [MDB IGNORE] (#14666)
* Completely removes `proc_holders` from existence. Refactors all wizard, xeno, spider, and genetics powers to be actions. Also refactors and sorts ton of accompanying code. * our changes * yes * 0 * Update blackmesa.dmm Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
This commit is contained in:
co-authored by
MrMelbert
Gandalf
parent
f507824ee7
commit
c68fea7cba
@@ -9,9 +9,22 @@
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
resistance_flags = FLAMMABLE
|
||||
/// Number of uses remaining
|
||||
actions_types = list(/datum/action/cooldown/spell/teleport/area_teleport/wizard/scroll)
|
||||
/// Number of uses the scroll gets.
|
||||
var/uses = 4
|
||||
|
||||
/obj/item/teleportation_scroll/Initialize(mapload)
|
||||
. = ..()
|
||||
// In the future, this can be generalized into just "magic scrolls that give you a specific spell".
|
||||
var/datum/action/cooldown/spell/teleport/area_teleport/wizard/scroll/teleport = locate() in actions
|
||||
if(teleport)
|
||||
teleport.name = name
|
||||
teleport.icon_icon = icon
|
||||
teleport.button_icon_state = icon_state
|
||||
|
||||
/obj/item/teleportation_scroll/item_action_slot_check(slot, mob/user)
|
||||
return (slot == ITEM_SLOT_HANDS)
|
||||
|
||||
/obj/item/teleportation_scroll/apprentice
|
||||
name = "lesser scroll of teleportation"
|
||||
uses = 1
|
||||
@@ -22,54 +35,24 @@
|
||||
. += "It has [uses] use\s remaining."
|
||||
|
||||
/obj/item/teleportation_scroll/attack_self(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
if(!uses)
|
||||
return
|
||||
if(!ishuman(user))
|
||||
return
|
||||
var/mob/living/carbon/human/human_user = user
|
||||
if(human_user.incapacitated())
|
||||
if(human_user.incapacitated() || !human_user.is_holding(src))
|
||||
return
|
||||
if(!human_user.is_holding(src))
|
||||
var/datum/action/cooldown/spell/teleport/area_teleport/wizard/scroll/teleport = locate() in actions
|
||||
if(!teleport)
|
||||
to_chat(user, span_warning("[src] seems to be a faulty teleportation scroll, and has no magic associated."))
|
||||
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)
|
||||
if(!length(GLOB.teleportlocs))
|
||||
to_chat(user, span_warning("There are no locations available"))
|
||||
if(!teleport.Activate(user))
|
||||
return
|
||||
var/jump_target = tgui_input_list(user, "Area to jump to", "BOOYEA", GLOB.teleportlocs)
|
||||
if(isnull(jump_target))
|
||||
return
|
||||
if(!src || QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !uses)
|
||||
return
|
||||
var/area/thearea = GLOB.teleportlocs[jump_target]
|
||||
|
||||
var/datum/effect_system/fluid_spread/smoke/smoke = new
|
||||
smoke.set_up(2, holder = src, location = user.loc)
|
||||
smoke.attach(user)
|
||||
smoke.start()
|
||||
var/list/possible_locations = list()
|
||||
for(var/turf/target_turf in get_area_turfs(thearea.type))
|
||||
if(!target_turf.is_blocked_turf())
|
||||
possible_locations += target_turf
|
||||
|
||||
if(!length(possible_locations))
|
||||
to_chat(user, span_warning("The spell matrix was unable to locate a suitable teleport destination for an unknown reason."))
|
||||
return
|
||||
|
||||
if(do_teleport(user, pick(possible_locations), channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE))
|
||||
smoke.start()
|
||||
uses--
|
||||
if(!uses)
|
||||
to_chat(user, span_warning("[src] has run out of uses and crumbles to dust!"))
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, span_notice("[src] has [uses] use\s remaining."))
|
||||
else
|
||||
to_chat(user, span_warning("The spell matrix was disrupted by something near the destination."))
|
||||
if(--uses <= 0)
|
||||
to_chat(user, span_warning("[src] runs out of uses and crumbles to dust!"))
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
Reference in New Issue
Block a user