From 9ed64d2b1a6e7ad5938c7e0c3498422eece5b7bd Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Sat, 21 Jan 2017 19:30:05 -0800 Subject: [PATCH 1/4] ... --- code/datums/wires/emitter.dm | 13 ++++ code/datums/wires/tesla_coil.dm | 13 ++++ code/modules/power/singularity/emitter.dm | 77 +++++++++++++---------- code/modules/power/tesla/coil.dm | 18 ++++++ tgstation.dme | 2 + 5 files changed, 89 insertions(+), 34 deletions(-) create mode 100644 code/datums/wires/emitter.dm create mode 100644 code/datums/wires/tesla_coil.dm diff --git a/code/datums/wires/emitter.dm b/code/datums/wires/emitter.dm new file mode 100644 index 00000000000..e58b3a5e095 --- /dev/null +++ b/code/datums/wires/emitter.dm @@ -0,0 +1,13 @@ + +/datum/wires/emitter + randomize = 1 //Only one wire don't need blueprints + holder_type = /obj/machinery/power/emitter + +/datum/wires/emitter/New(atom/holder) + wires = list(WIRE_ZAP) + ..() + +/datum/wires/emitter/on_pulse(wire) + var/obj/machinery/power/emitter/E = holder + E.fire_beam() + ..() diff --git a/code/datums/wires/tesla_coil.dm b/code/datums/wires/tesla_coil.dm new file mode 100644 index 00000000000..fa858a9a8ff --- /dev/null +++ b/code/datums/wires/tesla_coil.dm @@ -0,0 +1,13 @@ + +/datum/wires/tesla_coil + randomize = 1 //Only one wire don't need blueprints + holder_type = /obj/machinery/power/tesla_coil + +/datum/wires/tesla_coil/New(atom/holder) + wires = list(WIRE_ZAP) + ..() + +/datum/wires/tesla_coil/on_pulse(wire) + var/obj/machinery/power/tesla_coil/C = holder + C.zap() + ..() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 63aac680697..2d14f98d54a 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -33,6 +33,7 @@ var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/emitter(null) B.apply_default_parts(src) RefreshParts() + wires = new /datum/wires/emitter(src) /obj/item/weapon/circuitboard/machine/emitter name = "Emitter (Machine Board)" @@ -153,8 +154,7 @@ src.active = 0 update_icon() return - if(((src.last_shot + src.fire_delay) <= world.time) && (src.active == 1)) - + if(src.active == 1) if(!active_power_usage || avail(active_power_usage)) add_load(active_power_usage) if(!powered) @@ -168,40 +168,45 @@ investigate_log("lost power and turned off","singulo") log_game("Emitter lost power in ([x],[y],[z])") return + fire_beam() - src.last_shot = world.time - if(src.shot_number < 3) - src.fire_delay = 2 - src.shot_number ++ - else - src.fire_delay = rand(minimum_fire_delay,maximum_fire_delay) - src.shot_number = 0 +/obj/machinery/power/emitter/proc/check_delay() + if((src.last_shot + src.fire_delay) <= world.time) + return TRUE + return FALSE - var/obj/item/projectile/A = PoolOrNew(projectile_type,src.loc) - - A.setDir(src.dir) - playsound(src.loc, projectile_sound, 25, 1) - - if(prob(35)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() - - switch(dir) - if(NORTH) - A.yo = 20 - A.xo = 0 - if(EAST) - A.yo = 0 - A.xo = 20 - if(WEST) - A.yo = 0 - A.xo = -20 - else // Any other - A.yo = -20 - A.xo = 0 - A.starting = loc - A.fire() +/obj/machinery/power/emitter/proc/fire_beam() + if(!check_delay()) + return FALSE + src.last_shot = world.time + if(src.shot_number < 3) + src.fire_delay = 20 + src.shot_number ++ + else + src.fire_delay = rand(minimum_fire_delay,maximum_fire_delay) + src.shot_number = 0 + var/obj/item/projectile/A = PoolOrNew(projectile_type,src.loc) + A.setDir(src.dir) + playsound(src.loc, projectile_sound, 25, 1) + if(prob(35)) + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(5, 1, src) + s.start() + switch(dir) + if(NORTH) + A.yo = 20 + A.xo = 0 + if(EAST) + A.yo = 0 + A.xo = 20 + if(WEST) + A.yo = 0 + A.xo = -20 + else // Any other + A.yo = -20 + A.xo = 0 + A.starting = loc + A.fire() /obj/machinery/power/emitter/can_be_unfasten_wrench(mob/user) if(state == EM_WELDED) @@ -269,6 +274,10 @@ user << "Access denied." return + if(is_wire_tool(W) && panel_open) + wires.interact(user) + return + if(default_deconstruction_screwdriver(user, "emitter_open", "emitter", W)) return diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 3041cf4c369..eb02cffb5a6 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -7,11 +7,14 @@ density = 1 var/power_loss = 2 var/input_power_multiplier = 1 + var/zap_cooldown = 100 + var/last_zap = 0 /obj/machinery/power/tesla_coil/New() ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/tesla_coil(null) B.apply_default_parts(src) + wires = new /datum/wires/tesla_coil(src) /obj/item/weapon/circuitboard/machine/tesla_coil name = "Tesla Coil (Machine Board)" @@ -21,8 +24,10 @@ /obj/machinery/power/tesla_coil/RefreshParts() var/power_multiplier = 0 + zap_cooldown = 100 for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) power_multiplier += C.rating + zap_cooldown -= (C.rating * 20) input_power_multiplier = power_multiplier /obj/machinery/power/tesla_coil/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) @@ -50,6 +55,10 @@ if(default_deconstruction_crowbar(W)) return + if(is_wire_tool(W) && panel_open) + wires.interact(user) + return + return ..() /obj/machinery/power/tesla_coil/tesla_act(var/power) @@ -66,6 +75,15 @@ else ..() +/obj/machinery/power/tesla_coil/proc/zap() + if((last_zap + zap_cooldown) > world.time) + return FALSE + last_zap = world.time + var/power = (powernet.avail/(5 - input_power_multiplier)) + add_load(power * (5 - (input_power_multiplier))) + playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 10, power) + /obj/machinery/power/grounding_rod name = "Grounding Rod" desc = "Keep an area from being fried from Edison's Bane." diff --git a/tgstation.dme b/tgstation.dme index dbf36dfd535..b86d4f6f142 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -284,6 +284,7 @@ #include "code\datums\wires\airlock.dm" #include "code\datums\wires\apc.dm" #include "code\datums\wires\autolathe.dm" +#include "code\datums\wires\emitter.dm" #include "code\datums\wires\explosive.dm" #include "code\datums\wires\mulebot.dm" #include "code\datums\wires\particle_accelerator.dm" @@ -292,6 +293,7 @@ #include "code\datums\wires\robot.dm" #include "code\datums\wires\suit_storage_unit.dm" #include "code\datums\wires\syndicatebomb.dm" +#include "code\datums\wires\tesla_coil.dm" #include "code\datums\wires\vending.dm" #include "code\datums\wires\wires.dm" #include "code\game\alternate_appearance.dm" From f706dd90b519e7c5eb7d6bccc38f98850920b53d Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Sat, 21 Jan 2017 19:51:45 -0800 Subject: [PATCH 2/4] Update coil.dm --- code/modules/power/tesla/coil.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index eb02cffb5a6..8fbe0a27718 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -79,10 +79,14 @@ if((last_zap + zap_cooldown) > world.time) return FALSE last_zap = world.time - var/power = (powernet.avail/(5 - input_power_multiplier)) - add_load(power * (5 - (input_power_multiplier))) + var/coeff = (12 - (input_power_multiplier * 3)) + coeff = max(coeff, 1) + var/shock_coeff = (5 - input_power_multiplier) + shock_coeff = max(shock_coeff, 1) + var/power = (powernet.avail/coeff) + add_load(power) playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5) - tesla_zap(src, 10, power) + tesla_zap(src, 10, power/shock_coeff) /obj/machinery/power/grounding_rod name = "Grounding Rod" From f11ee0ed529481b0a38d5af3b8cbcec3ff66a8d3 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Mon, 23 Jan 2017 00:39:58 -0800 Subject: [PATCH 3/4] Update emitter.dm --- code/modules/power/singularity/emitter.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 2d14f98d54a..87874765de9 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -82,7 +82,7 @@ else rotate() -/obj/machinery/power/emitter/initialize() +/obj/machinery/power/emitter/Initialize() ..() if(state == 2 && anchored) connect_to_network() From 281d36cfc48bbba5ec72c8527bc1e0669b0d8620 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Mon, 23 Jan 2017 08:49:00 -0800 Subject: [PATCH 4/4] Update emitter.dm --- code/modules/power/singularity/emitter.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 87874765de9..242d64c5a14 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -185,7 +185,7 @@ else src.fire_delay = rand(minimum_fire_delay,maximum_fire_delay) src.shot_number = 0 - var/obj/item/projectile/A = PoolOrNew(projectile_type,src.loc) + var/obj/item/projectile/A = new projectile_type(src.loc) A.setDir(src.dir) playsound(src.loc, projectile_sound, 25, 1) if(prob(35))