[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:
SkyratBot
2022-07-01 20:33:30 +01:00
committed by GitHub
co-authored by MrMelbert Gandalf
parent f507824ee7
commit c68fea7cba
405 changed files with 12842 additions and 11487 deletions
+27 -44
View File
@@ -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