mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-24 16:41:48 +00:00
* Refactors and improves SDQL spells (#60972) SDQL spells have been improved in several ways: - The behavior of executing SDQL spell queries using datums has been migrated to a component - Projectile SDQL spells can now fire any subtype of /obj/projectile - Touch SDQL spells can use any subtype of /obj/item/melee/touch_attack - More robust parse error detection - Parse errors while loading a file from json are displayed in a modal window, with the option to load whatever parts of the spell were correctly parsed (be forewarned, scrollable sections are scuffed, and the ones that appear in the parse error modal can only be scrolled through by drag-selecting the text within them) - Fixes a bug with the names of variables within lists - Compartmentalizes SDQL spell code into several .dm files. Co-authored-by: Aleksej Komarov <stylemistake@ gmail.com> * Refactors and improves SDQL spells Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net> Co-authored-by: Aleksej Komarov <stylemistake@ gmail.com>
147 lines
6.3 KiB
Plaintext
147 lines
6.3 KiB
Plaintext
/obj/effect/proc_holder/spell/aimed/sdql
|
|
name = "Aimed SDQL Spell"
|
|
desc = "If you are reading this outside of the \"Give SDQL Spell\" menu, tell the admin that gave this spell to you to use said menu."
|
|
projectile_type = /obj/projectile
|
|
|
|
/obj/effect/proc_holder/spell/aimed/sdql/Initialize(mapload, new_owner, giver)
|
|
. = ..()
|
|
AddComponent(/datum/component/sdql_executor, giver)
|
|
RegisterSignal(src, COMSIG_PROJECTILE_ON_HIT, .proc/on_projectile_hit)
|
|
|
|
/obj/effect/proc_holder/spell/aimed/sdql/proc/on_projectile_hit(source, firer, target)
|
|
var/datum/component/sdql_executor/executor = GetComponent(/datum/component/sdql_executor)
|
|
if(!executor)
|
|
CRASH("[src]'s SDQL executor component went missing!")
|
|
executor.execute(list(target), owner.resolve())
|
|
|
|
/obj/effect/proc_holder/spell/aoe_turf/sdql
|
|
name = "AoE SDQL Spell"
|
|
desc = "If you are reading this outside of the \"Give SDQL Spell\" menu, tell the admin that gave this spell to you to use said menu."
|
|
|
|
/obj/effect/proc_holder/spell/aoe_turf/sdql/Initialize(mapload, new_owner, giver)
|
|
. = ..()
|
|
AddComponent(/datum/component/sdql_executor, giver)
|
|
|
|
/obj/effect/proc_holder/spell/aoe_turf/sdql/cast(list/targets, mob/user)
|
|
var/datum/component/sdql_executor/executor = GetComponent(/datum/component/sdql_executor)
|
|
if(!executor)
|
|
CRASH("[src]'s SDQL executor component went missing!")
|
|
executor.execute(targets, user)
|
|
|
|
/obj/effect/proc_holder/spell/cone/sdql
|
|
name = "Cone SDQL Spell"
|
|
desc = "If you are reading this outside of the \"Give SDQL Spell\" menu, tell the admin that gave this spell to you to use said menu."
|
|
var/list/targets = list()
|
|
|
|
/obj/effect/proc_holder/spell/cone/sdql/Initialize(mapload, new_owner, giver)
|
|
. = ..()
|
|
AddComponent(/datum/component/sdql_executor, giver)
|
|
|
|
/obj/effect/proc_holder/spell/cone/sdql/do_mob_cone_effect(mob/living/target_mob, level)
|
|
targets |= target_mob
|
|
|
|
/obj/effect/proc_holder/spell/cone/sdql/do_obj_cone_effect(obj/target_obj, level)
|
|
targets |= target_obj
|
|
|
|
/obj/effect/proc_holder/spell/cone/sdql/do_turf_cone_effect(turf/target_turf, level)
|
|
targets |= target_turf
|
|
|
|
/obj/effect/proc_holder/spell/cone/sdql/cast(list/targets, mob/user)
|
|
. = ..()
|
|
var/datum/component/sdql_executor/executor = GetComponent(/datum/component/sdql_executor)
|
|
if(!executor)
|
|
CRASH("[src]'s SDQL executor component went missing!")
|
|
executor.execute(targets, user)
|
|
targets = list()
|
|
|
|
/obj/effect/proc_holder/spell/cone/staggered/sdql
|
|
name = "Staggered Cone SDQL Spell"
|
|
desc = "If you are reading this outside of the \"Give SDQL Spell\" menu, tell the admin that gave this spell to you to use said menu."
|
|
var/list/targets = list()
|
|
|
|
/obj/effect/proc_holder/spell/cone/staggered/sdql/Initialize(mapload, new_owner, giver)
|
|
. = ..()
|
|
AddComponent(/datum/component/sdql_executor, giver)
|
|
|
|
/obj/effect/proc_holder/spell/cone/staggered/sdql/do_mob_cone_effect(mob/living/target_mob, level)
|
|
targets |= target_mob
|
|
|
|
/obj/effect/proc_holder/spell/cone/staggered/sdql/do_obj_cone_effect(obj/target_obj, level)
|
|
targets |= target_obj
|
|
|
|
/obj/effect/proc_holder/spell/cone/staggered/sdql/do_turf_cone_effect(turf/target_turf, level)
|
|
targets |= target_turf
|
|
|
|
/obj/effect/proc_holder/spell/cone/staggered/sdql/do_cone_effects(list/target_turf_list, level)
|
|
. = ..()
|
|
var/datum/component/sdql_executor/executor = GetComponent(/datum/component/sdql_executor)
|
|
if(!executor)
|
|
CRASH("[src]'s SDQL executor component went missing!")
|
|
executor.execute(target_turf_list, owner.resolve())
|
|
targets = list()
|
|
|
|
/obj/effect/proc_holder/spell/pointed/sdql
|
|
name = "Pointed SDQL Spell"
|
|
desc = "If you are reading this outside of the \"Give SDQL Spell\" menu, tell the admin that gave this spell to you to use said menu."
|
|
|
|
/obj/effect/proc_holder/spell/pointed/sdql/Initialize(mapload, new_owner, giver)
|
|
. = ..()
|
|
AddComponent(/datum/component/sdql_executor, giver)
|
|
|
|
/obj/effect/proc_holder/spell/pointed/sdql/cast(list/targets, mob/user)
|
|
var/datum/component/sdql_executor/executor = GetComponent(/datum/component/sdql_executor)
|
|
if(!executor)
|
|
CRASH("[src]'s SDQL executor component went missing!")
|
|
executor.execute(targets, user)
|
|
|
|
/obj/effect/proc_holder/spell/self/sdql
|
|
name = "Self SDQL Spell"
|
|
desc = "If you are reading this outside of the \"Give SDQL Spell\" menu, tell the admin that gave this spell to you to use said menu."
|
|
|
|
/obj/effect/proc_holder/spell/self/sdql/Initialize(mapload, new_owner, giver)
|
|
. = ..()
|
|
AddComponent(/datum/component/sdql_executor, giver)
|
|
|
|
/obj/effect/proc_holder/spell/self/sdql/cast(list/targets, mob/user)
|
|
var/datum/component/sdql_executor/executor = GetComponent(/datum/component/sdql_executor)
|
|
if(!executor)
|
|
CRASH("[src]'s SDQL executor component went missing!")
|
|
executor.execute(targets, user)
|
|
|
|
/obj/effect/proc_holder/spell/targeted/sdql
|
|
name = "Targeted SDQL Spell"
|
|
desc = "If you are reading this outside of the \"Give SDQL Spell\" menu, tell the admin that gave this spell to you to use said menu."
|
|
|
|
/obj/effect/proc_holder/spell/targeted/sdql/Initialize(mapload, new_owner, giver)
|
|
. = ..()
|
|
AddComponent(/datum/component/sdql_executor, giver)
|
|
|
|
/obj/effect/proc_holder/spell/targeted/sdql/cast(list/targets, mob/user)
|
|
var/datum/component/sdql_executor/executor = GetComponent(/datum/component/sdql_executor)
|
|
if(!executor)
|
|
CRASH("[src]'s SDQL executor component went missing!")
|
|
executor.execute(targets, user)
|
|
|
|
/obj/effect/proc_holder/spell/targeted/touch/sdql
|
|
name = "Touch SDQL Spell"
|
|
desc = "If you are reading this outside of the \"Give SDQL Spell\" menu, tell the admin that gave this spell to you to use said menu."
|
|
var/list/hand_var_overrides = list() //The touch attack has its vars changed to the ones put in this list.
|
|
|
|
/obj/effect/proc_holder/spell/targeted/touch/sdql/Initialize(mapload, new_owner, giver)
|
|
. = ..()
|
|
AddComponent(/datum/component/sdql_executor, giver)
|
|
|
|
/obj/effect/proc_holder/spell/targeted/touch/sdql/ChargeHand(mob/living/carbon/user)
|
|
if(..())
|
|
for(var/V in hand_var_overrides)
|
|
if(attached_hand.vars[V])
|
|
attached_hand.vv_edit_var(V, hand_var_overrides[V])
|
|
RegisterSignal(attached_hand, COMSIG_ITEM_AFTERATTACK, .proc/on_touch_attack)
|
|
user.update_inv_hands()
|
|
|
|
/obj/effect/proc_holder/spell/targeted/touch/sdql/proc/on_touch_attack(source, target, user)
|
|
var/datum/component/sdql_executor/executor = GetComponent(/datum/component/sdql_executor)
|
|
if(!executor)
|
|
CRASH("[src]'s SDQL executor component went missing!")
|
|
executor.execute(list(target), user)
|