Files
Aurora.3/code/modules/spells/artifacts.dm
Alberyk 00ba1282c3 Changes how pain checks works in game (#5978)
This pr creates a new check, can_feel_pain, it checks for the NO_PAIN flag, if the target is under influence of mind altering drugs or strong painkillers. This check replaces all the species procs and fixes somethings, like people under the influence of pain killers still getting knocked out from pain and etc.
2019-01-27 13:48:12 +02:00

331 lines
11 KiB
Plaintext

//////////////////////Scrying orb//////////////////////
/obj/item/weapon/scrying
name = "scrying orb"
desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means."
icon = 'icons/obj/projectiles.dmi'
icon_state = "bluespace"
throw_speed = 3
throw_range = 7
throwforce = 10
damtype = BURN
force = 10
hitsound = 'sound/items/welder2.ogg'
/obj/item/weapon/scrying/attack_self(mob/living/user as mob)
if(!user.is_wizard())
if(istype(user, /mob/living/carbon/human))
//Save the users active hand
var/mob/living/carbon/human/H = user
var/obj/item/organ/E = H.get_eyes(no_synthetic = TRUE)
if (!E)
user << "<span class='notice'>You stare deep into the abyss... and nothing happens. What a letdown.</span>"
return
user << "<span class='warning'>You stare deep into the abyss... and the abyss stares back.</span>"
sleep(10)
user << "<span class='warning'>Your [E.name] fill with painful light, and you feel a sharp burning sensation in your head!</span>"
user.custom_emote(2, "screams in horror!")
playsound(user, 'sound/hallucinations/far_noise.ogg', 40, 1)
user.drop_item()
user.visible_message("<span class='danger'>Ashes pour out of [user]'s eye sockets!</span>")
new /obj/effect/decal/cleanable/ash(get_turf(user))
E.removed(user)
qdel(E)
H.adjustBrainLoss(50, 55)
H.hallucination += 20
return
else
user << "<span class='info'>You can see... everything!</span>"
visible_message("<span class='danger'>[user] stares into [src], their eyes glazing over.</span>")
user.teleop = user.ghostize(1)
announce_ghost_joinleave(user.teleop, 1, "You feel that they used a powerful artifact to [pick("invade","disturb","disrupt","infest","taint","spoil","blight")] this place with their presence.")
return
/obj/item/weapon/melee/energy/wizard
name = "rune sword"
desc = "A large sword engraved with arcane markings, it seems to reverberate with unearthly powers."
icon = 'icons/obj/sword.dmi'
icon_state = "runesword0"
item_state = "runesword0"
contained_sprite = 1
active_force = 40
active_throwforce = 40
active_w_class = 5
force = 20
throwforce = 30
throw_speed = 5
throw_range = 10
w_class = 5
slot_flags = SLOT_BELT
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 8)
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
sharp = 1
edge = 1
base_reflectchance = 60
base_block_chance = 60
can_block_bullets = 1
shield_power = 150
/obj/item/weapon/melee/energy/wizard/activate(mob/living/user)
..()
icon_state = "runesword1"
item_state = "runesword1"
user << "<span class='notice'>\The [src] surges to life!.</span>"
/obj/item/weapon/melee/energy/wizard/deactivate(mob/living/user)
..()
icon_state = "runesword0"
item_state = "runesword0"
user << "<span class='notice'>\The [src] slowly dies out.</span>"
/obj/item/weapon/melee/energy/wizard/attack(mob/living/M, mob/living/user, var/target_zone)
if(user.is_wizard())
return ..()
var/zone = (user.hand ? "l_arm":"r_arm")
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/affecting = H.get_organ(zone)
user << "<span class='danger'>The sword refuses you as its true wielder, slashing your [affecting.name] instead!</span>"
user.apply_damage(active_force, BRUTE, zone, 0, sharp=1, edge=1)
user.drop_from_inventory(src)
return 1
//skeleton weapons and armor
/obj/item/clothing/suit/armor/bone
name = "bone armor"
desc = "A rudimentary armor made of bones of several creatures."
icon = 'icons/obj/necromancer.dmi'
icon_state = "bonearmor"
item_state = "bonearmor"
contained_sprite = 1
species_restricted = list("Skeleton")
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
armor = list(melee = 50, bullet = 40, laser = 50, energy = 25, bomb = 30, bio = 0, rad = 0)
/obj/item/clothing/head/helmet/bone
name = "bone helmet"
desc = "A rudimentary helmet made of some dead creature."
icon = 'icons/obj/necromancer.dmi'
icon_state = "skull"
item_state = "skull"
contained_sprite = 1
species_restricted = list("Skeleton")
armor = list(melee = 50, bullet = 40, laser = 50, energy = 25, bomb = 30, bio = 0, rad = 0)
/obj/item/weapon/material/twohanded/spear/bone
desc = "A spear crafted with bones of some long forgotten creature."
default_material = "cursed bone"
//lich phylactery
/obj/item/phylactery
name = "phylactery"
desc = "A twisted mummified heart."
icon = 'icons/obj/wizard.dmi'
icon_state = "cursedheart-off"
origin_tech = list(TECH_BLUESPACE = 8, TECH_MATERIAL = 8, TECH_BIO = 8)
w_class = 5
light_color = "#6633CC"
light_power = 3
light_range = 4
var/lich = null
/obj/item/phylactery/Initialize()
. = ..()
world_phylactery += src
create_reagents(120)
reagents.add_reagent("undead_ichor", 120)
/obj/item/phylactery/Destroy()
lich << "<span class='danger'>Your phylactery was destroyed, your soul is cast into the abyss as your immortality vanishes away!</span>"
world_phylactery -= src
lich = null
return ..()
/obj/item/phylactery/examine(mob/user)
..(user)
if(!lich)
user << "The heart is inert."
else
user << "The heart is pulsing slowly."
/obj/item/phylactery/attackby(var/obj/item/I, var/mob/user)
..()
if(istype(I, /obj/item/weapon/nullrod))
src.visible_message("\The [src] twists violently and explodes!")
gibs(src.loc)
qdel(src)
return
/obj/item/phylactery/pickup(mob/living/user as mob)
if(!user.is_wizard() && src.lich)
user << "<span class='warning'>As you pick up \the [src], you feel a wave of dread wash over you.</span>"
for(var/obj/machinery/light/P in view(7, user))
P.flicker(1)
//magic poppet
/obj/item/poppet
name = "poppet"
desc = "A rustic doll with a vague humanoid shape."
icon = 'icons/obj/wizard.dmi'
icon_state = "poppet"
w_class = 2
var/datum/weakref/target = null
var/countenance = null //what species does it looks like?
var/cooldown_time = 120
var/cooldown = 0
/obj/item/poppet/Destroy()
if(target)
to_chat(target, "<span class='notice'>The strange presence vanishes away...</span>")
return ..()
/obj/item/poppet/examine(mob/user)
..(user)
if(countenance)
to_chat(user, "<span class='notice'>It is modeled after a [countenance].</span>")
/obj/item/poppet/afterattack(var/atom/A, var/mob/user, var/proximity)
if(!proximity)
return
if(A.blood_DNA)
var/marked = pick(A.blood_DNA)
for(var/mob/living/carbon/human/H in mob_list)
if(H.dna.unique_enzymes == marked)
target = WEAKREF(H)
countenance = H.dna.species
to_chat(H, "<span class='cult'>You feel a strange presence looming over you.</span>")
/obj/item/poppet/attack_self(mob/user as mob)
var/mob/living/carbon/human/H = target.resolve()
if(H && cooldown < world.time)
var/target_zone = user.zone_sel.selecting
if(target_zone == "mouth")
var/voice = sanitize(input(user, "What would you like the victim to say", "Poppet", null) as text)
H.say(voice)
log_and_message_admins("forced [H] to say [voice] with a poppet", user)
if(target_zone == "eyes")
to_chat(user, "<span class='notice'>You cover \the [src]'s eyes.</span>")
to_chat(H, "<span class='warning'>Your vision is covered by a shadow!</span>")
H.eye_blind = 3
H.eye_blurry = 5
if(target_zone == "r_leg" || target_zone == "l_leg")
to_chat(user, "<span class='notice'>You move \the [src]'s legs around.</span>")
if(H.canmove && !H.restrained() && !(istype(H.loc, /turf/space)))
step(H, pick(cardinal))
if(target_zone == "l_hand" || target_zone == "l_arm")
to_chat(user, "<span class='notice'>You twist \the [src]'s left arm.</span>")
H.drop_l_hand()
if(target_zone == "r_hand" || target_zone == "r_arm")
to_chat(user, "<span class='notice'>You twist \the [src]'s right arm..</span>")
H.drop_r_hand()
if(target_zone == "head")
to_chat(user, "<span class='notice'>You smack \the [src]'s head with your hand.</span>")
H.confused += 10
H.stuttering += 5
to_chat(H, "<span class='danger'>You suddenly feel as if your head was hit by something!</span>")
playsound(get_turf(H), "punch", 50, 1, -1)
cooldown = world.time + cooldown_time
/obj/item/poppet/attackby(obj/item/W as obj, mob/user as mob)
var/mob/living/carbon/human/H = target.resolve()
if(H && cooldown < world.time)
var/target_zone = user.zone_sel.selecting
if(isflamesource(W))
fire_act()
if(istype(W, /obj/item/weapon/melee/baton))
H.electrocute_act(W.force * 2, W, def_zone = target_zone)
playsound(get_turf(H), 'sound/weapons/Egloves.ogg', 50, 1, -1)
if(istype(W, /obj/item/device/flashlight))
to_chat(H, "<span class='warning'>You direct \the [W] towards \the [src]'s eyes!</span>")
playsound(get_turf(H), 'sound/items/flashlight.ogg', 50, 1, -1)
flick("flash", H.flash)
H.eye_blurry = 5
if(W.iscoil())
to_chat(H, "<span class='warning'>You strangle \the [src] with \the [W]!</span>")
H.silent += 10
playsound(get_turf(H), 'sound/effects/noosed.ogg', 50, 1, -1)
if(!(H.species.flags & NO_BREATHE))
H.emote("me", 1, "gasps for air!")
H.losebreath += 5
if(istype(W, /obj/item/weapon/bikehorn))
playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1, -1)
if(W.edge)
to_chat(H, "<span class='warning'>You stab \the [src] with \the [W]!</span>")
H.apply_damage(2, BRUTE, target_zone, edge = TRUE)
playsound(get_turf(H), 'sound/weapons/bladeslice.ogg', 50, 1, -1)
if(H.can_feel_pain())
var/obj/item/organ/external/organ = H.get_organ(target_zone)
to_chat(H, "<span class='danger'>You feel a stabbing pain in your [organ.name]!</span>")
cooldown = world.time + cooldown_time
/obj/item/poppet/throw_impact(atom/hit_atom)
..()
var/mob/living/carbon/human/H = target.resolve()
if(H)
H.throw_at(get_edge_target_turf(H,pick(alldirs)), 5, 1)
/obj/item/poppet/emp_act(severity)
var/mob/living/carbon/human/H = target.resolve()
if(H)
H.emp_act(severity)
playsound(get_turf(H), 'sound/effects/EMPulse.ogg', 50, 1, -1)
/obj/item/poppet/ex_act(severity)
var/mob/living/carbon/human/H = target.resolve()
if(H)
H.ex_act(severity)
/obj/item/poppet/tesla_act(var/power)
var/mob/living/carbon/human/H = target.resolve()
if(H)
H.electrocute_act(power, src)
/obj/item/poppet/bullet_act(var/obj/item/projectile/Proj)
var/mob/living/carbon/human/H = target.resolve()
if(H)
H.apply_damage(Proj.damage, HALLOSS)
/obj/item/poppet/fire_act()
var/mob/living/carbon/human/H = target.resolve()
if(H)
H.adjust_fire_stacks(2)
H.IgniteMob()
to_chat(H, "<span class='danger'>You suddenly burst into flames!!</span>")
/obj/item/poppet/crush_act()
var/mob/living/carbon/human/H = target.resolve()
if(H)
to_chat(H, "<span class='danger'>You feel an outworldly force crushing you!</span>")
H.adjustBruteLoss(35)
H.apply_effect(6, WEAKEN)
qdel(src)