diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 74fe96ac065..474e5373227 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -79,3 +79,46 @@ ammo_x_offset = 1 ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/disabler) selfcharge = 1 + var/fail_tick = 0 + var/fail_chance = 0 + +/obj/item/weapon/gun/energy/gun/nuclear/process() + if(fail_tick > 0) + fail_tick-- + ..() + +/obj/item/weapon/gun/energy/gun/nuclear/shoot_live_shot() + failcheck() + update_icon() + ..() + +/obj/item/weapon/gun/energy/gun/nuclear/proc/failcheck() + if(prob(fail_chance) && istype(loc, /mob/living)) + var/mob/living/M = loc + switch(fail_tick) + if(0 to 200) + fail_tick += (2*(fail_chance)) + M.rad_act(40) + M << "Your [name] feels warmer." + if(201 to INFINITY) + SSobj.processing.Remove(src) + M.rad_act(80) + crit_fail = 1 + M << "Your [name]'s reactor overloads!" + +/obj/item/weapon/gun/energy/gun/nuclear/emp_act(severity) + ..() + fail_chance = min(fail_chance + round(15/severity), 100) + +/obj/item/weapon/gun/energy/gun/nuclear/update_icon() + ..() + if(crit_fail) + add_overlay("[icon_state]_fail_3") + else + switch(fail_tick) + if(0) + add_overlay("[icon_state]_fail_0") + if(1 to 150) + add_overlay("[icon_state]_fail_1") + if(151 to INFINITY) + add_overlay("[icon_state]_fail_2")