diff --git a/GainStation13/code/machinery/adipoelectric_generator.dm b/GainStation13/code/machinery/adipoelectric_generator.dm new file mode 100644 index 00000000..609e3d96 --- /dev/null +++ b/GainStation13/code/machinery/adipoelectric_generator.dm @@ -0,0 +1,149 @@ +/obj/machinery/power/adipoelectric_generator + name = "adipoelectric generator" + desc = "This device uses calorite technology to transform excess blubber into power!" + icon = 'GainStation13/icons/obj/adipoelectric_transformer.dmi' + icon_state = "state_off" + density = FALSE + anchored = FALSE + use_power = NO_POWER_USE + state_open = TRUE + circuit = /obj/item/circuitboard/machine/power/adipoelectric_generator + occupant_typecache = list(/mob/living/carbon) + var/laser_modifier + var/max_fat + var/obj/structure/cable/attached + var/conversion_rate = 10000 + var/emp_timer = 0 + var/active = FALSE + var/datum/looping_sound/generator/soundloop + +/obj/machinery/power/adipoelectric_generator/Initialize() + . = ..() + soundloop = new(list(src), active) + if(anchored) + connect_to_network() + update_icon() + +/obj/machinery/power/adipoelectric_generator/RefreshParts() + laser_modifier = 0 + max_fat = 0 + for(var/obj/item/stock_parts/micro_laser/C in component_parts) + laser_modifier += C.rating + for(var/obj/item/stock_parts/matter_bin/C in component_parts) + max_fat += C.rating * 2 + +/obj/machinery/power/adipoelectric_generator/process() + if(occupant:fatness_real > 0 && powernet && anchored && (emp_timer < world.time)) + active = TRUE + add_avail(conversion_rate * laser_modifier * max_fat) + occupant:adjust_fatness(-max_fat, FATTENING_TYPE_ITEM) + soundloop.start() + else + active = FALSE + soundloop.stop() + update_icon() + +/obj/machinery/power/adipoelectric_generator/relaymove(mob/user) + if(user.stat) + return + open_machine() + soundloop.stop() + +/obj/machinery/power/adipoelectric_generator/emp_act(severity) + . = ..() + if(!(stat & (BROKEN|NOPOWER))) + emp_timer = world.time + 600 + if(occupant) + open_machine() + +/obj/machinery/power/adipoelectric_generator/attackby(obj/item/P, mob/user, params) + if(state_open) + if(default_deconstruction_screwdriver(user, "state_open", "state_off", P)) + return + + if(default_pry_open(P)) + return + + if(default_deconstruction_crowbar(P)) + return + + if(istype(P, /obj/item/wrench) && !active) + if(!anchored && !isinspace()) + connect_to_network() + to_chat(user, "You secure the generator to the floor.") + anchored = TRUE + dir = SOUTH + else if(anchored) + disconnect_from_network() + to_chat(user, "You unsecure the generator from the floor.") + anchored = FALSE + playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) + return + + return ..() + +/obj/machinery/power/adipoelectric_generator/interact(mob/user) + toggle_open() + return TRUE + +/obj/machinery/power/adipoelectric_generator/proc/toggle_open() + if(state_open) + close_machine() + else + open_machine() + soundloop.stop() + update_icon() + +/obj/machinery/power/adipoelectric_generator/open_machine() + . = ..() + +/obj/machinery/power/adipoelectric_generator/close_machine() + . = ..() + if(occupant && anchored && !panel_open) + add_fingerprint(occupant) + else + open_machine() + +/obj/machinery/power/adipoelectric_generator/update_icon() + cut_overlays() + if(panel_open) + icon_state = "state_open" + return + if(occupant) + var/image/occupant_overlay + occupant_overlay = image(occupant.icon, occupant.icon_state) + occupant_overlay.copy_overlays(occupant) + occupant_overlay.dir = SOUTH + occupant_overlay.pixel_y = 10 + add_overlay(occupant_overlay) + if(!active) + icon_state = "state_off" + else + icon_state = "state_on" + else + icon_state = "state_off" + +/obj/machinery/power/adipoelectric_generator/power_change() + ..() + update_icon() + +/obj/machinery/power/adipoelectric_generator/Destroy() + QDEL_NULL(soundloop) + . = ..() + +/obj/item/circuitboard/machine/power/adipoelectric_generator + name = "Adipoelectric Generator (Machine Board)" + build_path = /obj/machinery/power/adipoelectric_generator + req_components = list( + /obj/item/stock_parts/micro_laser = 5, + /obj/item/stock_parts/matter_bin = 1, + /obj/item/stack/cable_coil = 2) + needs_anchored = FALSE + +/datum/design/board/adipoelectric_generator + name = "Machine Design (Adipoelectric Generator Board)" + desc = "The circuit board for an Adipoelectric Generator." + id = "adipoelectric_generator" + build_path = /obj/item/circuitboard/machine/power/adipoelectric_generator + category = list("Engineering Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING diff --git a/GainStation13/code/machinery/adipoelectric_transformer.dm b/GainStation13/code/machinery/adipoelectric_transformer.dm index a43652ab..027b3c04 100644 --- a/GainStation13/code/machinery/adipoelectric_transformer.dm +++ b/GainStation13/code/machinery/adipoelectric_transformer.dm @@ -1,14 +1,12 @@ GLOBAL_LIST_EMPTY(adipoelectric_transformer) /obj/machinery/adipoelectric_transformer - name = "adipoelectric transformer" //change name to adipoelectric generator + name = "adipoelectric transformer" desc = "This device uses calorite technology to store excess current in the wire it's placed on into whoever steps on!" icon = 'GainStation13/icons/obj/adipoelectric_transformer.dmi' icon_state = "state_off" density = FALSE - use_power = IDLE_POWER_USE - idle_power_usage = 0 - active_power_usage = 0 + use_power = NO_POWER_USE state_open = TRUE circuit = /obj/item/circuitboard/machine/adipoelectric_transformer occupant_typecache = list(/mob/living/carbon) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 72fb0daf..6d579ac3 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -12,7 +12,7 @@ "destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", "space_heater", "xlarge_beaker", "sec_rshot", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38", "sec_38lethal", "rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass","chem_pack","medkit_cabinet", - "disposable_hypospray","plastic_knife","plastic_fork","plastic_spoon","large_beaker") + "disposable_hypospray","plastic_knife","plastic_fork","plastic_spoon","large_beaker", "adipoelectric_generator") /datum/techweb_node/mmi id = "mmi" diff --git a/tgstation.dme b/tgstation.dme index d735453a..f1820fd9 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3085,6 +3085,7 @@ #include "GainStation13\code\game\objects\effects\spawners\choco_slime_delivery.dm" #include "GainStation13\code\game\turfs\closed.dm" #include "GainStation13\code\game\turfs\open.dm" +#include "GainStation13\code\machinery\adipoelectric_generator.dm" #include "GainStation13\code\machinery\adipoelectric_transformer.dm" #include "GainStation13\code\machinery\fattening_turret.dm" #include "GainStation13\code\machinery\feeding_tube.dm"