diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm index 71eebf9d42c..da5879c5b96 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -73,6 +73,7 @@ /datum/action/cooldown/spell/aoe/revenant/malfunction, /datum/action/cooldown/spell/aoe/revenant/overload, /datum/action/cooldown/spell/list_target/telepathy/revenant, + /datum/action/cooldown/spell/pointed/revenant/bloodwriting, //BUBBER ADDITION ) /// The resource, and health, of revenants. @@ -202,6 +203,10 @@ relay_to_list_and_observers(rendered, GLOB.revenant_relay_mobs, src) /mob/living/basic/revenant/ClickOn(atom/A, params) //revenants can't interact with the world directly, so we gotta do some wacky override stuff + //BUBBER ADDITION START + if(check_click_intercept(params,A) || HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) + return + //BUBBER ADDITION END var/list/modifiers = params2list(params) if(LAZYACCESS(modifiers, SHIFT_CLICK)) ShiftClickOn(A) diff --git a/modular_zubbers/code/modules/antagonists/revenant/bloodwriting.dm b/modular_zubbers/code/modules/antagonists/revenant/bloodwriting.dm new file mode 100644 index 00000000000..edf942825b0 --- /dev/null +++ b/modular_zubbers/code/modules/antagonists/revenant/bloodwriting.dm @@ -0,0 +1,86 @@ +#define INFINITE_CHARGES -1 + +/datum/action/cooldown/spell/pointed/revenant/bloodwriting + name = "Bloodwriting" + desc = "Write messages on the ground. In BLOOD!!" + button_icon = 'icons/effects/blood.dmi' + button_icon_state = "bubblegumfoot" + antimagic_flags = MAGIC_RESISTANCE_HOLY + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC + cooldown_time = 2.5 SECONDS + + ///The crayon used for the bloodwriting + var/obj/item/toy/crayon/revenant/blood_crayon + var/obj/item/toy/crayon/revenant/active_blood_crayon + ///used to check if the ability is active + active_msg = "You start writing in blood." + deactive_msg = "You stop writing in blood." + aim_assist = FALSE + unset_after_click = FALSE + var/list/click_params + + +/datum/action/cooldown/spell/pointed/revenant/bloodwriting/on_activation(mob/on_who) + . = ..() + if(!blood_crayon) + blood_crayon = new() + blood_crayon.drawtype = pick(blood_crayon.all_drawables) + + blood_crayon.forceMove(on_who) + active_blood_crayon = blood_crayon + + blood_crayon.ui_interact(on_who, null) + +/datum/action/cooldown/spell/pointed/revenant/bloodwriting/on_deactivation(mob/on_who, refund_cooldown) + . = ..() + if(blood_crayon) + SStgui.close_uis(blood_crayon, on_who) + QDEL_NULL(blood_crayon) + + active_blood_crayon = null + +/datum/action/cooldown/spell/pointed/revenant/bloodwriting/is_valid_target(atom/cast_on) + return isturf(cast_on) + +/datum/action/cooldown/spell/pointed/revenant/bloodwriting/cast(atom/cast_on) + . = ..() + if(active_blood_crayon) + if(!IsAvailable()) + return FALSE + + if(!active_blood_crayon.can_use_on(cast_on, owner)) + return FALSE + StartCooldown() + active_blood_crayon.use_on(cast_on, owner, click_params) + return TRUE + return FALSE + +/datum/action/cooldown/spell/pointed/revenant/bloodwriting/InterceptClickOn(mob/living/clicker, params, atom/target) + src.click_params = params2list(params) //hacky solution, but I am sick and tired of working on this. I will not fiddle with porting everything in cast() down here. + return ..() + +//Crayon stuff neccessary for this +/obj/item/toy/crayon/revenant + name = "bloodwriting" + desc = "If you're reading this, something went wrong. yell at coders." + icon = null + icon_state = null + charges = INFINITE_CHARGES + self_contained = FALSE + edible = FALSE + can_change_colour = FALSE + paint_color = COLOR_DARK_RED + actually_paints = TRUE + instant = TRUE + pre_noise = FALSE + post_noise = FALSE + +/obj/item/toy/crayon/revenant/ui_state(mob/user) + return GLOB.always_state + +/obj/item/toy/crayon/revenant/ui_data(mob/user) + . = ..() + // Force literacy for bloodwriting UI + .["is_literate_user"] = TRUE + +#undef INFINITE_CHARGES diff --git a/tgstation.dme b/tgstation.dme index 254a5cd21dd..661927b69ab 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9205,6 +9205,7 @@ #include "modular_zubbers\code\modules\antagonists\malf\remove_malf.dm" #include "modular_zubbers\code\modules\antagonists\nightmare\nightmare_species.dm" #include "modular_zubbers\code\modules\antagonists\nukeop\equipment\nuclear_authentication_disk.dm" +#include "modular_zubbers\code\modules\antagonists\revenant\bloodwriting.dm" #include "modular_zubbers\code\modules\antagonists\voidwalker\voidwalker_mood.dm" #include "modular_zubbers\code\modules\antagonists\voidwalker\voidwalker_trauma.dm" #include "modular_zubbers\code\modules\antagonists\wizard\events_removal.dm"