mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-30 16:38:22 +01:00
Technomancers, you're up. changes: - bugfix: "Fixes Mend Synthetic not repairing synthetic/robotic limbs correctly." - bugfix: "Fixes Dispel not removing Technomancer effects from its target." - bugfix: "Fixes Corona not making targets glow or easier to hit." - bugfix: "Fixes Resurrect not enforcing its maximum time-since-death limit." - bugfix: "Fixes Mend Internals skipping organic body parts because it used old bitflags." - bugfix: "Fixes Shield's scepter enhancement being straight up ignored." - bugfix: "Fixes Energy Siphon overfilling synthetic internal cells." - bugfix: "Fixes Audible Deception playing on the user instead of the targeted turf, defeating the entire point of it." - bugfix: "Fixes a bunch of spells not actually ending immediately when energy runs out (and potential harddels.)"
62 lines
2.4 KiB
Plaintext
62 lines
2.4 KiB
Plaintext
/datum/technomancer/spell/shield
|
|
name = "Shield"
|
|
desc = "Emits a protective shield fron your hand in front of you, which will protect you from almost anything able to harm \
|
|
you, so long as you can power it. Stronger attacks blocked cost more energy to sustain. \
|
|
Note that holding two shields will make blocking more energy efficent."
|
|
enhancement_desc = "Blocking is twice as efficient in terms of energy cost per hit."
|
|
cost = 100
|
|
obj_path = /obj/item/spell/shield
|
|
ability_icon_state = "tech_shield"
|
|
category = DEFENSIVE_SPELLS
|
|
|
|
/obj/item/spell/shield
|
|
name = "\proper energy shield"
|
|
icon_state = "shield"
|
|
desc = "A very protective combat shield that'll stop almost anything from hitting you, at least from the front."
|
|
aspect = ASPECT_FORCE
|
|
toggled = 1
|
|
var/damage_to_energy_multiplier = 30.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 600 energy cost
|
|
|
|
/obj/item/spell/shield/Initialize()
|
|
. = ..()
|
|
set_light_range_power_color(3, 2, "#006AFF")
|
|
set_light_on(TRUE)
|
|
|
|
/obj/item/spell/shield/update_icon()
|
|
var/mob/living/carbon/human/H = owner
|
|
if(istype(owner) && istype(H.species, /datum/species/golem/technomancer))
|
|
item_state = "shield_golem"
|
|
return ..()
|
|
|
|
/obj/item/spell/shield/handle_shield(mob/user, var/on_back, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
|
if(user.incapacitated())
|
|
return BULLET_ACT_HIT
|
|
|
|
var/damage_to_energy_cost = damage_to_energy_multiplier * damage
|
|
|
|
if(issmall(user)) // Smaller shields are more efficient.
|
|
damage_to_energy_cost *= 0.75
|
|
|
|
if(ishuman(owner))
|
|
var/mob/living/carbon/human/H = owner
|
|
if(istype(H.get_other_hand(src), src.type)) // Two shields in both hands.
|
|
damage_to_energy_cost *= 0.75
|
|
|
|
if(check_for_scepter())
|
|
damage_to_energy_cost *= 0.50
|
|
|
|
if(!pay_energy(damage_to_energy_cost))
|
|
to_chat(owner, SPAN_DANGER("Your shield fades due to lack of energy!"))
|
|
qdel(src)
|
|
return BULLET_ACT_HIT
|
|
|
|
//block as long as they are not directly behind us
|
|
var/bad_arc = REVERSE_DIR(user.dir) //arc of directions from which we cannot block
|
|
if(check_shield_arc(user, bad_arc, damage_source, attacker))
|
|
user.visible_message(SPAN_DANGER("\The [user]'s [src] blocks [attack_text]!"))
|
|
spark(src, 3, GLOB.cardinals)
|
|
playsound(src, 'sound/weapons/blade.ogg', 50, 1)
|
|
adjust_instability(2)
|
|
return BULLET_ACT_BLOCK
|
|
return BULLET_ACT_HIT
|