From 23e2c250ec9eaac6f5e28cbfe7ccb5a424038e40 Mon Sep 17 00:00:00 2001 From: Migratingcocofruit <69551563+Migratingcocofruit@users.noreply.github.com> Date: Sat, 4 Nov 2023 22:42:07 +0200 Subject: [PATCH] Adds soil clumps and a compost bin. (#22585) * Adds soil clumps, which are used to make soil(alternative to sandstone). * Adds soil clump recipe to the biogenerator * Adds the compost bin to the game. Which converts biomass to compost and makes soil from it. * Adds sprites for the compost bin * Adds a recipe for the compost bin(10 planks) * Added interface for the compost bin. * Applying suggested changes to compost bin(redundant condition removal, spell check, auto doc) * Applying suggested changes to soil sheets(initialize, remove empty line) * Changed min and max to clamp where able, removed redundant return, compost recursion stays in convert_biomass(). * Call parent on init * Identation and style changes * Rephrase description * Unauto docing unnecessary bits, clicking with screwdriver no longer an attack, removed redundancies, reordred ui procs and changed ui data list to new format. * Converting plant to biomass is now its own function * removed SOIL define. using path as is instead * Moved the compost_bin-3 sprite up a pixel so it aligns with the rest * Added spaces for readability Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Moved plant deletion to make_biomass() * Rebuilt tgui * Filled gaps in sprite with mostly transparent pixels to make it easier to click * Rebuild tgui * rebuild tgui * Adds the soil clump sprites back after update * Added Trailing newline to compost_bin.dm check said it's missing * Adds a check for presence of biomass when initializing to prevent unneeded proc call Checks whether a compost bin has any biomass before attempting to compost it. * Adding back compost bin icons * rebuild tgui * Made interface window slightly shorter. from 300 to 200 pixels tall. * Replaced the enough_compost() proc with an if statement in the only place it was used * Replaced the compost() proc and calls to it with process(). * Rebuild TGUI * Removed an unused var, idented a comment, and returned the onhit proc to it's original form * Ran prettier on the compost bin interface file * Wake Up Icon Diffbot * Aw shit, here we go again. * Empty-Commit * Wake up icondiffbot * Last attempt for today * Removed redundant new line from sheet_types.dm * removed redundant new lines and moved the ui procs together. * Changed compost label to Compost * Recompile tgui * Rebuild Tgui * Rebuild TGUI * Rebuild TGUI * Capitaliize the word soil in the biogenerator listing for it * following some suggestions Replaced compost capacity defines with "magic numbers", removed redundant init proc, added spaces around a '-' sign. * Removing a redundant check in the insertion proc. moved the check for the compost bin being full to the end of the loop since I already make one before the loop starts. * Rebuild TGUI * Rebuild Tgui * Update code/game/objects/items/stacks/sheets/sheet_types.dm Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> * Rebuild TGUI * ReRebuild TGUI --------- Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: S34N <12197162+S34NW@users.noreply.github.com> Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> --- .../items/stacks/sheets/sheet_types.dm | 26 ++- code/modules/hydroponics/compost_bin.dm | 160 ++++++++++++++++++ .../research/designs/biogenerator_designs.dm | 8 + icons/obj/hydroponics/equipment.dmi | Bin 24286 -> 25844 bytes icons/obj/stacks/organic.dmi | Bin 14954 -> 16935 bytes paradise.dme | 1 + tgui/packages/tgui/interfaces/CompostBin.js | 95 +++++++++++ tgui/packages/tgui/public/tgui.bundle.js | 4 +- 8 files changed, 291 insertions(+), 3 deletions(-) create mode 100644 code/modules/hydroponics/compost_bin.dm create mode 100644 tgui/packages/tgui/interfaces/CompostBin.js diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index eeb9e76a263..8225956d0e2 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -6,6 +6,7 @@ * Cloth * Durathread * Cardboard + * Soil * Runed Metal (cult) * Brass (clockwork cult) * Bones @@ -240,7 +241,8 @@ GLOBAL_LIST_INIT(wood_recipes, list( new /datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 1 SECONDS), new /datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("loom", /obj/structure/loom, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), - new /datum/stack_recipe("fermenting barrel", /obj/structure/fermenting_barrel, 30, time = 5 SECONDS) + new /datum/stack_recipe("fermenting barrel", /obj/structure/fermenting_barrel, 30, time = 5 SECONDS), + new /datum/stack_recipe("compost bin", /obj/machinery/compost_bin, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE) )) /obj/item/stack/sheet/wood @@ -434,6 +436,28 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( recipes = GLOB.cardboard_recipes return ..() +/* + * soil + */ +GLOBAL_LIST_INIT(soil_recipes, list ( + new /datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE) +)) + +/obj/item/stack/sheet/soil + name = "soil" + desc = "A clump of fertile soil which can be used to make a plot." + singular_name = "soil clump" + icon = 'icons/obj/stacks/organic.dmi' + icon_state = "sheet-soil" + item_state = "sheet-soil" + origin_tech = "materials=1" + resistance_flags = FIRE_PROOF + merge_type = /obj/item/stack/sheet/soil + +/obj/item/stack/sheet/soil/Initialize(loc, amt) + recipes = GLOB.soil_recipes + return ..() + /* * Runed Metal */ diff --git a/code/modules/hydroponics/compost_bin.dm b/code/modules/hydroponics/compost_bin.dm new file mode 100644 index 00000000000..18519207f6b --- /dev/null +++ b/code/modules/hydroponics/compost_bin.dm @@ -0,0 +1,160 @@ +#define SOIL_COST 25 +#define DECAY 0.2 +#define MIN_CONVERSION 10 +/** + * # compost bin + * used to make soil from plants. + * Doesn't have components. + */ +/obj/machinery/compost_bin + name = "compost bin" + desc = "A wooden bin for composting." + icon = 'icons/obj/hydroponics/equipment.dmi' + icon_state = "compost_bin-empty" + power_state = NO_POWER_USE + density = TRUE + anchored = TRUE + /// stage in the process, for timing purposes. + var/process_counter = 0 + /// amount of biomass in the compost bin + var/biomass = 0 + /// amount of compost in the compost bin + var/compost = 0 + /// The maximum amount of biomass the compost bin can store. + var/biomass_capacity = 1500 + /// The maximum amount of compost the compost bin can store. + var/compost_capacity = 1500 + +/obj/machinery/compost_bin/on_deconstruction() + // returns wood instead of the non-existent components + new /obj/item/stack/sheet/wood(loc, 10) + return ..() + +/obj/machinery/compost_bin/screwdriver_act(mob/living/user, obj/item/I) + // there are no screws either + to_chat(user, "[src] has no screws!") + return TRUE + +/obj/machinery/compost_bin/crowbar_act(mob/living/user, obj/item/I) + // no panel either + return default_deconstruction_crowbar(user, I, ignore_panel = TRUE) + +// Accepts inserted plants and converts them to biomass +/obj/machinery/compost_bin/proc/make_biomass(obj/item/reagent_containers/food/snacks/grown/O) + // calculate biomass from plant nutriment and plant matter + var/plant_biomass = O.reagents.get_reagent_amount("nutriment") + O.reagents.get_reagent_amount("plantmatter") + biomass += clamp(plant_biomass * 10, 1, biomass_capacity - biomass) + //plant delenda est + qdel(O) + +// takes care of plant insertion and conversion to biomass, and start composting what was inserted +/obj/machinery/compost_bin/attackby(obj/item/O, mob/user, params) + if(user.a_intent == INTENT_HARM) + return ..() + + if(istype(O, /obj/item/storage/bag/plants)) + if(biomass >= biomass_capacity) + to_chat(user, "[src] can't hold any more biomass!") + return + + var/obj/item/storage/bag/plants/PB = O + for(var/obj/item/reagent_containers/food/snacks/grown/G in PB.contents) + + PB.remove_from_storage(G, src) + make_biomass(G) + + if(biomass >= biomass_capacity) + to_chat(user, "You fill [src] to its capacity.") + break + + if(biomass < biomass_capacity) + to_chat(user, "You empty [PB] into [src].") + + SStgui.update_uis(src) + update_icon_state() + return TRUE + + if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) + if(biomass >= biomass_capacity) + to_chat(user, "[src] can't hold any more plants!") + return + if(!user.unEquip(O)) + return + + O.forceMove(src) + make_biomass(O) + to_chat(user, "You put [O] in [src].") + SStgui.update_uis(src) + update_icon_state() + return TRUE + + to_chat(user, "You cannot put this in [name]!") + +//Compost compostable material if there is any +/obj/machinery/compost_bin/process() + if(compost >= compost_capacity || biomass <= 0) + return + process_counter++ + if(process_counter < 5) + return + process_counter = 0 + //converts 20% of the biomass to compost each cycle, unless there isn't enough compost space or there is 10 or less biomass + var/conversion_amount = clamp(DECAY * biomass, min(MIN_CONVERSION, biomass), compost_capacity - compost) + biomass -= conversion_amount + compost += conversion_amount + update_icon_state() + SStgui.update_uis(src) + +// Makes soil from compost +/obj/machinery/compost_bin/proc/create_soil(amount) + // Verify theres enough compost + if(compost < (SOIL_COST * amount)) + return + new /obj/item/stack/sheet/soil(loc, amount) + compost -= SOIL_COST * amount + update_icon_state() + SStgui.update_uis(src) + +/obj/machinery/compost_bin/attack_hand(mob/user) + ui_interact(user) + +/obj/machinery/compost_bin/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "CompostBin", "Compost Bin", 390, 200, master_ui, state) + ui.set_autoupdate(FALSE) + ui.open() + +/obj/machinery/compost_bin/ui_data(mob/user) + var/list/data = list() + data["biomass"] = biomass + data["biomass_capacity"] = biomass_capacity + data["compost"] = compost + data["compost_capacity"] = compost_capacity + return data + +// calls functions according to ui interaction(just making compost for now) +/obj/machinery/compost_bin/ui_act(action, list/params) + if(..()) + return + + . = TRUE + switch(action) + if("create") + var/amount = clamp(text2num(params["amount"]), 1, 10) + create_soil(amount) + +// sets compost bin sprite according to the amount of compost in it +/obj/machinery/compost_bin/update_icon_state() + if(!compost) + icon_state = "compost_bin-empty" + else if(compost <= compost_capacity / 3) + icon_state = "compost_bin-1" + else if(compost <= 2 * (compost_capacity) / 3) + icon_state = "compost_bin-2" + else + icon_state = "compost_bin-3" + +#undef SOIL_COST +#undef DECAY +#undef MIN_CONVERSION diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index 2d5b1770f1e..10a73792f2f 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -139,6 +139,14 @@ build_path = /obj/item/reagent_containers/glass/bottle/nutrient/empty category = list("initial", "Botany Chemicals") +/datum/design/soil + name = "Clump of Soil" + id = "soil" + build_type = BIOGENERATOR + materials = list(MAT_BIOMASS = 50) + build_path = /obj/item/stack/sheet/soil + category = list("initial", "Organic Materials") + /datum/design/cloth name = "Roll of cloth" id = "cloth" diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index 306e62de5f8582ce6eedb418f710b6afaddfb76e..7951f304894d8e7bdcd35ea255c090cbc7c75b90 100644 GIT binary patch delta 4937 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 Q3ub`sEyJ7Tnhufw15lr`Pyhe` delta 3367 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 diff --git a/icons/obj/stacks/organic.dmi b/icons/obj/stacks/organic.dmi index 350be304f4b41d0419021aaf889e4cace1622a93..76b414b32444cbdb59ca966c1f3e3298322114cf 100644 GIT binary patch literal 16935 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 literal 14954 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 diff --git a/paradise.dme b/paradise.dme index 39fb689b5df..7b8c2010397 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1790,6 +1790,7 @@ #include "code\modules\holiday\christmas.dm" #include "code\modules\holiday\holiday.dm" #include "code\modules\hydroponics\biogenerator.dm" +#include "code\modules\hydroponics\compost_bin.dm" #include "code\modules\hydroponics\fermenting_barrel.dm" #include "code\modules\hydroponics\gene_modder.dm" #include "code\modules\hydroponics\grown.dm" diff --git a/tgui/packages/tgui/interfaces/CompostBin.js b/tgui/packages/tgui/interfaces/CompostBin.js new file mode 100644 index 00000000000..b976d9b0913 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CompostBin.js @@ -0,0 +1,95 @@ +import { useBackend, useSharedState } from '../backend'; +import { + Button, + Section, + Box, + Flex, + Icon, + Collapsible, + NumberInput, + ProgressBar, + Dimmer, + LabeledList, +} from '../components'; +import { Window } from '../layouts'; + +export const CompostBin = (props, context) => { + const { act, data } = useBackend(context); + const { biomass, compost, biomass_capacity, compost_capacity } = data; + + let [vendAmount, setVendAmount] = useSharedState(context, 'vendAmount', 1); + + return ( + + +
+ + + + + {biomass} / {biomass_capacity} Units + + + + + + + + + {compost} / {compost_capacity} Units + + + + +
+
+ + + Soil clumps to make: + + setVendAmount(value)} + /> + + +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/public/tgui.bundle.js b/tgui/packages/tgui/public/tgui.bundle.js index 438bf84adc2..cf568f29b13 100644 --- a/tgui/packages/tgui/public/tgui.bundle.js +++ b/tgui/packages/tgui/public/tgui.bundle.js @@ -1,5 +1,5 @@ -!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=233)}([function(e,t,n){"use strict";t.__esModule=!0;var o=n(235);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===o[e]||(t[e]=o[e]))}))},function(e,t,n){"use strict";t.__esModule=!0,t.useSharedState=t.useLocalState=t.useBackend=t.deleteLocalState=t.backendUpdate=t.backendSetSharedState=t.backendReducer=t.backendDeleteSharedState=void 0;var o=n(32),r=n(43);t.backendUpdate=function(e){return{type:"backend/update",payload:e}};var a=function(e,t){return{type:"backend/setSharedState",payload:{key:e,nextState:t}}};t.backendSetSharedState=a;var c=function(e){return{type:"backend/deleteSharedState",payload:e}};t.backendDeleteSharedState=c;t.backendReducer=function(e,t){var n=t.type,o=t.payload;if("backend/update"===n){var a=Object.assign({},e.config,o.config),c=Object.assign({},e.data,o.static_data,o.data),i=Object.assign({},e.shared);if(o.shared)for(var l=0,d=Object.keys(o.shared);l1?n-1:0),r=1;rn?n:e};t.clamp01=function(e){return e<0?0:e>1?1:e};t.scale=function(e,t,n){return(e-t)/(n-t)};t.round=function(e,t){return!e||isNaN(e)?e:(t|=0,a=(e*=n=Math.pow(10,t))>0|-(e<0),r=Math.abs(e%1)>=.4999999999854481,o=Math.floor(e),r&&(e=o+(a>0)),(r?e:Math.round(e))/n);var n,o,r,a};t.toFixed=function(e,t){return void 0===t&&(t=0),Number(e).toFixed(Math.max(t,0))};var o=function(e,t){return t&&e>=t[0]&&e<=t[1]};t.inRange=o;t.keyOfMatchingRange=function(e,t){for(var n=0,r=Object.keys(t);n0&&(t.style=l),t};t.computeBoxProps=N;var b=function(e){var t=e.textColor||e.color,n=e.backgroundColor;return(0,o.classes)([u(t)&&"color-"+t,u(n)&&"color-bg-"+n])};t.computeBoxClassName=b;var V=function(e){var t=e.as,n=void 0===t?"div":t,o=e.className,c=e.children,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,i);if("function"==typeof c)return c(N(e));var d="string"==typeof o?o+" "+b(l):b(l),u=N(l);return(0,r.createVNode)(a.VNodeFlags.HtmlElement,n,d,c,a.ChildFlags.UnknownChildren,u)};t.Box=V,V.defaultHooks=o.pureComponentHooks},function(e,t,n){"use strict";function o(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n",apos:"'"};return e.replace(/
/gi,"\n").replace(/<\/?[a-z0-9-_]+[^>]*>/gi,"").replace(/&(nbsp|amp|quot|lt|gt|apos);/g,(function(e,n){return t[n]})).replace(/&#?([0-9]+);/gi,(function(e,t){var n=parseInt(t,10);return String.fromCharCode(n)})).replace(/&#x?([0-9a-f]+);/gi,(function(e,t){var n=parseInt(t,16);return String.fromCharCode(n)}))};t.buildQueryString=function(e){return Object.keys(e).map((function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])})).join("&")}},function(e,t,n){"use strict";var o=n(41);e.exports=function(e){return o(e.length)}},function(e,t,n){"use strict";var o=n(5),r=n(12),a=n(49),c=n(132),i=n(130);e.exports=function(e,t,n,l){var d=!!l&&!!l.unsafe,u=!!l&&!!l.enumerable,s=!!l&&!!l.noTargetGet,m=l&&l.name!==undefined?l.name:t;return r(n)&&c(n,m,l),e===o?(u?e[t]=n:i(t,n),e):(d?!s&&e[t]&&(u=!0):delete e[t],u?e[t]=n:a(e,t,n),e)}},function(e,t,n){"use strict";var o=n(60),r=n(7),a=n(85),c=n(19),i=n(23),l=n(91),d=r([].push),u=function(e){var t=1==e,n=2==e,r=3==e,u=4==e,s=6==e,m=7==e,p=5==e||s;return function(h,f,C,N){for(var b,V,g=c(h),v=a(g),y=o(f,C),_=i(v),x=0,k=N||l,L=t?k(h,_):n||m?k(h,0):undefined;_>x;x++)if((p||x in v)&&(V=y(b=v[x],x,g),e))if(t)L[x]=V;else if(V)switch(e){case 3:return!0;case 5:return b;case 6:return x;case 2:d(L,b)}else switch(e){case 4:return!1;case 7:d(L,b)}return s?-1:r||u?u:L}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},function(e,t,n){"use strict";var o=n(8),r=n(14),a=n(101),c=n(64),i=n(30),l=n(56),d=n(18),u=n(174),s=Object.getOwnPropertyDescriptor;t.f=o?s:function(e,t){if(e=i(e),t=l(t),u)try{return s(e,t)}catch(n){}if(d(e,t))return c(!r(a.f,e,t),e[t])}},function(e,t,n){"use strict";var o=n(5),r=n(12),a=n(71),c=o.TypeError;e.exports=function(e){if(r(e))return e;throw c(a(e)+" is not a function")}},function(e,t,n){"use strict";var o=n(5),r=n(12),a=function(e){return r(e)?e:undefined};e.exports=function(e,t){return arguments.length<2?a(o[e]):o[e]&&o[e][t]}},function(e,t,n){"use strict";t.__esModule=!0,t.modalRegisterBodyOverride=t.modalOpen=t.modalClose=t.modalAnswer=t.ComplexModal=void 0;var o=n(0),r=n(1),a=n(2),c={};t.modalOpen=function(e,t,n){var o=(0,r.useBackend)(e),a=o.act,c=o.data,i=Object.assign(c.modal?c.modal.args:{},n||{});a("modal_open",{id:t,arguments:JSON.stringify(i)})};t.modalRegisterBodyOverride=function(e,t){c[e]=t};var i=function(e,t,n,o){var a=(0,r.useBackend)(e),c=a.act,i=a.data;if(i.modal){var l=Object.assign(i.modal.args||{},o||{});c("modal_answer",{id:t,answer:n,arguments:JSON.stringify(l)})}};t.modalAnswer=i;var l=function(e,t){(0,(0,r.useBackend)(e).act)("modal_close",{id:t})};t.modalClose=l;t.ComplexModal=function(e,t){var n=(0,r.useBackend)(t).data;if(n.modal){var d,u,s=n.modal,m=s.id,p=s.text,h=s.type,f=(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Cancel",color:"grey",onClick:function(){return l(t)}}),C="auto";if(c[m])u=c[m](n.modal,t);else if("input"===h){var N=n.modal.value;d=function(e){return i(t,m,N)},u=(0,o.createComponentVNode)(2,a.Input,{value:n.modal.value,placeholder:"ENTER to submit",width:"100%",my:"0.5rem",autofocus:!0,onChange:function(e,t){N=t}}),f=(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Cancel",color:"grey",onClick:function(){return l(t)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"check",content:"Confirm",color:"good",float:"right",m:"0",onClick:function(){return i(t,m,N)}}),(0,o.createComponentVNode)(2,a.Box,{clear:"both"})]})}else if("choice"===h){var b="object"==typeof n.modal.choices?Object.values(n.modal.choices):n.modal.choices;u=(0,o.createComponentVNode)(2,a.Dropdown,{options:b,selected:n.modal.value,width:"100%",my:"0.5rem",onSelected:function(e){return i(t,m,e)}}),C="initial"}else"bento"===h?u=(0,o.createComponentVNode)(2,a.Flex,{spacingPrecise:"1",wrap:"wrap",my:"0.5rem",maxHeight:"1%",children:n.modal.choices.map((function(e,r){return(0,o.createComponentVNode)(2,a.Flex.Item,{flex:"1 1 auto",children:(0,o.createComponentVNode)(2,a.Button,{selected:r+1===parseInt(n.modal.value,10),onClick:function(){return i(t,m,r+1)},children:(0,o.createVNode)(1,"img",null,null,1,{src:e})})},r)}))}):"boolean"===h&&(f=(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:n.modal.no_text,color:"bad",float:"left",mb:"0",onClick:function(){return i(t,m,0)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"check",content:n.modal.yes_text,color:"good",float:"right",m:"0",onClick:function(){return i(t,m,1)}}),(0,o.createComponentVNode)(2,a.Box,{clear:"both"})]}));return(0,o.createComponentVNode)(2,a.Modal,{maxWidth:e.maxWidth||window.innerWidth/2+"px",maxHeight:e.maxHeight||window.innerHeight/2+"px",onEnter:d,mx:"auto",overflowY:C,children:[(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:p}),u,f]})}}},function(e,t,n){"use strict";var o=n(85),r=n(31);e.exports=function(e){return o(r(e))}},function(e,t,n){"use strict";var o=n(5).TypeError;e.exports=function(e){if(e==undefined)throw o("Can't call method on "+e);return e}},function(e,t,n){"use strict";function o(e,t,n,o,r,a,c){try{var i=e[a](c),l=i.value}catch(d){return void n(d)}i.done?t(l):Promise.resolve(l).then(o,r)}t.__esModule=!0,t.winset=t.winget=t.runCommand=t.callByondAsync=t.callByond=t.IS_IE8=void 0;var r=window.Byond,a=function(){var e=navigator.userAgent.match(/Trident\/(\d+).+?;/i);if(!e)return null;var t=e[1];return t?parseInt(t,10):null}(),c=null!==a&&a<=6;t.IS_IE8=c;var i=function(e,t){void 0===t&&(t={}),r.call(e,t)};t.callByond=i;var l=function(e,t){void 0===t&&(t={}),window.__callbacks__=window.__callbacks__||[];var n=window.__callbacks__.length,o=new Promise((function(e){window.__callbacks__.push(e)}));return r.call(e,Object.assign({},t,{callback:"__callbacks__["+n+"]"})),o};t.callByondAsync=l;t.runCommand=function(e){return i("winset",{command:e})};var d=function(){var e,t=(e=regeneratorRuntime.mark((function n(e,t){var o;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,l("winget",{id:e,property:t});case 2:return o=n.sent,n.abrupt("return",o[t]);case 4:case"end":return n.stop()}}),n)})),function(){var t=this,n=arguments;return new Promise((function(r,a){var c=e.apply(t,n);function i(e){o(c,r,a,i,l,"next",e)}function l(e){o(c,r,a,i,l,"throw",e)}i(undefined)}))});return function(e,n){return t.apply(this,arguments)}}();t.winget=d;t.winset=function(e,t,n){var o;return i("winset",((o={})[e+"."+t]=n,o))}},function(e,t,n){"use strict";t.__esModule=!0,t.zipWith=t.zip=t.uniqBy=t.toKeyedArray=t.toArray=t.sortBy=t.reduce=t.map=t.filter=void 0;t.toArray=function(e){if(Array.isArray(e))return e;if("object"==typeof e){var t=Object.prototype.hasOwnProperty,n=[];for(var o in e)t.call(e,o)&&n.push(e[o]);return n}return[]};t.toKeyedArray=function(e,t){return void 0===t&&(t="key"),o((function(e,n){var o;return Object.assign(((o={})[t]=n,o),e)}))(e)};t.filter=function(e){return function(t){if(null===t&&t===undefined)return t;if(Array.isArray(t)){for(var n=[],o=0;oi)return 1}return 0};t.sortBy=function(){for(var e=arguments.length,t=new Array(e),n=0;n"+l+""}},function(e,t,n){"use strict";var o=n(6);e.exports=function(e){return o((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},function(e,t,n){"use strict";t.__esModule=!0,t.computeFlexProps=t.computeFlexItemProps=t.FlexItem=t.Flex=void 0;var o=n(0),r=n(10),a=n(32),c=n(21),i=["className","direction","wrap","align","alignContent","justify","inline","spacing","spacingPrecise"],l=["className","grow","order","shrink","basis","align"];function d(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var u=function(e){var t=e.className,n=e.direction,o=e.wrap,c=e.align,l=e.alignContent,u=e.justify,s=e.inline,m=e.spacing,p=void 0===m?0:m,h=e.spacingPrecise,f=void 0===h?0:h,C=d(e,i);return Object.assign({className:(0,r.classes)(["Flex",a.IS_IE8&&("column"===n?"Flex--ie8--column":"Flex--ie8"),s&&"Flex--inline",p>0&&"Flex--spacing--"+p,f>0&&"Flex--spacingPrecise--"+f,t]),style:Object.assign({},C.style,{"flex-direction":n,"flex-wrap":o,"align-items":c,"align-content":l,"justify-content":u})},C)};t.computeFlexProps=u;var s=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({},u(e))))};t.Flex=s,s.defaultHooks=r.pureComponentHooks;var m=function(e){var t=e.className,n=e.grow,o=e.order,i=e.shrink,u=e.basis,s=void 0===u?e.width:u,m=e.align,p=d(e,l);return Object.assign({className:(0,r.classes)(["Flex__item",a.IS_IE8&&"Flex__item--ie8",t]),style:Object.assign({},p.style,{"flex-grow":n,"flex-shrink":i,"flex-basis":(0,c.unit)(s),order:o,"align-self":m})},p)};t.computeFlexItemProps=m;var p=function(e){return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({},m(e))))};t.FlexItem=p,p.defaultHooks=r.pureComponentHooks,s.Item=p},function(e,t,n){"use strict";var o,r,a,c=n(176),i=n(5),l=n(7),d=n(11),u=n(49),s=n(18),m=n(129),p=n(103),h=n(87),f=i.TypeError,C=i.WeakMap;if(c||m.state){var N=m.state||(m.state=new C),b=l(N.get),V=l(N.has),g=l(N.set);o=function(e,t){if(V(N,e))throw new f("Object already initialized");return t.facade=e,g(N,e,t),t},r=function(e){return b(N,e)||{}},a=function(e){return V(N,e)}}else{var v=p("state");h[v]=!0,o=function(e,t){if(s(e,v))throw new f("Object already initialized");return t.facade=e,u(e,v,t),t},r=function(e){return s(e,v)?e[v]:{}},a=function(e){return s(e,v)}}e.exports={set:o,get:r,has:a,enforce:function(e){return a(e)?r(e):o(e,{})},getterFor:function(e){return function(t){var n;if(!d(t)||(n=r(t)).type!==e)throw f("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){"use strict";var o=Math.ceil,r=Math.floor;e.exports=function(e){var t=+e;return t!=t||0===t?0:(t>0?r:o)(t)}},function(e,t,n){"use strict";var o=n(40),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},function(e,t,n){"use strict";var o=n(5),r=n(18),a=n(12),c=n(19),i=n(103),l=n(142),d=i("IE_PROTO"),u=o.Object,s=u.prototype;e.exports=l?u.getPrototypeOf:function(e){var t=c(e);if(r(t,d))return t[d];var n=t.constructor;return a(n)&&t instanceof n?n.prototype:t instanceof u?s:null}},function(e,t,n){"use strict";t.__esModule=!0,t.timeAgo=t.getGasLabel=t.getGasColor=t.UI_UPDATE=t.UI_INTERACTIVE=t.UI_DISABLED=t.UI_CLOSE=t.RADIO_CHANNELS=t.CSS_COLORS=t.COLORS=void 0;t.UI_INTERACTIVE=2;t.UI_UPDATE=1;t.UI_DISABLED=0;t.UI_CLOSE=-1;t.COLORS={department:{command:"#526aff",security:"#CF0000",medical:"#009190",science:"#993399",engineering:"#A66300",supply:"#9F8545",service:"#80A000",centcom:"#78789B",other:"#C38312"},damageType:{oxy:"#3498db",toxin:"#2ecc71",burn:"#e67e22",brute:"#e74c3c"}};t.CSS_COLORS=["black","white","red","orange","yellow","olive","green","teal","blue","violet","purple","pink","brown","grey","good","average","bad","label"];t.RADIO_CHANNELS=[{name:"Syndicate",freq:1213,color:"#a52a2a"},{name:"SyndTeam",freq:1244,color:"#a52a2a"},{name:"Red Team",freq:1215,color:"#ff4444"},{name:"Blue Team",freq:1217,color:"#3434fd"},{name:"Response Team",freq:1345,color:"#2681a5"},{name:"Special Ops",freq:1341,color:"#2681a5"},{name:"Supply",freq:1347,color:"#b88646"},{name:"Service",freq:1349,color:"#6ca729"},{name:"Science",freq:1351,color:"#c68cfa"},{name:"Command",freq:1353,color:"#5177ff"},{name:"Procedure",freq:1339,color:"#F70285"},{name:"Medical",freq:1355,color:"#57b8f0"},{name:"Medical(I)",freq:1485,color:"#57b8f0"},{name:"Engineering",freq:1357,color:"#f37746"},{name:"Security",freq:1359,color:"#dd3535"},{name:"Security(I)",freq:1475,color:"#dd3535"},{name:"AI Private",freq:1343,color:"#d65d95"},{name:"Common",freq:1459,color:"#1ecc43"}];var o=[{id:"o2",name:"Oxygen",label:"O\u2082",color:"blue"},{id:"n2",name:"Nitrogen",label:"N\u2082",color:"red"},{id:"co2",name:"Carbon Dioxide",label:"CO\u2082",color:"grey"},{id:"plasma",name:"Plasma",label:"Plasma",color:"pink"},{id:"water_vapor",name:"Water Vapor",label:"H\u2082O",color:"grey"},{id:"nob",name:"Hyper-noblium",label:"Hyper-nob",color:"teal"},{id:"n2o",name:"Nitrous Oxide",label:"N\u2082O",color:"red"},{id:"no2",name:"Nitryl",label:"NO\u2082",color:"brown"},{id:"tritium",name:"Tritium",label:"Tritium",color:"green"},{id:"bz",name:"BZ",label:"BZ",color:"purple"},{id:"stim",name:"Stimulum",label:"Stimulum",color:"purple"},{id:"pluox",name:"Pluoxium",label:"Pluoxium",color:"blue"},{id:"miasma",name:"Miasma",label:"Miasma",color:"olive"},{id:"hydrogen",name:"Hydrogen",label:"H\u2082",color:"white"},{id:"ab",name:"Agent B",label:"Agent B",color:"purple"}];t.getGasLabel=function(e,t){var n=String(e).toLowerCase(),r=o.find((function(e){return e.id===n||e.name.toLowerCase()===n}));return r&&r.label||t||e};t.getGasColor=function(e){var t=String(e).toLowerCase(),n=o.find((function(e){return e.id===t||e.name.toLowerCase()===t}));return n&&n.color};t.timeAgo=function(e,t){if(e>t)return"in the future";var n=(t/=10)-(e/=10);if(n>3600){var o=Math.round(n/3600);return o+" hour"+(1===o?"":"s")+" ago"}if(n>60){var r=Math.round(n/60);return r+" minute"+(1===r?"":"s")+" ago"}var a=Math.round(n);return a+" second"+(1===a?"":"s")+" ago"}},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledListItem=t.LabeledListDivider=t.LabeledList=void 0;var o=n(0),r=n(10),a=n(21),c=n(222),i=["className","label","labelColor","color","textAlign","verticalAlign","buttons","content","children","noColon"];var l=function(e){var t=e.children;return(0,o.createVNode)(1,"table","LabeledList",t,0)};t.LabeledList=l,l.defaultHooks=r.pureComponentHooks;var d=function(e){var t=e.className,n=e.label,c=e.labelColor,l=void 0===c?"label":c,d=e.color,u=e.textAlign,s=e.verticalAlign,m=e.buttons,p=e.content,h=e.children,f=e.noColon,C=void 0!==f&&f,N=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,i),b=C?"":":";return(0,o.createVNode)(1,"tr",(0,r.classes)(["LabeledList__row",t]),[(0,o.createComponentVNode)(2,a.Box,{as:"td",color:l,verticalAlign:s,className:(0,r.classes)(["LabeledList__cell","LabeledList__label"]),children:n?n+b:null}),(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"td",color:d,textAlign:u,verticalAlign:s,className:(0,r.classes)(["LabeledList__cell","LabeledList__content"]),colSpan:m?undefined:2},N,{children:[p,h]}))),m&&(0,o.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",m,0)],0)};t.LabeledListItem=d,d.defaultHooks=r.pureComponentHooks;var u=function(e){var t=e.size?(0,a.unit)(Math.max(0,e.size-1)):0;return(0,o.createVNode)(1,"tr","LabeledList__row",(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,c.Divider),2,{colSpan:3,style:{"padding-top":t,"padding-bottom":t}}),2)};t.LabeledListDivider=u,u.defaultHooks=r.pureComponentHooks,l.Item=d,l.Divider=u},function(e,t,n){"use strict";var o=n(7),r=o({}.toString),a=o("".slice);e.exports=function(e){return a(r(e),8,-1)}},function(e,t,n){"use strict";var o=n(7);e.exports=o({}.isPrototypeOf)},function(e,t,n){"use strict";var o=n(84),r=Function.prototype,a=r.apply,c=r.call;e.exports="object"==typeof Reflect&&Reflect.apply||(o?c.bind(a):function(){return c.apply(a,arguments)})},function(e,t,n){"use strict";var o=n(28);e.exports=o("navigator","userAgent")||""},function(e,t,n){"use strict";var o=n(8),r=n(17),a=n(64);e.exports=o?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){"use strict";var o=n(40),r=Math.max,a=Math.min;e.exports=function(e,t){var n=o(e);return n<0?r(n+t,0):a(n,t)}},function(e,t,n){"use strict";var o,r=n(9),a=n(136),c=n(134),i=n(87),l=n(179),d=n(131),u=n(103),s=u("IE_PROTO"),m=function(){},p=function(e){return"