From 12771ed29d9cdcd607a1b9652a6660ea8f107751 Mon Sep 17 00:00:00 2001 From: SaintLuther Date: Tue, 5 Aug 2025 00:31:15 +0200 Subject: [PATCH] Constructable honey extractor + floral disk printable (#18080) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Constructable honey extractor + floral disk printable Making the Honey Extractor buildable with a circuit in the autolathe and the floral disk for xenobot is now printable when floraguns are researched. * Update beehive.dm * Update .gitignore * Update _map_selection.dm * Update beehive.dm * Update beehive.dm * More honey_extractor changes. – made the honey_extractor anchorable. – ensured the honey_extractor can’t run when the maintenance panel is open. – honey_extractor can now lose power and can’t run when so. – honey_extractor will now use power 5*200watts for processing 1 honey_frame. (can be easily changed if needed) – appropriorate messages for the new states. – appropriorate icons and overlays for the new states. * changes to make the maintainer happy put the circuit board in the appropriate place and changed some grammar and code to ensure smooth sailing. --------- Co-authored-by: antokamire <140556309+antokamire@users.noreply.github.com> Co-authored-by: Luther <221619555+SaintLuther@users.noreply.github.com> --- code/datums/autolathe/engineering_vr.dm | 4 ++ .../weapons/circuitboards/circuitboards_vr.dm | 9 +++ .../modules/hydroponics/beekeeping/beehive.dm | 55 ++++++++++++++++-- .../research/tg/designs/misc_designs.dm | 13 +++++ .../tg/techwebs/nodes/biology_nodes.dm | 1 + icons/obj/beekeeping.dmi | Bin 6485 -> 6762 bytes 6 files changed, 78 insertions(+), 4 deletions(-) diff --git a/code/datums/autolathe/engineering_vr.dm b/code/datums/autolathe/engineering_vr.dm index 93c06fd7f26..1ceefcae72f 100644 --- a/code/datums/autolathe/engineering_vr.dm +++ b/code/datums/autolathe/engineering_vr.dm @@ -73,3 +73,7 @@ /datum/category_item/autolathe/engineering/arf_generator name = "atmospheric field generator electronics" path =/obj/item/circuitboard/arf_generator + +/datum/category_item/autolathe/engineering/honey_extractor + name = "honey extractor electronics" + path =/obj/item/circuitboard/honey_extractor diff --git a/code/game/objects/items/weapons/circuitboards/circuitboards_vr.dm b/code/game/objects/items/weapons/circuitboards/circuitboards_vr.dm index 57cb7a18705..9d1b449f70a 100644 --- a/code/game/objects/items/weapons/circuitboards/circuitboards_vr.dm +++ b/code/game/objects/items/weapons/circuitboards/circuitboards_vr.dm @@ -87,3 +87,12 @@ /obj/item/stack/cable_coil = 2, /obj/item/stock_parts/scanning_module = 1, ) + +/obj/item/circuitboard/honey_extractor + name = T_BOARD("honey_extractor") + board_type = new /datum/frame/frame_types/machine + build_path = /obj/machinery/honey_extractor + req_components = list( + /obj/item/stack/cable_coil = 4, + /obj/item/stock_parts/motor = 1, + /obj/item/stock_parts/console_screen = 1) diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm index 7a505338569..fe90a93b121 100644 --- a/code/modules/hydroponics/beekeeping/beehive.dm +++ b/code/modules/hydroponics/beekeeping/beehive.dm @@ -169,16 +169,62 @@ desc = "A machine used to turn honeycombs on the frame into honey and wax." icon = 'icons/obj/beekeeping.dmi' icon_state = "centrifuge" - + circuit = /obj/item/circuitboard/honey_extractor + anchored = TRUE density = TRUE + idle_power_usage = 15 + active_power_usage = 200 + use_power = USE_POWER_IDLE var/processing = 0 var/honey = 0 +/obj/machinery/honey_extractor/Initialize(mapload) + . = ..() + default_apply_parts() + RefreshParts() + update_icon() + +/obj/machinery/honey_extractor/power_change() + . = ..() + var/delay = rand(0,15) + if(delay) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), delay) + return + update_icon() + +/obj/machinery/honey_extractor/update_icon() + cut_overlays() + + icon_state = initial(icon_state) + + if(panel_open) + add_overlay("[icon_state]_panel") + if(stat & NOPOWER) + icon_state = "[icon_state]_off" + return + if(processing) + icon_state = "[icon_state]_moving" + /obj/machinery/honey_extractor/attackby(var/obj/item/I, var/mob/user) if(processing) to_chat(user, span_notice("\The [src] is currently spinning, wait until it's finished.")) return + if(I.has_tool_quality(TOOL_WRENCH)) + anchored = !anchored + playsound(src, I.usesound, 50, 1) + user.visible_message(span_notice("[user] [anchored ? "wrenches" : "unwrenches"] \the [src]."), span_notice("You [anchored ? "wrench" : "unwrench"] \the [src].")) + return + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + if(stat & NOPOWER) + to_chat(user, span_notice("\The [src] is powerless and can't grant your wishes")) + return + if(panel_open) + to_chat(user, span_notice("\The [src]'s maintenance panel is open, It would not be safe to turn it on.")) + return else if(istype(I, /obj/item/honey_frame)) var/obj/item/honey_frame/H = I if(!H.honey) @@ -186,14 +232,15 @@ return user.visible_message(span_notice("[user] loads \the [H]'s comb into \the [src] and turns it on."), span_notice("You load \the [H] into \the [src] and turn it on.")) processing = H.honey - icon_state = "[initial(icon_state)]_moving" + update_icon() + use_power_oneoff(active_power_usage * 5) //uses 5 second of active power at once, because I could not figure out how active powerdraw works and if or how the work is timed. H.honey = 0 - H.update_icon() + H.update_icon() //updates the honeyframe spawn(50) new /obj/item/stack/material/wax(loc) honey += processing processing = 0 - icon_state = "[initial(icon_state)]" + update_icon() else if(istype(I, /obj/item/reagent_containers/glass)) if(!honey) to_chat(user, span_notice("There is no honey in \the [src].")) diff --git a/code/modules/research/tg/designs/misc_designs.dm b/code/modules/research/tg/designs/misc_designs.dm index cfcb2b3d589..6635ef92c88 100644 --- a/code/modules/research/tg/designs/misc_designs.dm +++ b/code/modules/research/tg/designs/misc_designs.dm @@ -119,3 +119,16 @@ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design_techweb/disk/botany + name = "flora data disk" + desc = "A small disk used for carrying data on plant genetics." + id = "disk_botany" + // req_tech = list(TECH_DATA = 2, TECH_BIO = 3) + build_type = PROTOLATHE + materials = list(MAT_STEEL = 30, MAT_GLASS = 10, MAT_URANIUM = 5) + build_path = /obj/item/disk/botany + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE diff --git a/code/modules/research/tg/techwebs/nodes/biology_nodes.dm b/code/modules/research/tg/techwebs/nodes/biology_nodes.dm index b60b1935407..41725072502 100644 --- a/code/modules/research/tg/techwebs/nodes/biology_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/biology_nodes.dm @@ -112,6 +112,7 @@ prereq_ids = list(TECHWEB_NODE_HYDROPONICS) design_ids = list( "flora_gun", + "disk_botany", // "gene_shears", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) diff --git a/icons/obj/beekeeping.dmi b/icons/obj/beekeeping.dmi index c8dc2fe2d726c9b626f06496331bf11201567532..ba170f92d6ebb3f3e0b6028f2dfeac4c6a4edf19 100644 GIT binary patch literal 6762 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 oq(uUco;+cMKg8Lk&Z>)X-f6 zZ}`3S-dpRf^?vVW}Q0N|m@8-@4S=i=Q(h>yKL z=KHh+0N~L2Xz98sSh||K*gCt}IynLWUMZ>3ZQlX}$%7GVJi(`1aU#>r-aK(#udj$X zkYPlr`8HhJjLwCFD(|6B-$>)q>#@MwfS!KV%kr1^ zef|?m<3XDs#a`2Z+*;QPQ_YeP3YRy!>;$I!Cy*X5y0~CdJ-V7Rvr&o*u^*AWaHyLC zAi8+-UH^0t~Eg`_0VOl3a&nS;J6}enG67+y--njrR9~fGw1D=;@;eI za5iAUnaFXKR#VRLiy22Xlf>r5BR)li<7NC3zFG9h2Wp9LUY{FX3_)N;X>PSrhDZ>N zW+0fFwoGQ2kky$uf9?%!lIWoN^mZa&;!eF^XCmhyyHKL65L~aN)YT_xK>Fy*dY^Rq zh3~qz)tdEWxj6xlP$ax?4@w@Sevdm4NGZ=k{S!c(`2!C`7{m?*a``HebFa1*BAb_Qbm>TX0?p5;)l9Z=}_DjQ;o((ok7Z)mB?z-q#m|9@%m zO=|&%Wo_$bFgZ6hzVV=jFZiEgfpr|kq0rrPlyT+Ht&8>dQl$|sX)+HOW(GSn;KbQt zp_};vIMjN3<4@(DJ%;AH-G7mK!U1Kq8?0JUPJImJZuU^32W+jC&YoEG@IH$vrZZ9*zZY!H9GMe?;8L;7=X|hIIuF>Zcq^e!2PF zeQ)WPBe+58cKl>O2AWuig%v6+=9Vd$p`|r&PNkdJoL}W4%19U)F1xBymVY6IZEK1~ zLaUFa&E))cY7EZX)*8*=2oHI71GE~TE4;!MuQ(OejdE~lRgHY? zqwzg%t6vY<7FVD8AxAm&Y4{ewXAT65@qSz3d}o7*=JeMgjpqGZk2>8@@qlmi1q?VV zJLlG=*X-#HH$uEN2{)bl%~v%?8y#fB6&pHZ{yzp!{wg$uqS40sr8C~Gd$+6Q5~&2? zX@pU`=Xos{^aqrm)wBbn@A+3-ClV>Qy5#tIw|fPtp$G+EqKwez^HMh-V*kvv5$8ZA zYBR(n9mn~bd%GJVnXI>0IH$Dyd~bamY(Egy;xi7|V0MkfNFJ+td)LxJZ!r^=u0}oB zol^BImCCtHy!O(R9@&B4B*pTSvL)`sQ-C_%Z`a;V^NIOgR-s%`8cbS@xmp&Vt|}pT z)LXMBV+0=;?&rKL#}M5S?fLO#(6oOcCtp5DRUd?@5j*&G_DD2A*I-Q18~n?N0Sq|n*IO`Y3BMz zI}kiNbce_y4|kD)SLgO4(?&Lw+bQyU`cvit$GI6Gy9A;0?SAa)JIPe*5>=x1Z*)c$cAveT(83AM%)|}+%)FH1b(tPDN+G5 zS&^Rd7I1^KdYPP&V;GsQf&LNRsz^oxk`FNpD``45qp3}c-Cs!h{oQ+|=V>udLqcr4 zQHqPRMu_=Id~D5pR4t;UB^(MAi;a!F-Vc$(Gx^2Ban@G3(xa+8=l;~S2pe@&3JQx< z>jt7FMKb#>y&uUZCUD3+E20e1$mT4)mw$Hsg>sDuadR3~xCfm7QxC9uMmI$x`%!~1 z^MILzMih6^rC!&2v#T6EU%vPhz_2Mx*|?3QHO?$Ar-1Ilvgn)g>Q&AFxnSkK8WW3e zTRV}#o7mwn!_#M_>IVG6jMM8c;6qeU9R)^WyurULi?+BiD$Jt;Dd z0N3}d^zF;^`SK8yfjnyJd(Ut|Sy@@)45ZSGWEwk@U3QIfZ8Gp{Apo}X$Uuo*;4i>x zWr$OQm}>OElQ4n+$5}G9ynlLnnvQ{?v&i>}IDN}T1#5YV6op)}{g?NkR|xoPLGsSO zE;z1I%~;+Lr(N%B*AKAdrd_b;oRlSjN)2S4Mab%Vki1|h4tJ#iQK0Z}dtd<0kS?{loiB3c z_S95}v-17}PF_WPrDlk5tC=X(13Vjt#F^86yH;LGJ?$Y8luStN5cQSkSi_aqR#5zu zXK#DUYno4=lItwzkX1;1vs*_!PZ5#ow|DJ+nUnVZ*{atfRqr7eLq z`Xv3y&(Bw{_?HGQ-d1VFm*xKsy=fu-(&F8KVsd|HZxB1Eu4v1nQ`+$3!UGp8RCoTL zJ}g9LW=&d_^0&?1XQ~Y?c!J*@nid)lDj)1SEXVST2! zb>?WMI#Ue3qb~fbRLu>G$HlaWj&sW630S>9)=3c}k3OShP?w7M4?nQW>lFl;D43&b zQvdPpiY>0QkpMRmI8X9UI%rSp@LQX@3h@mdxs~{BPipd738l&e@EX+IE6qtm?$tkV z4NJX&CaP(}R*Qvb$40d}dRsfKX-*0kMx~>I1_!H3|B0Nl>N2e?s|7^KD+bkaMc}p3h2o*`2*JVbwZN2sn#~U`lbh=oabsa-69IG*yGS zm}JjLA&pm0c#s0_zks&5Bo3TO$&dH1d=my~REtF+m#ZGdT~;uo>R%a7bTNGjo*HEO z;-NiEqdBtBT-#%D@V?h9-FM#Y$CBOEcG{oMVrF>C6Y3oYRX_c)-=3+ZO<&O9W>~7@ zQfSV46MxCLKxa9@+5q;cTfF87>@d}Lcy#@#=gE0b!0dHcKmE}aAwI5diD;xGn0`N~ zZ7#VCOPc-?L)ZHTwQsixpP+bGGJ6-K{aqayueA5VnP{dxx`jOCHxM-7+7=?!Max7PeTqt+|KuW-M z`A$$;QdJWPl)ah%JE=M#jXdCdz|?L3viuYi?`l7+#!j74&~&f1M+RNU0hM&2ga5|y zV$HjKHNJug7{^68fa82P^@l?krRXan?Bd?i<8T?%IvEyB)K1w45-4q=B?g2H!7u2T z8A!(*>U}Pq>Qo4|(d-%b@gm?jN zyL;@DsGj`|sdFTW6DTs-0l}2Lv+Y_owZpK7wtn^csWR#5=KF;m#xC^Hh`FG7O~MPR zrSNCZ;Zx-?&f@LL{D#1uNZbrt>7zWk-}LHQND;HjkL<;Ab^xY}Q+&g;ZqeDBH`DJT zYs6*?aNLgPKZTxwITZp>lb{FCqO;?G$sNgezF9n{U~@x@%i-%A3_25M}tL%W%!`hy~ z#bIWBb_SAk#*>{1N_*|+D{ag;yeU(&ooxY5FV;}Z)Fun_hW}I@v-SCQvBs8jXf7L2K zJUW!B-|$*o!s~5B*BH$61fr-W5-1a_+;+klG6*3_opbx1fIKcW|e?MpSf7*Y^T`fxmmVUa!wC z2}pOX?Z1SB1fgv z^BdU9DJ~9w9}<8`1&1oIauHPjrfkXzIDVl0JBZD7`bN)S*a@>u)PZm`$n)Kza$s=x zt~;(E0~vXW!u^)HgvH)rXjZ*Ya@geli|NryLy*9<5owL6mq?ioIQ79Vf$W=5D((*5 zr&d+P#6m12G+Dc2)kAdB=(Vt0Ozoy2CHglh)~eOL^bp&EQ^EWhRoQRZo4r-RN^lOuLqUH&4GZ?-5KeH=S~g>Q=)HAT^#r zxjID3fBJbylQ-Jepl=VC<1Dn(LEw(mX^>q&?H`mKn|-&jeh^YfUQ-;8lPv)Nw)x}m zjbPzkE}TEPXvoig6m}{9u(fX=Q-lnsmCmzc(AiVC@|Gkpweo2#9xUam%aJ`2dV?7l z$702Fh+I@m>5tlopS&mah$?aHd?Bdi_>>;Ml%lX0Pt86dz{oi{RO@3F&PpWBHz_i- z2fOg&{QTT*V-15fw*VA!q#wArX$5UYd8v>lXa#YP+mzJ;+gR!qk)o;(y_4J@O>YhB9(!r-nWsd5ZjG1*i!NU zQc9LD{2fZX6fW_t$df^1RT*Dq2S*LQmO7$+RFApJyG}3ehZ%Jo!Dl?CPmHhZ(?>5y8Vs0r-@o@m zQwhASXYxTI!m=`A+>dA9lMV0If50_YT5y?Yuu$tZUMP`47xUb9bXM9+7f73PRV=Sp ztD=?Bj!lrvpO;Tc4MqM!HVoxV0r0Ym&mB)|OTHgPCdibhFB807h}qBkW3jL0<9G|1 zNORZTzUA(p3(4iRzPh}iFM&H@0AhN#$+U}{-mbt-o_{KUR)seSTqTqD^*+oDy=?HbuRV(WIPi(pU17NZgY-F)yf z!LW&fd~qM)ly(T7;i*l&e$4*#r2nQRx}@o$Ut=P{IkUs|8#T;EujeNW7&3y}s*S(o zB$nrU#T7!vd2@3Hu(Y=zY5V{aU{d~LHWVFQ7q2t9qvf^}+V~}CZfMMaQ}SnCEkjaG z_&5S~N!iLP($bzZ8ZA|jZg7_;cB1z3N*AI^{dU(gx`VqZ`NvSkGU$dJ$QriXbo3@4 zye2V)=1;z$qJD2|=u2e6*w^`v^W>yN0A~Q3^M*U4)6NC1V_s}+r=DCINLj&+wyaxP zzKAqqO9Zq>*jnNtjoZl{v~b;;iZz}6sXX$ik|;XL3`bpDZhChCP_}oF zy>30W_EIjHJjmwHs|1TRYXdD!1vPgf>mjG*n7zipzk^gly(v1z?H3WJV@c_6LxDnQ z&EdYIN@Q$2C1H@@lZRBU`Tx*|>B1WctNbLmbf7IM}Pg&6NnZ85Z%f0WM zdoiVipHd}^be>53UT^VN^%B==fWt!@zW%Z)&L@t~;FUFknWi$)yeE>9G%`>4P9=+O z3g^RXn;sb!;1c1`E`JI?mq={vKP@gqWVf4^yAT&C6ilxVW_a5wHar*!Z<3FyB#7}| zmJ-f7$|7RPRomjWF@MeG0p=O1Jp(*ua}*QU+g%>hDQVZXU)qen=>x~}^+3Cio<0?x z5Ca*1h!}fxn{@>YB@&8+#;gk)41+>g7T4NyXh)^ti4F*-9u%sJ4RI5@G(zF;OEA@J zP5ag4M~)i5$wd&YX|2>UOpWmKXgIbKcrg;mF#B31EY`f|I$_YNyQhap=^kFVm0*G( z<&tg`RVkuJibj}1Qv1^@w=#BQZMy}T3ypX+F-CeYa$%e)~d{!*X~HiAx%c-A~c{%v*vh*AAwLU$F_;-z5MQ M#diuYpo#x~09tOk-~a#s