Merge pull request #20083 from PKPenguin321/explosive-tesla

[READY] Explosive Tesla, Take 2
This commit is contained in:
oranges
2016-08-28 12:42:22 +12:00
committed by GitHub
9 changed files with 46 additions and 11 deletions

View File

@@ -401,6 +401,9 @@ var/bomb_set
return
. = ..()
/obj/machinery/nuclearbomb/tesla_act(var/power)
..()
qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over
#define NUKERANGE 127
/obj/machinery/nuclearbomb/proc/explode()

View File

@@ -105,6 +105,10 @@
O << "The screen bursts into static."
..()
/obj/machinery/camera/tesla_act(var/power)//EMP proof upgrade also makes it tesla immune
if(isEmpProof())
return
..()
/obj/machinery/camera/blob_act(obj/effect/blob/B)
if(B && B.loc == loc)

View File

@@ -467,10 +467,8 @@ Class Procs:
/obj/machinery/tesla_act(var/power)
..()
if(prob(85))
emp_act(2)
explosion(src.loc,1,2,4,flame_range = 2, adminlog = 0, smoke = 0)
else if(prob(50))
ex_act(3)
else if(prob(90))
ex_act(2)
emp_act(2)
else
ex_act(1)
ex_act(2)

View File

@@ -48,6 +48,11 @@
var/datum/effect_system/expl_particles/P = new/datum/effect_system/expl_particles()
P.set_up(10, 0, location)
P.start()
/datum/effect_system/explosion/smoke
/datum/effect_system/explosion/smoke/start()
..()
spawn(5)
var/datum/effect_system/smoke_spread/S = new
S.set_up(2, location)

View File

@@ -1,6 +1,6 @@
//TODO: Flash range does nothing currently
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0)
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1)
set waitfor = 0
src = null //so we don't abort once src is deleted
epicenter = get_turf(epicenter)
@@ -70,9 +70,14 @@
SSmachine.postpone(postponeCycles)
if(heavy_impact_range > 1)
var/datum/effect_system/explosion/E = new/datum/effect_system/explosion()
E.set_up(epicenter)
E.start()
if(smoke)
var/datum/effect_system/explosion/smoke/E = new/datum/effect_system/explosion/smoke()
E.set_up(epicenter)
E.start()
else
var/datum/effect_system/explosion/E = new/datum/effect_system/explosion()
E.set_up(epicenter)
E.start()
var/x0 = epicenter.x
var/y0 = epicenter.y

View File

@@ -264,8 +264,17 @@
var/turf/T = get_turf(src)
var/obj/structure/cable/C = T.get_cable_node()
if(C)
playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5)
tesla_zap(src, 3, C.powernet.avail * 0.08) //ZAP for 1/5000 of the amount of power, which is from 15-25 with 200000W
var/mob/living/closest_mob
for(var/A in oview(src, 3))
if(istype(A, /mob/living))
var/dist = get_dist(src, A)
if(dist <= 3)
closest_mob = A
if(closest_mob)
var/shock_damage = C.powernet.avail * 0.08
src.Beam(closest_mob, icon_state="lightning[rand(1,12)]", icon='icons/effects/effects.dmi', time=5)
closest_mob.electrocute_act(shock_damage, src, 1, tesla_shock = 1)//ZAP for 1/5000 of the amount of power, which is from 15-25 with 200000W
playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5)
take_damage(tforce)
/obj/structure/grille/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)

View File

@@ -36,6 +36,10 @@ var/const/GRAV_NEEDS_WRENCH = 3
if(prob(20))
set_broken()
/obj/machinery/gravity_generator/tesla_act(var/power)
..()
qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over
/obj/machinery/gravity_generator/update_icon()
..()
icon_state = "[get_status()]_[sprite_number]"

View File

@@ -535,6 +535,10 @@
else
flicker()
/obj/machinery/light/tesla_act(var/power)
explosion(src.loc,0,0,0,flame_range = 5, adminlog = 0)
qdel(src)
// called when area power state changes
/obj/machinery/light/power_change()
var/area/A = get_area(src)

View File

@@ -38,6 +38,9 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics,
var/energy_to_raise = 32
var/energy_to_lower = -20
/obj/singularity/energy_ball/ex_act(severity, target)
return
/obj/singularity/energy_ball/Destroy()
if(orbiting && istype(orbiting, /obj/singularity/energy_ball))
var/obj/singularity/energy_ball/EB = orbiting