Revert "Fixes energy shield bugs and adds colour change as they take damage" (#22805)

Breaks humans taking damage
This commit is contained in:
Matt Atlas
2026-07-09 23:03:12 +02:00
committed by GitHub
parent 8494a3146f
commit 7a609f1ad7
5 changed files with 19 additions and 57 deletions
+16 -52
View File
@@ -140,58 +140,27 @@
w_class = WEIGHT_CLASS_TINY
origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_ILLEGAL = 4)
attack_verb = list("shoved", "bashed")
var/shield_power = 100
var/shield_power_max = 100
var/shield_power = 150
var/active = FALSE
var/next_action
var/sound_token
var/sound_id
var/shield_color = "#64a5ff"
/obj/item/shield/energy/Destroy()
QDEL_NULL(sound_token)
STOP_PROCESSING(SSprocessing, src)
return ..()
/obj/item/shield/energy/Initialize()
. = ..()
sound_id = "[sequential_id(/obj/item/shield/energy)]"
/obj/item/shield/energy/get_examine_text(mob/user, distance, is_adjacent, infix, suffix, get_extended)
. = ..()
if(is_adjacent)
. += SPAN_NOTICE("Shield power is at [round(shield_power/shield_power_max * 100)]%.")
/obj/item/shield/energy/update_icon(atom/loc)
/obj/item/shield/energy/update_icon()
icon_state = "eshield[active]"
if(active)
shield_color = rgb(Interpolate(255, 100, shield_power / shield_power_max), Interpolate(0, 160, shield_power / shield_power_max), Interpolate(100, 255, shield_power / shield_power_max))
set_light(1.5, 1.5, shield_color)
set_light(1.5, 1.5, "#006AFF")
else
shield_color = "#ffffff"
set_light(0)
color = shield_color
if(istype(loc, /mob/living/carbon/human))
var/mob/living/carbon/human/H = loc
get_mob_overlay(H)
H.update_inv_l_hand()
H.update_inv_r_hand()
/obj/item/shield/energy/get_mob_overlay(mob/living/carbon/human/H, mob_icon, mob_state, slot, main_call)
var/image/I = ..() //this will be the base icon
animate(I, color = shield_color, time = 10, easing = EASE_IN)
return I
/obj/item/shield/energy/process(seconds_per_tick)
shield_power = max(0, min(shield_power += 1, shield_power_max))
if(active)
update_icon(loc)
if (shield_power >= shield_power_max)
STOP_PROCESSING(SSprocessing, src)
/obj/item/shield/energy/attack_self(mob/living/user)
var/time = world.time
if(time < next_action)
@@ -199,12 +168,15 @@
next_action = time + 3 SECONDS
active = !active
if(active)
HandleTurnOn(user)
HandleTurnOn()
else
HandleShutOff(user)
HandleShutOff()
add_fingerprint(user)
update_icon()
user.update_inv_l_hand()
user.update_inv_r_hand()
/obj/item/shield/energy/handle_shield(mob/living/user, on_back, damage, atom/damage_source = null, mob/attacker = null, def_zone = null, attack_text = "the attack")
/obj/item/shield/energy/handle_shield(mob/user, on_back, damage, atom/damage_source = null, mob/attacker = null, def_zone = null, attack_text = "the attack")
var/shield_dir = on_back ? user.dir : REVERSE_DIR(user.dir)
if(!active || user.incapacitated() || !(check_shield_arc(user, shield_dir, damage_source, attacker)))
@@ -213,13 +185,11 @@
if(prob(get_block_chance(user, damage, damage_source, attacker)))
spark(user.loc, 5)
shield_power -= round(damage/4)
update_icon(user)
START_PROCESSING(SSprocessing, src)
if(shield_power <= 0)
visible_message(SPAN_WARNING("\The [user]'s [src.name] overloads!"))
visible_message(SPAN_DANGER("\The [user]'s [src.name] overloads!"))
active = FALSE
HandleShutOff(user)
HandleShutOff()
if(isenergy(damage_source) || isbeam(damage_source))
var/obj/projectile/P = damage_source
@@ -260,20 +230,17 @@
return (base_block_chance - round(damage / 3))
return base_block_chance
/obj/item/shield/energy/proc/HandleTurnOn(mob/living/user)
/obj/item/shield/energy/proc/HandleTurnOn()
addtimer(CALLBACK(src, /obj/item/shield/energy/proc/UpdateSoundLoop), 0.25 SECONDS)
playsound(src, 'sound/items/shield/energy/shield-start.ogg', 40)
force = 15
w_class = WEIGHT_CLASS_BULKY
update_icon(user)
START_PROCESSING(SSprocessing, src)
/obj/item/shield/energy/proc/HandleShutOff(mob/living/user)
/obj/item/shield/energy/proc/HandleShutOff()
addtimer(CALLBACK(src, /obj/item/shield/energy/proc/UpdateSoundLoop), 0.1 SECONDS)
playsound(src, 'sound/items/shield/energy/shield-stop.ogg', 40)
force = initial(force)
w_class = initial(w_class)
update_icon(user)
/obj/item/shield/energy/proc/UpdateSoundLoop()
if (!active)
@@ -286,12 +253,11 @@
desc = "A Zkrehk-Guild manufactured energy shield capable of protecting the wielder from both material and energy attack."
icon_state = "hegemony-eshield0"
base_block_chance = 60
shield_color = "#e68917"
/obj/item/shield/energy/hegemony/update_icon()
icon_state = "hegemony-eshield[active]"
if(active)
set_light(1.5, 1.5, shield_color)
set_light(1.5, 1.5, "#e68917")
else
set_light(0)
@@ -313,12 +279,11 @@
desc = "A large deployable energy shield meant to provide excellent protection against ranged attacks."
icon_state = "ebarrier0"
base_block_chance = 55
shield_color = "#33FFFF"
/obj/item/shield/energy/tcaf/update_icon()
icon_state = "ebarrier[active]"
if(active)
set_light(1.5, 1.5, shield_color)
set_light(1.5, 1.5, "#33FFFF")
else
set_light(0)
@@ -327,12 +292,11 @@
desc = "A hardlight energy shield meant to provide excellent protection in melee engagements."
icon_state = "dominian-eshield0"
base_block_chance = 60
shield_color = "#ff5132"
/obj/item/shield/energy/dominia/update_icon()
icon_state = "dominian-eshield[active]"
if(active)
set_light(1.5, 1.5, shield_color)
set_light(1.5, 1.5, "#ff5132")
else
set_light(0)