diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 18530e22eef..280e7fd0860 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -3,6 +3,7 @@ desc = "For the union!" icon = 'icons/obj/tesla_engine/tesla_coil.dmi' icon_state = "coil0" + var/icontype = "coil" anchored = FALSE density = TRUE @@ -51,9 +52,9 @@ /obj/machinery/power/tesla_coil/update_icon() if(panel_open) - icon_state = "coil_open[anchored]" + icon_state = "[icontype]_open[anchored]" else - icon_state = "coil[anchored]" + icon_state = "[icontype][anchored]" /obj/machinery/power/tesla_coil/attackby(obj/item/W, mob/user, params) src.add_fingerprint(user) @@ -79,18 +80,19 @@ /obj/machinery/power/tesla_coil/tesla_act(var/power) if(anchored && !panel_open) being_shocked = TRUE - //don't lose arc power when it's not connected to anything - //please place tesla coils all around the station to maximize effectiveness - var/power_produced = powernet ? power / power_loss : power - add_avail(power_produced*input_power_multiplier) - flick("coilhit", src) - playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) - tesla_zap(src, 5, power_produced) + coil_act(power) //addtimer(CALLBACK(src, PROC_REF(reset_shocked)), 10) spawn(10) reset_shocked() else ..() +/obj/machinery/power/tesla_coil/proc/coil_act(var/power) + var/power_produced = power / power_loss + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 5, power_produced) + /obj/machinery/power/tesla_coil/proc/zap() if((last_zap + zap_cooldown) > world.time || !powernet) return FALSE @@ -102,6 +104,127 @@ playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) tesla_zap(src, 10, power/(coeff/2)) +/obj/machinery/power/tesla_coil/relay + name = "tesla relay coil" + desc = "For the union!" + icon_state = "relay0" + icontype = "relay" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + power_loss = 1 + input_power_multiplier = 0 + + var/relay_efficiency = 0.9 + +/obj/machinery/power/tesla_coil/relay/RefreshParts() + ..() + var/relay_multiplier + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + relay_multiplier += C.rating + relay_efficiency = 0.85 + (0.05 * relay_multiplier) + +/obj/machinery/power/tesla_coil/relay/coil_act(var/power) + var/power_relayed = power * relay_efficiency + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 5, power_relayed) + +/obj/machinery/power/tesla_coil/splitter + name = "tesla prism coil" + desc = "For the union!" + icon_state = "prism0" + icontype = "prism" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + var/split_count = 1 + +/obj/machinery/power/tesla_coil/splitter/RefreshParts() + ..() + split_count = 0 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + split_count += C.rating + +/obj/machinery/power/tesla_coil/splitter/coil_act(var/power) + var/power_per_bolt = power / (split_count + 1) + var/power_produced = power_per_bolt / power_loss + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + for(var/i = 0, i < split_count, i++) + tesla_zap(src, 5, power_per_bolt) + +/obj/machinery/power/tesla_coil/amplifier + name = "tesla amplifier coil" + desc = "For the union!" + icon_state = "amp0" + icontype = "amp" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + var/amp_eff = 2 + +/obj/machinery/power/tesla_coil/amplifier/RefreshParts() + ..() + var/amp_eff = 1 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + amp_eff += C.rating + +/obj/machinery/power/tesla_coil/amplifier/coil_act(var/power) + var/power_produced = power / power_loss + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 5, power_produced) + +/obj/machinery/power/tesla_coil/recaster + name = "tesla recaster coil" + desc = "For the union!" + icon_state = "recaster0" + icontype = "recaster" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + var/zap_range = 6 + +/obj/machinery/power/tesla_coil/recaster/RefreshParts() + ..() + var/zap_range = 5 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + zap_range += C.rating + +/obj/machinery/power/tesla_coil/recaster/coil_act(var/power) + var/power_relayed = power / power_loss + var/power_produced = power / (power_loss * 2) + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = zap_range) + tesla_zap(src, zap_range, power_relayed) + +/obj/machinery/power/tesla_coil/collector + name = "tesla collector coil" + desc = "For the union!" + icon_state = "collector0" + icontype = "collector" + + circuit = /obj/item/weapon/circuitboard/tesla_coil + + var/collect_eff = 0.8 + +/obj/machinery/power/tesla_coil/collector/RefreshParts() + ..() + var/collect_mod = 0 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + collect_mod += C.rating + collect_eff = 0.75 + collect_mod*0.05 + +/obj/machinery/power/tesla_coil/collector/coil_act(var/power) + var/power_produced = power * collect_eff + add_avail(power_produced*input_power_multiplier) + flick("[icontype]hit", src) + playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5) + /obj/machinery/power/grounding_rod name = "grounding rod" desc = "Keep an area from being fried from Edison's Bane." diff --git a/code/modules/power/tesla/telsa_construction.dm b/code/modules/power/tesla/telsa_construction.dm index 96729101a3c..23507f8e3c4 100644 --- a/code/modules/power/tesla/telsa_construction.dm +++ b/code/modules/power/tesla/telsa_construction.dm @@ -24,8 +24,35 @@ build_path = /obj/machinery/power/grounding_rod board_type = new /datum/frame/frame_types/machine matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + origin_tech = list(TECH_MAGNET = 1, TECH_POWER = 2) req_components = list() /datum/category_item/autolathe/engineering/grounding_rod name = "grounding rod electronics" path = /obj/item/weapon/circuitboard/grounding_rod + +// SPECIAL BOARDS BELOW + +/obj/item/weapon/circuitboard/tesla_coil/attackby(obj/item/I as obj, mob/user as mob) + if(I.is_multitool()) + var/result = tgui_input_list(user, "What do you want to reconfigure the board to?", "Multitool-Circuitboard interface", list("Standard", "Relay", "Prism", "Amplifier", "Recaster", "Collector")) + switch(result) + if("Standard") + name = T_BOARD("tesla coil") + build_path = /obj/machinery/power/tesla_coil + if("Relay") + name = T_BOARD("tesla relay coil") + build_path = /obj/machinery/power/tesla_coil/relay + if("Prism") + name = T_BOARD("tesla prism coil") + build_path = /obj/machinery/power/tesla_coil/splitter + if("Amplifier") + name = T_BOARD("tesla amplifier coil") + build_path = /obj/machinery/power/tesla_coil/amplifier + if("Recaster") + name = T_BOARD("tesla recaster coil") + build_path = /obj/machinery/power/tesla_coil/recaster + if("Collector") + name = T_BOARD("tesla collector coil") + build_path = /obj/machinery/power/tesla_coil/collector + return \ No newline at end of file diff --git a/icons/obj/tesla_engine/tesla_coil.dmi b/icons/obj/tesla_engine/tesla_coil.dmi index 96a6c636d83..d30dba3ee50 100644 Binary files a/icons/obj/tesla_engine/tesla_coil.dmi and b/icons/obj/tesla_engine/tesla_coil.dmi differ