From eef93267f5fa899233077080dfecb5d6b8628d4f Mon Sep 17 00:00:00 2001 From: tralezab <40974010+tralezab@users.noreply.github.com> Date: Sat, 16 Jan 2021 15:12:14 -0800 Subject: [PATCH] Food Cart remade as a mini-kitchen you can set up in the hallways (AND DO ANYTHING) (ARMFLOYDENKITCHENEZAB) (#55625) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit About The Pull Request The food cart no longer... Does whatever garbage it did before. What, like, store condiments? Terrible. Now you drag it around and set it up, creating a tent with a griddle, smartfridge, and a table. You can pack up anytime. Breaking parts of the tent will pack up the machine and subsequently break it, so careful! Why It's Good For The Game The food cart has been an entirely outdated, out classed, completely dead machine to use. We just can do a lot better in 2020. Now it once again has a nice unique function and lets chefs do a new gimmick of being a travelling seller of food. Employs the "steal the janicart" meta from the janitor in the new and equally infuriating "steal the entire damn tent lmao" Changelog 🆑 add: Food Cart has been completely remade to work as a mobile kitchen /🆑 --- .../temporary_visuals/miscellaneous.dm | 8 + .../kitchen_machinery/food_cart.dm | 253 ++++++++---------- .../kitchen_machinery/griddle.dm | 17 ++ icons/obj/3x3.dmi | Bin 11809 -> 13767 bytes icons/obj/machines/griddle.dmi | Bin 609 -> 777 bytes 5 files changed, 135 insertions(+), 143 deletions(-) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 2b2af0b9a1f..bc09eb7225b 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -469,6 +469,14 @@ else return INITIALIZE_HINT_QDEL +/obj/effect/temp_visual/cart_space + icon_state = "launchpad_launch" + duration = 2 SECONDS + +/obj/effect/temp_visual/cart_space/bad + icon_state = "launchpad_pull" + duration = 2 SECONDS + /obj/effect/constructing_effect icon = 'icons/effects/effects_rcd.dmi' icon_state = "" diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index a9f6fc66082..8b2eb58344b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -1,168 +1,135 @@ -#define STORAGE_CAPACITY 30 -#define LIQUID_CAPACIY 200 -#define MIXER_CAPACITY 100 /obj/machinery/food_cart name = "food cart" - desc = "New generation hot dog stand." + desc = "A compact unpackable mobile cooking stand. Wow! When unpacked, it reminds you of those greasy gamer setups some people on NTNet have." icon = 'icons/obj/kitchen.dmi' icon_state = "foodcart" density = TRUE anchored = FALSE use_power = NO_POWER_USE - var/food_stored = 0 - var/glasses = 0 - var/portion = 10 - var/selected_drink - var/list/stored_food = list() - var/obj/item/reagent_containers/mixer + req_access = list(ACCESS_KITCHEN) + flags_1 = NODECONSTRUCT_1 + var/unpacked = FALSE + var/obj/machinery/griddle/stand/cart_griddle + var/obj/machinery/smartfridge/food/cart_smartfridge + var/obj/structure/table/reinforced/cart_table + var/obj/effect/food_cart_stand/cart_tent + var/static/list/packed_things /obj/machinery/food_cart/Initialize() . = ..() - create_reagents(LIQUID_CAPACIY, OPENCONTAINER | NO_REACT) - mixer = new /obj/item/reagent_containers(src, MIXER_CAPACITY) - mixer.name = "Mixer" + cart_griddle = new(src) + cart_smartfridge = new(src) + cart_table = new(src) + cart_tent = new(src) + packed_things = list(cart_table, cart_smartfridge, cart_tent, cart_griddle) //middle, left, left, right + RegisterSignal(cart_griddle, COMSIG_PARENT_QDELETING, .proc/lost_part) + RegisterSignal(cart_smartfridge, COMSIG_PARENT_QDELETING, .proc/lost_part) + RegisterSignal(cart_table, COMSIG_PARENT_QDELETING, .proc/lost_part) /obj/machinery/food_cart/Destroy() - QDEL_NULL(mixer) + if(cart_griddle) + QDEL_NULL(cart_griddle) + if(cart_smartfridge) + QDEL_NULL(cart_smartfridge) + if(cart_table) + QDEL_NULL(cart_table) + QDEL_NULL(cart_tent) return ..() -/obj/machinery/food_cart/ui_interact(mob/user) +/obj/machinery/food_cart/examine(mob/user) . = ..() - var/dat - dat += "
STORED INGREDIENTS AND DRINKS
" - dat += "Remaining glasses: [glasses]
" - dat += "Portion: [portion]
" - for(var/datum/reagent/R in reagents.reagent_list) - dat += "[R.name]: [R.volume] " - dat += "Purge" - if (glasses > 0) - dat += "Pour in a glass" - dat += "Add to the mixer
" - dat += "

MIXER CONTENTS
" - for(var/datum/reagent/R in mixer.reagents.reagent_list) - dat += "[R.name]: [R.volume] " - dat += "Transfer back" - if (glasses > 0) - dat += "Pour in a glass" - dat += "
" - dat += "

STORED FOOD
" - for(var/V in stored_food) - if(stored_food[V] > 0) - dat += "[V]: [stored_food[V]] Dispense
" - dat += "

Refresh Close" - - var/datum/browser/popup = new(user, "foodcart","Food Cart", 500, 350, src) - popup.set_content(dat) - popup.open() - -/obj/machinery/food_cart/proc/isFull() - return food_stored >= STORAGE_CAPACITY - -/obj/machinery/food_cart/attackby(obj/item/O, mob/user, params) - if(O.tool_behaviour == TOOL_WRENCH) - default_unfasten_wrench(user, O, 0) - return TRUE - if(istype(O, /obj/item/reagent_containers/food/drinks/drinkingglass)) - var/obj/item/reagent_containers/food/drinks/drinkingglass/DG = O - if(!DG.reagents.total_volume) //glass is empty - qdel(DG) - glasses++ - to_chat(user, "[src] accepts the drinking glass, sterilizing it.") - else if(IS_EDIBLE(O)) - if(isFull()) - to_chat(user, "[src] is at full capacity.") + if(!(machine_stat & BROKEN)) + if(cart_griddle.machine_stat & BROKEN) + . += "The stand's griddle is completely broken!" else - var/obj/item/S = O - if(!user.transferItemToLoc(S, src)) - return - food_stored++ - if(stored_food[sanitize(S.name)]) - stored_food[sanitize(S.name)]++ - else - stored_food[sanitize(S.name)] = 1 - else if(istype(O, /obj/item/stack/sheet/glass)) - var/obj/item/stack/sheet/glass/G = O - if(G.get_amount() >= 1) - G.use(1) - glasses += 4 - to_chat(user, "[src] accepts a sheet of glass.") - else if(istype(O, /obj/item/storage/bag/tray)) - var/obj/item/storage/bag/tray/T = O - for(var/obj/item/S in T.contents) - if(isFull()) - to_chat(user, "[src] is at full capacity.") - break - else - if(!IS_EDIBLE(S)) - continue - if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src)) - food_stored++ - if(stored_food[sanitize(S.name)]) - stored_food[sanitize(S.name)]++ - else - stored_food[sanitize(S.name)] = 1 - else if(O.is_drainable()) + . += "The stand's griddle is intact." + . += "The stand's fridge seems fine." //weirdly enough, these fridges don't break + . += "The stand's table seems fine." + +/obj/machinery/food_cart/proc/pack_up() + if(!unpacked) return + visible_message("[src] retracts all of it's unpacked components.") + for(var/o in packed_things) + var/obj/object = o + UnregisterSignal(object, COMSIG_MOVABLE_MOVED) + object.forceMove(src) + anchored = FALSE + unpacked = FALSE + +/obj/machinery/food_cart/proc/unpack(mob/user) + if(unpacked) + return + if(!check_setup_place()) + to_chat(user, "There isn't enough room to unpack here! Bad spaces were marked in red.") + return + visible_message("[src] expands into a full stand.") + anchored = TRUE + var/iteration = 1 + var/turf/grabbed_turf = get_step(get_turf(src), EAST) + for(var/angle in list(0, -45, -45, 45)) + var/turf/T = get_step(grabbed_turf, turn(SOUTH, angle)) + var/obj/thing = packed_things[iteration] + thing.forceMove(T) + RegisterSignal(thing, COMSIG_MOVABLE_MOVED, .proc/lost_part) + iteration++ + unpacked = TRUE + +/obj/machinery/food_cart/attack_hand(mob/living/user) + . = ..() + if(machine_stat & BROKEN) + to_chat(user, "[src] is completely busted.") + return + var/obj/item/card/id/id_card = user.get_idcard(hand_first = TRUE) + if(!check_access(id_card)) + playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + return + to_chat(user, "You attempt to [unpacked ? "pack up" :"unpack"] [src]...") + if(!do_after(user, 5 SECONDS, src)) + to_chat(user, "Your [unpacked ? "" :"un"]packing of [src] was interrupted!") + return + if(unpacked) + pack_up() else - . = ..() - updateDialog() + unpack(user) -/obj/machinery/food_cart/Topic(href, href_list) - if(..()) - return - - if(href_list["disposeI"]) - reagents.del_reagent(href_list["disposeI"]) - - if(href_list["dispense"]) - if(stored_food[href_list["dispense"]]-- <= 0) - stored_food[href_list["dispense"]] = 0 +/obj/machinery/food_cart/proc/check_setup_place() + var/has_space = TRUE + var/turf/grabbed_turf = get_step(get_turf(src), EAST) + for(var/angle in list(0, -45, 45)) + var/turf/T = get_step(grabbed_turf, turn(SOUTH, angle)) + if(T && !T.density) + new /obj/effect/temp_visual/cart_space(T) else - for(var/obj/O in contents) - if(sanitize(O.name) == href_list["dispense"]) - O.forceMove(drop_location()) - food_stored-- - break - log_combat(usr, src, "dispensed [O] from", null, "with [stored_food[href_list["dispense"]]] remaining") + has_space = FALSE + new /obj/effect/temp_visual/cart_space/bad(T) + return has_space - if(href_list["portion"]) - portion = clamp(input("How much drink do you want to dispense per glass?") as num|null, 0, 50) +/obj/machinery/food_cart/proc/lost_part(atom/movable/source, force) + SIGNAL_HANDLER - if (isnull(portion)) - return + //okay, so it's deleting the fridge or griddle which are more important. We're gonna break the machine then + UnregisterSignal(cart_griddle, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + UnregisterSignal(cart_smartfridge, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + UnregisterSignal(cart_table, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + UnregisterSignal(cart_tent, COMSIG_MOVABLE_MOVED) + obj_break() - if(href_list["pour"] || href_list["m_pour"]) - if(glasses-- <= 0) - to_chat(usr, "There are no glasses left!") - glasses = 0 - else - var/obj/item/reagent_containers/food/drinks/drinkingglass/DG = new(loc) - if(href_list["pour"]) - reagents.trans_id_to(DG, href_list["pour"], portion) - if(href_list["m_pour"]) - mixer.reagents.trans_id_to(DG, href_list["m_pour"], portion) +/obj/machinery/food_cart/obj_break(damage_flag) + . = ..() + pack_up() + if(cart_griddle) + QDEL_NULL(cart_griddle) + if(cart_smartfridge) + QDEL_NULL(cart_smartfridge) + if(cart_table) + QDEL_NULL(cart_table) + QDEL_NULL(cart_tent) - if(href_list["mix"]) - if(reagents.trans_id_to(mixer, href_list["mix"], portion) == 0) - to_chat(usr, "[mixer] is full!") - - if(href_list["transfer"]) - if(mixer.reagents.trans_id_to(src, href_list["transfer"], portion) == 0) - to_chat(usr, "[src] is full!") - - updateDialog() - - if(href_list["close"]) - usr.unset_machine() - usr << browse(null,"window=foodcart") - return - -/obj/machinery/food_cart/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 4) - qdel(src) - -#undef STORAGE_CAPACITY -#undef LIQUID_CAPACIY -#undef MIXER_CAPACITY +/obj/effect/food_cart_stand + name = "food cart tent" + desc = "Something to battle the sun, for there are no breaks for the burger flippers." + icon = 'icons/obj/3x3.dmi' + icon_state = "stand" + layer = ABOVE_MOB_LAYER//big mobs will still go over the tent, this is fine and cool diff --git a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm index eba662b8966..62fbb667561 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm @@ -25,6 +25,15 @@ /obj/machinery/griddle/Initialize() . = ..() grill_loop = new(list(src), FALSE) + if(isnum(variant)) + variant = rand(1,3) + +/obj/machinery/griddle/crowbar_act(mob/living/user, obj/item/I) + . = ..() + if(flags_1 & NODECONSTRUCT_1) + return + if(default_deconstruction_crowbar(I, ignore_panel = TRUE)) + return variant = rand(1,3) RegisterSignal(src, COMSIG_ATOM_EXPOSE_REAGENT, .proc/on_expose_reagent) @@ -125,3 +134,11 @@ . = ..() icon_state = "griddle[variant]_[on ? "on" : "off"]" +/obj/machinery/griddle/stand + name = "griddle stand" + desc = "A more commercialized version of your traditional griddle. What happened to the good old days where people griddled with passion?" + variant = "stand" + +/obj/machinery/griddle/stand/update_overlays() + . = ..() + . += "front_bar" diff --git a/icons/obj/3x3.dmi b/icons/obj/3x3.dmi index 07a0213aa9377ea82f578a083d5557f2ccf7f246..b4ab289d19a14fe7fbbc83004de4151a40c3fa81 100644 GIT binary patch literal 13767 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 literal 11809 zcmYLvby!o68}Aw2-2wvy1eHdbQPL?TA}uW`jlf2ON+T%@ly1JHG*T+v-O?%zV+^>* z-*fMC|JZh(XJ=<;d+QT#te%c4DG?J9005-wYESjS*RFpL0zB|pf5`*dUjMUrpc>h!bFBq55pIbabk?P>UZ?`E} zw&?25^X9(E=Ni+xcs*p~!cBkqLXQKJ)jtb0z@3S;yLKmN?NXSZXsX)J>UY=J##8B( zT78&$Wx=wvv4@ZIhB?n|+sgs~*Z}pX3Woll{+R2k*{V;FXWMr@4`SBYbNAhnt74e(=g^msvZR*SVD7j%CURqOo|hFQVS3e8 z{2|f%{{8RY4Sm3zmi;t`vl+Ml97>0C2y@)OFH%HCPTn067Z>+(Gl5+1mAkvU^ODaR zs`eCKzFCFc=XZK1!#wa7+DbJvI{JRJ?(u2h`0w8pQm&Q8)X1hqSO2S%!Y7A6eh`Xg zYacgRR2NtEoS!#H@d5I=I~%7u#hXStBpfkPqLz=zj>C1A4TJ|%)v?xo%gM^-?3=6S zStHaHJ6G`$`-KR3dCXg$U-M5Be3MNn>>+9cIL3rlSvQdW2M|#lm^u}Z7s%Tc1D{UR zQheBo?pZ(?9AKfb*RxrJ0bAzQwx{Sd8>3xu%>g9&r!GdN3m(K!Pho- zN2zm>P7#b#;c5f%Gw8>Daq>#+YAF7lwzJ$F%QfY=qiAxO0(nfhCuLhr4M0pxT-d$o zk3Qp-2}T>rE)ES3cP}k{YBJ)oeLgEbdVcQnOpf$KMqt4mtBi)fT!W-wUU1aQ{k101 zxoS$ zeZQF|!?s^1^jWDK5Rx5QRi9FT$H*vOMsuk3T(tSo`(GIAC-=H0Ca3@sGM}}s+}vEcQC(eKYdbqT z9@*d!Z*N2NhxZ1#c*rlKg3{8&s;a8W*HSq;wRmecwe|HlFVbl7tp$TC!mZ1vTU^~bZP*{GZm@!lU4=zN?huk`RE(?mrzdkE1!TXY?o({E$QRELXQ#as%Dhm0igKiwxL2iJ)iv- zVQyyD1^sb&_q8Rg`nw5cXP+on_ANLKpmHJ1=(v!(*=TYlyU9Z+EQq1(-c5+Fuh^6r zI_EFHX7(#F?juv2Rq>6ckLz!v`IfGT+=BZaXjE<)4 zF#i4>&x+7r40#D&!ZRFq7nh}~ii)oB@$s=R?N{@=-cpDw&u1}-_PSO2Yo9at6)A%n z-I^8)v3XFL(5M|}vb3Df@wLIfytomg&KUE$y1K%Kdv_z(?z_^D65ylGPk_%FCx@uV z4{nA#XaB3HXJtT-kUcs+T>23Y-@#9|x3@R!P>dvssG~%F)Z)mI6W?TkZp zwzq`2S698mC11VS3MemoOVZ(XINAv zXAt;ACI8-Y2ihmy{}K8AO*%gR-H1_l{$Yj8t*pb|m7g}#thAYrcSF);?2J*%9D&!c z&d$zGp9^=Umid*gj?O#GluYq3xnRXD=FdSj*!UK8k!!_)?Rw!_^sm0Ic>4O{0pTO5 zWUI|5UsiHlGc=Ja8XF`O^F~@w7<|2_TzNxbu2T3YhY{9O4Oc(*f( zRBE>naLv^-%(2Y6aj>_yvbV>(y*Qtp={pK`y5Bc4GD5@JoDY|{^4JmN|9CG>MO}OC zFL=i=zEZ{|mLNB`s)C}Rz6*nnvRU@SbGF0t-c^cr8Tvu~5b&^ty{fvpuaUjv6e`=L ze7EQuMogiz0;g{zNm+-sGZgTjQ(lMNB$%vcs zCIsqlS$T)rvwF4pdecaB{|RDyYja5Mo!tV$`xe6F>MhSd;Q5DIwy{Q1#(5B~9G z*{OK;u;Rd7sYP^W2pUIRT-?LU3meX5%;uzu>Zl)&%FfQV8BVdAS3A5?;0AaOE?-oN z&C%X|@T8Qxz`sZseQKQwoQ=@6jp7n-zo+260~@fltO7D>!jR9}e9R?E=LzX02V>$Nl>8kZ9S@0ZT$Aha< zqNffLivbId2Mx!a1S`48%M?30eWY^oFPr60)$)21Zo-mHh!2>$ww`Ol(@$E-lEzjG zF&)vyoMXaeC19CeeN&N`_$?hU7Y-%W&*Tp)4DdIFT~F4-^sUM)s#oK$YXM;aLa2^$6n`|LnZaGF1kTKpr{7IIE>JMNY~vbfQD zJde!Q_P_pXF2v}xGWo|hf8K>m9Vlh-r%4q74(|oJP-QCYAJ|Y1^^wZ?#gd+P-~Ch} z!ABUH_&UCjIPG=oRkN2M3L?i9?_uYBMBbzb?DD_PLL#9L zp|PEldnSd06BEhkrE=Yc44Ew9@}W(Q_s=IixcwvKS`bv-c9HU<&$7}4x+wnmwyJ4P zp5mJ9s*qU5sKY-AH8T{!KUr}-ikQJ0zGjYvcFD5m^-&lgIT3HGQvH6)_V?&(Qy4P`tWZ9d4?9=tZ;f}jF{VOukz zBQ{4-zH}^!YfX>L^+eROH)>jWPkP2Ln}t#>#8&*l03J?o$8vLs!CHfM0e zk4!`vzZWN!d|<|j9XYn(2ZkG{)f;ZM=O5~yP4|fNnd2{M63UExK{kFiW&dr)zJu>LcAK z>fPqZa-&ybw8d=$OnBS| z4A$Rq8izK$`_cHGxnI~lkHk|{H=4N+u_#LYAiPT5)*sWR_bvyw_Fbj-wy?HYnxtFQ z%PGTuWo7`u9Rs|O5&?7*(t#t8r{8#+hZ9js#=SAHQ)zraCqO>doUh40n}IAR%9_Im zN4auHNQksi5Z+^HWtLah1lQ)Y9I@BMqoboQ&&SG!JpgP2=3D}=%rz~${*3kJTlL8k zYBQ#ccunV5l-~y4l`rsloRn8|U>VI&gU!t3t2Uir|2KbpR#y_g2 zBhe_+NSyA{d6o4;G(hWeECQ#lRd-e_%4W$Y_2eZZg53GbxW^l2i_f@vD|rxxMvXOD zIfA{X8Mc|<-?p<~I{cuE^DIeAPoIA9ZF_rrZDT`G#)NP9c8Q2RhhnnJ$7+QZ+5K^q z7OCK6B_{?8KVYdskyK&8rxhy1h;7O2#NwD%SNdzP4C{izgblcBTzjoDjWX9Yd~6(W zP+s>?zd8FH{BJRmL8zmA+XI!bUsr`Fl8if$R$F0_hz*<;$B&L3oLBhtqDV|sTNuQr zpS>GJT@t_Y%Xb6^L7-?(dP~0EM&FZorUC2*g8T2}2^op5+-91U_ zCt|o%%ti&m`l%bA>1KxRtrgAHE1_6dQDOPc)#y2ZbRmv`Uf-qn16C10dc7LlzWwtp zvf7n-TDt7JyDg%qsR># z8=N$|@=cHetZi@O#U~^Xr{g|nae}UIb8V+@i1;63%UF4P47>fm7&6^R{r{NqyU$w@ zb~%JpU3$qP;X8r1V}8cDkJ!R_<-`B9f^nB>S@?d<`B7jj_y-8b43kzD>31R1@>w}S zHsoqo!8TB}D}w=tl7Ha+tP7yVn*3c9Cu{YyIxg7iCsG)uWaRT<@BTCs;=17|EI|3n zZ-r86^+fB{Ntah(%>^E;{ji*Zop;Opw)@c+GgdEIqstTnb0wzKedUGPue6zS~P^*7t}OQTw| zeJaIQkq5r5V~3aL5B1XQUJ*_Ot%A6XnxyE4E?lZSwsJ&Rx#KSd2gV-Ou3-4FE? z`4HV303sLcRl+nYY2r3efzaea=tlIEA-D~s#5yJrRIrQVA3xN?7WzUjygFB#%H_S+ zz`5({b$!zz{e?O3Ls*mwY?^=Lupjal{;>8OH zBGm15ppIO1bu~5siZ~s|l2i}vBFf7jJ)veh_WE{sd0lpyy*njJ z?wulfUYpQcq^+rRtca>n=xVUThK2%p# zMcLn~M~h?s)0yH5Pm$Cg66h1@OJ;Pgd~*f-0JG31~eHzQ~oUkA{^RFKv2MY&sg!DipHZvU4BP5S z@QenmF}Q5vC{oZIIIZVBSUcF{JZCY20~`!pDi{Fh48q9PJ3eyBSzA;vom)swCS(;1 zEO-+Q!$BCGw37nEmB>+YMNE|b@&nFpzxJ?O*{&%lL%k&L#l=O@m~KuF?HvNUntBST z=C6mC-xme{DL)O!urwvi6(V>^i@bqwFs`*;!C7zTt~!k-55eza@o_+bf}T({lcdLt zpZb4?+jjwuFg$%y(aSo0#~Ga%i|Pla(KEBN(PV8IzLDC!a?U=g;SY!N3Rloun};7u zm3gg8cD_3XfeP)<2hP8m!4aVWPl?wl77@M1_74otk}v2gV~@S6A|cjSkCX4Oqr747 zvbrGWos0aZ?mkatwme7~-A?C(H2akhav$m;f270D&;Io{hdp4*^%yC<)xe zh>N0`PK||E1g`|kiL5~@i##zF1))+05Xm(1M~C?Y$*ee~Q|U_R!m@d2===4D0_CKk zDp*=nWA$c|*g%X{p0Z?j91W^mcYv6AUp~Z#JsMhR){rk4@dNptc4TU zm*RZkaE4}ReI`FrDkQPGSFpFYw@ai z2RMTnNMy85u>pEi`ZknZ1$*VtKL(lb?BSf_hY1@3krFOM+HPqbqwhCR5%q)^eut;9 z4oS241wa|{nb_7faReal?(Z4jBHnbpS=52$cr*;H*#bY9^1t?xSdBsagOz#WSe49)S)1d|;!I7M125U!B zLju;&qDYbNz)&50-9u&I05ZMTaFteJ^mxA|M_=3Xiwwjy8Gq<^s$VBsOt9x_5_ zo}={NmT~X`i7d_&&$hqBB2J5n0$XK7y!}W^2T(ziGmJXGh+;7kFlCdBLIyznIy`DhkPej{HC++MG{{9Q9)UClJ)YmBNFv69X{~ z-aA+yA0_~J5r%0ks9d%EN9x-**W&)C`JpKb9FtrW%ZW;AJJxV{>Fqu% z-LSW34y!ltpz~IzB|+SPI({ChUs{@{2v!5iYPsGuA7n~Fm?=%| zk9kvO?5>BuW$C_jF=i5deSKDIU(M!=5!#I`jiYiQImw{Yi`-JqqO5P>s+1_>)6JCu zr{>nfQLkzE@Pb0!+G(xRDSDvG&rER<3*b5*D^7p_xiSI5wi?<`ZiN!jo2B(Mjs}Xr)~ypI*~yqIoDMdn{-*sKTc1ykwI6|AtJ8?$W>A`cC}pQlbN^!UWA;KFW` zX?gIR@dzjjfpENnWIzqY-r}_TwPHQ%ISR!u z&Uj-qYL)UPnI`eFva+}U!3rTB&mrFHHcfLDUS%JL^Zd)O-W5&G6`^mg=r$Mu^m9xs zQr<7DR5M)cwvG_Qe1(IaPJl~%;$pWl9zo8ZaiWMTZK<}sc&0sbrX4AI(f2JB?U~Ul z3jb>Ud*y^$S1P5kwFyzhe}}m1@YCPK@_wXDTD=i-PvpyBI+C{;4t92Z@45ePHGSo` zI3azbeIO_z(V459vw+dL-qI-PNk?L))HmNOP*CcWaC(e+VlWe zeM?JbPArrnxB60iaV-Fci1znalzmk(&3c^%;wXh24bm0>+~`dug%O+_Ei1 zQYOkFuCrH#Z@$~;Ek~9a8PvN%N{SK;;^Y+nd)VI__g0HIW{aCtM@Q$w?OGL^OJiRy zG5@!wzHH?=v0F|D;a(7i0+vq*WTmyY7AYpv9$quBxnY#p$DhE67x0@qI{5eEf$(`; z?Od@4R5&(?w-L!_=2t&|ovSqaHUuX**YOv88f!FM9st%i6F@8;_VMG#eBvM_ECe>^ z8E)CMvke0aVg3$8uw5*xIn~dMO}{J3=2)8l!{>xoBjE+{vJ|}l!wf8<#G=g~;^5%$ zS+2Q15TYk5biF&A5)WQ^dH`(s_q{LhV-kVyI5f%9^)z|fi+YnA%KI|(AS12p1kWtx z=qqmF$Q9^%H7f$-CI4d9H$zNqc6N5k)l<^d`5K8JL{pCFvzPLNKhsReFoUUCMUgSv zOAz#oJ9IRUiQW>93l)i$*nH=h?9Js@nVc{9m9isu_y-y z2Gq^iLCO@J(M3ZU*^|bf$k>)A)X-mFxa{`8Gt#kXk%O8|vEMSBf{B)q&CtETIM1}w z-rN4fiAUhe!{-F=m;zKs-P;R>{XA{!0kPESucSMt;h9C0Tm zz&4%AXn5bv;1hlcmoaa_i6TK*pj3PqBj@MzwMn`KdfrR^nx&~72u0~*A7i|+{S*R{ zBCVtonJ&(rUXt1|s+$6i^8f_sX6Cm8^f?O*zl8X@($^#l)HX_WBO+Ibe|dEV$E;{2 zB{SN@g6)F$TA~mKw7c!}m~CRKj$izjW94)qKD@@Qk|IGn_|I+tDX60=Ukaml^4YdY zL?f3Ew3r!Aq)rsU!HB)~J0Y%o_MmX}$wXh_to49#E#-x3+#i{VO@mFcq;I4gMSMo* zoCDgh@HU^+;@r0mTtJk_5719aiBMc+! z{e5_d-DTAiPSvSBO9a^tzS*a33%(?C?rm8!ryJD7&%Iwh{jT$x?D@+YcS>G#bFU#` zzh&UX$(AO_k@$U)N!-CgoRE@`KDjTjD1oB74)t@P(CaL<5Kfw)Je%&=J2|8SJpkk( z2|H|DiDjj8up0fY8w>Y4KCVgM0(M3vvj?RjQmxs(Y`cK!;OIw$2rC5#Dc zlVmnV4Zy=j8?{&Mn?Usx*L(k9t&Tu(MKa6?P>e5-jUPU{^D6cu!$crmHHCY>e)X#L zq|QKKA^_dmTMkuCRO+I(8zJgbQDIIf_EtE&ezEX!OhJq^5pRJQ&=(3j41HsH)KNGA z`rW8H8{h4%X9Wy!A|3Z7E1NIY8k?ZKX}ywH^iB=T@QwL-_ZJUt&b~g*O7q2I$*V99 zUtV6;4>6dcczk$%FdKde|65VL?{lA8FIX~R&Q8m-SG18t`=$S?o15FW#U^+BfRi9K z*<^GeD1ZN6G~5*ER)LSN4C<&sZ+&p(f?1hO$)F_;qq$!f-{|T@N7hHaj0G==AN;&p z8aq7iQGG8C@4za4s&Dn>75PPvg z*V+~s=1}aRk&z)2OMEAVUhV=Cc_YeVs`uS2w*7Ny?5cHgs1wJ@joYNLsX#%_PH)RyRgCzR;RS++$ZR1zPqp&3Qz;@Ot=OCk8}1S=mcg0GjQt8dx9u2n!~#cHZ>WCT zp%#yfjiOYr*Lz$t?*cB(2t4G7Env9OdJ|1{{$nS=mCP!j`Z;FVuX*8H>=R|^WQVrU z?SzPobL0{N5V&f`1?#!1lLBMPT%OCK3KSSltZoGVSif∋F z5gb%wB()qzV}c}g?*}>g`3bK#Z>TsGI60*$qmlvLNY617-iPp=q{mqQy;xh6POlhLa0~0ERqIVa8vd6kuX`$jhHy4ZUfMAT=C%epj zIiSnE^9D~uM5I5{6*N&%*PEw1ebC?#ONxcGso+mZ8+uJj~U% zd>=;tB?>d^R?%A~#apeMZx^{lK{=6@8vN55oqCuV0CBnoadZz9aNg!juSK`JDRf?Cq!l!16*AG0!Zc_Iyps!UGWb-4K5s1gEYV%-LVxeBpw+e^Hg+7x&Z zs=~^t%Mro{niHTSu0oO;1bRS3dB#2&Q`fAF$sG0n2G+ad^p$%*aenxQy=~7$2TFlw zd3r+V>FM>VXN^La1%nA}PKp4}aF2a=ru5h{!FMn+FrPzddA4w9nID*xMeu5Hf{m+R z{zs!S{hztSVXperjE#H61biBlfoao*@d*pG3u$E_Pz%CPI^u4e(HCN^+k^{9>6`uT z4V`_d$?|*QNv{n1J)5d7-`c=B*CQE+GciCkfOS&anaXBC-wul18wckp=o5w2X#nZG z??edVsMH77_UcIs4-b7?1w}-#b99PPht%!AnpQ)?udV`ieOq>Ee6^L{wA;Df zYPC-Llr|>o(bqn_8*NVb5oq4$OIa~y2-F*Z6z=E1Xh1GK9lrMBcthylpUw{FW%7l% zGun%EE^pK9lvj&>@1$-fAg^z3$1LQ(=jweKN9Yt&?+{18cuXJ_8Rd%Xw`+zPSE3n3 z=_es~mvAW1Jk5k*@$>fs8%w`7rj6A^-1TM6pBR0KvX~HGc6$tO+||spux300LW3T9 zSfg@UwVZ?sd%@pE80n5%3(xkcOf>ZNB)Z{&Zf@#?`uG1x&e09(Y(eokIXR$tRhx)c z)d&EXqjb3nZC%}-p&_mD2PnoaxVTA*fH%f<)zxFX;5)EDf27msYQa8MsKCTFi}!q& zpNqEKZ~&KKDC}RgC3ZoE#4cn;2dYly1g*kCHGVl0cbP8=vDjhpwi9P5dkvwmztaoM z8N%rK$}8nRrL-(pnOM7pCTiI%g+ReoKVY?p8UBNQ7lUDD zic?A4J|VEGS@1KL((vJ@K3+UQ+tAF=0*HU>K&X;{J8hG@V}qj?xKKmcTSw0EDq{3a zNNtadkH0?w0NlHGuL+Qv#f=3kLLex#q-^7z@W^1|iV+w32KM{UA8pUY)(CZDI8VLn z{M=mg^zZt9wmy_W;Qr;c;6GUrPXj`qcytMB+5iDITM&Z+R;5Srr1}Q&ua|h+d%mrg zQH~F2|2e?gQTdw`*rqBmrMYR?9;&Dqc075u`w>GFsgRlv3<+I{Izeo=-tyc>xXw7W zD|xAqpin!HZ>kLR-5CltILHwOyC6h#W+zjg5ARc|0vYnP&(c5H_`wsn0DNIAg!#iU z4P!othak^7_7c?mrUNodmrChEl4Obn%oPGpel-(7^X&m5K9M!7$!pwit&R>}VX86| zw~k%(^HfS1-fou7bo=a2bt!+5YFIwa%qOzi1Ys|@2b_K@M}hJ0x^4$|c28>6?abdO fzl*i2xx-&RS)}5U)jtMzz5#V*ou^fbR$>1KUXj@^ diff --git a/icons/obj/machines/griddle.dmi b/icons/obj/machines/griddle.dmi index b2ad1877e146ce48cfc7a7eebbbae9352b957cb7..dd9a9d1762fad96d0c6048ff8e76fdb1b385194f 100644 GIT binary patch delta 709 zcmV;$0y_QS1c?Ta7Y<+u0{{R3)kcR30000&ktIEUfPer1fB^sh0C=!Oy#N3J0d!JM zQvg8b*k%9#0HJzRSad{Xb7OL8aCB*JZU6vyoRv|_3c@fDJSSff+Pm1+s~2f0J=k9; zk=-;4n!qO5-#1u~R-4<*G7p9=)uro)QMK1WK9K`?r_SnhI7+b)M4L!cOJR{_8&?vd zj+kJ7F*5<&v6{Rwg%m&>(z%ktuzui*zlhylZJiTbX9PFDf(7G34z`TDOA>dGv*2U+ zUtrj~INdaFDNEIj?fa!Ka{`N!8rklf0005VNklW(5QYUb>68;I|Nmb- zAUUykfjjA@x!IjQeYSn1a@@6P{va3!!76co(RR^j1*^eL0t{Azzh1yw7`z520SQPz z0uodb#7{`(l*DWB=G3F}MSrTn8+n2uYw$*%KR}#i4c^FM3_=C32U&xM32HRo+?MlH z0CD>(^oZ~FKy;s-NbDity_lRJ%EJP@Gk@NWLjmG`1yLRpP`p+4@X$b@>@lSxyf@o_ zd-VBm4+myA`+onl0?6%GZ#Sq2-xU}bV?#pl8*UCo7YLuqDM; z@W`E@^Zk9i{~vwExElfx_eFyCU9A0oJ)RHNj9pS0|4IMqSQe+3Q8e1=-6v$NK-Q;Bfz+i^KhYUN8yK3e(-XCvy|)1~0hG z=B?>&J)hSNrGhKk!K*Cc1%jJiwARaF@5}v#eYkl+nwJPn_Tuh3cvv<;k{1drv`z~! rf0q@!R^UF8{*f`yN3Orm@nn1fs>YoNpB&=G00000NkvXXu0mjf*c(eZ delta 540 zcmV+%0^|LO2H^yd7Y;xO0{{R3(&~ad0000vktIEUL@qTZ00001bW%=J06^y0W&i*H zjCxd9bVOxyV{&P5bZKvH004NLQ&wSQVcdC!C+&226GmrmS^Ur;L?cG5@iKfKNoN~0st2#VLQ9hL0bR-0X|7Y zK~z|U?U&thgdhxs`4M4@bZg)LVGCAjSUJ|+iJe{~SFYdL9HKHLO8r4-141)#JGgEP zR&($yfT20~^#*2uVK}%Lh=CZ0ffz6u^be$ed?XnTu11f}3qNvj6-F3=gR5|R191x+ zT!lE1NaQ*O4o(GW%1>_7>=Gbe-hxNGS%G!$&K|4~aBuI6L6_46#^sOK8EAlbt)R4u^LtkTz#a1W{`p4-8)6c`L%;;n#;)}ujIm7;bO>nOX zHWB4D!=BR$@O(fj*hKvb9{FP6YJcDF|EH>$njrx3nuN6PcJ1%+e6T7S(K-H1|NkI5 e$1k1_z5r*rZzy2}u4VuL002ovPDHK)LSTZ<*zfHC