/obj/item/weapon/paper/talisman var/cultist_name = "talisman" var/cultist_desc = "A basic talisman. It serves no purpose." var/invocation = "Naise meam!" var/uses = 1 var/health_cost = 0 //The amount of health taken from the user when invoking the talisman /obj/item/weapon/paper/talisman/examine(mob/user) if(iscultist(user) || user.stat == DEAD) user << "Name: [cultist_name]" user << "Effect: [cultist_desc]" user << "Uses Remaining: [uses]" else user << "There are indecipherable images scrawled on the paper in what looks to be... blood?" /obj/item/weapon/paper/talisman/attack_self(mob/living/user) if(!iscultist(user)) user << "There are indecipherable images scrawled on the paper in what looks to be... blood?" return if(invoke(user)) uses-- if(uses <= 0) user.drop_item() qdel(src) /obj/item/weapon/paper/talisman/proc/invoke(mob/living/user, successfuluse = 1) . = successfuluse if(successfuluse) //if the calling whatever says we succeed, do the fancy stuff if(invocation) user.whisper(invocation) if(health_cost && iscarbon(user)) var/mob/living/carbon/C = user C.apply_damage(health_cost, BRUTE, pick("l_arm", "r_arm")) //Malformed Talisman: If something goes wrong. /obj/item/weapon/paper/talisman/malformed cultist_name = "malformed talisman" cultist_desc = "A talisman with gibberish scrawlings. No good can come from invoking this." invocation = "Ra'sha yoka!" /obj/item/weapon/paper/talisman/malformed/invoke(mob/living/user, successfuluse = 1) user << "You feel a pain in your head. The Geometer is displeased." if(iscarbon(user)) var/mob/living/carbon/C = user C.apply_damage(10, BRUTE, "head") //Supply Talisman: Has a few unique effects. Granted only to starter cultists. /obj/item/weapon/paper/talisman/supply cultist_name = "Supply Talisman" cultist_desc = "A multi-use talisman that can create various objects. Intended to increase the cult's strength early on." invocation = null uses = 3 /obj/item/weapon/paper/talisman/supply/invoke(mob/living/user, successfuluse = 1) var/dat = "There are [uses] bloody runes on the parchment.
" dat += "Please choose the chant to be imbued into the fabric of reality.
" dat += "
" dat += "N'ath reth sh'yro eth d'raggathnor! - Summons an arcane tome, used to scribe runes and communicate with other cultists.
" dat += "Sas'so c'arta forbici! - Allows you to move to a selected teleportation rune.
" dat += "Ta'gh fara'qha fel d'amar det! - Allows you to destroy technology in a short range.
" dat += "Fuu ma'jin! - Allows you to stun a person by attacking them with the talisman.
" dat += "Kla'atu barada nikt'o! - Two use talisman, first use makes all nearby runes invisible, second use reveals nearby hidden runes.
" dat += "Kal'om neth! - Summons a soul stone, used to capure the spirits of dead or dying humans.
" dat += "Daa'ig osk! - Summons a construct shell for use with soulstone-captured souls. It is too large to carry on your person.
" var/datum/browser/popup = new(user, "talisman", "", 400, 400) popup.set_content(dat) popup.open() return 0 /obj/item/weapon/paper/talisman/supply/Topic(href, href_list) if(src) if(usr.stat || usr.restrained() || !in_range(src, usr)) return if(href_list["rune"]) switch(href_list["rune"]) if("newtome") var/obj/item/weapon/tome/T = new(usr) usr.put_in_hands(T) if("teleport") var/obj/item/weapon/paper/talisman/teleport/T = new(usr) usr.put_in_hands(T) if("emp") var/obj/item/weapon/paper/talisman/emp/T = new(usr) usr.put_in_hands(T) if("runestun") var/obj/item/weapon/paper/talisman/stun/T = new(usr) usr.put_in_hands(T) if("soulstone") var/obj/item/device/soulstone/T = new(usr) usr.put_in_hands(T) if("construct") new /obj/structure/constructshell(get_turf(usr)) if("veiling") var/obj/item/weapon/paper/talisman/true_sight/T = new(usr) usr.put_in_hands(T) src.uses-- if(src.uses <= 0) if(iscarbon(usr)) var/mob/living/carbon/C = usr C.drop_item() visible_message("[src] crumbles to dust.") qdel(src) /obj/item/weapon/paper/talisman/supply/weak uses = 2 //Rite of Translocation: Same as rune /obj/item/weapon/paper/talisman/teleport cultist_name = "Talisman of Teleportation" cultist_desc = "A single-use talisman that will teleport a user to a random rune of the same keyword." color = "#551A8B" // purple invocation = "Sas'so c'arta forbici!" health_cost = 5 /obj/item/weapon/paper/talisman/teleport/invoke(mob/living/user, successfuluse = 1) var/list/potential_runes = list() var/list/teleportnames = list() var/list/duplicaterunecount = list() for(var/R in teleport_runes) var/obj/effect/rune/teleport/T = R var/resultkey = T.listkey if(resultkey in teleportnames) duplicaterunecount[resultkey]++ resultkey = "[resultkey] ([duplicaterunecount[resultkey]])" else teleportnames.Add(resultkey) duplicaterunecount[resultkey] = 1 potential_runes[resultkey] = T if(!potential_runes.len) user << "There are no valid runes to teleport to!" log_game("Teleport talisman failed - no other teleport runes") return ..(user, 0) if(user.z > ZLEVEL_SPACEMAX) user << "You are not in the right dimension!" log_game("Teleport talisman failed - user in away mission") return ..(user, 0) var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? if(!actual_selected_rune) return ..(user, 0) user.visible_message("Dust flows from [user]'s hand, and they disappear in a flash of red light!", \ "You speak the words of the talisman and find yourself somewhere else!") user.forceMove(get_turf(actual_selected_rune)) return ..() /obj/item/weapon/paper/talisman/summon_tome cultist_name = "Talisman of Tome Summoning" cultist_desc = "A one-use talisman that will call an untranslated tome from the archives of the Geometer." color = "#512727" // red-black invocation = "N'ath reth sh'yro eth d'raggathnor!" health_cost = 1 /obj/item/weapon/paper/talisman/summon_tome/invoke(mob/living/user, successfuluse = 1) . = ..() user.visible_message("[user]'s hand glows red for a moment.", \ "You speak the words of the talisman!") new /obj/item/weapon/tome(get_turf(user)) user.visible_message("A tome appears at [user]'s feet!", \ "An arcane tome materializes at your feet.") /obj/item/weapon/paper/talisman/true_sight cultist_name = "Talisman of Veiling" cultist_desc = "A multi-use talisman that hides nearby runes. On its second use, will reveal nearby runes." color = "#9c9c9c" // grey invocation = "Kla'atu barada nikt'o!" health_cost = 1 uses = 2 var/revealing = FALSE //if it reveals or not /obj/item/weapon/paper/talisman/true_sight/invoke(mob/living/user, successfuluse = 1) . = ..() if(!revealing) user.visible_message("Thin grey dust falls from [user]'s hand!", \ "You speak the words of the talisman, hiding nearby runes.") invocation = "Nikt'o barada kla'atu!" revealing = TRUE for(var/obj/effect/rune/R in range(3,user)) R.talismanhide() else user.visible_message("A flash of light shines from [user]'s hand!", \ "You speak the words of the talisman, revealing nearby runes.") for(var/obj/effect/rune/R in range(3,user)) R.talismanreveal() //Rite of False Truths: Same as rune /obj/item/weapon/paper/talisman/make_runes_fake cultist_name = "Talisman of Disguising" cultist_desc = "A talisman that will make nearby runes appear fake." color = "#ff80d5" // honk invocation = "By'o nar'nar!" /obj/item/weapon/paper/talisman/make_runes_fake/invoke(mob/living/user, successfuluse = 1) . = ..() user.visible_message("Dust flows from [user]s hand.", \ "You speak the words of the talisman, making nearby runes appear fake.") for(var/obj/effect/rune/R in orange(6,user)) R.desc = "A rune vandalizing the station." //Rite of Disruption: Weaker than rune /obj/item/weapon/paper/talisman/emp cultist_name = "Talisman of Electromagnetic Pulse" cultist_desc = "A talisman that will cause a moderately-sized electromagnetic pulse." color = "#4d94ff" // light blue invocation = "Ta'gh fara'qha fel d'amar det!" health_cost = 5 /obj/item/weapon/paper/talisman/emp/invoke(mob/living/user, successfuluse = 1) . = ..() user.visible_message("[user]'s hand flashes a bright blue!", \ "You speak the words of the talisman, emitting an EMP blast.") empulse(src, 4, 8) //Rite of Disorientation: Stuns and inhibit speech on a single target for quite some time /obj/item/weapon/paper/talisman/stun cultist_name = "Talisman of Stunning" cultist_desc = "A talisman that will stun and inhibit speech on a single target. To use, attack target directly." color = "#ff0000" // red invocation = "Fuu ma'jin!" health_cost = 10 /obj/item/weapon/paper/talisman/stun/invoke(mob/living/user, successfuluse = 0) if(successfuluse) //if we're forced to be successful(we normally aren't) then do the normal stuff return ..() if(iscultist(user)) user << "To use this talisman, attack the target directly." else user << "There are indecipherable images scrawled on the paper in what looks to be... blood?" return 0 /obj/item/weapon/paper/talisman/stun/attack(mob/living/target, mob/living/user, successfuluse = 1) if(iscultist(user)) invoke(user, 1) user.visible_message("[user] holds up [src], which explodes in a flash of red light!", \ "You stun [target] with the talisman!") var/obj/item/weapon/nullrod/N = locate() in target if(N) target.visible_message("[target]'s holy weapon absorbs the talisman's light!", \ "Your holy weapon absorbs the blinding light!") else target.Weaken(10) target.Stun(10) target.flash_eyes(1,1) if(issilicon(target)) var/mob/living/silicon/S = target S.emp_act(1) else if(iscarbon(target)) var/mob/living/carbon/C = target C.silent += 5 C.stuttering += 15 C.cultslurring += 15 C.Jitter(15) if(is_servant_of_ratvar(target)) target.adjustBruteLoss(15) user.drop_item() qdel(src) return ..() //Rite of Arming: Equips cultist armor on the user, where available /obj/item/weapon/paper/talisman/armor cultist_name = "Talisman of Arming" cultist_desc = "A talisman that will equip the invoker with cultist equipment if there is a slot to equip it to." color = "#33cc33" // green invocation = "N'ath reth sh'yro eth draggathnor!" /obj/item/weapon/paper/talisman/armor/invoke(mob/living/user, successfuluse = 1) . = ..() user.visible_message("Otherworldly armor suddenly appears on [user]!", \ "You speak the words of the talisman, arming yourself!") user.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), slot_head) user.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit) user.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), slot_shoes) user.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/cultpack(user), slot_back) user.drop_item() user.put_in_hands(new /obj/item/weapon/melee/cultblade(user)) user.put_in_hands(new /obj/item/weapon/restraints/legcuffs/bola/cult(user)) /obj/item/weapon/paper/talisman/armor/attack(mob/living/target, mob/living/user) if(iscultist(user) && iscultist(target)) user.drop_item() invoke(target) qdel(src) return ..() //Talisman of Horrors: Breaks the mind of the victim with nightmarish hallucinations /obj/item/weapon/paper/talisman/horror cultist_name = "Talisman of Horrors" cultist_desc = "A talisman that will break the mind of the victim with nightmarish hallucinations." color = "#ffb366" // light orange invocation = "Lo'Nab Na'Dm!" /obj/item/weapon/paper/talisman/horror/attack(mob/living/target, mob/living/user) if(iscultist(user)) user << "You disturb [target] with visons of the end!" if(iscarbon(target)) var/mob/living/carbon/H = target H.reagents.add_reagent("mindbreaker", 25) if(is_servant_of_ratvar(target)) target << "You see a brief but horrible vision of Ratvar, rusted and scrapped, being torn apart." target.emote("scream") target.confused = max(0, target.confused + 3) target.flash_eyes() qdel(src) //Talisman of Fabrication: Creates a construct shell out of 25 metal sheets. /obj/item/weapon/paper/talisman/construction cultist_name = "Talisman of Construction" cultist_desc = "Use this talisman on at least twenty-five metal sheets to create an empty construct shell" invocation = "Ethra p'ni dedol!" color = "#000000" // black /obj/item/weapon/paper/talisman/construction/attack_self(mob/living/user) if(iscultist(user)) user << "To use this talisman, place it upon a stack of metal sheets." else user << "There are indecipherable images scrawled on the paper in what looks to be... blood?" /obj/item/weapon/paper/talisman/construction/attack(obj/M,mob/living/user) if(iscultist(user)) user << "This talisman will only work on a stack of metal sheets!" log_game("Construct talisman failed - not a valid target") /obj/item/weapon/paper/talisman/construction/afterattack(obj/item/stack/sheet/target, mob/user, proximity_flag, click_parameters) ..() if(proximity_flag && iscultist(user)) if(istype(target, /obj/item/stack/sheet/metal)) var/turf/T = get_turf(target) if(target.use(25)) new /obj/structure/constructshell(T) user << "The talisman clings to the metal and twists it into a construct shell!" user << sound('sound/effects/magic.ogg',0,1,25) qdel(src) if(istype(target, /obj/item/stack/sheet/plasteel)) var/quantity = target.amount var/turf/T = get_turf(target) new /obj/item/stack/sheet/runed_metal(T,quantity) target.use(quantity) user << "The talisman clings to the plasteel, transforming it into runed metal!" user << sound('sound/effects/magic.ogg',0,1,25) qdel(src) else user << "The talisman must be used on metal or plasteel!" //Talisman of Shackling: Applies special cuffs directly from the talisman /obj/item/weapon/paper/talisman/shackle cultist_name = "Talisman of Shackling" cultist_desc = "Use this talisman on a victim to handcuff them with dark bindings." invocation = "In'totum Lig'abis!" color = "#B27300" // burnt-orange uses = 4 /obj/item/weapon/paper/talisman/shackle/invoke(mob/living/user, successfuluse = 0) if(successfuluse) //if we're forced to be successful(we normally aren't) then do the normal stuff return ..() if(iscultist(user)) user << "To use this talisman, attack the target directly." else user << "There are indecipherable images scrawled on the paper in what looks to be... blood?" return 0 /obj/item/weapon/paper/talisman/shackle/attack(mob/living/carbon/target, mob/living/user) if(iscultist(user) && istype(target)) if(target.stat == DEAD) user.visible_message("This talisman's magic does not affect the dead!") return CuffAttack(target, user) return ..() /obj/item/weapon/paper/talisman/shackle/proc/CuffAttack(mob/living/carbon/C, mob/living/user) if(!C.handcuffed) invoke(user, 1) playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) C.visible_message("[user] begins restraining [C] with dark magic!", \ "[user] begins shaping a dark magic around your wrists!") if(do_mob(user, C, 30)) if(!C.handcuffed) C.handcuffed = new /obj/item/weapon/restraints/handcuffs/energy/cult/used(C) C.update_handcuffed() user << "You shackle [C]." add_logs(user, C, "handcuffed") uses-- else user << "[C] is already bound." else user << "You fail to shackle [C]." else user << "[C] is already bound." if(uses <= 0) user.drop_item() qdel(src) return /obj/item/weapon/restraints/handcuffs/energy/cult //For the talisman of shackling name = "cult shackles" desc = "Shackles that bind the wrists with sinister magic." trashtype = /obj/item/weapon/restraints/handcuffs/energy/used origin_tech = "materials=2;magnets=5" flags = DROPDEL /obj/item/weapon/restraints/handcuffs/energy/cult/used/dropped(mob/user) user.visible_message("[user]'s shackles shatter in a discharge of dark magic!", \ "Your [src] shatters in a discharge of dark magic!") . = ..()