From 5c2cfa112cf64334bae6798362e2d8055ab65687 Mon Sep 17 00:00:00 2001 From: Alphas00 <154434082+Alphas00@users.noreply.github.com> Date: Mon, 29 Apr 2024 15:58:51 +0200 Subject: [PATCH] Adipoelectric Transformer introduced Adds the Adipoelectric Transformer, an engineering item that can be unlocked through the NutriTools tech node. This machine once placed on a wire will convert excess current into fatness for the person who stands on it --- .../machinery/adipoelectric_transformer.dm | 152 ++++++++++++++++++ .../research/techweb/nutritech_nodes.dm | 2 +- .../icons/obj/adipoelectric_transformer.dmi | Bin 0 -> 1177 bytes tgstation.dme | 1 + 4 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 GainStation13/code/machinery/adipoelectric_transformer.dm create mode 100644 GainStation13/icons/obj/adipoelectric_transformer.dmi diff --git a/GainStation13/code/machinery/adipoelectric_transformer.dm b/GainStation13/code/machinery/adipoelectric_transformer.dm new file mode 100644 index 00000000..a43652ab --- /dev/null +++ b/GainStation13/code/machinery/adipoelectric_transformer.dm @@ -0,0 +1,152 @@ +GLOBAL_LIST_EMPTY(adipoelectric_transformer) + +/obj/machinery/adipoelectric_transformer + name = "adipoelectric transformer" //change name to adipoelectric generator + 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 + state_open = TRUE + circuit = /obj/item/circuitboard/machine/adipoelectric_transformer + occupant_typecache = list(/mob/living/carbon) + var/recharge_speed + var/obj/structure/cable/attached + var/drain_rate = 1000000 + var/lastprocessed = 0 + var/power_avaliable = 0 + var/conversion_rate = 0.000001 + var/emp_timer = 0 + var/emp_multiplier = 5 + +/obj/machinery/adipoelectric_transformer/Initialize() + . = ..() + update_icon() + +/obj/machinery/adipoelectric_transformer/RefreshParts() + recharge_speed = 0 + for(var/obj/item/stock_parts/capacitor/C in component_parts) + recharge_speed += C.rating + +/obj/machinery/adipoelectric_transformer/process() + if(!is_operational()) + return + if(!attached) + playsound(src, 'sound/machines/buzz-two.ogg', 50) + return PROCESS_KILL + var/datum/powernet/PN = attached.powernet + if(PN) + power_avaliable = PN.netexcess + update_icon() + if(power_avaliable <= 0) + return + if(occupant) + if(power_avaliable > drain_rate) + lastprocessed = ((power_avaliable - drain_rate) * (conversion_rate / 10)) + 1 + else + lastprocessed = power_avaliable * conversion_rate + if(!(world.time >= emp_timer + 600)) + lastprocessed = lastprocessed * emp_multiplier + occupant:adjust_fatness(lastprocessed * recharge_speed, FATTENING_TYPE_ITEM) + return 1 + +/obj/machinery/adipoelectric_transformer/relaymove(mob/user) + if(user.stat) + return + open_machine() + +/obj/machinery/adipoelectric_transformer/emp_act(severity) + . = ..() + if(!(stat & (BROKEN|NOPOWER))) + if(occupant) + emp_timer = world.time //stuck in for 600 ticks, about 60 seconds + +/obj/machinery/adipoelectric_transformer/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 + return ..() + +/obj/machinery/adipoelectric_transformer/interact(mob/user) + toggle_open() + return TRUE + +/obj/machinery/adipoelectric_transformer/proc/toggle_open() + if(state_open) + close_machine() + else + open_machine() + update_icon() + +/obj/machinery/adipoelectric_transformer/open_machine() + if(!(world.time >= emp_timer + 600)) + return + . = ..() + GLOB.adipoelectric_transformer -= src + STOP_PROCESSING(SSobj, src) + +/obj/machinery/adipoelectric_transformer/close_machine() + . = ..() + if(LAZYLEN(GLOB.adipoelectric_transformer) < 1 && occupant) + var/turf/T = loc + if(isturf(T) && !T.intact) + attached = locate() in T + add_fingerprint(occupant) + GLOB.adipoelectric_transformer += src + START_PROCESSING(SSobj, src) + else + playsound(src, 'sound/machines/buzz-two.ogg', 50) + open_machine() + +/obj/machinery/adipoelectric_transformer/update_icon() + cut_overlays() + 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(power_avaliable <= 0) + icon_state = "state_off" + else + if(!(world.time >= emp_timer + 600)) + icon_state = "state_overdrive" + add_overlay("particles_overdrive") + else + icon_state = "state_on" + add_overlay("particles_on") + else + icon_state = "state_off" + +/obj/machinery/adipoelectric_transformer/power_change() + ..() + update_icon() + +/obj/machinery/adipoelectric_transformer/Destroy() + . = ..() + GLOB.adipoelectric_transformer -= src + +/obj/item/circuitboard/machine/adipoelectric_transformer + name = "Adipoelectric Transformer (Machine Board)" + build_path = /obj/machinery/adipoelectric_transformer + req_components = list( + /obj/item/stock_parts/capacitor = 5, + /obj/item/stack/sheet/glass = 1, + /obj/item/stack/sheet/mineral/calorite = 1) + +/datum/design/board/adipoelectric_transformer + name = "Machine Design (Adipoelectric Transformer Board)" + desc = "The circuit board for an Adipoelectric Transformer." + id = "adipoelectric_transformer" + build_path = /obj/item/circuitboard/machine/adipoelectric_transformer + category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING diff --git a/GainStation13/code/modules/research/techweb/nutritech_nodes.dm b/GainStation13/code/modules/research/techweb/nutritech_nodes.dm index 72931afc..05ecff57 100644 --- a/GainStation13/code/modules/research/techweb/nutritech_nodes.dm +++ b/GainStation13/code/modules/research/techweb/nutritech_nodes.dm @@ -5,7 +5,7 @@ display_name = "Nutri-Tech Tools" description = "Ending world hunger was never made easier!" prereq_ids = list("biotech", "adv_engi") // add "engineering" if the designs get complicated later on - design_ids = list("calorite_collar", "ci-nutrimentturbo", "bluespace_belt") + design_ids = list("calorite_collar", "ci-nutrimentturbo", "bluespace_belt", "adipoelectric_transformer") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) boost_item_paths = list(/obj/item/gun/energy/fatoray, /obj/item/gun/energy/fatoray/cannon, /obj/item/trash/fatoray_scrap1, /obj/item/trash/fatoray_scrap2) export_price = 5000 diff --git a/GainStation13/icons/obj/adipoelectric_transformer.dmi b/GainStation13/icons/obj/adipoelectric_transformer.dmi new file mode 100644 index 0000000000000000000000000000000000000000..29c5fe8b1aaae2b286dd713d41ba51bd2e05b597 GIT binary patch literal 1177 zcmV;K1ZMk*P)004jp0{{R3ySP)t-s|7J7) zW;5fWci(X);f_`!8ya(Ma#Kf8LNqv1Oi@WfNR^e9X=7*;6%-2$3o{}jwG9o_baek_ zGj2sG6BZ~EC=EXv8jV~$fm1YfK1cxo0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pS zoZ^zil2jm5Nr{UyC9|j)$TZ~QOe;#vO@*-G3c!r`{5Eh zs3bEvC$$)-ep9^qp>_lPlv0#gmWtg76Jni!-x#7?l9onncon4L@UbD6vVyCh3pla> z^DcXO_&~3e0009>Nklo)#1sFVLyoc_S=F z^J@UZ?@2TWf||U9XAmed8nVHIXhd2>E_N7=NUF$$4y3tP+arh4c=fix!8E}JZ$F%7 zvCTIV(5zmhTS;glui}kF#AHRKQqinmN16_$4c@JXUVJbfhz#B}%Xh1W<50mSu3))* z*+Za;wzhuiyd)keFs>{Ns^y-Cb+Pm}S*amUI7vb_US_%#;m2U{DgrYX>Q47k8n5&^ zP=Lj&2u%Le>7mo6Z`+_4-3{99gT*TeOfD9NL0bVz1qB4?VX(Vk@k#=d%dG*O>JBi^RoA7;Air?W68 ztqm5hATV!zOyf9CPJlnatbjR$#mfa^=Fv2{lla5T_8%~Zuz0z^jrJQP34S8_xth-F z4}v&c0QAxBlZ_@fyDkI3bnt8LhUc&0*U=a403-FgWO-l6%zZ4n}H<#hR0kb z{KY@;m@D=d879s4TVEmpDy?N7Sqq|S%sDRczTTl^8P^+ABl{&r(ZLkSZ@Q`lPMifX-TP$9VbRVx${||)3 z!HJc$@mLCP&SdKN8UnHZ2ddi;eCYUM?(?r;5S1QJ3Hx^?uzy#mkNvws*uN_l$o^d! z?B7*`{kxw6xj*vKyvjoRiQS3kh73rU3&{DGRG^u&luXgC-&c9)JSYgiJ zE2Qi13rh2tK*ZlGrA`KS&Lbv*5