diff --git a/code/datums/syndicate_buylist.dm b/code/datums/syndicate_buylist.dm index 3363dee48b81e..b083f8aef1e6d 100644 --- a/code/datums/syndicate_buylist.dm +++ b/code/datums/syndicate_buylist.dm @@ -536,6 +536,16 @@ This is basically useless for anyone but miners. vr_allowed = 0 can_buy = UPLINK_TRAITOR | UPLINK_SPY_THIEF +/datum/syndicate_buylist/traitor/scroll + name = "Scroll of the Hardlight Heart" + item = /obj/item/device/sacred_heart_scroll + cost = 6 + desc = "A scroll from ages past, sure to fill your heart with pure light... and knives, lots and lots of knives." + job = list("Chaplain") + not_in_crates = TRUE + vr_allowed = FALSE + can_buy = UPLINK_TRAITOR | UPLINK_SPY + /datum/syndicate_buylist/traitor/contract name = "Faustian Bargain Kit" item = /obj/item/storage/briefcase/satan diff --git a/code/obj/item/device/sacred_heart.dm b/code/obj/item/device/sacred_heart.dm new file mode 100644 index 0000000000000..7b5d8b40cd9a1 --- /dev/null +++ b/code/obj/item/device/sacred_heart.dm @@ -0,0 +1,58 @@ +#define HEART 1 // I couldn't find a way to make this work without the define, my coding is very primitive however. + +/obj/item/device/sacred_heart_scroll + name = "Hardlight Heart Scroll" + icon_state = "sacred_heart_scroll-" + desc = "A dusty old scroll containing some rather enlightening knowlege from a time of cloak and dagger, adapted for modern technology." + is_syndicate = TRUE + var/implant = /obj/item/organ/heart/sacred + var/implants_available = HEART + var/list/parts_to_remove = list() + var/list/parts_to_add = list() + + attack_self(mob/user) //I don't know why but this refuses to work with an early return, if anyone wants to fix this so its streamlined, I'd suggest also applying that patch to ocular implanter code, which this is based on + if (ishuman(user)) + var/mob/living/carbon/human/H = user + src.add_fingerprint(H) + switch (alert("Would you like to read [src]? This can only be done once.",,"Proceed","Cancel")) + if ("Cancel") + return + if ("Proceed") + if (implants_available & HEART) + start_replace_heart(HEART, H) + else + user.show_text("This scroll's writings are illegible.") + + + proc/start_replace_heart(var/target, var/mob/living/carbon/human/H) + parts_to_add += "heart" + for(var/part_loc in parts_to_add) + var/obj/item/bodypart = null + bodypart = H.get_organ(part_loc) + if(bodypart) + parts_to_remove += part_loc + boutput(H, "You fill your heart with keen light !") + end_replace_heart(HEART, H) + + proc/end_replace_heart(var/target, var/mob/living/carbon/human/H) + if(!H) + return + playsound(H.loc, "sound/items/ocular_implanter_end.ogg", 50, 0, -1) + var/turf/T = H.loc + for(var/part_loc in parts_to_remove) + if (T) + H.drop_organ(part_loc, T) + H.update_body() + for(var/part_loc in parts_to_add) + H.receive_organ(new implant, part_loc, 0, 1) + H.update_body() + implants_available = FALSE + boutput(H, "[pick("IT HURTS!", "OH GOD!", "JESUS FUCK!")]") + bleed(H, 5, 5) + SPAWN(5 DECI SECOND) + H.emote("scream") + icon_state = "sacred_heart_scroll-U" + parts_to_remove = list() + parts_to_add = list() + +#undef HEART diff --git a/code/obj/item/misc_weapons.dm b/code/obj/item/misc_weapons.dm index 58b186d253eec..288cd63a5aef8 100644 --- a/code/obj/item/misc_weapons.dm +++ b/code/obj/item/misc_weapons.dm @@ -538,6 +538,30 @@ ..() setProperty("movespeed", -0.5) +//chaplain traitor knice +/obj/item/dagger/syndicate/chaplain_knife + name = "Blade of Light" + desc = "A knife made out of pure light. Now thats what I call blind faith" + item_state = "chap_dagger" + icon_state = "chap_dagger" + force = 14 + throwforce = 18 + stamina_cost = 5 + c_flags = EQUIPPED_WHILE_HELD + + New() + ..() + src.AddComponent(/datum/component/holdertargeting/light, r = 0.94, g = 0.69, b = 0.27, height = 1) + setProperty("movespeed", -0.4) + SPAWN(0) + icon_state = "chap_knife_1" + sleep(1 SECONDS) + icon_state = "chap_knife_2" + sleep(6 SECONDS) + icon_state = "chap_knife_3" + sleep(1 SECONDS) + qdel(src) + /obj/item/dagger/throwing_knife name = "cheap throwing knife" // icon = 'icons/obj/items/weapons.dmi' diff --git a/code/obj/item/organ_holder.dm b/code/obj/item/organ_holder.dm index 9541709510781..d84f2da56f5ab 100644 --- a/code/obj/item/organ_holder.dm +++ b/code/obj/item/organ_holder.dm @@ -1639,3 +1639,17 @@ src.icon_state = initial(src.icon_state) else src.icon_state = "[initial(src.icon_state)]_cd" + +/datum/targetable/organAbility/sacredheart + name = "Heartlight Blade" + desc = "Draw a knife of pure light from your chest. It's safer to do so than it sounds." + icon_state = "sacredheart" + targeted = FALSE + cooldown = 30 SECONDS + + cast(atom/target) + if (..()) + return TRUE + boutput(holder.owner, "You use your [islist(linked_organ) ? "s" : ""] to conjure a knife of pure light from thin air!") + var/obj/item/dagger/syndicate/chaplain_knife = new/obj/item/dagger/syndicate/chaplain_knife(get_turf(holder.owner)) + holder.owner.put_in_hand_or_drop(chaplain_knife) diff --git a/code/obj/item/organs/heart.dm b/code/obj/item/organs/heart.dm index 1814859042bca..a6d02fa362a42 100644 --- a/code/obj/item/organs/heart.dm +++ b/code/obj/item/organs/heart.dm @@ -120,6 +120,15 @@ else return 0 +/obj/item/organ/heart/sacred + name = "sacred heart" + desc = "Does this count as being lighter than a feather?" + item_state = "sacred_heart" + icon_state = "sacred_heart" + transplant_XP = 8 + squeeze_sound = 'sound/impact_sounds/Crystal_Shatter_1.ogg' + organ_abilities = list(/datum/targetable/organAbility/sacredheart) + /obj/item/organ/heart/synth name = "synthheart" desc = "I guess you could call this a... hearti-choke" diff --git a/goonstation.dme b/goonstation.dme index ee13a7e2804a3..61910580a5e9b 100644 --- a/goonstation.dme +++ b/goonstation.dme @@ -1595,6 +1595,7 @@ var/datum/preMapLoad/preMapLoad = new #include "code\obj\item\device\powersink.dm" #include "code\obj\item\device\prox_sensor.dm" #include "code\obj\item\device\radio.dm" +#include "code\obj\item\device\sacred_heart.dm" #include "code\obj\item\device\scanners.dm" #include "code\obj\item\device\shield.dm" #include "code\obj\item\device\studio_monitor.dm" diff --git a/icons/mob/inhand/hand_medical.dmi b/icons/mob/inhand/hand_medical.dmi index 02959994985ec..c86c1ce1cdc9e 100644 Binary files a/icons/mob/inhand/hand_medical.dmi and b/icons/mob/inhand/hand_medical.dmi differ diff --git a/icons/mob/inhand/hand_weapons.dmi b/icons/mob/inhand/hand_weapons.dmi index 527f209e2be72..6a3dea2233c4e 100644 Binary files a/icons/mob/inhand/hand_weapons.dmi and b/icons/mob/inhand/hand_weapons.dmi differ diff --git a/icons/mob/organ_abilities.dmi b/icons/mob/organ_abilities.dmi index ec12ea40e7416..47c3b3d7315fd 100644 Binary files a/icons/mob/organ_abilities.dmi and b/icons/mob/organ_abilities.dmi differ diff --git a/icons/obj/items/device.dmi b/icons/obj/items/device.dmi index 84259706be241..3f5f640395897 100644 Binary files a/icons/obj/items/device.dmi and b/icons/obj/items/device.dmi differ diff --git a/icons/obj/items/weapons.dmi b/icons/obj/items/weapons.dmi index 9aeb80cecf133..17bb040a80161 100644 Binary files a/icons/obj/items/weapons.dmi and b/icons/obj/items/weapons.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index d7087711c024a..646b935376f8d 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ