diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 5243824df79..28656aaebdc 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -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) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index be24e397f48..4af8c57f14e 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -152,7 +152,6 @@ emp_act return null /mob/living/carbon/human/check_shields(damage, atom/damage_source, mob/attacker, def_zone, attack_text = "the attack") - var/result for(var/obj/item/shield in list(l_hand, r_hand, wear_suit, back)) if(!shield) continue @@ -161,10 +160,9 @@ emp_act if(!shield.can_shield_back()) continue is_on_back = TRUE - result = shield.handle_shield(src, is_on_back, damage, damage_source, attacker, def_zone, attack_text) - if (result == BULLET_ACT_FORCE_PIERCE || result == BULLET_ACT_BLOCK) //Necessary to handle multiple shields. - return result - return result + return shield.handle_shield(src, is_on_back, damage, damage_source, attacker, def_zone, attack_text) + + return BULLET_ACT_HIT /mob/living/carbon/human/emp_act(severity) /* diff --git a/icons/mob/items/weapons/lefthand_shield.dmi b/icons/mob/items/weapons/lefthand_shield.dmi index 87895210a61..70f2f8efab0 100644 Binary files a/icons/mob/items/weapons/lefthand_shield.dmi and b/icons/mob/items/weapons/lefthand_shield.dmi differ diff --git a/icons/mob/items/weapons/righthand_shield.dmi b/icons/mob/items/weapons/righthand_shield.dmi index 6deb2e3d38a..f3dcc4cdbd1 100644 Binary files a/icons/mob/items/weapons/righthand_shield.dmi and b/icons/mob/items/weapons/righthand_shield.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 597a9b3f124..1f465b341dd 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ