diff --git a/.vscode/settings.json b/.vscode/settings.json index 4ed7c27..0694373 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,7 @@ { "rust-analyzer.check.allTargets": false, - "rust-analyzer.cargo.target": "wasm32-unknown-unknown" + "rust-analyzer.cargo.target": "wasm32-unknown-unknown", + "rust-analyzer.cargo.features": [ + "tsify", + ] } diff --git a/Cargo.lock b/Cargo.lock index 3bc6add..d1c9b09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,7 +119,7 @@ checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -130,14 +130,14 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" @@ -156,9 +156,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" @@ -167,10 +167,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "bumpalo" -version = "3.15.4" +name = "bitflags" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytes" @@ -200,9 +206,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.90" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" +checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" [[package]] name = "cfg-if" @@ -212,15 +218,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.4", + "windows-targets 0.52.5", ] [[package]] @@ -254,7 +260,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -263,6 +269,33 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +[[package]] +name = "color-eyre" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + [[package]] name = "colorchoice" version = "1.0.0" @@ -321,7 +354,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -332,7 +365,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -342,7 +375,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.3", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", @@ -370,6 +403,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + [[package]] name = "fnv" version = "1.0.7" @@ -441,7 +484,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -493,6 +536,19 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "gloo-utils" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -501,9 +557,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "heck" @@ -562,35 +618,49 @@ dependencies = [ name = "ic10emu" version = "0.2.3" dependencies = [ + "color-eyre", "const-crc32", - "convert_case", "getrandom", "itertools", + "macro_rules_attribute", + "paste", "phf 0.11.2", - "phf_codegen", "rand", "regex", "serde", + "serde_derive", + "serde_json", "serde_with", + "stationeers_data", "strum", "strum_macros", "thiserror", "time", + "tracing", + "tsify", + "wasm-bindgen", ] [[package]] name = "ic10emu_wasm" version = "0.2.3" dependencies = [ + "color-eyre", "console_error_panic_hook", "ic10emu", "itertools", "js-sys", "serde", "serde-wasm-bindgen 0.6.5", + "serde_derive", + "serde_ignored", + "serde_json", + "serde_path_to_error", "serde_with", - "strum", + "stationeers_data", "thiserror", + "tracing", + "tracing-wasm", "tsify", "wasm-bindgen", "wasm-bindgen-futures", @@ -625,6 +695,8 @@ dependencies = [ "js-sys", "tokio", "tower-lsp", + "tracing", + "tracing-wasm", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", @@ -647,6 +719,12 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + [[package]] name = "indexmap" version = "1.9.3" @@ -665,15 +743,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.14.5", "serde", ] [[package]] name = "itertools" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] @@ -693,6 +771,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + [[package]] name = "libc" version = "0.2.153" @@ -701,9 +785,9 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -721,13 +805,29 @@ version = "0.94.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1" dependencies = [ - "bitflags", + "bitflags 1.3.2", "serde", "serde_json", "serde_repr", "url", ] +[[package]] +name = "macro_rules_attribute" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a82271f7bc033d84bbca59a3ce3e4159938cb08a9c3aebbe54d215131518a13" +dependencies = [ + "macro_rules_attribute-proc_macro", + "paste", +] + +[[package]] +name = "macro_rules_attribute-proc_macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568" + [[package]] name = "memchr" version = "2.7.2" @@ -754,6 +854,39 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -761,10 +894,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] -name = "num-traits" -version = "0.2.18" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -804,10 +968,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] -name = "parking_lot" -version = "0.12.1" +name = "owo-colors" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + +[[package]] +name = "parking_lot" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" dependencies = [ "lock_api", "parking_lot_core", @@ -815,17 +985,23 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.5", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "percent-encoding" version = "2.3.1" @@ -907,7 +1083,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -945,7 +1121,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -972,6 +1148,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn 2.0.77", +] + [[package]] name = "proc-macro-hack" version = "0.5.20+deprecated" @@ -980,18 +1166,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.79" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1028,11 +1214,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" dependencies = [ - "bitflags", + "bitflags 2.5.0", ] [[package]] @@ -1066,9 +1252,9 @@ checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustversion" @@ -1078,9 +1264,9 @@ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "scopeguard" @@ -1090,9 +1276,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] @@ -1121,13 +1307,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -1138,20 +1324,39 @@ checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", +] + +[[package]] +name = "serde_ignored" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8e319a36d1b52126a0d608f24e93b2d81297091818cd70625fcf50a15d84ddf" +dependencies = [ + "serde", ] [[package]] name = "serde_json" -version = "1.0.115" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", "serde", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + [[package]] name = "serde_repr" version = "0.1.18" @@ -1160,14 +1365,14 @@ checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] name = "serde_with" -version = "3.7.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee80b0e361bbf88fd2f6e242ccd19cfda072cb0faa6ae694ecee08199938569a" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" dependencies = [ "base64", "chrono", @@ -1183,21 +1388,30 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.7.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6561dc161a9224638a31d876ccdfefbc1df91d3f3a8342eddb35f055d48c7655" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", ] [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -1225,14 +1439,29 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", "windows-sys 0.52.0", ] +[[package]] +name = "stationeers_data" +version = "0.2.3" +dependencies = [ + "const-crc32", + "num-integer", + "phf 0.11.2", + "serde", + "serde_derive", + "serde_with", + "strum", + "tsify", + "wasm-bindgen", +] + [[package]] name = "strsim" version = "0.10.0" @@ -1265,7 +1494,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -1281,9 +1510,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.57" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -1291,30 +1520,46 @@ dependencies = [ ] [[package]] -name = "thiserror" -version = "1.0.58" +name = "textwrap" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", ] [[package]] name = "time" -version = "0.3.34" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", @@ -1336,9 +1581,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ "num-conv", "time-core", @@ -1386,7 +1631,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -1455,7 +1700,7 @@ checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -1483,7 +1728,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", ] [[package]] @@ -1493,6 +1738,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", ] [[package]] @@ -1542,8 +1820,10 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" dependencies = [ + "gloo-utils", "serde", "serde-wasm-bindgen 0.5.0", + "serde_json", "tsify-macros", "wasm-bindgen", ] @@ -1557,7 +1837,17 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.57", + "syn 2.0.77", +] + +[[package]] +name = "uneval" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63cc5d2fd8648d7e2be86098f60c9ece7045cc710b3c1e226910e2f37d11dc73" +dependencies = [ + "serde", + "thiserror", ] [[package]] @@ -1605,6 +1895,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1632,7 +1928,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", "wasm-bindgen-shared", ] @@ -1667,7 +1963,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.57", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1707,7 +2003,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.4", + "windows-targets 0.52.5", ] [[package]] @@ -1725,7 +2021,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.4", + "windows-targets 0.52.5", ] [[package]] @@ -1745,17 +2041,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm 0.52.4", - "windows_aarch64_msvc 0.52.4", - "windows_i686_gnu 0.52.4", - "windows_i686_msvc 0.52.4", - "windows_x86_64_gnu 0.52.4", - "windows_x86_64_gnullvm 0.52.4", - "windows_x86_64_msvc 0.52.4", + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] [[package]] @@ -1766,9 +2063,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" [[package]] name = "windows_aarch64_msvc" @@ -1778,9 +2075,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" [[package]] name = "windows_i686_gnu" @@ -1790,9 +2087,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" [[package]] name = "windows_i686_msvc" @@ -1802,9 +2105,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" [[package]] name = "windows_x86_64_gnu" @@ -1814,9 +2117,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" [[package]] name = "windows_x86_64_gnullvm" @@ -1826,9 +2129,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" [[package]] name = "windows_x86_64_msvc" @@ -1838,14 +2141,35 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "xtask" version = "0.2.3" dependencies = [ "clap", + "color-eyre", + "convert_case", + "indexmap 2.2.6", + "num", + "num-integer", + "phf_codegen", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "serde", + "serde_derive", + "serde_ignored", + "serde_json", + "serde_path_to_error", + "serde_with", + "stationeers_data", + "syn 2.0.77", + "textwrap", "thiserror", + "tracing", + "uneval", ] diff --git a/Cargo.toml b/Cargo.toml index 7c969c9..24b1af4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,11 @@ [workspace] -members = ["ic10lsp_wasm", "ic10emu_wasm", "ic10emu", "xtask"] +members = [ + "ic10lsp_wasm", + "stationeers_data", + "ic10emu", + "ic10emu_wasm", + "xtask", +] resolver = "2" [workspace.package] diff --git a/cspell.json b/cspell.json index ec86b48..e8f8295 100644 --- a/cspell.json +++ b/cspell.json @@ -1 +1,222 @@ -{"language":"en","flagWords":[],"version":"0.2","words":["Astroloy","Autolathe","bapal","bapz","bapzal","batchmode","batchmodes","bdns","bdnsal","bdse","bdseal","beqal","beqz","beqzal","bgeal","bgez","bgezal","bgtal","bgtz","bgtzal","bindgen","bleal","blez","blezal","bltal","bltz","bltzal","bnaal","bnan","bnaz","bnazal","bneal","bnez","bnezal","brap","brapz","brdns","brdse","breq","breqz","brge","brgez","brgt","brgtz","brle","brlez","brlt","brltz","brna","brnan","brnaz","brne","brnez","Circuitboard","codegen","conv","cstyle","endpos","getd","Hardsuit","hashables","inext","inextp","infile","itertools","jetpack","kbshortcutmenu","Keybind","lbns","logicable","logictype","logictypes","lzma","Mineables","mscorlib","MSEED","ninf","nomatch","oprs","overcolumn","Overlength","pedia","peekable","prec","preproc","putd","QUICKFIX","reagentmode","reagentmodes","repr","retval","rocketstation","sapz","sattellite","sdns","sdse","searchbox","searchbtn","seqz","serde","settingsmenu","sgez","sgtz","slez","slotlogic","slotlogicable","slotlogictype","slotlogictypes","slottype","sltz","snan","snanz","snaz","snez","splitn","Stationeers","stationpedia","stdweb","thiserror","tokentype","trunc","Tsify","whos","Depressurising","Pressurising","logicslottypes","lparen","rparen","hstack","dylib"]} +{ + "language": "en", + "flagWords": [], + "version": "0.2", + "words": [ + "Agrizero", + "aliasable", + "Analyizer", + "Analyser", + "arn't", + "Astroloy", + "Asura", + "Atmo", + "autoignition", + "Autolathe", + "Autominer", + "Autotagged", + "bapal", + "bapz", + "bapzal", + "batchmode", + "batchmodes", + "bdns", + "bdnsal", + "bdse", + "bdseal", + "beqal", + "beqz", + "beqzal", + "bgeal", + "bgez", + "bgezal", + "bgtal", + "bgtz", + "bgtzal", + "bindgen", + "bleal", + "blez", + "blezal", + "bltal", + "bltz", + "bltzal", + "bnaal", + "bnan", + "bnaz", + "bnazal", + "bneal", + "bnez", + "bnezal", + "bools", + "brap", + "brapz", + "brdns", + "brdse", + "breq", + "breqz", + "brge", + "brgez", + "brgt", + "brgtz", + "brle", + "brlez", + "brlt", + "brltz", + "brna", + "brnan", + "brnaz", + "brne", + "brnez", + "Cannifier", + "cannister", + "Carrage", + "CHAC", + "Circuitboard", + "Clrd", + "codegen", + "columnated", + "composter", + "conv", + "Cryo", + "cstyle", + "Darga", + "Datalink", + "Depressurising", + "desync", + "dylib", + "endpos", + "Espaciais", + "Exgress", + "Faily", + "Fenoxitone", + "Frida", + "fromstr", + "getd", + "glowstick", + "glowy", + "Hardsuit", + "Harvie", + "hashables", + "Hastelloy", + "headcrabs", + "hstack", + "Huxi", + "Idents", + "iface", + "impls", + "Inconel", + "indexmap", + "inext", + "inextp", + "infile", + "Instructable", + "insts", + "intf", + "itertools", + "Jenk", + "jetpack", + "kbshortcutmenu", + "Keybind", + "Larre", + "lbns", + "logicable", + "LogicSlotType", + "logicslottypes", + "LogicSlotTypes", + "logictype", + "logictypes", + "lparen", + "lzma", + "Mineables", + "MKII", + "moondust", + "Mothership", + "mscorlib", + "MSEED", + "Murtons", + "ninf", + "Nitrice", + "nomatch", + "nops", + "Norsec", + "offworld", + "Omni", + "onsreen", + "oprs", + "overcolumn", + "Overlength", + "Padi", + "parentable", + "pedia", + "peekable", + "prec", + "preproc", + "Pressurising", + "prettyplease", + "PRNG", + "putd", + "QUICKFIX", + "reagentmode", + "reagentmodes", + "reborrow", + "Recurso", + "repr", + "Respawn", + "retval", + "Rmap", + "rocketstation", + "rparen", + "sapz", + "sattellite", + "sdns", + "sdse", + "searchbox", + "searchbtn", + "seqz", + "serde", + "settingsmenu", + "sgez", + "sgtz", + "Sinotai", + "slez", + "slotlogic", + "slotlogicable", + "slottype", + "sltz", + "snan", + "snanz", + "snaz", + "snez", + "spacepack", + "spalling", + "splitn", + "stablizer", + "Starck", + "Stationeer", + "Stationeers", + "stationpedia", + "stdweb", + "stopo", + "Stuppen", + "superalloys", + "tbody", + "tepratures", + "thiserror", + "tokentype", + "toolbelt", + "Topo", + "trunc", + "Tsify", + "undarkens", + "uneval", + "unparse", + "unpowered", + "WASD", + "whos", + "Wirecutters", + "Xigo", + "xtask", + "Zoomer", + "Zrilian" + ] +} diff --git a/data/instruction_help_patches.json b/data/instruction_help_patches.json new file mode 100644 index 0000000..16a9ae5 --- /dev/null +++ b/data/instruction_help_patches.json @@ -0,0 +1,12 @@ +{ + "bapz": "Branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8)", + "bapzal": "Branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8) and store next line number in ra", + "bnaz": "Branch to line c if abs(a) > max (b * abs(a), float.epsilon * 8)", + "bnazal": "Branch to line c if abs(a) > max (b * abs(a), float.epsilon * 8) and store next line number in ra", + "brapz": "Relative branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8)", + "brnaz": "Relative branch to line c if abs(a) > max(b * abs(a), float.epsilon * 8)", + "sapz": "Register = 1 if abs(a) <= max(b * abs(a), float.epsilon * 8), otherwise 0", + "snaz": "Register = 1 if abs(a) > max(b * abs(a), float.epsilon), otherwise 0", + "log": "Register = base e log(a) or ln(a)", + "exp": "Register = exp(a) or e^a" +} diff --git a/ic10emu/Cargo.toml b/ic10emu/Cargo.toml index 60d5dbc..2dcc9b0 100644 --- a/ic10emu/Cargo.toml +++ b/ic10emu/Cargo.toml @@ -10,33 +10,53 @@ crate-type = ["lib", "cdylib"] [dependencies] +stationeers_data = { path = "../stationeers_data" } const-crc32 = "1.3.0" -itertools = "0.12.1" -phf = "0.11.2" +itertools = "0.13.0" +macro_rules_attribute = "0.2.0" +paste = "1.0.15" +phf = { version = "0.11.2", features = ["macros"] } rand = "0.8.5" -regex = "1.10.3" -serde = { version = "1.0.197", features = ["derive"] } -serde_with = "3.7.0" +regex = "1.10.4" +serde = "1.0.202" +serde_derive = "1.0.202" +serde_with = "3.8.1" strum = { version = "0.26.2", features = ["derive", "phf", "strum_macros"] } strum_macros = "0.26.2" -thiserror = "1.0.58" -time = { version = "0.3.34", features = [ +thiserror = "1.0.61" +time = { version = "0.3.36", features = [ "formatting", + "parsing", "serde", "local-offset", ] } +tsify = { version = "0.4.5", optional = true, features = ["js"] } +wasm-bindgen = { version = "0.2.92", optional = true } +tracing = "0.1.40" [target.'cfg(target_arch = "wasm32")'.dependencies] getrandom = { version = "0.2", features = ["js"] } -time = { version = "0.3.34", features = [ +time = { version = "0.3.36", features = [ "formatting", "serde", "local-offset", "wasm-bindgen", ] } +[dev-dependencies] +color-eyre = "0.6.3" +serde_json = "1.0.117" -[build-dependencies] -convert_case = "0.6.0" -phf_codegen = "0.11.2" -regex = "1.10.3" +# Self dev dependency to enable prefab_database feature for tests +# ic10emu = { path = ".", features = ["prefab_database"] } + +[features] +default = [] +tsify = ["dep:tsify", "dep:wasm-bindgen", "stationeers_data/tsify"] +prefab_database = [ + "stationeers_data/prefab_database", +] # compile with the prefab database enabled + +reagent_database = [ + "stationeers_data/reagent_database", +] # compile with the prefab database enabled diff --git a/ic10emu/build.rs b/ic10emu/build.rs deleted file mode 100644 index 5dd8cec..0000000 --- a/ic10emu/build.rs +++ /dev/null @@ -1,392 +0,0 @@ -use convert_case::{Case, Casing}; -use std::{ - collections::BTreeSet, - env, - fmt::Display, - fs::{self, File}, - io::{BufWriter, Write}, - path::Path, - str::FromStr, -}; - -struct EnumVariant

-where - P: Display + FromStr, -{ - pub aliases: Vec, - pub value: Option

, - pub deprecated: bool, -} - -fn write_repr_enum<'a, T: std::io::Write, I, P>( - writer: &mut BufWriter, - name: &str, - variants: I, - use_phf: bool, -) where - P: Display + FromStr + 'a, - I: IntoIterator)>, -{ - let additional_strum = if use_phf { "#[strum(use_phf)]\n" } else { "" }; - write!( - writer, - "#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, EnumString, AsRefStr, EnumProperty, EnumIter, Serialize, Deserialize)]\n\ - {additional_strum}\ - pub enum {name} {{\n" - ) - .unwrap(); - for (name, variant) in variants { - let variant_name = name.replace('.', "").to_case(Case::Pascal); - let mut serialize = vec![name.clone()]; - serialize.extend(variant.aliases.iter().cloned()); - let serialize_str = serialize - .into_iter() - .map(|s| format!("serialize = \"{s}\"")) - .collect::>() - .join(", "); - let mut props = Vec::new(); - if variant.deprecated { - props.push("deprecated = \"true\"".to_owned()); - } - if let Some(val) = &variant.value { - props.push(format!("value = \"{val}\"")); - } - let props_str = if !props.is_empty() { - format!(", props( {} )", props.join(", ")) - } else { - "".to_owned() - }; - writeln!( - writer, - " #[strum({serialize_str}{props_str})] {variant_name}," - ) - .unwrap(); - } - writeln!(writer, "}}").unwrap(); -} - -fn write_logictypes() { - let out_dir = env::var_os("OUT_DIR").unwrap(); - - let dest_path = Path::new(&out_dir).join("logictypes.rs"); - let output_file = File::create(dest_path).unwrap(); - let mut writer = BufWriter::new(&output_file); - - let mut logictypes: Vec<(String, EnumVariant)> = Vec::new(); - let l_infile = Path::new("data/logictypes.txt"); - let l_contents = fs::read_to_string(l_infile).unwrap(); - - for line in l_contents.lines().filter(|l| !l.trim().is_empty()) { - let mut it = line.splitn(3, ' '); - let name = it.next().unwrap(); - let val_str = it.next().unwrap(); - let val: Option = val_str.parse().ok(); - let docs = it.next(); - let deprecated = docs - .map(|docs| docs.trim().to_uppercase() == "DEPRECATED") - .unwrap_or(false); - - if let Some(val) = val { - if let Some((_other_name, variant)) = logictypes - .iter_mut() - .find(|(_, variant)| variant.value == Some(val)) - { - variant.aliases.push(name.to_string()); - variant.deprecated = deprecated; - } else { - logictypes.push(( - name.to_string(), - EnumVariant { - aliases: Vec::new(), - value: Some(val), - deprecated, - }, - )); - } - } else { - logictypes.push(( - name.to_string(), - EnumVariant { - aliases: Vec::new(), - value: val, - deprecated, - }, - )); - } - } - - let mut slotlogictypes: Vec<(String, EnumVariant)> = Vec::new(); - let sl_infile = Path::new("data/slotlogictypes.txt"); - let sl_contents = fs::read_to_string(sl_infile).unwrap(); - - for line in sl_contents.lines().filter(|l| !l.trim().is_empty()) { - let mut it = line.splitn(3, ' '); - let name = it.next().unwrap(); - let val_str = it.next().unwrap(); - let val: Option = val_str.parse().ok(); - let docs = it.next(); - let deprecated = docs - .map(|docs| docs.trim().to_uppercase() == "DEPRECATED") - .unwrap_or(false); - - if let Some(val) = val { - if let Some((_other_name, variant)) = slotlogictypes - .iter_mut() - .find(|(_, variant)| variant.value == Some(val)) - { - variant.aliases.push(name.to_string()); - variant.deprecated = deprecated; - } else { - slotlogictypes.push(( - name.to_string(), - EnumVariant { - aliases: Vec::new(), - value: Some(val), - deprecated, - }, - )); - } - } else { - slotlogictypes.push(( - name.to_string(), - EnumVariant { - aliases: Vec::new(), - value: val, - deprecated, - }, - )); - } - } - - write_repr_enum(&mut writer, "LogicType", &logictypes, true); - - println!("cargo:rerun-if-changed=data/logictypes.txt"); - - write_repr_enum(&mut writer, "SlotLogicType", &slotlogictypes, true); - - println!("cargo:rerun-if-changed=data/slotlogictypes.txt"); -} - -fn write_enums() { - let out_dir = env::var_os("OUT_DIR").unwrap(); - - let dest_path = Path::new(&out_dir).join("enums.rs"); - let output_file = File::create(dest_path).unwrap(); - let mut writer = BufWriter::new(&output_file); - - let mut enums_map: Vec<(String, EnumVariant)> = Vec::new(); - let e_infile = Path::new("data/enums.txt"); - let e_contents = fs::read_to_string(e_infile).unwrap(); - - for line in e_contents.lines().filter(|l| !l.trim().is_empty()) { - let mut it = line.splitn(3, ' '); - let name = it.next().unwrap(); - let val_str = it.next().unwrap(); - let val: Option = val_str.parse().ok(); - let docs = it.next(); - let deprecated = docs - .map(|docs| docs.trim().to_uppercase() == "DEPRECATED") - .unwrap_or(false); - - enums_map.push(( - name.to_string(), - EnumVariant { - aliases: Vec::new(), - value: val, - deprecated, - }, - )); - } - - write_repr_enum(&mut writer, "LogicEnums", &enums_map, true); - - println!("cargo:rerun-if-changed=data/enums.txt"); -} - -fn write_modes() { - let out_dir = env::var_os("OUT_DIR").unwrap(); - - let dest_path = Path::new(&out_dir).join("modes.rs"); - let output_file = File::create(dest_path).unwrap(); - let mut writer = BufWriter::new(&output_file); - - let mut batchmodes: Vec<(String, EnumVariant)> = Vec::new(); - let b_infile = Path::new("data/batchmodes.txt"); - let b_contents = fs::read_to_string(b_infile).unwrap(); - - for line in b_contents.lines().filter(|l| !l.trim().is_empty()) { - let mut it = line.splitn(3, ' '); - let name = it.next().unwrap(); - let val_str = it.next().unwrap(); - let val: Option = val_str.parse().ok(); - - if let Some(val) = val { - if let Some((_other_name, variant)) = batchmodes - .iter_mut() - .find(|(_, variant)| variant.value == Some(val)) - { - variant.aliases.push(name.to_string()); - } else { - batchmodes.push(( - name.to_string(), - EnumVariant { - aliases: Vec::new(), - value: Some(val), - deprecated: false, - }, - )); - } - } else { - batchmodes.push(( - name.to_string(), - EnumVariant { - aliases: Vec::new(), - value: val, - deprecated: false, - }, - )); - } - } - - let mut reagentmodes: Vec<(String, EnumVariant)> = Vec::new(); - let r_infile = Path::new("data/reagentmodes.txt"); - let r_contents = fs::read_to_string(r_infile).unwrap(); - - for line in r_contents.lines().filter(|l| !l.trim().is_empty()) { - let mut it = line.splitn(3, ' '); - let name = it.next().unwrap(); - let val_str = it.next().unwrap(); - let val: Option = val_str.parse().ok(); - - if let Some(val) = val { - if let Some((_other_name, variant)) = reagentmodes - .iter_mut() - .find(|(_, variant)| variant.value == Some(val)) - { - variant.aliases.push(name.to_string()); - } else { - reagentmodes.push(( - name.to_string(), - EnumVariant { - aliases: Vec::new(), - value: Some(val), - deprecated: false, - }, - )); - } - } else { - reagentmodes.push(( - name.to_string(), - EnumVariant { - aliases: Vec::new(), - value: val, - deprecated: false, - }, - )); - } - } - - write_repr_enum(&mut writer, "BatchMode", &batchmodes, false); - - println!("cargo:rerun-if-changed=data/batchmodes.txt"); - - write_repr_enum(&mut writer, "ReagentMode", &reagentmodes, false); - - println!("cargo:rerun-if-changed=data/reagentmodes.txt"); -} - -fn write_constants() { - let out_dir = env::var_os("OUT_DIR").unwrap(); - - let dest_path = Path::new(&out_dir).join("constants.rs"); - let output_file = File::create(dest_path).unwrap(); - let mut writer = BufWriter::new(&output_file); - - let mut constants_lookup_map_builder = ::phf_codegen::Map::new(); - let infile = Path::new("data/constants.txt"); - let contents = fs::read_to_string(infile).unwrap(); - - for line in contents.lines().filter(|l| !l.trim().is_empty()) { - let mut it = line.splitn(3, ' '); - let name = it.next().unwrap(); - let constant = it.next().unwrap(); - - constants_lookup_map_builder.entry(name, constant); - } - - writeln!( - &mut writer, - "#[allow(clippy::approx_constant)] pub(crate) const CONSTANTS_LOOKUP: phf::Map<&'static str, f64> = {};", - constants_lookup_map_builder.build() - ) - .unwrap(); - println!("cargo:rerun-if-changed=data/constants.txt"); -} - -fn write_instructions_enum() { - let out_dir = env::var_os("OUT_DIR").unwrap(); - - let dest_path = Path::new(&out_dir).join("instructions.rs"); - let output_file = File::create(dest_path).unwrap(); - let mut writer = BufWriter::new(&output_file); - - let mut instructions = BTreeSet::new(); - let infile = Path::new("data/instructions.txt"); - let contents = fs::read_to_string(infile).unwrap(); - - for line in contents.lines() { - let mut it = line.split(' '); - let instruction = it.next().unwrap(); - instructions.insert(instruction.to_string()); - } - - write!( - &mut writer, - "#[derive(Debug, Display, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]\n\ - pub enum InstructionOp {{\n\ - " - ) - .unwrap(); - - writeln!(&mut writer, " Nop,").unwrap(); - - for typ in &instructions { - writeln!(&mut writer, " {},", typ.to_case(Case::Pascal)).unwrap(); - } - writeln!(&mut writer, "}}").unwrap(); - - write!( - &mut writer, - "impl FromStr for InstructionOp {{\n \ - type Err = ParseError;\n \ - fn from_str(s: &str) -> Result {{\n \ - let end = s.len();\n \ - match s {{\n" - ) - .unwrap(); - - for typ in &instructions { - let name = typ.to_case(Case::Pascal); - writeln!(&mut writer, " \"{typ}\" => Ok(Self::{name}),").unwrap(); - } - write!( - &mut writer, - " _ => Err(crate::grammar::ParseError {{ line: 0, start: 0, end, msg: format!(\"Unknown instruction '{{}}'\", s) }})\n \ - }}\n \ - }}\n\ - }}" - ) - .unwrap(); - - println!("cargo:rerun-if-changed=data/instructions.txt"); -} - -fn main() { - // write_instructions(); - write_logictypes(); - write_modes(); - write_constants(); - write_enums(); - - write_instructions_enum(); -} diff --git a/ic10emu/data/Enums.json b/ic10emu/data/Enums.json deleted file mode 100644 index 2cbd544..0000000 --- a/ic10emu/data/Enums.json +++ /dev/null @@ -1 +0,0 @@ -{"LogicType":{"None":0,"Power":1,"Open":2,"Mode":3,"Error":4,"Pressure":5,"Temperature":6,"PressureExternal":7,"PressureInternal":8,"Activate":9,"Lock":10,"Charge":11,"Setting":12,"Reagents":13,"RatioOxygen":14,"RatioCarbonDioxide":15,"RatioNitrogen":16,"RatioPollutant":17,"RatioVolatiles":18,"RatioWater":19,"Horizontal":20,"Vertical":21,"SolarAngle":22,"Maximum":23,"Ratio":24,"PowerPotential":25,"PowerActual":26,"Quantity":27,"On":28,"ImportQuantity":29,"ImportSlotOccupant":30,"ExportQuantity":31,"ExportSlotOccupant":32,"RequiredPower":33,"HorizontalRatio":34,"VerticalRatio":35,"PowerRequired":36,"Idle":37,"Color":38,"ElevatorSpeed":39,"ElevatorLevel":40,"RecipeHash":41,"ExportSlotHash":42,"ImportSlotHash":43,"PlantHealth1":44,"PlantHealth2":45,"PlantHealth3":46,"PlantHealth4":47,"PlantGrowth1":48,"PlantGrowth2":49,"PlantGrowth3":50,"PlantGrowth4":51,"PlantEfficiency1":52,"PlantEfficiency2":53,"PlantEfficiency3":54,"PlantEfficiency4":55,"PlantHash1":56,"PlantHash2":57,"PlantHash3":58,"PlantHash4":59,"RequestHash":60,"CompletionRatio":61,"ClearMemory":62,"ExportCount":63,"ImportCount":64,"PowerGeneration":65,"TotalMoles":66,"Volume":67,"Plant":68,"Harvest":69,"Output":70,"PressureSetting":71,"TemperatureSetting":72,"TemperatureExternal":73,"Filtration":74,"AirRelease":75,"PositionX":76,"PositionY":77,"PositionZ":78,"VelocityMagnitude":79,"VelocityRelativeX":80,"VelocityRelativeY":81,"VelocityRelativeZ":82,"RatioNitrousOxide":83,"PrefabHash":84,"ForceWrite":85,"SignalStrength":86,"SignalID":87,"TargetX":88,"TargetY":89,"TargetZ":90,"SettingInput":91,"SettingOutput":92,"CurrentResearchPodType":93,"ManualResearchRequiredPod":94,"MineablesInVicinity":95,"MineablesInQueue":96,"NextWeatherEventTime":97,"Combustion":98,"Fuel":99,"ReturnFuelCost":100,"CollectableGoods":101,"Time":102,"Bpm":103,"EnvironmentEfficiency":104,"WorkingGasEfficiency":105,"PressureInput":106,"TemperatureInput":107,"RatioOxygenInput":108,"RatioCarbonDioxideInput":109,"RatioNitrogenInput":110,"RatioPollutantInput":111,"RatioVolatilesInput":112,"RatioWaterInput":113,"RatioNitrousOxideInput":114,"TotalMolesInput":115,"PressureInput2":116,"TemperatureInput2":117,"RatioOxygenInput2":118,"RatioCarbonDioxideInput2":119,"RatioNitrogenInput2":120,"RatioPollutantInput2":121,"RatioVolatilesInput2":122,"RatioWaterInput2":123,"RatioNitrousOxideInput2":124,"TotalMolesInput2":125,"PressureOutput":126,"TemperatureOutput":127,"RatioOxygenOutput":128,"RatioCarbonDioxideOutput":129,"RatioNitrogenOutput":130,"RatioPollutantOutput":131,"RatioVolatilesOutput":132,"RatioWaterOutput":133,"RatioNitrousOxideOutput":134,"TotalMolesOutput":135,"PressureOutput2":136,"TemperatureOutput2":137,"RatioOxygenOutput2":138,"RatioCarbonDioxideOutput2":139,"RatioNitrogenOutput2":140,"RatioPollutantOutput2":141,"RatioVolatilesOutput2":142,"RatioWaterOutput2":143,"RatioNitrousOxideOutput2":144,"TotalMolesOutput2":145,"CombustionInput":146,"CombustionInput2":147,"CombustionOutput":148,"CombustionOutput2":149,"OperationalTemperatureEfficiency":150,"TemperatureDifferentialEfficiency":151,"PressureEfficiency":152,"CombustionLimiter":153,"Throttle":154,"Rpm":155,"Stress":156,"InterrogationProgress":157,"TargetPadIndex":158,"SizeX":160,"SizeY":161,"SizeZ":162,"MinimumWattsToContact":163,"WattsReachingContact":164,"Channel0":165,"Channel1":166,"Channel2":167,"Channel3":168,"Channel4":169,"Channel5":170,"Channel6":171,"Channel7":172,"LineNumber":173,"Flush":174,"SoundAlert":175,"SolarIrradiance":176,"RatioLiquidNitrogen":177,"RatioLiquidNitrogenInput":178,"RatioLiquidNitrogenInput2":179,"RatioLiquidNitrogenOutput":180,"RatioLiquidNitrogenOutput2":181,"VolumeOfLiquid":182,"RatioLiquidOxygen":183,"RatioLiquidOxygenInput":184,"RatioLiquidOxygenInput2":185,"RatioLiquidOxygenOutput":186,"RatioLiquidOxygenOutput2":187,"RatioLiquidVolatiles":188,"RatioLiquidVolatilesInput":189,"RatioLiquidVolatilesInput2":190,"RatioLiquidVolatilesOutput":191,"RatioLiquidVolatilesOutput2":192,"RatioSteam":193,"RatioSteamInput":194,"RatioSteamInput2":195,"RatioSteamOutput":196,"RatioSteamOutput2":197,"ContactTypeId":198,"RatioLiquidCarbonDioxide":199,"RatioLiquidCarbonDioxideInput":200,"RatioLiquidCarbonDioxideInput2":201,"RatioLiquidCarbonDioxideOutput":202,"RatioLiquidCarbonDioxideOutput2":203,"RatioLiquidPollutant":204,"RatioLiquidPollutantInput":205,"RatioLiquidPollutantInput2":206,"RatioLiquidPollutantOutput":207,"RatioLiquidPollutantOutput2":208,"RatioLiquidNitrousOxide":209,"RatioLiquidNitrousOxideInput":210,"RatioLiquidNitrousOxideInput2":211,"RatioLiquidNitrousOxideOutput":212,"RatioLiquidNitrousOxideOutput2":213,"Progress":214,"DestinationCode":215,"Acceleration":216,"ReferenceId":217,"AutoShutOff":218,"Mass":219,"DryMass":220,"Thrust":221,"Weight":222,"ThrustToWeight":223,"TimeToDestination":224,"BurnTimeRemaining":225,"AutoLand":226,"ForwardX":227,"ForwardY":228,"ForwardZ":229,"Orientation":230,"VelocityX":231,"VelocityY":232,"VelocityZ":233,"PassedMoles":234,"ExhaustVelocity":235,"FlightControlRule":236,"ReEntryAltitude":237,"Apex":238,"EntityState":239,"DrillCondition":240,"Index":241,"CelestialHash":242,"AlignmentError":243,"DistanceAu":244,"OrbitPeriod":245,"Inclination":246,"Eccentricity":247,"SemiMajorAxis":248,"DistanceKm":249,"CelestialParentHash":250,"TrueAnomaly":251,"RatioHydrogen":252,"RatioLiquidHydrogen":253,"RatioPollutedWater":254,"Discover":255,"Chart":256,"Survey":257,"NavPoints":258,"ChartedNavPoints":259,"Sites":260,"CurrentCode":261,"Density":262,"Richness":263,"Size":264,"TotalQuantity":265,"MinedQuantity":266},"LogicSlotType":{"None":0,"Occupied":1,"OccupantHash":2,"Quantity":3,"Damage":4,"Efficiency":5,"Health":6,"Growth":7,"Pressure":8,"Temperature":9,"Charge":10,"ChargeRatio":11,"Class":12,"PressureWaste":13,"PressureAir":14,"MaxQuantity":15,"Mature":16,"PrefabHash":17,"Seeding":18,"LineNumber":19,"Volume":20,"Open":21,"On":22,"Lock":23,"SortingClass":24,"FilterType":25,"ReferenceId":26},"LogicBatchMethod":{"Average":0,"Sum":1,"Minimum":2,"Maximum":3},"LogicReagentMode":{"Contents":0,"Required":1,"Recipe":2,"TotalContents":3},"Enums":{"LogicType.None":0,"LogicType.Power":1,"LogicType.Open":2,"LogicType.Mode":3,"LogicType.Error":4,"LogicType.Pressure":5,"LogicType.Temperature":6,"LogicType.PressureExternal":7,"LogicType.PressureInternal":8,"LogicType.Activate":9,"LogicType.Lock":10,"LogicType.Charge":11,"LogicType.Setting":12,"LogicType.Reagents":13,"LogicType.RatioOxygen":14,"LogicType.RatioCarbonDioxide":15,"LogicType.RatioNitrogen":16,"LogicType.RatioPollutant":17,"LogicType.RatioVolatiles":18,"LogicType.RatioWater":19,"LogicType.Horizontal":20,"LogicType.Vertical":21,"LogicType.SolarAngle":22,"LogicType.Maximum":23,"LogicType.Ratio":24,"LogicType.PowerPotential":25,"LogicType.PowerActual":26,"LogicType.Quantity":27,"LogicType.On":28,"LogicType.ImportQuantity":29,"LogicType.ImportSlotOccupant":30,"LogicType.ExportQuantity":31,"LogicType.ExportSlotOccupant":32,"LogicType.RequiredPower":33,"LogicType.HorizontalRatio":34,"LogicType.VerticalRatio":35,"LogicType.PowerRequired":36,"LogicType.Idle":37,"LogicType.Color":38,"LogicType.ElevatorSpeed":39,"LogicType.ElevatorLevel":40,"LogicType.RecipeHash":41,"LogicType.ExportSlotHash":42,"LogicType.ImportSlotHash":43,"LogicType.PlantHealth1":44,"LogicType.PlantHealth2":45,"LogicType.PlantHealth3":46,"LogicType.PlantHealth4":47,"LogicType.PlantGrowth1":48,"LogicType.PlantGrowth2":49,"LogicType.PlantGrowth3":50,"LogicType.PlantGrowth4":51,"LogicType.PlantEfficiency1":52,"LogicType.PlantEfficiency2":53,"LogicType.PlantEfficiency3":54,"LogicType.PlantEfficiency4":55,"LogicType.PlantHash1":56,"LogicType.PlantHash2":57,"LogicType.PlantHash3":58,"LogicType.PlantHash4":59,"LogicType.RequestHash":60,"LogicType.CompletionRatio":61,"LogicType.ClearMemory":62,"LogicType.ExportCount":63,"LogicType.ImportCount":64,"LogicType.PowerGeneration":65,"LogicType.TotalMoles":66,"LogicType.Volume":67,"LogicType.Plant":68,"LogicType.Harvest":69,"LogicType.Output":70,"LogicType.PressureSetting":71,"LogicType.TemperatureSetting":72,"LogicType.TemperatureExternal":73,"LogicType.Filtration":74,"LogicType.AirRelease":75,"LogicType.PositionX":76,"LogicType.PositionY":77,"LogicType.PositionZ":78,"LogicType.VelocityMagnitude":79,"LogicType.VelocityRelativeX":80,"LogicType.VelocityRelativeY":81,"LogicType.VelocityRelativeZ":82,"LogicType.RatioNitrousOxide":83,"LogicType.PrefabHash":84,"LogicType.ForceWrite":85,"LogicType.SignalStrength":86,"LogicType.SignalID":87,"LogicType.TargetX":88,"LogicType.TargetY":89,"LogicType.TargetZ":90,"LogicType.SettingInput":91,"LogicType.SettingOutput":92,"LogicType.CurrentResearchPodType":93,"LogicType.ManualResearchRequiredPod":94,"LogicType.MineablesInVicinity":95,"LogicType.MineablesInQueue":96,"LogicType.NextWeatherEventTime":97,"LogicType.Combustion":98,"LogicType.Fuel":99,"LogicType.ReturnFuelCost":100,"LogicType.CollectableGoods":101,"LogicType.Time":102,"LogicType.Bpm":103,"LogicType.EnvironmentEfficiency":104,"LogicType.WorkingGasEfficiency":105,"LogicType.PressureInput":106,"LogicType.TemperatureInput":107,"LogicType.RatioOxygenInput":108,"LogicType.RatioCarbonDioxideInput":109,"LogicType.RatioNitrogenInput":110,"LogicType.RatioPollutantInput":111,"LogicType.RatioVolatilesInput":112,"LogicType.RatioWaterInput":113,"LogicType.RatioNitrousOxideInput":114,"LogicType.TotalMolesInput":115,"LogicType.PressureInput2":116,"LogicType.TemperatureInput2":117,"LogicType.RatioOxygenInput2":118,"LogicType.RatioCarbonDioxideInput2":119,"LogicType.RatioNitrogenInput2":120,"LogicType.RatioPollutantInput2":121,"LogicType.RatioVolatilesInput2":122,"LogicType.RatioWaterInput2":123,"LogicType.RatioNitrousOxideInput2":124,"LogicType.TotalMolesInput2":125,"LogicType.PressureOutput":126,"LogicType.TemperatureOutput":127,"LogicType.RatioOxygenOutput":128,"LogicType.RatioCarbonDioxideOutput":129,"LogicType.RatioNitrogenOutput":130,"LogicType.RatioPollutantOutput":131,"LogicType.RatioVolatilesOutput":132,"LogicType.RatioWaterOutput":133,"LogicType.RatioNitrousOxideOutput":134,"LogicType.TotalMolesOutput":135,"LogicType.PressureOutput2":136,"LogicType.TemperatureOutput2":137,"LogicType.RatioOxygenOutput2":138,"LogicType.RatioCarbonDioxideOutput2":139,"LogicType.RatioNitrogenOutput2":140,"LogicType.RatioPollutantOutput2":141,"LogicType.RatioVolatilesOutput2":142,"LogicType.RatioWaterOutput2":143,"LogicType.RatioNitrousOxideOutput2":144,"LogicType.TotalMolesOutput2":145,"LogicType.CombustionInput":146,"LogicType.CombustionInput2":147,"LogicType.CombustionOutput":148,"LogicType.CombustionOutput2":149,"LogicType.OperationalTemperatureEfficiency":150,"LogicType.TemperatureDifferentialEfficiency":151,"LogicType.PressureEfficiency":152,"LogicType.CombustionLimiter":153,"LogicType.Throttle":154,"LogicType.Rpm":155,"LogicType.Stress":156,"LogicType.InterrogationProgress":157,"LogicType.TargetPadIndex":158,"LogicType.SizeX":160,"LogicType.SizeY":161,"LogicType.SizeZ":162,"LogicType.MinimumWattsToContact":163,"LogicType.WattsReachingContact":164,"LogicType.Channel0":165,"LogicType.Channel1":166,"LogicType.Channel2":167,"LogicType.Channel3":168,"LogicType.Channel4":169,"LogicType.Channel5":170,"LogicType.Channel6":171,"LogicType.Channel7":172,"LogicType.LineNumber":173,"LogicType.Flush":174,"LogicType.SoundAlert":175,"LogicType.SolarIrradiance":176,"LogicType.RatioLiquidNitrogen":177,"LogicType.RatioLiquidNitrogenInput":178,"LogicType.RatioLiquidNitrogenInput2":179,"LogicType.RatioLiquidNitrogenOutput":180,"LogicType.RatioLiquidNitrogenOutput2":181,"LogicType.VolumeOfLiquid":182,"LogicType.RatioLiquidOxygen":183,"LogicType.RatioLiquidOxygenInput":184,"LogicType.RatioLiquidOxygenInput2":185,"LogicType.RatioLiquidOxygenOutput":186,"LogicType.RatioLiquidOxygenOutput2":187,"LogicType.RatioLiquidVolatiles":188,"LogicType.RatioLiquidVolatilesInput":189,"LogicType.RatioLiquidVolatilesInput2":190,"LogicType.RatioLiquidVolatilesOutput":191,"LogicType.RatioLiquidVolatilesOutput2":192,"LogicType.RatioSteam":193,"LogicType.RatioSteamInput":194,"LogicType.RatioSteamInput2":195,"LogicType.RatioSteamOutput":196,"LogicType.RatioSteamOutput2":197,"LogicType.ContactTypeId":198,"LogicType.RatioLiquidCarbonDioxide":199,"LogicType.RatioLiquidCarbonDioxideInput":200,"LogicType.RatioLiquidCarbonDioxideInput2":201,"LogicType.RatioLiquidCarbonDioxideOutput":202,"LogicType.RatioLiquidCarbonDioxideOutput2":203,"LogicType.RatioLiquidPollutant":204,"LogicType.RatioLiquidPollutantInput":205,"LogicType.RatioLiquidPollutantInput2":206,"LogicType.RatioLiquidPollutantOutput":207,"LogicType.RatioLiquidPollutantOutput2":208,"LogicType.RatioLiquidNitrousOxide":209,"LogicType.RatioLiquidNitrousOxideInput":210,"LogicType.RatioLiquidNitrousOxideInput2":211,"LogicType.RatioLiquidNitrousOxideOutput":212,"LogicType.RatioLiquidNitrousOxideOutput2":213,"LogicType.Progress":214,"LogicType.DestinationCode":215,"LogicType.Acceleration":216,"LogicType.ReferenceId":217,"LogicType.AutoShutOff":218,"LogicType.Mass":219,"LogicType.DryMass":220,"LogicType.Thrust":221,"LogicType.Weight":222,"LogicType.ThrustToWeight":223,"LogicType.TimeToDestination":224,"LogicType.BurnTimeRemaining":225,"LogicType.AutoLand":226,"LogicType.ForwardX":227,"LogicType.ForwardY":228,"LogicType.ForwardZ":229,"LogicType.Orientation":230,"LogicType.VelocityX":231,"LogicType.VelocityY":232,"LogicType.VelocityZ":233,"LogicType.PassedMoles":234,"LogicType.ExhaustVelocity":235,"LogicType.FlightControlRule":236,"LogicType.ReEntryAltitude":237,"LogicType.Apex":238,"LogicType.EntityState":239,"LogicType.DrillCondition":240,"LogicType.Index":241,"LogicType.CelestialHash":242,"LogicType.AlignmentError":243,"LogicType.DistanceAu":244,"LogicType.OrbitPeriod":245,"LogicType.Inclination":246,"LogicType.Eccentricity":247,"LogicType.SemiMajorAxis":248,"LogicType.DistanceKm":249,"LogicType.CelestialParentHash":250,"LogicType.TrueAnomaly":251,"LogicType.RatioHydrogen":252,"LogicType.RatioLiquidHydrogen":253,"LogicType.RatioPollutedWater":254,"LogicType.Discover":255,"LogicType.Chart":256,"LogicType.Survey":257,"LogicType.NavPoints":258,"LogicType.ChartedNavPoints":259,"LogicType.Sites":260,"LogicType.CurrentCode":261,"LogicType.Density":262,"LogicType.Richness":263,"LogicType.Size":264,"LogicType.TotalQuantity":265,"LogicType.MinedQuantity":266,"LogicSlotType.None":0,"LogicSlotType.Occupied":1,"LogicSlotType.OccupantHash":2,"LogicSlotType.Quantity":3,"LogicSlotType.Damage":4,"LogicSlotType.Efficiency":5,"LogicSlotType.Health":6,"LogicSlotType.Growth":7,"LogicSlotType.Pressure":8,"LogicSlotType.Temperature":9,"LogicSlotType.Charge":10,"LogicSlotType.ChargeRatio":11,"LogicSlotType.Class":12,"LogicSlotType.PressureWaste":13,"LogicSlotType.PressureAir":14,"LogicSlotType.MaxQuantity":15,"LogicSlotType.Mature":16,"LogicSlotType.PrefabHash":17,"LogicSlotType.Seeding":18,"LogicSlotType.LineNumber":19,"LogicSlotType.Volume":20,"LogicSlotType.Open":21,"LogicSlotType.On":22,"LogicSlotType.Lock":23,"LogicSlotType.SortingClass":24,"LogicSlotType.FilterType":25,"LogicSlotType.ReferenceId":26,"Sound.None":0,"Sound.Alarm2":1,"Sound.Alarm3":2,"Sound.Alarm4":3,"Sound.Alarm5":4,"Sound.Alarm6":5,"Sound.Alarm7":6,"Sound.Music1":7,"Sound.Music2":8,"Sound.Music3":9,"Sound.Alarm8":10,"Sound.Alarm9":11,"Sound.Alarm10":12,"Sound.Alarm11":13,"Sound.Alarm12":14,"Sound.Danger":15,"Sound.Warning":16,"Sound.Alert":17,"Sound.StormIncoming":18,"Sound.IntruderAlert":19,"Sound.Depressurising":20,"Sound.Pressurising":21,"Sound.AirlockCycling":22,"Sound.PowerLow":23,"Sound.SystemFailure":24,"Sound.Welcome":25,"Sound.MalfunctionDetected":26,"Sound.HaltWhoGoesThere":27,"Sound.FireFireFire":28,"Sound.One":29,"Sound.Two":30,"Sound.Three":31,"Sound.Four":32,"Sound.Five":33,"Sound.Floor":34,"Sound.RocketLaunching":35,"Sound.LiftOff":36,"Sound.TraderIncoming":37,"Sound.TraderLanded":38,"Sound.PressureHigh":39,"Sound.PressureLow":40,"Sound.TemperatureHigh":41,"Sound.TemperatureLow":42,"Sound.PollutantsDetected":43,"Sound.HighCarbonDioxide":44,"Sound.Alarm1":45,"TransmitterMode.Passive":0,"TransmitterMode.Active":1,"ElevatorMode.Stationary":0,"ElevatorMode.Upward":1,"ElevatorMode.Downward":2,"Color.Blue":0,"Color.Gray":1,"Color.Green":2,"Color.Orange":3,"Color.Red":4,"Color.Yellow":5,"Color.White":6,"Color.Black":7,"Color.Brown":8,"Color.Khaki":9,"Color.Pink":10,"Color.Purple":11,"EntityState.Alive":0,"EntityState.Dead":1,"EntityState.Unconscious":2,"EntityState.Decay":3,"AirControl.None":0,"AirControl.Offline":1,"AirControl.Pressure":2,"AirControl.Draught":4,"DaylightSensorMode.Default":0,"DaylightSensorMode.Horizontal":1,"DaylightSensorMode.Vertical":2,"Equals":0,"Greater":1,"Less":2,"NotEquals":3,"AirCon.Cold":0,"AirCon.Hot":1,"Vent.Outward":0,"Vent.Inward":1,"PowerMode.Idle":0,"PowerMode.Discharged":1,"PowerMode.Discharging":2,"PowerMode.Charging":3,"PowerMode.Charged":4,"RobotMode.None":0,"RobotMode.Follow":1,"RobotMode.MoveToTarget":2,"RobotMode.Roam":3,"RobotMode.Unload":4,"RobotMode.PathToTarget":5,"RobotMode.StorageFull":6,"SortingClass.Default":0,"SortingClass.Kits":1,"SortingClass.Tools":2,"SortingClass.Resources":3,"SortingClass.Food":4,"SortingClass.Clothing":5,"SortingClass.Appliances":6,"SortingClass.Atmospherics":7,"SortingClass.Storage":8,"SortingClass.Ores":9,"SortingClass.Ices":10,"SlotClass.None":0,"SlotClass.Helmet":1,"SlotClass.Suit":2,"SlotClass.Back":3,"SlotClass.GasFilter":4,"SlotClass.GasCanister":5,"SlotClass.Motherboard":6,"SlotClass.Circuitboard":7,"SlotClass.DataDisk":8,"SlotClass.Organ":9,"SlotClass.Ore":10,"SlotClass.Plant":11,"SlotClass.Uniform":12,"SlotClass.Entity":13,"SlotClass.Battery":14,"SlotClass.Egg":15,"SlotClass.Belt":16,"SlotClass.Tool":17,"SlotClass.Appliance":18,"SlotClass.Ingot":19,"SlotClass.Torpedo":20,"SlotClass.Cartridge":21,"SlotClass.AccessCard":22,"SlotClass.Magazine":23,"SlotClass.Circuit":24,"SlotClass.Bottle":25,"SlotClass.ProgrammableChip":26,"SlotClass.Glasses":27,"SlotClass.CreditCard":28,"SlotClass.DirtCanister":29,"SlotClass.SensorProcessingUnit":30,"SlotClass.LiquidCanister":31,"SlotClass.LiquidBottle":32,"SlotClass.Wreckage":33,"SlotClass.SoundCartridge":34,"SlotClass.DrillHead":35,"SlotClass.ScanningHead":36,"SlotClass.Flare":37,"SlotClass.Blocked":38,"GasType.Undefined":0,"GasType.Oxygen":1,"GasType.Nitrogen":2,"GasType.CarbonDioxide":4,"GasType.Volatiles":8,"GasType.Pollutant":16,"GasType.Water":32,"GasType.NitrousOxide":64,"GasType.LiquidNitrogen":128,"GasType.LiquidOxygen":256,"GasType.LiquidVolatiles":512,"GasType.Steam":1024,"GasType.LiquidCarbonDioxide":2048,"GasType.LiquidPollutant":4096,"GasType.LiquidNitrousOxide":8192,"GasType.Hydrogen":16384,"GasType.LiquidHydrogen":32768,"GasType.PollutedWater":65536}} \ No newline at end of file diff --git a/ic10emu/data/batchmodes.txt b/ic10emu/data/batchmodes.txt deleted file mode 100644 index b57b772..0000000 --- a/ic10emu/data/batchmodes.txt +++ /dev/null @@ -1,4 +0,0 @@ -Average 0 Average of all read values -Maximum 3 Highest of all read values -Minimum 2 Lowest of all read values -Sum 1 All read values added together diff --git a/ic10emu/data/constants.txt b/ic10emu/data/constants.txt deleted file mode 100644 index 3dfa33d..0000000 --- a/ic10emu/data/constants.txt +++ /dev/null @@ -1,7 +0,0 @@ -nan f64::NAN A constant representing 'not a number'. This constants technically provides a 'quiet' NaN, a signal NaN from some instructions will result in an exception and halt execution -pinf f64::INFINITY A constant representing a positive infinite value -ninf f64::NEG_INFINITY A constant representing a negative infinite value -pi 3.141592653589793f64 \nA constant representing the ratio of the circumference of a circle to its diameter, provided in double percision -deg2rad 0.0174532923847437f64 \nDegrees to radians conversion constant -rad2deg 57.2957801818848f64 \nRadians to degrees conversion constant -epsilon f64::EPSILON A constant representing the smallest value representable in double precision diff --git a/ic10emu/data/enums.txt b/ic10emu/data/enums.txt deleted file mode 100644 index 46ef9b3..0000000 --- a/ic10emu/data/enums.txt +++ /dev/null @@ -1,455 +0,0 @@ -AirCon.Cold 0 -AirCon.Hot 1 -AirControl.Draught 4 -AirControl.None 0 -AirControl.Offline 1 -AirControl.Pressure 2 -Color.Black 7 Black -Color.Blue 0 Blue -Color.Brown 8 Brown -Color.Gray 1 Gray -Color.Green 2 Green -Color.Khaki 9 Khaki -Color.Orange 3 Orange -Color.Pink 10 Pink -Color.Purple 11 Purple -Color.Red 4 Red -Color.White 6 White -Color.Yellow 5 Yellow -DaylightSensorMode.Default 0 -DaylightSensorMode.Horizontal 1 -DaylightSensorMode.Vertical 2 -ElevatorMode.Downward 2 -ElevatorMode.Stationary 0 -ElevatorMode.Upward 1 -EntityState.Alive 0 -EntityState.Dead 1 -EntityState.Decay 3 -EntityState.Unconscious 2 -Equals 0 -GasType.CarbonDioxide 4 -GasType.Hydrogen 16384 -GasType.LiquidCarbonDioxide 2048 -GasType.LiquidHydrogen 32768 -GasType.LiquidNitrogen 128 -GasType.LiquidNitrousOxide 8192 -GasType.LiquidOxygen 256 -GasType.LiquidPollutant 4096 -GasType.LiquidVolatiles 512 -GasType.Nitrogen 2 -GasType.NitrousOxide 64 -GasType.Oxygen 1 -GasType.Pollutant 16 -GasType.PollutedWater 65536 -GasType.Steam 1024 -GasType.Undefined 0 -GasType.Volatiles 8 -GasType.Water 32 -Greater 1 -Less 2 -LogicSlotType.Charge 10 returns current energy charge the slot occupant is holding -LogicSlotType.ChargeRatio 11 returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum -LogicSlotType.Class 12 returns integer representing the class of object -LogicSlotType.Damage 4 returns the damage state of the item in the slot -LogicSlotType.Efficiency 5 returns the growth efficiency of the plant in the slot -LogicSlotType.FilterType 25 -LogicSlotType.Growth 7 returns the current growth state of the plant in the slot -LogicSlotType.Health 6 returns the health of the plant in the slot -LogicSlotType.LineNumber 19 -LogicSlotType.Lock 23 -LogicSlotType.Mature 16 returns 1 if the plant in this slot is mature, 0 when it isn't -LogicSlotType.MaxQuantity 15 returns the max stack size of the item in the slot -LogicSlotType.None 0 No description -LogicSlotType.OccupantHash 2 returns the has of the current occupant, the unique identifier of the thing -LogicSlotType.Occupied 1 returns 0 when slot is not occupied, 1 when it is -LogicSlotType.On 22 -LogicSlotType.Open 21 -LogicSlotType.PrefabHash 17 returns the hash of the structure in the slot -LogicSlotType.Pressure 8 returns pressure of the slot occupants internal atmosphere -LogicSlotType.PressureAir 14 returns pressure in the air tank of the jetpack in this slot -LogicSlotType.PressureWaste 13 returns pressure in the waste tank of the jetpack in this slot -LogicSlotType.Quantity 3 returns the current quantity, such as stack size, of the item in the slot -LogicSlotType.ReferenceId 26 -LogicSlotType.Seeding 18 Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not. -LogicSlotType.SortingClass 24 -LogicSlotType.Temperature 9 returns temperature of the slot occupants internal atmosphere -LogicSlotType.Volume 20 -LogicType.Acceleration 216 Change in velocity. Rockets that are deccelerating when landing will show this as negative value. -LogicType.Activate 9 1 if device is activated (usually means running), otherwise 0 -LogicType.AirRelease 75 The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On -LogicType.AlignmentError 243 -LogicType.Apex 238 -LogicType.AutoLand 226 Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing. -LogicType.AutoShutOff 218 Turns off all devices in the rocket upon reaching destination -LogicType.Bpm 103 Bpm -LogicType.BurnTimeRemaining 225 Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage. -LogicType.CelestialHash 242 -LogicType.CelestialParentHash 250 -LogicType.Channel0 165 -LogicType.Channel1 166 -LogicType.Channel2 167 -LogicType.Channel3 168 -LogicType.Channel4 169 -LogicType.Channel5 170 -LogicType.Channel6 171 -LogicType.Channel7 172 -LogicType.Charge 11 The current charge the device has -LogicType.Chart 256 -LogicType.ChartedNavPoints 259 -LogicType.ClearMemory 62 When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned -LogicType.CollectableGoods 101 -LogicType.Color 38 \n Whether driven by concerns for clarity, safety or simple aesthetics, {LINK:Stationeers;Stationeers} have access to a small rainbow of colors for their constructions. These are the color setting for devices, represented as an integer.\n\n0: Blue\n1: Grey\n2: Green\n3: Orange\n4: Red\n5: Yellow\n6: White\n7: Black\n8: Brown\n9: Khaki\n10: Pink\n11: Purple\n\n It is an unwavering universal law that anything higher than 11 will be purple. The {LINK:ODA;ODA} is powerless to change this. Similarly, anything lower than 0 will be Blue.\n -LogicType.Combustion 98 The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not. -LogicType.CombustionInput 146 The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not. -LogicType.CombustionInput2 147 The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not. -LogicType.CombustionLimiter 153 Retards the rate of combustion inside the machine (range: 0-100), with 0 being the slowest rate of combustion and 100 being the fastest -LogicType.CombustionOutput 148 The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not. -LogicType.CombustionOutput2 149 The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not. -LogicType.CompletionRatio 61 How complete the current production is for this device, between 0 and 1 -LogicType.ContactTypeId 198 The type id of the contact. -LogicType.CurrentCode 261 -LogicType.CurrentResearchPodType 93 -LogicType.Density 262 -LogicType.DestinationCode 215 Unique identifier code for a destination on the space map. -LogicType.Discover 255 -LogicType.DistanceAu 244 -LogicType.DistanceKm 249 -LogicType.DrillCondition 240 -LogicType.DryMass 220 The Mass in kilograms of the rocket excluding fuel. The more massive the rocket the more fuel will be required to move to a new location in space. -LogicType.Eccentricity 247 -LogicType.ElevatorLevel 40 Level the elevator is currently at -LogicType.ElevatorSpeed 39 Current speed of the elevator -LogicType.EntityState 239 -LogicType.EnvironmentEfficiency 104 The Environment Efficiency reported by the machine, as a float between 0 and 1 -LogicType.Error 4 1 if device is in error state, otherwise 0 -LogicType.ExhaustVelocity 235 -LogicType.ExportCount 63 How many items exported since last ClearMemory -LogicType.ExportQuantity 31 Total quantity of items exported by the device -LogicType.ExportSlotHash 42 DEPRECATED -LogicType.ExportSlotOccupant 32 DEPRECATED -LogicType.Filtration 74 The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On -LogicType.FlightControlRule 236 -LogicType.Flush 174 Set to 1 to activate the flush function on the device -LogicType.ForceWrite 85 Forces Logic Writer devices to rewrite value -LogicType.ForwardX 227 -LogicType.ForwardY 228 -LogicType.ForwardZ 229 -LogicType.Fuel 99 -LogicType.Harvest 69 Performs the harvesting action for any plant based machinery -LogicType.Horizontal 20 Horizontal setting of the device -LogicType.HorizontalRatio 34 Radio of horizontal setting for device -LogicType.Idle 37 Returns 1 if the device is currently idle, otherwise 0 -LogicType.ImportCount 64 How many items imported since last ClearMemory -LogicType.ImportQuantity 29 Total quantity of items imported by the device -LogicType.ImportSlotHash 43 DEPRECATED -LogicType.ImportSlotOccupant 30 DEPRECATED -LogicType.Inclination 246 -LogicType.Index 241 -LogicType.InterrogationProgress 157 Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1 -LogicType.LineNumber 173 The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution -LogicType.Lock 10 1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values -LogicType.ManualResearchRequiredPod 94 -LogicType.Mass 219 The total Mass of the rocket in kilograms including fuel and cargo. The more massive the rocket the more fuel will be required to move to a new location in space. -LogicType.Maximum 23 Maximum setting of the device -LogicType.MineablesInQueue 96 -LogicType.MineablesInVicinity 95 -LogicType.MinedQuantity 266 -LogicType.MinimumWattsToContact 163 -LogicType.Mode 3 Integer for mode state, different devices will have different mode states available to them -LogicType.NavPoints 258 -LogicType.NextWeatherEventTime 97 -LogicType.None 0 No description -LogicType.On 28 The current state of the device, 0 for off, 1 for on -LogicType.Open 2 1 if device is open, otherwise 0 -LogicType.OperationalTemperatureEfficiency 150 How the input pipe's temperature effects the machines efficiency -LogicType.OrbitPeriod 245 -LogicType.Orientation 230 -LogicType.Output 70 The output operation for a sort handling device, such as a stacker or sorter, when in logic mode the device will only action one repetition when set zero or above and then back to -1 and await further instructions -LogicType.PassedMoles 234 -LogicType.Plant 68 Performs the planting action for any plant based machinery -LogicType.PlantEfficiency1 52 DEPRECATED -LogicType.PlantEfficiency2 53 DEPRECATED -LogicType.PlantEfficiency3 54 DEPRECATED -LogicType.PlantEfficiency4 55 DEPRECATED -LogicType.PlantGrowth1 48 DEPRECATED -LogicType.PlantGrowth2 49 DEPRECATED -LogicType.PlantGrowth3 50 DEPRECATED -LogicType.PlantGrowth4 51 DEPRECATED -LogicType.PlantHash1 56 DEPRECATED -LogicType.PlantHash2 57 DEPRECATED -LogicType.PlantHash3 58 DEPRECATED -LogicType.PlantHash4 59 DEPRECATED -LogicType.PlantHealth1 44 DEPRECATED -LogicType.PlantHealth2 45 DEPRECATED -LogicType.PlantHealth3 46 DEPRECATED -LogicType.PlantHealth4 47 DEPRECATED -LogicType.PositionX 76 The current position in X dimension in world coordinates -LogicType.PositionY 77 The current position in Y dimension in world coordinates -LogicType.PositionZ 78 The current position in Z dimension in world coordinates -LogicType.Power 1 Can be read to return if the device is correctly powered or not, set via the power system, return 1 if powered and 0 if not -LogicType.PowerActual 26 How much energy the device or network is actually using -LogicType.PowerGeneration 65 Returns how much power is being generated -LogicType.PowerPotential 25 How much energy the device or network potentially provides -LogicType.PowerRequired 36 Power requested from the device and/or network -LogicType.PrefabHash 84 The hash of the structure -LogicType.Pressure 5 The current pressure reading of the device -LogicType.PressureEfficiency 152 How the pressure of the input pipe and waste pipe effect the machines efficiency -LogicType.PressureExternal 7 Setting for external pressure safety, in KPa -LogicType.PressureInput 106 The current pressure reading of the device's Input Network -LogicType.PressureInput2 116 The current pressure reading of the device's Input2 Network -LogicType.PressureInternal 8 Setting for internal pressure safety, in KPa -LogicType.PressureOutput 126 The current pressure reading of the device's Output Network -LogicType.PressureOutput2 136 The current pressure reading of the device's Output2 Network -LogicType.PressureSetting 71 The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa -LogicType.Progress 214 Progress of the rocket to the next node on the map expressed as a value between 0-1. -LogicType.Quantity 27 Total quantity on the device -LogicType.Ratio 24 Context specific value depending on device, 0 to 1 based ratio -LogicType.RatioCarbonDioxide 15 The ratio of {GAS:CarbonDioxide} in device atmosphere -LogicType.RatioCarbonDioxideInput 109 The ratio of {GAS:CarbonDioxide} in device's input network -LogicType.RatioCarbonDioxideInput2 119 The ratio of {GAS:CarbonDioxide} in device's Input2 network -LogicType.RatioCarbonDioxideOutput 129 The ratio of {GAS:CarbonDioxide} in device's Output network -LogicType.RatioCarbonDioxideOutput2 139 The ratio of {GAS:CarbonDioxide} in device's Output2 network -LogicType.RatioHydrogen 252 The ratio of {GAS:Hydrogen} in device's Atmopshere -LogicType.RatioLiquidCarbonDioxide 199 The ratio of {GAS:LiquidCarbonDioxide} in device's Atmosphere -LogicType.RatioLiquidCarbonDioxideInput 200 The ratio of {GAS:LiquidCarbonDioxide} in device's Input Atmosphere -LogicType.RatioLiquidCarbonDioxideInput2 201 The ratio of {GAS:LiquidCarbonDioxide} in device's Input2 Atmosphere -LogicType.RatioLiquidCarbonDioxideOutput 202 The ratio of {GAS:LiquidCarbonDioxide} in device's device's Output Atmosphere -LogicType.RatioLiquidCarbonDioxideOutput2 203 The ratio of {GAS:LiquidCarbonDioxide} in device's Output2 Atmopshere -LogicType.RatioLiquidHydrogen 253 The ratio of {GAS:LiquidHydrogen} in device's Atmopshere -LogicType.RatioLiquidNitrogen 177 The ratio of {GAS:LiquidNitrogen} in device atmosphere -LogicType.RatioLiquidNitrogenInput 178 The ratio of {GAS:LiquidNitrogen} in device's input network -LogicType.RatioLiquidNitrogenInput2 179 The ratio of {GAS:LiquidNitrogen} in device's Input2 network -LogicType.RatioLiquidNitrogenOutput 180 The ratio of {GAS:LiquidNitrogen} in device's Output network -LogicType.RatioLiquidNitrogenOutput2 181 The ratio of {GAS:LiquidNitrogen} in device's Output2 network -LogicType.RatioLiquidNitrousOxide 209 The ratio of {GAS:LiquidNitrousOxide} in device's Atmosphere -LogicType.RatioLiquidNitrousOxideInput 210 The ratio of {GAS:LiquidNitrousOxide} in device's Input Atmosphere -LogicType.RatioLiquidNitrousOxideInput2 211 The ratio of {GAS:LiquidNitrousOxide} in device's Input2 Atmosphere -LogicType.RatioLiquidNitrousOxideOutput 212 The ratio of {GAS:LiquidNitrousOxide} in device's device's Output Atmosphere -LogicType.RatioLiquidNitrousOxideOutput2 213 The ratio of {GAS:LiquidNitrousOxide} in device's Output2 Atmopshere -LogicType.RatioLiquidOxygen 183 The ratio of {GAS:LiquidOxygen} in device's Atmosphere -LogicType.RatioLiquidOxygenInput 184 The ratio of {GAS:LiquidOxygen} in device's Input Atmosphere -LogicType.RatioLiquidOxygenInput2 185 The ratio of {GAS:LiquidOxygen} in device's Input2 Atmosphere -LogicType.RatioLiquidOxygenOutput 186 The ratio of {GAS:LiquidOxygen} in device's device's Output Atmosphere -LogicType.RatioLiquidOxygenOutput2 187 The ratio of {GAS:LiquidOxygen} in device's Output2 Atmopshere -LogicType.RatioLiquidPollutant 204 The ratio of {GAS:LiquidPollutant} in device's Atmosphere -LogicType.RatioLiquidPollutantInput 205 The ratio of {GAS:LiquidPollutant} in device's Input Atmosphere -LogicType.RatioLiquidPollutantInput2 206 The ratio of {GAS:LiquidPollutant} in device's Input2 Atmosphere -LogicType.RatioLiquidPollutantOutput 207 The ratio of {GAS:LiquidPollutant} in device's device's Output Atmosphere -LogicType.RatioLiquidPollutantOutput2 208 The ratio of {GAS:LiquidPollutant} in device's Output2 Atmopshere -LogicType.RatioLiquidVolatiles 188 The ratio of {GAS:LiquidVolatiles} in device's Atmosphere -LogicType.RatioLiquidVolatilesInput 189 The ratio of {GAS:LiquidVolatiles} in device's Input Atmosphere -LogicType.RatioLiquidVolatilesInput2 190 The ratio of {GAS:LiquidVolatiles} in device's Input2 Atmosphere -LogicType.RatioLiquidVolatilesOutput 191 The ratio of {GAS:LiquidVolatiles} in device's device's Output Atmosphere -LogicType.RatioLiquidVolatilesOutput2 192 The ratio of {GAS:LiquidVolatiles} in device's Output2 Atmopshere -LogicType.RatioNitrogen 16 The ratio of nitrogen in device atmosphere -LogicType.RatioNitrogenInput 110 The ratio of nitrogen in device's input network -LogicType.RatioNitrogenInput2 120 The ratio of nitrogen in device's Input2 network -LogicType.RatioNitrogenOutput 130 The ratio of nitrogen in device's Output network -LogicType.RatioNitrogenOutput2 140 The ratio of nitrogen in device's Output2 network -LogicType.RatioNitrousOxide 83 The ratio of {GAS:NitrousOxide} in device atmosphere -LogicType.RatioNitrousOxideInput 114 The ratio of {GAS:NitrousOxide} in device's input network -LogicType.RatioNitrousOxideInput2 124 The ratio of {GAS:NitrousOxide} in device's Input2 network -LogicType.RatioNitrousOxideOutput 134 The ratio of {GAS:NitrousOxide} in device's Output network -LogicType.RatioNitrousOxideOutput2 144 The ratio of {GAS:NitrousOxide} in device's Output2 network -LogicType.RatioOxygen 14 The ratio of oxygen in device atmosphere -LogicType.RatioOxygenInput 108 The ratio of oxygen in device's input network -LogicType.RatioOxygenInput2 118 The ratio of oxygen in device's Input2 network -LogicType.RatioOxygenOutput 128 The ratio of oxygen in device's Output network -LogicType.RatioOxygenOutput2 138 The ratio of oxygen in device's Output2 network -LogicType.RatioPollutant 17 The ratio of pollutant in device atmosphere -LogicType.RatioPollutantInput 111 The ratio of pollutant in device's input network -LogicType.RatioPollutantInput2 121 The ratio of pollutant in device's Input2 network -LogicType.RatioPollutantOutput 131 The ratio of pollutant in device's Output network -LogicType.RatioPollutantOutput2 141 The ratio of pollutant in device's Output2 network -LogicType.RatioPollutedWater 254 The ratio of polluted water in device atmosphere -LogicType.RatioSteam 193 The ratio of {GAS:Steam} in device's Atmosphere -LogicType.RatioSteamInput 194 The ratio of {GAS:Steam} in device's Input Atmosphere -LogicType.RatioSteamInput2 195 The ratio of {GAS:Steam} in device's Input2 Atmosphere -LogicType.RatioSteamOutput 196 The ratio of {GAS:Steam} in device's device's Output Atmosphere -LogicType.RatioSteamOutput2 197 The ratio of {GAS:Steam} in device's Output2 Atmopshere -LogicType.RatioVolatiles 18 The ratio of volatiles in device atmosphere -LogicType.RatioVolatilesInput 112 The ratio of volatiles in device's input network -LogicType.RatioVolatilesInput2 122 The ratio of volatiles in device's Input2 network -LogicType.RatioVolatilesOutput 132 The ratio of volatiles in device's Output network -LogicType.RatioVolatilesOutput2 142 The ratio of volatiles in device's Output2 network -LogicType.RatioWater 19 The ratio of water in device atmosphere -LogicType.RatioWaterInput 113 The ratio of water in device's input network -LogicType.RatioWaterInput2 123 The ratio of water in device's Input2 network -LogicType.RatioWaterOutput 133 The ratio of water in device's Output network -LogicType.RatioWaterOutput2 143 The ratio of water in device's Output2 network -LogicType.ReEntryAltitude 237 -LogicType.Reagents 13 Total number of reagents recorded by the device -LogicType.RecipeHash 41 Current hash of the recipe the device is set to produce -LogicType.ReferenceId 217 -LogicType.RequestHash 60 When set to the unique identifier, requests an item of the provided type from the device -LogicType.RequiredPower 33 Idle operating power quantity, does not necessarily include extra demand power -LogicType.ReturnFuelCost 100 -LogicType.Richness 263 -LogicType.Rpm 155 The number of revolutions per minute that the device's spinning mechanism is doing -LogicType.SemiMajorAxis 248 -LogicType.Setting 12 A variable setting that can be read or written, depending on the device -LogicType.SettingInput 91 -LogicType.SettingOutput 92 -LogicType.SignalID 87 Returns the contact ID of the strongest signal from this Satellite -LogicType.SignalStrength 86 Returns the degree offset of the strongest contact -LogicType.Sites 260 -LogicType.Size 264 -LogicType.SizeX 160 Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters) -LogicType.SizeY 161 Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters) -LogicType.SizeZ 162 Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters) -LogicType.SolarAngle 22 Solar angle of the device -LogicType.SolarIrradiance 176 -LogicType.SoundAlert 175 Plays a sound alert on the devices speaker -LogicType.Stress 156 Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down -LogicType.Survey 257 -LogicType.TargetPadIndex 158 The index of the trader landing pad on this devices data network that it will try to call a trader in to land -LogicType.TargetX 88 The target position in X dimension in world coordinates -LogicType.TargetY 89 The target position in Y dimension in world coordinates -LogicType.TargetZ 90 The target position in Z dimension in world coordinates -LogicType.Temperature 6 The current temperature reading of the device -LogicType.TemperatureDifferentialEfficiency 151 How the difference between the input pipe and waste pipe temperatures effect the machines efficiency -LogicType.TemperatureExternal 73 The temperature of the outside of the device, usually the world atmosphere surrounding it -LogicType.TemperatureInput 107 The current temperature reading of the device's Input Network -LogicType.TemperatureInput2 117 The current temperature reading of the device's Input2 Network -LogicType.TemperatureOutput 127 The current temperature reading of the device's Output Network -LogicType.TemperatureOutput2 137 The current temperature reading of the device's Output2 Network -LogicType.TemperatureSetting 72 The current setting for the internal temperature of the object (e.g. the Hardsuit A/C) -LogicType.Throttle 154 Increases the rate at which the machine works (range: 0-100) -LogicType.Thrust 221 Total current thrust of all rocket engines on the rocket in Newtons. -LogicType.ThrustToWeight 223 Ratio of thrust to weight of rocket. Weight is effected by local body gravity. A rocket with a low thrust to weight will expend more fuel during launch and landing. -LogicType.Time 102 Time -LogicType.TimeToDestination 224 Estimated time in seconds until rocket arrives at target destination. -LogicType.TotalMoles 66 Returns the total moles of the device -LogicType.TotalMolesInput 115 Returns the total moles of the device's Input Network -LogicType.TotalMolesInput2 125 Returns the total moles of the device's Input2 Network -LogicType.TotalMolesOutput 135 Returns the total moles of the device's Output Network -LogicType.TotalMolesOutput2 145 Returns the total moles of the device's Output2 Network -LogicType.TotalQuantity 265 -LogicType.TrueAnomaly 251 -LogicType.VelocityMagnitude 79 The current magnitude of the velocity vector -LogicType.VelocityRelativeX 80 The current velocity X relative to the forward vector of this -LogicType.VelocityRelativeY 81 The current velocity Y relative to the forward vector of this -LogicType.VelocityRelativeZ 82 The current velocity Z relative to the forward vector of this -LogicType.VelocityX 231 -LogicType.VelocityY 232 -LogicType.VelocityZ 233 -LogicType.Vertical 21 Vertical setting of the device -LogicType.VerticalRatio 35 Radio of vertical setting for device -LogicType.Volume 67 Returns the device atmosphere volume -LogicType.VolumeOfLiquid 182 The total volume of all liquids in Liters in the atmosphere -LogicType.WattsReachingContact 164 The amount of watts actually hitting the contact. This is effected by the power of the dish and how far off-axis the dish is from the contact vector -LogicType.Weight 222 Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity. -LogicType.WorkingGasEfficiency 105 The Working Gas Efficiency reported by the machine, as a float between 0 and 1 -NotEquals 3 -PowerMode.Charged 4 -PowerMode.Charging 3 -PowerMode.Discharged 1 -PowerMode.Discharging 2 -PowerMode.Idle 0 -RobotMode.Follow 1 -RobotMode.MoveToTarget 2 -RobotMode.None 0 -RobotMode.PathToTarget 5 -RobotMode.Roam 3 -RobotMode.StorageFull 6 -RobotMode.Unload 4 -SlotClass.AccessCard 22 -SlotClass.Appliance 18 -SlotClass.Back 3 -SlotClass.Battery 14 -SlotClass.Belt 16 -SlotClass.Blocked 38 -SlotClass.Bottle 25 -SlotClass.Cartridge 21 -SlotClass.Circuit 24 -SlotClass.Circuitboard 7 -SlotClass.CreditCard 28 -SlotClass.DataDisk 8 -SlotClass.DirtCanister 29 -SlotClass.DrillHead 35 -SlotClass.Egg 15 -SlotClass.Entity 13 -SlotClass.Flare 37 -SlotClass.GasCanister 5 -SlotClass.GasFilter 4 -SlotClass.Glasses 27 -SlotClass.Helmet 1 -SlotClass.Ingot 19 -SlotClass.LiquidBottle 32 -SlotClass.LiquidCanister 31 -SlotClass.Magazine 23 -SlotClass.Motherboard 6 -SlotClass.None 0 -SlotClass.Ore 10 -SlotClass.Organ 9 -SlotClass.Plant 11 -SlotClass.ProgrammableChip 26 -SlotClass.ScanningHead 36 -SlotClass.SensorProcessingUnit 30 -SlotClass.SoundCartridge 34 -SlotClass.Suit 2 -SlotClass.Tool 17 -SlotClass.Torpedo 20 -SlotClass.Uniform 12 -SlotClass.Wreckage 33 -SortingClass.Appliances 6 -SortingClass.Atmospherics 7 -SortingClass.Clothing 5 -SortingClass.Default 0 -SortingClass.Food 4 -SortingClass.Ices 10 -SortingClass.Kits 1 -SortingClass.Ores 9 -SortingClass.Resources 3 -SortingClass.Storage 8 -SortingClass.Tools 2 -Sound.AirlockCycling 22 -Sound.Alarm1 45 -Sound.Alarm10 12 -Sound.Alarm11 13 -Sound.Alarm12 14 -Sound.Alarm2 1 -Sound.Alarm3 2 -Sound.Alarm4 3 -Sound.Alarm5 4 -Sound.Alarm6 5 -Sound.Alarm7 6 -Sound.Alarm8 10 -Sound.Alarm9 11 -Sound.Alert 17 -Sound.Danger 15 -Sound.Depressurising 20 -Sound.FireFireFire 28 -Sound.Five 33 -Sound.Floor 34 -Sound.Four 32 -Sound.HaltWhoGoesThere 27 -Sound.HighCarbonDioxide 44 -Sound.IntruderAlert 19 -Sound.LiftOff 36 -Sound.MalfunctionDetected 26 -Sound.Music1 7 -Sound.Music2 8 -Sound.Music3 9 -Sound.None 0 -Sound.One 29 -Sound.PollutantsDetected 43 -Sound.PowerLow 23 -Sound.PressureHigh 39 -Sound.PressureLow 40 -Sound.Pressurising 21 -Sound.RocketLaunching 35 -Sound.StormIncoming 18 -Sound.SystemFailure 24 -Sound.TemperatureHigh 41 -Sound.TemperatureLow 42 -Sound.Three 31 -Sound.TraderIncoming 37 -Sound.TraderLanded 38 -Sound.Two 30 -Sound.Warning 16 -Sound.Welcome 25 -TransmitterMode.Active 1 -TransmitterMode.Passive 0 -Vent.Inward 1 -Vent.Outward 0 diff --git a/ic10emu/data/instruction_help_patches.json b/ic10emu/data/instruction_help_patches.json deleted file mode 100644 index f2186ad..0000000 --- a/ic10emu/data/instruction_help_patches.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "english": { - "bapz": "Branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8)", - "bapzal": "Branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8) and store next line number in ra", - "bnaz": "Branch to line c if abs(a) > max (b * abs(a), float.epsilon * 8)", - "bnazal": "Branch to line c if abs(a) > max (b * abs(a), float.epsilon * 8) and store next line number in ra", - "brapz": "Relative branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8)", - "brnaz": "Relative branch to line c if abs(a) > max(b * abs(a), float.epsilon * 8)", - "sapz": "Register = 1 if abs(a) <= max(b * abs(a), float.epsilon * 8), otherwise 0", - "snaz": "Register = 1 if abs(a) > max(b * abs(a), float.epsilon), otherwise 0", - "log": "Register = base e log(a) or ln(a)", - "exp": "Register = exp(a) or e^a" - } -} diff --git a/ic10emu/data/instructions.txt b/ic10emu/data/instructions.txt deleted file mode 100644 index de0552b..0000000 --- a/ic10emu/data/instructions.txt +++ /dev/null @@ -1,140 +0,0 @@ -abs REGISTER VALUE -acos REGISTER VALUE -add REGISTER VALUE VALUE -alias NAME REGISTER_DEVICE -and REGISTER VALUE VALUE -asin REGISTER VALUE -atan REGISTER VALUE -atan2 REGISTER VALUE VALUE -bap VALUE VALUE VALUE VALUE -bapal VALUE VALUE VALUE VALUE -bapz VALUE VALUE VALUE -bapzal VALUE VALUE VALUE -bdns DEVICE VALUE -bdnsal DEVICE VALUE -bdse DEVICE VALUE -bdseal DEVICE VALUE -beq VALUE VALUE VALUE -beqal VALUE VALUE VALUE -beqz VALUE VALUE -beqzal VALUE VALUE -bge VALUE VALUE VALUE -bgeal VALUE VALUE VALUE -bgez VALUE VALUE -bgezal VALUE VALUE -bgt VALUE VALUE VALUE -bgtal VALUE VALUE VALUE -bgtz VALUE VALUE -bgtzal VALUE VALUE -ble VALUE VALUE VALUE -bleal VALUE VALUE VALUE -blez VALUE VALUE -blezal VALUE VALUE -blt VALUE VALUE VALUE -bltal VALUE VALUE VALUE -bltz VALUE VALUE -bltzal VALUE VALUE -bna VALUE VALUE VALUE VALUE -bnaal VALUE VALUE VALUE VALUE -bnan VALUE VALUE -bnaz VALUE VALUE VALUE -bnazal VALUE VALUE VALUE -bne VALUE VALUE VALUE -bneal VALUE VALUE VALUE -bnez VALUE VALUE -bnezal VALUE VALUE -brap VALUE VALUE VALUE VALUE -brapz VALUE VALUE VALUE -brdns DEVICE VALUE -brdse DEVICE VALUE -breq VALUE VALUE VALUE -breqz VALUE VALUE -brge VALUE VALUE VALUE -brgez VALUE VALUE -brgt VALUE VALUE VALUE -brgtz VALUE VALUE -brle VALUE VALUE VALUE -brlez VALUE VALUE -brlt VALUE VALUE VALUE -brltz VALUE VALUE -brna VALUE VALUE VALUE VALUE -brnan VALUE VALUE -brnaz VALUE VALUE VALUE -brne VALUE VALUE VALUE -brnez VALUE VALUE -ceil REGISTER VALUE -cos REGISTER VALUE -define NAME NUMBER -div REGISTER VALUE VALUE -exp REGISTER VALUE -floor REGISTER VALUE -get REGISTER DEVICE ADDRESS -getd REGISTER DEVICE_ID ADDRESS -hcf -j VALUE -jal VALUE -jr VALUE -l REGISTER DEVICE LOGIC_TYPE -lb REGISTER DEVICE_TYPE LOGIC_TYPE BATCH_MODE -lbn REGISTER DEVICE_TYPE DEVICE_NAME LOGIC_TYPE BATCH_MODE -lbns REGISTER DEVICE_TYPE DEVICE_NAME INDEX SLOT_LOGIC_TYPE BATCH_MODE -lbs REGISTER DEVICE_TYPE INDEX SLOT_LOGIC_TYPE BATCH_MODE -ld REGISTER DEVICE_ID LOGIC_TYPE -log REGISTER VALUE -lr REGISTER DEVICE REAGENT_MODE VALUE -ls REGISTER DEVICE VALUE SLOT_LOGIC_TYPE -max REGISTER VALUE VALUE -min REGISTER VALUE VALUE -mod REGISTER VALUE VALUE -move REGISTER VALUE -mul REGISTER VALUE VALUE -nor REGISTER VALUE VALUE -not REGISTER VALUE -or REGISTER VALUE VALUE -peek REGISTER -poke ADDRESS VALUE -pop REGISTER -push VALUE -put DEVICE ADDRESS VALUE -putd DEVICE_ID ADDRESS VALUE -rand REGISTER -round REGISTER VALUE -s DEVICE LOGIC_TYPE VALUE -sap REGISTER VALUE VALUE VALUE -sapz REGISTER VALUE VALUE -sb DEVICE_TYPE LOGIC_TYPE VALUE -sbn DEVICE_TYPE DEVICE_NAME LOGIC_TYPE VALUE -sbs DEVICE_TYPE INDEX SLOT_LOGIC_TYPE VALUE -sd DEVICE_ID LOGIC_TYPE VALUE -sdns REGISTER DEVICE -sdse REGISTER DEVICE -select REGISTER VALUE VALUE VALUE -seq REGISTER VALUE VALUE -seqz REGISTER VALUE -sge REGISTER VALUE VALUE -sgez REGISTER VALUE -sgt REGISTER VALUE VALUE -sgtz REGISTER VALUE -sin REGISTER VALUE -sla REGISTER VALUE VALUE -sle REGISTER VALUE VALUE -sleep VALUE -slez REGISTER VALUE -sll REGISTER VALUE VALUE -slt REGISTER VALUE VALUE -sltz REGISTER VALUE -sna REGISTER VALUE VALUE VALUE -snan REGISTER VALUE -snanz REGISTER VALUE -snaz REGISTER VALUE VALUE -sne REGISTER VALUE VALUE -snez REGISTER VALUE -sqrt REGISTER VALUE -sra REGISTER VALUE VALUE -srl REGISTER VALUE VALUE -ss DEVICE VALUE SLOT_LOGIC_TYPE REGISTER -sub REGISTER VALUE VALUE -tan REGISTER VALUE -trunc REGISTER VALUE -xor REGISTER VALUE VALUE -yield diff --git a/ic10emu/data/instructions_help.txt b/ic10emu/data/instructions_help.txt deleted file mode 100644 index ea7f53c..0000000 --- a/ic10emu/data/instructions_help.txt +++ /dev/null @@ -1,136 +0,0 @@ -abs Register = the absolute value of a -acos Returns the angle (radians) whos cosine is the specified value -add Register = a + b. -alias Labels register or device reference with name, device references also affect what shows on the screws on the IC base. -and Performs a bitwise logical AND operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If both bits are 1, the resulting bit is set to 1. Otherwise the resulting bit is set to 0. -asin Returns the angle (radians) whos sine is the specified value -atan Returns the angle (radians) whos tan is the specified value -atan2 Returns the angle (radians) whose tangent is the quotient of two specified values: a (y) and b (x) -bap Branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8) -bapal Branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8) and store next line number in ra -bapz Branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8) -bapzal Branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8) and store next line number in ra -bdns Branch to line a if device d isn't set -bdnsal Jump execution to line a and store next line number if device is not set -bdse Branch to line a if device d is set -bdseal Jump execution to line a and store next line number if device is set -beq Branch to line c if a == b -beqal Branch to line c if a == b and store next line number in ra -beqz Branch to line b if a == 0 -beqzal Branch to line b if a == 0 and store next line number in ra -bge Branch to line c if a >= b -bgeal Branch to line c if a >= b and store next line number in ra -bgez Branch to line b if a >= 0 -bgezal Branch to line b if a >= 0 and store next line number in ra -bgt Branch to line c if a > b -bgtal Branch to line c if a > b and store next line number in ra -bgtz Branch to line b if a > 0 -bgtzal Branch to line b if a > 0 and store next line number in ra -ble Branch to line c if a <= b -bleal Branch to line c if a <= b and store next line number in ra -blez Branch to line b if a <= 0 -blezal Branch to line b if a <= 0 and store next line number in ra -blt Branch to line c if a < b -bltal Branch to line c if a < b and store next line number in ra -bltz Branch to line b if a < 0 -bltzal Branch to line b if a < 0 and store next line number in ra -bna Branch to line d if abs(a - b) > max(c * max(abs(a), abs(b)), float.epsilon * 8) -bnaal Branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8) and store next line number in ra -bnan Branch to line b if a is not a number (NaN) -bnaz Branch to line c if abs(a) > max (b * abs(a), float.epsilon * 8) -bnazal Branch to line c if abs(a) > max (b * abs(a), float.epsilon * 8) and store next line number in ra -bne Branch to line c if a != b -bneal Branch to line c if a != b and store next line number in ra -bnez branch to line b if a != 0 -bnezal Branch to line b if a != 0 and store next line number in ra -brap Relative branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8) -brapz Relative branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8) -brdns Relative jump to line a if device is not set -brdse Relative jump to line a if device is set -breq Relative branch to line c if a == b -breqz Relative branch to line b if a == 0 -brge Relative jump to line c if a >= b -brgez Relative branch to line b if a >= 0 -brgt relative jump to line c if a > b -brgtz Relative branch to line b if a > 0 -brle Relative jump to line c if a <= b -brlez Relative branch to line b if a <= 0 -brlt Relative jump to line c if a < b -brltz Relative branch to line b if a < 0 -brna Relative branch to line d if abs(a - b) > max(c * max(abs(a), abs(b)), float.epsilon * 8) -brnan Relative branch to line b if a is not a number (NaN) -brnaz Relative branch to line c if abs(a) > max(b * abs(a), float.epsilon * 8) -brne Relative branch to line c if a != b -brnez Relative branch to line b if a != 0 -ceil Register = smallest integer greater than a -cos Returns the cosine of the specified angle (radians) -define Creates a label that will be replaced throughout the program with the provided value. -div Register = a / b -exp Register = exp(a) or e^a -floor Register = largest integer less than a -hcf Halt and catch fire -j Jump execution to line a -jal Jump execution to line a and store next line number in ra -jr Relative jump to line a -l Loads device LogicType to register by housing index value. -label DEPRECATED -lb Loads LogicType from all output network devices with provided type hash using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number. -lbn Loads LogicType from all output network devices with provided type and name hashes using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number. -lbns Loads LogicSlotType from slotIndex from all output network devices with provided type and name hashes using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number. -lbs Loads LogicSlotType from slotIndex from all output network devices with provided type hash using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number. -ld Loads device LogicType to register by direct ID reference. -log Register = base e log(a) or ln(a) -lr Loads reagent of device's ReagentMode where a hash of the reagent type to check for. ReagentMode can be either Contents (0), Required (1), Recipe (2). Can use either the word, or the number. -ls Loads slot LogicSlotType on device to register. -max Register = max of a or b -min Register = min of a or b -mod Register = a mod b (note: NOT a % b) -move Register = provided num or register value. -mul Register = a * b -nor Performs a bitwise logical NOR (NOT OR) operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If both bits are 0, the resulting bit is set to 1. Otherwise, if at least one bit is 1, the resulting bit is set to 0. -not Performs a bitwise logical NOT operation flipping each bit of the input value, resulting in a binary complement. If a bit is 1, it becomes 0, and if a bit is 0, it becomes 1. -or Performs a bitwise logical OR operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If either bit is 1, the resulting bit is set to 1. If both bits are 0, the resulting bit is set to 0. -peek Register = the value at the top of the stack -pop Register = the value at the top of the stack and decrements sp -push Pushes the value of a to the stack at sp and increments sp -rand Register = a random value x with 0 <= x < 1 -round Register = a rounded to nearest integer -s Stores register value to LogicType on device by housing index value. -sap Register = 1 if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8), otherwise 0 -sapz Register = 1 if abs(a) <= max(b * abs(a), float.epsilon * 8), otherwise 0 -sb Stores register value to LogicType on all output network devices with provided type hash. -sbn Stores register value to LogicType on all output network devices with provided type hash and name. -sbs Stores register value to LogicSlotType on all output network devices with provided type hash in the provided slot. -sd Stores register value to LogicType on device by direct ID reference. -sdns Register = 1 if device is not set, otherwise 0 -sdse Register = 1 if device is set, otherwise 0. -select Register = b if a is non-zero, otherwise c -seq Register = 1 if a == b, otherwise 0 -seqz Register = 1 if a == 0, otherwise 0 -sge Register = 1 if a >= b, otherwise 0 -sgez Register = 1 if a >= 0, otherwise 0 -sgt Register = 1 if a > b, otherwise 0 -sgtz Register = 1 if a > 0, otherwise 0 -sin Returns the sine of the specified angle (radians) -sla Performs a bitwise arithmetic left shift operation on the binary representation of a value. It shifts the bits to the left and fills the vacated rightmost bits with a copy of the sign bit (the most significant bit). -sle Register = 1 if a <= b, otherwise 0 -sleep Pauses execution on the IC for a seconds -slez Register = 1 if a <= 0, otherwise 0 -sll Performs a bitwise logical left shift operation on the binary representation of a value. It shifts the bits to the left and fills the vacated rightmost bits with zeros. -slt Register = 1 if a < b, otherwise 0 -sltz Register = 1 if a < 0, otherwise 0 -sna Register = 1 if abs(a - b) > max(c * max(abs(a), abs(b)), float.epsilon * 8), otherwise 0 -snan Register = 1 if a is NaN, otherwise 0 -snanz Register = 0 if a is NaN, otherwise 1 -snaz Register = 1 if abs(a) > max(b * abs(a), float.epsilon), otherwise 0 -sne Register = 1 if a != b, otherwise 0 -snez Register = 1 if a != 0, otherwise 0 -sqrt Register = square root of a -sra Performs a bitwise arithmetic right shift operation on the binary representation of a value. It shifts the bits to the right and fills the vacated leftmost bits with a copy of the sign bit (the most significant bit). -srl Performs a bitwise logical right shift operation on the binary representation of a value. It shifts the bits to the right and fills the vacated leftmost bits with zeros -ss Stores register value to device stored in a slot LogicSlotType on device. -sub Register = a - b. -tan Returns the tan of the specified angle (radians) -trunc Register = a with fractional part removed -xor Performs a bitwise logical XOR (exclusive OR) operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If the bits are different (one bit is 0 and the other is 1), the resulting bit is set to 1. If the bits are the same (both 0 or both 1), the resulting bit is set to 0. -yield Pauses execution for 1 tick diff --git a/ic10emu/data/logictypes.txt b/ic10emu/data/logictypes.txt deleted file mode 100644 index e363bdc..0000000 --- a/ic10emu/data/logictypes.txt +++ /dev/null @@ -1,269 +0,0 @@ -Acceleration 216 Change in velocity. Rockets that are deccelerating when landing will show this as negative value. -Activate 9 1 if device is activated (usually means running), otherwise 0 -AirRelease 75 The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On -AlignmentError 243 -Apex 238 -AutoLand 226 Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing. -AutoShutOff 218 Turns off all devices in the rocket upon reaching destination -Bpm 103 Bpm -BurnTimeRemaining 225 Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage. -CelestialHash 242 -CelestialParentHash 250 -Channel0 165 Channel 0 on a cable network which should be considered volatile -Channel1 166 Channel 1 on a cable network which should be considered volatile -Channel2 167 Channel 2 on a cable network which should be considered volatile -Channel3 168 Channel 3 on a cable network which should be considered volatile -Channel4 169 Channel 4 on a cable network which should be considered volatile -Channel5 170 Channel 5 on a cable network which should be considered volatile -Channel6 171 Channel 6 on a cable network which should be considered volatile -Channel7 172 Channel 7 on a cable network which should be considered volatile -Charge 11 The current charge the device has -Chart 256 -ChartedNavPoints 259 -ClearMemory 62 When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned -CollectableGoods 101 -Color 38 \n Whether driven by concerns for clarity, safety or simple aesthetics, {LINK:Stationeers;Stationeers} have access to a small rainbow of colors for their constructions. These are the color setting for devices, represented as an integer.\n\n0: Blue\n1: Grey\n2: Green\n3: Orange\n4: Red\n5: Yellow\n6: White\n7: Black\n8: Brown\n9: Khaki\n10: Pink\n11: Purple\n\n It is an unwavering universal law that anything higher than 11 will be purple. The {LINK:ODA;ODA} is powerless to change this. Similarly, anything lower than 0 will be Blue.\n -Combustion 98 The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not. -CombustionInput 146 The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not. -CombustionInput2 147 The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not. -CombustionLimiter 153 Retards the rate of combustion inside the machine (range: 0-100), with 0 being the slowest rate of combustion and 100 being the fastest -CombustionOutput 148 The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not. -CombustionOutput2 149 The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not. -CompletionRatio 61 How complete the current production is for this device, between 0 and 1 -ContactTypeId 198 The type id of the contact. -CurrentCode 261 -CurrentResearchPodType 93 -Density 262 -DestinationCode 215 Unique identifier code for a destination on the space map. -Discover 255 -DistanceAu 244 -DistanceKm 249 -DrillCondition 240 -DryMass 220 The Mass in kilograms of the rocket excluding fuel. The more massive the rocket the more fuel will be required to move to a new location in space. -Eccentricity 247 -ElevatorLevel 40 Level the elevator is currently at -ElevatorSpeed 39 Current speed of the elevator -EntityState 239 -EnvironmentEfficiency 104 The Environment Efficiency reported by the machine, as a float between 0 and 1 -Error 4 1 if device is in error state, otherwise 0 -ExhaustVelocity 235 -ExportCount 63 How many items exported since last ClearMemory -ExportQuantity 31 Total quantity of items exported by the device -ExportSlotHash 42 DEPRECATED -ExportSlotOccupant 32 DEPRECATED -Filtration 74 The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On -FlightControlRule 236 -Flush 174 Set to 1 to activate the flush function on the device -ForceWrite 85 Forces Logic Writer devices to rewrite value -ForwardX 227 -ForwardY 228 -ForwardZ 229 -Fuel 99 -Harvest 69 Performs the harvesting action for any plant based machinery -Horizontal 20 Horizontal setting of the device -HorizontalRatio 34 Radio of horizontal setting for device -Idle 37 Returns 1 if the device is currently idle, otherwise 0 -ImportCount 64 How many items imported since last ClearMemory -ImportQuantity 29 Total quantity of items imported by the device -ImportSlotHash 43 DEPRECATED -ImportSlotOccupant 30 DEPRECATED -Inclination 246 -Index 241 -InterrogationProgress 157 Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1 -LineNumber 173 The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution -Lock 10 1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values -ManualResearchRequiredPod 94 -Mass 219 The total Mass of the rocket in kilograms including fuel and cargo. The more massive the rocket the more fuel will be required to move to a new location in space. -Maximum 23 Maximum setting of the device -MinWattsToContact 163 Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact -MineablesInQueue 96 -MineablesInVicinity 95 -MinedQuantity 266 -MinimumWattsToContact 163 Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact -Mode 3 Integer for mode state, different devices will have different mode states available to them -NavPoints 258 -NextWeatherEventTime 97 -None 0 No description -On 28 The current state of the device, 0 for off, 1 for on -Open 2 1 if device is open, otherwise 0 -OperationalTemperatureEfficiency 150 How the input pipe's temperature effects the machines efficiency -OrbitPeriod 245 -Orientation 230 -Output 70 The output operation for a sort handling device, such as a stacker or sorter, when in logic mode the device will only action one repetition when set zero or above and then back to -1 and await further instructions -PassedMoles 234 -Plant 68 Performs the planting action for any plant based machinery -PlantEfficiency1 52 DEPRECATED -PlantEfficiency2 53 DEPRECATED -PlantEfficiency3 54 DEPRECATED -PlantEfficiency4 55 DEPRECATED -PlantGrowth1 48 DEPRECATED -PlantGrowth2 49 DEPRECATED -PlantGrowth3 50 DEPRECATED -PlantGrowth4 51 DEPRECATED -PlantHash1 56 DEPRECATED -PlantHash2 57 DEPRECATED -PlantHash3 58 DEPRECATED -PlantHash4 59 DEPRECATED -PlantHealth1 44 DEPRECATED -PlantHealth2 45 DEPRECATED -PlantHealth3 46 DEPRECATED -PlantHealth4 47 DEPRECATED -PositionX 76 The current position in X dimension in world coordinates -PositionY 77 The current position in Y dimension in world coordinates -PositionZ 78 The current position in Z dimension in world coordinates -Power 1 Can be read to return if the device is correctly powered or not, set via the power system, return 1 if powered and 0 if not -PowerActual 26 How much energy the device or network is actually using -PowerGeneration 65 Returns how much power is being generated -PowerPotential 25 How much energy the device or network potentially provides -PowerRequired 36 Power requested from the device and/or network -PrefabHash 84 The hash of the structure -Pressure 5 The current pressure reading of the device -PressureEfficiency 152 How the pressure of the input pipe and waste pipe effect the machines efficiency -PressureExternal 7 Setting for external pressure safety, in KPa -PressureInput 106 The current pressure reading of the device's Input Network -PressureInput2 116 The current pressure reading of the device's Input2 Network -PressureInternal 8 Setting for internal pressure safety, in KPa -PressureOutput 126 The current pressure reading of the device's Output Network -PressureOutput2 136 The current pressure reading of the device's Output2 Network -PressureSetting 71 The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa -Progress 214 Progress of the rocket to the next node on the map expressed as a value between 0-1. -Quantity 27 Total quantity on the device -Ratio 24 Context specific value depending on device, 0 to 1 based ratio -RatioCarbonDioxide 15 The ratio of {GAS:CarbonDioxide} in device atmosphere -RatioCarbonDioxideInput 109 The ratio of {GAS:CarbonDioxide} in device's input network -RatioCarbonDioxideInput2 119 The ratio of {GAS:CarbonDioxide} in device's Input2 network -RatioCarbonDioxideOutput 129 The ratio of {GAS:CarbonDioxide} in device's Output network -RatioCarbonDioxideOutput2 139 The ratio of {GAS:CarbonDioxide} in device's Output2 network -RatioHydrogen 252 The ratio of {GAS:Hydrogen} in device's Atmopshere -RatioLiquidCarbonDioxide 199 The ratio of {GAS:LiquidCarbonDioxide} in device's Atmosphere -RatioLiquidCarbonDioxideInput 200 The ratio of {GAS:LiquidCarbonDioxide} in device's Input Atmosphere -RatioLiquidCarbonDioxideInput2 201 The ratio of {GAS:LiquidCarbonDioxide} in device's Input2 Atmosphere -RatioLiquidCarbonDioxideOutput 202 The ratio of {GAS:LiquidCarbonDioxide} in device's device's Output Atmosphere -RatioLiquidCarbonDioxideOutput2 203 The ratio of {GAS:LiquidCarbonDioxide} in device's Output2 Atmopshere -RatioLiquidHydrogen 253 The ratio of {GAS:LiquidHydrogen} in device's Atmopshere -RatioLiquidNitrogen 177 The ratio of {GAS:LiquidNitrogen} in device atmosphere -RatioLiquidNitrogenInput 178 The ratio of {GAS:LiquidNitrogen} in device's input network -RatioLiquidNitrogenInput2 179 The ratio of {GAS:LiquidNitrogen} in device's Input2 network -RatioLiquidNitrogenOutput 180 The ratio of {GAS:LiquidNitrogen} in device's Output network -RatioLiquidNitrogenOutput2 181 The ratio of {GAS:LiquidNitrogen} in device's Output2 network -RatioLiquidNitrousOxide 209 The ratio of {GAS:LiquidNitrousOxide} in device's Atmosphere -RatioLiquidNitrousOxideInput 210 The ratio of {GAS:LiquidNitrousOxide} in device's Input Atmosphere -RatioLiquidNitrousOxideInput2 211 The ratio of {GAS:LiquidNitrousOxide} in device's Input2 Atmosphere -RatioLiquidNitrousOxideOutput 212 The ratio of {GAS:LiquidNitrousOxide} in device's device's Output Atmosphere -RatioLiquidNitrousOxideOutput2 213 The ratio of {GAS:LiquidNitrousOxide} in device's Output2 Atmopshere -RatioLiquidOxygen 183 The ratio of {GAS:LiquidOxygen} in device's Atmosphere -RatioLiquidOxygenInput 184 The ratio of {GAS:LiquidOxygen} in device's Input Atmosphere -RatioLiquidOxygenInput2 185 The ratio of {GAS:LiquidOxygen} in device's Input2 Atmosphere -RatioLiquidOxygenOutput 186 The ratio of {GAS:LiquidOxygen} in device's device's Output Atmosphere -RatioLiquidOxygenOutput2 187 The ratio of {GAS:LiquidOxygen} in device's Output2 Atmopshere -RatioLiquidPollutant 204 The ratio of {GAS:LiquidPollutant} in device's Atmosphere -RatioLiquidPollutantInput 205 The ratio of {GAS:LiquidPollutant} in device's Input Atmosphere -RatioLiquidPollutantInput2 206 The ratio of {GAS:LiquidPollutant} in device's Input2 Atmosphere -RatioLiquidPollutantOutput 207 The ratio of {GAS:LiquidPollutant} in device's device's Output Atmosphere -RatioLiquidPollutantOutput2 208 The ratio of {GAS:LiquidPollutant} in device's Output2 Atmopshere -RatioLiquidVolatiles 188 The ratio of {GAS:LiquidVolatiles} in device's Atmosphere -RatioLiquidVolatilesInput 189 The ratio of {GAS:LiquidVolatiles} in device's Input Atmosphere -RatioLiquidVolatilesInput2 190 The ratio of {GAS:LiquidVolatiles} in device's Input2 Atmosphere -RatioLiquidVolatilesOutput 191 The ratio of {GAS:LiquidVolatiles} in device's device's Output Atmosphere -RatioLiquidVolatilesOutput2 192 The ratio of {GAS:LiquidVolatiles} in device's Output2 Atmopshere -RatioNitrogen 16 The ratio of nitrogen in device atmosphere -RatioNitrogenInput 110 The ratio of nitrogen in device's input network -RatioNitrogenInput2 120 The ratio of nitrogen in device's Input2 network -RatioNitrogenOutput 130 The ratio of nitrogen in device's Output network -RatioNitrogenOutput2 140 The ratio of nitrogen in device's Output2 network -RatioNitrousOxide 83 The ratio of {GAS:NitrousOxide} in device atmosphere -RatioNitrousOxideInput 114 The ratio of {GAS:NitrousOxide} in device's input network -RatioNitrousOxideInput2 124 The ratio of {GAS:NitrousOxide} in device's Input2 network -RatioNitrousOxideOutput 134 The ratio of {GAS:NitrousOxide} in device's Output network -RatioNitrousOxideOutput2 144 The ratio of {GAS:NitrousOxide} in device's Output2 network -RatioOxygen 14 The ratio of oxygen in device atmosphere -RatioOxygenInput 108 The ratio of oxygen in device's input network -RatioOxygenInput2 118 The ratio of oxygen in device's Input2 network -RatioOxygenOutput 128 The ratio of oxygen in device's Output network -RatioOxygenOutput2 138 The ratio of oxygen in device's Output2 network -RatioPollutant 17 The ratio of pollutant in device atmosphere -RatioPollutantInput 111 The ratio of pollutant in device's input network -RatioPollutantInput2 121 The ratio of pollutant in device's Input2 network -RatioPollutantOutput 131 The ratio of pollutant in device's Output network -RatioPollutantOutput2 141 The ratio of pollutant in device's Output2 network -RatioPollutedWater 254 The ratio of polluted water in device atmosphere -RatioSteam 193 The ratio of {GAS:Steam} in device's Atmosphere -RatioSteamInput 194 The ratio of {GAS:Steam} in device's Input Atmosphere -RatioSteamInput2 195 The ratio of {GAS:Steam} in device's Input2 Atmosphere -RatioSteamOutput 196 The ratio of {GAS:Steam} in device's device's Output Atmosphere -RatioSteamOutput2 197 The ratio of {GAS:Steam} in device's Output2 Atmopshere -RatioVolatiles 18 The ratio of volatiles in device atmosphere -RatioVolatilesInput 112 The ratio of volatiles in device's input network -RatioVolatilesInput2 122 The ratio of volatiles in device's Input2 network -RatioVolatilesOutput 132 The ratio of volatiles in device's Output network -RatioVolatilesOutput2 142 The ratio of volatiles in device's Output2 network -RatioWater 19 The ratio of water in device atmosphere -RatioWaterInput 113 The ratio of water in device's input network -RatioWaterInput2 123 The ratio of water in device's Input2 network -RatioWaterOutput 133 The ratio of water in device's Output network -RatioWaterOutput2 143 The ratio of water in device's Output2 network -ReEntryAltitude 237 -Reagents 13 Total number of reagents recorded by the device -RecipeHash 41 Current hash of the recipe the device is set to produce -ReferenceId 217 -RequestHash 60 When set to the unique identifier, requests an item of the provided type from the device -RequiredPower 33 Idle operating power quantity, does not necessarily include extra demand power -ReturnFuelCost 100 -Richness 263 -Rpm 155 The number of revolutions per minute that the device's spinning mechanism is doing -SemiMajorAxis 248 -Setting 12 A variable setting that can be read or written, depending on the device -SettingInput 91 -SettingInputHash 91 The input setting for the device -SettingOutput 92 -SettingOutputHash 91 The output setting for the device -SignalID 87 Returns the contact ID of the strongest signal from this Satellite -SignalStrength 86 Returns the degree offset of the strongest contact -Sites 260 -Size 264 -SizeX 160 Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters) -SizeY 161 Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters) -SizeZ 162 Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters) -SolarAngle 22 Solar angle of the device -SolarIrradiance 176 -SoundAlert 175 Plays a sound alert on the devices speaker -Stress 156 Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down -Survey 257 -TargetPadIndex 158 The index of the trader landing pad on this devices data network that it will try to call a trader in to land -TargetX 88 The target position in X dimension in world coordinates -TargetY 89 The target position in Y dimension in world coordinates -TargetZ 90 The target position in Z dimension in world coordinates -Temperature 6 The current temperature reading of the device -TemperatureDifferentialEfficiency 151 How the difference between the input pipe and waste pipe temperatures effect the machines efficiency -TemperatureExternal 73 The temperature of the outside of the device, usually the world atmosphere surrounding it -TemperatureInput 107 The current temperature reading of the device's Input Network -TemperatureInput2 117 The current temperature reading of the device's Input2 Network -TemperatureOutput 127 The current temperature reading of the device's Output Network -TemperatureOutput2 137 The current temperature reading of the device's Output2 Network -TemperatureSetting 72 The current setting for the internal temperature of the object (e.g. the Hardsuit A/C) -Throttle 154 Increases the rate at which the machine works (range: 0-100) -Thrust 221 Total current thrust of all rocket engines on the rocket in Newtons. -ThrustToWeight 223 Ratio of thrust to weight of rocket. Weight is effected by local body gravity. A rocket with a low thrust to weight will expend more fuel during launch and landing. -Time 102 Time -TimeToDestination 224 Estimated time in seconds until rocket arrives at target destination. -TotalMoles 66 Returns the total moles of the device -TotalMolesInput 115 Returns the total moles of the device's Input Network -TotalMolesInput2 125 Returns the total moles of the device's Input2 Network -TotalMolesOutput 135 Returns the total moles of the device's Output Network -TotalMolesOutput2 145 Returns the total moles of the device's Output2 Network -TotalQuantity 265 -TrueAnomaly 251 -VelocityMagnitude 79 The current magnitude of the velocity vector -VelocityRelativeX 80 The current velocity X relative to the forward vector of this -VelocityRelativeY 81 The current velocity Y relative to the forward vector of this -VelocityRelativeZ 82 The current velocity Z relative to the forward vector of this -VelocityX 231 -VelocityY 232 -VelocityZ 233 -Vertical 21 Vertical setting of the device -VerticalRatio 35 Radio of vertical setting for device -Volume 67 Returns the device atmosphere volume -VolumeOfLiquid 182 The total volume of all liquids in Liters in the atmosphere -WattsReachingContact 164 The amount of watts actually hitting the contact. This is effected by the power of the dish and how far off-axis the dish is from the contact vector -Weight 222 Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity. -WorkingGasEfficiency 105 The Working Gas Efficiency reported by the machine, as a float between 0 and 1 diff --git a/ic10emu/data/reagentmodes.txt b/ic10emu/data/reagentmodes.txt deleted file mode 100644 index c727f52..0000000 --- a/ic10emu/data/reagentmodes.txt +++ /dev/null @@ -1,4 +0,0 @@ -Contents 0 The amount of this Reagent present in the machine -Recipe 2 The amount of this Reagent required by the Machine's current recipe -Required 1 The amount of this Reagent needed to complete the Machine's current recipe after subtracting the amount currently present -TotalContents 3 diff --git a/ic10emu/data/slotlogictypes.txt b/ic10emu/data/slotlogictypes.txt deleted file mode 100644 index abd2d70..0000000 --- a/ic10emu/data/slotlogictypes.txt +++ /dev/null @@ -1,27 +0,0 @@ -Charge 10 returns current energy charge the slot occupant is holding -ChargeRatio 11 returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum -Class 12 returns integer representing the class of object -Damage 4 returns the damage state of the item in the slot -Efficiency 5 returns the growth efficiency of the plant in the slot -FilterType 25 -Growth 7 returns the current growth state of the plant in the slot -Health 6 returns the health of the plant in the slot -LineNumber 19 -Lock 23 -Mature 16 returns 1 if the plant in this slot is mature, 0 when it isn't -MaxQuantity 15 returns the max stack size of the item in the slot -None 0 No description -OccupantHash 2 returns the has of the current occupant, the unique identifier of the thing -Occupied 1 returns 0 when slot is not occupied, 1 when it is -On 22 -Open 21 -PrefabHash 17 returns the hash of the structure in the slot -Pressure 8 returns pressure of the slot occupants internal atmosphere -PressureAir 14 returns pressure in the air tank of the jetpack in this slot -PressureWaste 13 returns pressure in the waste tank of the jetpack in this slot -Quantity 3 returns the current quantity, such as stack size, of the item in the slot -ReferenceId 26 -Seeding 18 Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not. -SortingClass 24 -Temperature 9 returns temperature of the slot occupants internal atmosphere -Volume 20 diff --git a/ic10emu/data/stationpedia.txt b/ic10emu/data/stationpedia.txt deleted file mode 100644 index 9250587..0000000 --- a/ic10emu/data/stationpedia.txt +++ /dev/null @@ -1,1731 +0,0 @@ --1330388999 AccessCardBlack Access Card (Black) --1411327657 AccessCardBlue Access Card (Blue) -1412428165 AccessCardBrown Access Card (Brown) --1339479035 AccessCardGray Access Card (Gray) --374567952 AccessCardGreen Access Card (Green) -337035771 AccessCardKhaki Access Card (Khaki) --332896929 AccessCardOrange Access Card (Orange) -431317557 AccessCardPink Access Card (Pink) -459843265 AccessCardPurple Access Card (Purple) --1713748313 AccessCardRed Access Card (Red) -2079959157 AccessCardWhite Access Card (White) -568932536 AccessCardYellow Access Card (Yellow) -1565803737 Alcohol Alcohol --1686269127 ApplianceBobbleHeadBasicSuit Bobble Head (Basic Suit) --38993607 ApplianceBobbleHeadHardSuit Bobble Head (Hard Suit) -1365789392 ApplianceChemistryStation Chemistry Station --1683849799 ApplianceDeskLampLeft Appliance Desk Lamp Left -1174360780 ApplianceDeskLampRight Appliance Desk Lamp Right --1136173965 ApplianceMicrowave Microwave --749191906 AppliancePackagingMachine Basic Packaging Machine --1339716113 AppliancePaintMixer Paint Mixer --1303038067 AppliancePlantGeneticAnalyzer Plant Genetic Analyzer --1094868323 AppliancePlantGeneticSplicer Plant Genetic Splicer -871432335 AppliancePlantGeneticStabilizer Plant Genetic Stabilizer -1260918085 ApplianceReagentProcessor Reagent Processor -142831994 ApplianceSeedTray Appliance Seed Tray -1853941363 ApplianceTabletDock Tablet Dock --1493155787 Astroloy Astroloy -221058307 AutolathePrinterMod Autolathe Printer Mod --462415758 Battery_Wireless_cell Battery Wireless Cell --41519077 Battery_Wireless_cell_Big Battery Wireless Cell (Big) -925270362 Biomass Biomass -724717025 BodyPartAstronautFemaleArmL Body Part Astronaut Female Arm --784502654 BodyPartAstronautFemaleArmR Body Part Astronaut Female Arm R --699183000 BodyPartAstronautFemaleHead Body Part Astronaut Female Head -987678787 BodyPartAstronautFemaleLegL Body Part Astronaut Female Leg L --1059982048 BodyPartAstronautFemaleLegR Body Part Astronaut Female Leg R --1644287450 BodyPartAstronautFemaleTorso Body Part Astronaut Female Torso --2049263135 BodyPartAstronautMaleArmL Body Part Astronaut Male Arm L -2144699522 BodyPartAstronautMaleArmR Body Part Astronaut Male Arm R -2025563240 BodyPartAstronautMaleHead Body Part Astronaut Male Head --1808384957 BodyPartAstronautMaleLegL Body Part Astronaut Male Leg) -1849229600 BodyPartAstronautMaleLegR Body Part Astronaut Male Leg R --331537198 BodyPartAstronautTorso Body Part Astronaut Torso -1488426674 BodyPartChickBody Body Part Chick Body -619473820 BodyPartChickHead Body Part Chick Head --933104713 BodyPartChickLegL Body Part Chick Leg) -846122708 BodyPartChickLegR Body Part Chick Leg R --14145187 BodyPartChickTail Body Part Chick Tail --589137369 BodyPartChickWingL Body Part Chick Wing) -653084484 BodyPartChickWingR Body Part Chick Wing R --1241112004 BodyPartChickenBrownBody Body Part Chicken Brown Body --899817710 BodyPartChickenBrownHead Body Part Chicken Brown Head -651183929 BodyPartChickenBrownLegL Body Part Chicken Brown Leg) --589333926 BodyPartChickenBrownLegR Body Part Chicken Brown Leg R -295280083 BodyPartChickenBrownTail Body Part Chicken Brown Tail --703830604 BodyPartChickenBrownWingL Body Part Chicken Brown Wing) -738416855 BodyPartChickenBrownWingR Body Part Chicken Brown Wing R -801013348 BodyPartChickenWhiteBody Body Part Chicken White Body -1407550282 BodyPartChickenWhiteHead Body Part Chicken White Head --1083696287 BodyPartChickenWhiteLegL Body Part Chicken White Leg) -1164387842 BodyPartChickenWhiteLegR Body Part Chicken White Leg R --2011053685 BodyPartChickenWhiteTail Body Part Chicken White Tail --1289419730 BodyPartChickenWhiteWingL Body Part Chicken White Wing) -1227503949 BodyPartChickenWhiteWingR Body Part Chicken White Wing R --815465419 BodyPartGraylienArmL Body Part Graylien Arm L -896254294 BodyPartGraylienArmR Body Part Graylien Arm R -1314790546 BodyPartGraylienBody Body Part Graylien Body -839246268 BodyPartGraylienHead Body Part Graylien Head --561481321 BodyPartGraylienLegL Body Part Graylien Leg L -612844788 BodyPartGraylienLegR Body Part Graylien Leg R --1579496195 BodyPartGraylienPelvis Body Part Graylien Pelvis -54192919 BodyPartRoosterBlackBody Body Part Rooster Black Body -2137069113 BodyPartRoosterBlackHead Body Part Rooster Black Head --1813213678 BodyPartRoosterBlackLegL Body Part Rooster Black Leg) -1776530289 BodyPartRoosterBlackLegR Body Part Rooster Black Leg R --1532668680 BodyPartRoosterBlackTail Body Part Rooster Black Tail -2047189053 BodyPartRoosterBlackWingL Body Part Rooster Black Wing) --2146788002 BodyPartRoosterBlackWingR Body Part Rooster Black Wing R -1788050606 BodyPartRoosterBrownBody Body Part Rooster Brown Body -382239104 BodyPartRoosterBrownHead Body Part Rooster Brown Head --96134741 BodyPartRoosterBrownLegL Body Part Rooster Brown Leg) -4859080 BodyPartRoosterBrownLegR Body Part Rooster Brown Leg R --854801599 BodyPartRoosterBrownTail Body Part Rooster Brown Tail --925826430 BodyPartRoosterBrownWingL Body Part Rooster Brown Wing) -853426145 BodyPartRoosterBrownWingR Body Part Rooster Brown Wing R -1582746610 Carbon Carbon --1976947556 CardboardBox Cardboard Box --1634532552 CartridgeAccessController Cartridge (Access Controller) --1550278665 CartridgeAtmosAnalyser Atmos Analyzer --932136011 CartridgeConfiguration Configuration --1462180176 CartridgeElectronicReader eReader --1957063345 CartridgeGPS GPS -872720793 CartridgeGuide Guide --1116110181 CartridgeMedicalAnalyser Medical Analyzer -1606989119 CartridgeNetworkAnalyser Network Analyzer --1768732546 CartridgeOreScanner Ore Scanner -1738236580 CartridgeOreScannerColor Ore Scanner (Color) -1101328282 CartridgePlantAnalyser Cartridge Plant Analyser -81488783 CartridgeTracker Tracker -294335127 Character Character -1633663176 CircuitboardAdvAirlockControl Advanced Airlock -725140769 CircuitboardAdvancedAirlockControl Advanced Airlock -1618019559 CircuitboardAirControl Air Control -912176135 CircuitboardAirlockControl Airlock --412104504 CircuitboardCameraDisplay Camera Display -855694771 CircuitboardDoorControl Door Control --82343730 CircuitboardGasDisplay Gas Display -1344368806 CircuitboardGraphDisplay Graph Display -1633074601 CircuitboardHashDisplay Hash Display --1134148135 CircuitboardModeControl Mode Control --1923778429 CircuitboardPowerControl Power Control --2044446819 CircuitboardShipDisplay Ship Display -2020180320 CircuitboardSolarControl Solar Control -1702246124 Cobalt Cobalt -557517660 ColorBlue Blue Coloring -2129955242 ColorGreen Green Coloring -1728153015 ColorOrange Orange Coloring -667001276 ColorRed Red Coloring --1430202288 ColorYellow Yellow Coloring -917709227 CompositeFloorGrating1 Composite Floor Grating (Type 1) --1346736111 CompositeFloorGrating2 Composite Floor Grating (Type 2) -1228794916 CompositeRollCover Composite Roll Cover --1399197262 CompositeWallPanelling1 Composite Wall Panelling --786918288 CompositeWallPanelling10 Composite Wall Panelling 10 --1507875610 CompositeWallPanelling11 Composite Wall Panelling 11 -1058469212 CompositeWallPanelling12 Composite Wall Panelling 12 -1209124298 CompositeWallPanelling13 Composite Wall Panelling 13 --696954775 CompositeWallPanelling14 Composite Wall Panelling 14 --1586339585 CompositeWallPanelling15 Composite Wall Panelling 15 -947597637 CompositeWallPanelling16 Composite Wall Panelling 16 -1333526995 CompositeWallPanelling17 Composite Wall Panelling 17 --540861374 CompositeWallPanelling18 Composite Wall Panelling 18 --1463538476 CompositeWallPanelling19 Composite Wall Panelling 19 -898670600 CompositeWallPanelling2 Composite Wall Panelling 2 --97138765 CompositeWallPanelling20 Composite Wall Panelling 20 --1926039771 CompositeWallPanelling21 Composite Wall Panelling 21 -1117229214 CompositeWallPanelling3 Composite Wall Panelling 3 --588053187 CompositeWallPanelling4 Composite Wall Panelling 4 --1410058837 CompositeWallPanelling5 Composite Wall Panelling 5 -855467025 CompositeWallPanelling6 Composite Wall Panelling 6 -1174033543 CompositeWallPanelling7 Composite Wall Panelling 7 --716879594 CompositeWallPanelling8 Composite Wall Panelling 8 --1572701824 CompositeWallPanelling9 Composite Wall Panelling 9 -1731241392 Constantan Constantan --1172078909 Copper Copper -1550709753 Corn Corn -1259154447 Corner1 Corner -8709219 CrateMkII Crate Mk II --1865671034 Cube Cube -1531087544 DecayedFood Decayed Food --1844430312 DeviceLfoVolume Low frequency oscillator -1762696475 DeviceStepUnit Device Step Unit -519913639 DynamicAirConditioner Portable Air Conditioner -1941079206 DynamicCrate Dynamic Crate -1404648592 DynamicCrateBuildingSupplies Crate (Building Supplies) --746362430 DynamicCrateCableSupplies Crate (Cabling Supplies) -166707648 DynamicCrateConveyorSupplies Crate (Conveyor Supplies) --282237045 DynamicCratePipeSupplies Crate (Pipe Supplies) --2085885850 DynamicGPR Ground Penetrating Radar (GPR) --1713611165 DynamicGasCanisterAir Portable Gas Tank (Air) --322413931 DynamicGasCanisterCarbonDioxide Portable Gas Tank (CO2) --1741267161 DynamicGasCanisterEmpty Portable Gas Tank --817051527 DynamicGasCanisterFuel Portable Gas Tank (Fuel) -121951301 DynamicGasCanisterNitrogen Portable Gas Tank (Nitrogen) -30727200 DynamicGasCanisterNitrousOxide Portable Gas Tank (Nitrous Oxide) -1360925836 DynamicGasCanisterOxygen Portable Gas Tank (Oxygen) -396065382 DynamicGasCanisterPollutants Portable Gas Tank (Pollutants) --8883951 DynamicGasCanisterRocketFuel Dynamic Gas Canister Rocket Fuel -108086870 DynamicGasCanisterVolatiles Portable Gas Tank (Volatiles) -197293625 DynamicGasCanisterWater Portable Liquid Tank (Water) --386375420 DynamicGasTankAdvanced Gas Tank Mk II --1264455519 DynamicGasTankAdvancedOxygen Portable Gas Tank Mk II (Oxygen) -1637373684 DynamicGasTankAdvancedWater Portable Liquid Tank Mk II (Water) --82087220 DynamicGenerator Portable Generator -587726607 DynamicHydroponics Portable Hydroponics --21970188 DynamicLight Portable Light --1199074750 DynamicLightNetworkTest Dynamic Light Network Test --1939209112 DynamicLiquidCanisterEmpty Portable Liquid Tank -2130739600 DynamicMKIILiquidCanisterEmpty Portable Liquid Tank Mk II --319510386 DynamicMKIILiquidCanisterWater Portable Liquid Tank Mk II (Water) --1842190124 DynamicPortal Dynamic Portal -755048589 DynamicScrubber Portable Air Scrubber -106953348 DynamicSkeleton Skeleton -1275592521 EffectSplatEgg Effect Splat Egg -1887084450 Egg Egg --311170652 ElectronicPrinterMod Electronic Printer Mod -478264742 Electrum Electrum --110788403 ElevatorCarrage Elevator --1263359062 EntityAlien Entity Alien -1730165908 EntityChick Entity Chick -334097180 EntityChickenBrown Entity Chicken Brown -1010807532 EntityChickenWhite Entity Chicken White --1536144399 EntityGraylien Entity Graylien -966959649 EntityRoosterBlack Entity Rooster Black --583103395 EntityRoosterBrown Entity Rooster Brown --865687737 Fenoxitone Fenoxitone -1517856652 Fertilizer Fertilizer --86315541 FireArmSMG Fire Arm SMG -1845441951 Flag_ODA_10m Flag (ODA 10m) -1159126354 Flag_ODA_4m Flag (ODA 4m) -1998634960 Flag_ODA_6m Flag (ODA 6m) --375156130 Flag_ODA_8m Flag (ODA 8m) -118685786 FlareGun Flare Gun --811006991 Flour Flour -1122161317 GasRocketEngineBasic Gas Rocket Engine Basic -1397815367 GasTankAir Gas Tank (Air) --409226641 Gold Gold -1840108251 H2Combustor H2 Combustor -247238062 Handgun Handgun -1254383185 HandgunMagazine Handgun Magazine -2019732679 Hastelloy Hastelloy --857713709 HumanSkull Human Skull -2003628602 Hydrocarbon Hydrocarbon --73796547 ImGuiCircuitboardAirlockControl Airlock (Experimental) --586072179 Inconel Inconel --1905065374 InsulatedLiquidPipeCorner Insulated Liquid Pipe Corner -1778779251 InsulatedLiquidPipeCrossJunction Insulated Liquid Pipe Cross Junction --1531664359 InsulatedLiquidPipeCrossJunction3 Insulated Liquid Pipe Cross Junction3 -986725818 InsulatedLiquidPipeCrossJunction4 Insulated Liquid Pipe Cross Junction4 -1305939244 InsulatedLiquidPipeCrossJunction5 Insulated Liquid Pipe Cross Junction5 --723624810 InsulatedLiquidPipeCrossJunction6 Insulated Liquid Pipe Cross Junction6 -415264035 InsulatedLiquidPipeJunction Insulated Liquid Pipe Junction --916909854 InsulatedLiquidPipeStraight Insulated Liquid Pipe Straight --626453759 Invar Invar --666742878 Iron Iron --842048328 ItemActiveVent Kit (Active Vent) -1722785341 ItemAdvancedTablet Advanced Tablet -176446172 ItemAlienMushroom Alien Mushroom --9559091 ItemAmmoBox Ammo Box -201215010 ItemAngleGrinder Angle Grinder -1385062886 ItemArcWelder Arc Welder -1757673317 ItemAreaPowerControl Kit (Power Controller) -412924554 ItemAstroloyIngot Ingot (Astroloy) --1662476145 ItemAstroloySheets Astroloy Sheets -789015045 ItemAuthoringTool Authoring Tool --1731627004 ItemAuthoringToolRocketNetwork --1262580790 ItemBasketBall Basket Ball -700133157 ItemBatteryCell Battery Cell (Small) --459827268 ItemBatteryCellLarge Battery Cell (Large) -544617306 ItemBatteryCellNuclear Battery Cell (Nuclear) --1866880307 ItemBatteryCharger Kit (Battery Charger) -1008295833 ItemBatteryChargerSmall Battery Charger Small --869869491 ItemBeacon Tracking Beacon --831480639 ItemBiomass Biomass -954141841 ItemBook Book -893514943 ItemBreadLoaf Bread Loaf --1792787349 ItemCableAnalyser Kit (Cable Analyzer) --466050668 ItemCableCoil Cable Coil -2060134443 ItemCableCoilHeavy Cable Coil (Heavy) -195442047 ItemCableFuse Kit (Cable Fuses) --2104175091 ItemCannedCondensedMilk Canned Condensed Milk --999714082 ItemCannedEdamame Canned Edamame --1344601965 ItemCannedMushroom Canned Mushroom -1161510063 ItemCannedPowderedEggs Canned Powdered Eggs --1185552595 ItemCannedRicePudding Canned Rice Pudding -791746840 ItemCerealBar Cereal Bar -252561409 ItemCharcoal Charcoal --772542081 ItemChemLightBlue Chem Light (Blue) --597479390 ItemChemLightGreen Chem Light (Green) --525810132 ItemChemLightRed Chem Light (Red) -1312166823 ItemChemLightWhite Chem Light (White) -1224819963 ItemChemLightYellow Chem Light (Yellow) --869697826 ItemClothingBagOveralls_Aus Overalls (Australia) -611886665 ItemClothingBagOveralls_Brazil Overalls (Brazil) -1265354377 ItemClothingBagOveralls_Canada Overalls (Canada) --271773907 ItemClothingBagOveralls_China Overalls (China) -1969872429 ItemClothingBagOveralls_EU Overalls (EU) -670416861 ItemClothingBagOveralls_France Overalls (France) -1858014029 ItemClothingBagOveralls_Germany Overalls (Germany) --1694123145 ItemClothingBagOveralls_Japan Overalls (Japan) --1309808369 ItemClothingBagOveralls_Korea Overalls (Korea) -102898295 ItemClothingBagOveralls_NZ Overalls (NZ) -520003812 ItemClothingBagOveralls_Russia Overalls (Russia) --265868019 ItemClothingBagOveralls_SouthAfrica Overalls (South Africa) --979046113 ItemClothingBagOveralls_UK Overalls (UK) --691508919 ItemClothingBagOveralls_US Overalls (US) --198158955 ItemClothingBagOveralls_Ukraine Overalls (Ukraine) -1724793494 ItemCoalOre Ore (Coal) --1778339150 ItemCobaltIngot Ingot (Cobalt) --983091249 ItemCobaltOre Ore (Cobalt) -1800622698 ItemCoffeeMug Coffee Mug --954489473 ItemCompositeFloorGrating Composite Floor Grating -1058547521 ItemConstantanIngot Ingot (Constantan) -1715917521 ItemCookedCondensedMilk Condensed Milk -1344773148 ItemCookedCorn Cooked Corn --1076892658 ItemCookedMushroom Cooked Mushroom --1712264413 ItemCookedPowderedEggs Powdered Eggs -1849281546 ItemCookedPumpkin Cooked Pumpkin -2013539020 ItemCookedRice Cooked Rice -1353449022 ItemCookedSoybean Cooked Soybean --709086714 ItemCookedTomato Cooked Tomato --404336834 ItemCopperIngot Ingot (Copper) --707307845 ItemCopperOre Ore (Copper) -258339687 ItemCorn Corn -545034114 ItemCornSoup Corn Soup --1756772618 ItemCreditCard Credit Card -215486157 ItemCropHay Hay -856108234 ItemCrowbar Crowbar -1005843700 ItemDataDisk Data Disk --1958662275 ItemDecorFern Decorative Fern -902565329 ItemDirtCanister Dirt Canister -789388065 ItemDirtCannister Dirt Cannister --1234745580 ItemDirtyOre Dirty Ore --2124435700 ItemDisposableBatteryCharger Disposable Battery Charger -2009673399 ItemDrill Hand Drill --1943134693 ItemDuctTape Duct Tape -1072914031 ItemDynamicAirCon Kit (Portable Air Conditioner) --971920158 ItemDynamicScrubber Kit (Portable Scrubber) --1202955052 ItemDynamite Dynamite --873909936 ItemEgg Egg -682727744 ItemEggBottom Egg Bottom --524289310 ItemEggCarton Egg Carton -1436756543 ItemEggTop Egg Top -731250882 ItemElectronicParts Electronic Parts -502280180 ItemElectrumIngot Ingot (Electrum) --351438780 ItemEmergencyAngleGrinder Emergency Angle Grinder --1056029600 ItemEmergencyArcWelder Emergency Arc Welder -976699731 ItemEmergencyCrowbar Emergency Crowbar --2052458905 ItemEmergencyDrill Emergency Drill -1791306431 ItemEmergencyEvaSuit Emergency Eva Suit -350596352 ItemEmergencyHelmet Emergency Helmet --1061510408 ItemEmergencyPickaxe Emergency Pickaxe -266099983 ItemEmergencyScrewdriver Emergency Screwdriver -205916793 ItemEmergencySpaceHelmet Emergency Space Helmet -1661941301 ItemEmergencyToolBelt Emergency Tool Belt -2102803952 ItemEmergencyWireCutters Emergency Wire Cutters -162553030 ItemEmergencyWrench Emergency Wrench -1013818348 ItemEmptyCan Empty Can -1677018918 ItemEvaSuit Eva Suit -235361649 ItemExplosive Remote Explosive --233482317 ItemExplosiveBasic Explosive Basic -892110467 ItemFern Fern --383972371 ItemFertilizedEgg Egg -266654416 ItemFilterFern Darga Fern -1578288856 ItemFireExtinguisher Fire Extinguisher -2011191088 ItemFlagSmall Kit (Small Flag) --2107840748 ItemFlashingLight Kit (Flashing Light) --838472102 ItemFlashlight Flashlight --665995854 ItemFlour Flour --1573623434 ItemFlowerBlue Flower (Blue) --1513337058 ItemFlowerGreen Flower (Green) --1411986716 ItemFlowerOrange Flower (Orange) --81376085 ItemFlowerRed Flower (Red) -1712822019 ItemFlowerYellow Flower (Yellow) --57608687 ItemFrenchFries Canned French Fries -1371786091 ItemFries French Fries --767685874 ItemGasCanisterCarbonDioxide Canister (CO2) -42280099 ItemGasCanisterEmpty Canister --1014695176 ItemGasCanisterFuel Canister (Fuel) -2145068424 ItemGasCanisterNitrogen Canister (Nitrogen) --1712153401 ItemGasCanisterNitrousOxide Gas Canister (Sleeping) --1152261938 ItemGasCanisterOxygen Canister (Oxygen) --1552586384 ItemGasCanisterPollutants Canister (Pollutants) --668314371 ItemGasCanisterSmart Gas Canister (Smart) --472094806 ItemGasCanisterVolatiles Canister (Volatiles) --1854861891 ItemGasCanisterWater Liquid Canister (Water) -1635000764 ItemGasFilterCarbonDioxide Filter (Carbon Dioxide) --185568964 ItemGasFilterCarbonDioxideInfinite Catalytic Filter (Carbon Dioxide) -1876847024 ItemGasFilterCarbonDioxideL Heavy Filter (Carbon Dioxide) -416897318 ItemGasFilterCarbonDioxideM Medium Filter (Carbon Dioxide) -632853248 ItemGasFilterNitrogen Filter (Nitrogen) -152751131 ItemGasFilterNitrogenInfinite Catalytic Filter (Nitrogen) --1387439451 ItemGasFilterNitrogenL Heavy Filter (Nitrogen) --632657357 ItemGasFilterNitrogenM Medium Filter (Nitrogen) --1247674305 ItemGasFilterNitrousOxide Filter (Nitrous Oxide) --123934842 ItemGasFilterNitrousOxideInfinite Catalytic Filter (Nitrous Oxide) -465267979 ItemGasFilterNitrousOxideL Heavy Filter (Nitrous Oxide) -1824284061 ItemGasFilterNitrousOxideM Medium Filter (Nitrous Oxide) --721824748 ItemGasFilterOxygen Filter (Oxygen) --1055451111 ItemGasFilterOxygenInfinite Catalytic Filter (Oxygen) --1217998945 ItemGasFilterOxygenL Heavy Filter (Oxygen) --1067319543 ItemGasFilterOxygenM Medium Filter (Oxygen) -1915566057 ItemGasFilterPollutants Filter (Pollutant) --503738105 ItemGasFilterPollutantsInfinite Catalytic Filter (Pollutants) -1959564765 ItemGasFilterPollutantsL Heavy Filter (Pollutants) -63677771 ItemGasFilterPollutantsM Medium Filter (Pollutants) -15011598 ItemGasFilterVolatiles Filter (Volatiles) --1916176068 ItemGasFilterVolatilesInfinite Catalytic Filter (Volatiles) -1255156286 ItemGasFilterVolatilesL Heavy Filter (Volatiles) -1037507240 ItemGasFilterVolatilesM Medium Filter (Volatiles) --1993197973 ItemGasFilterWater Filter (Water) --1678456554 ItemGasFilterWaterInfinite Catalytic Filter (Water) -2004969680 ItemGasFilterWaterL Heavy Filter (Water) -8804422 ItemGasFilterWaterM Medium Filter (Water) -1717593480 ItemGasSensor Kit (Gas Sensor) --2113012215 ItemGasTankStorage Kit (Canister Storage) -1588896491 ItemGlassSheets Glass Sheets --1068925231 ItemGlasses Glasses -226410516 ItemGoldIngot Ingot (Gold) --1348105509 ItemGoldOre Ore (Gold) -1544275894 ItemGrenade Hand Grenade -470636008 ItemHEMDroidRepairKit HEMDroid Repair Kit -745978059 ItemHandSanitizer Hand Sanitizer -374891127 ItemHardBackpack Hardsuit Backpack --412551656 ItemHardJetpack Hardsuit Jetpack -900366130 ItemHardMiningBackPack Hard Mining Backpack --1758310454 ItemHardSuit Hardsuit --84573099 ItemHardsuitHelmet Hardsuit Helmet -1579842814 ItemHastelloyIngot Ingot (Hastelloy) -299189339 ItemHat Hat --1075983932 ItemHealPill Heal Pill -998653377 ItemHighVolumeGasCanisterEmpty High Volume Gas Canister --1117581553 ItemHorticultureBelt Horticulture Belt --1193543727 ItemHydroponicTray Kit (Hydroponic Tray) --1555582482 ItemIcarusHelmet Icarus Helmet --2112405954 ItemIcarusSuit Icarus Suit -1217489948 ItemIce Ice (Water) -890106742 ItemIgniter Kit (Igniter) --787796599 ItemInconelIngot Ingot (Inconel) --299044195 ItemInsulatedTankConnector Insulated (Tank Connector) --122188311 ItemInsulatedTankConnectorLiquid Kit (Insulated Tank Connector Liquid) -897176943 ItemInsulation Insulation --744098481 ItemIntegratedCircuit10 Integrated Circuit (IC10) --297990285 ItemInvarIngot Ingot (Invar) -1225836666 ItemIronFrames Iron Frames --1301215609 ItemIronIngot Ingot (Iron) -1758427767 ItemIronOre Ore (Iron) --487378546 ItemIronSheets Iron Sheets -1969189000 ItemJetpackBasic Jetpack Basic -496830914 ItemKitAIMeE Kit (AIMeE) -513258369 ItemKitAccessBridge Kit (Access Bridge) --1431998347 ItemKitAdvancedComposter Kit (Advanced Composter) --616758353 ItemKitAdvancedFurnace Kit (Advanced Furnace) --598545233 ItemKitAdvancedPackagingMachine Kit (Advanced Packaging Machine) -964043875 ItemKitAirlock Kit (Airlock) -682546947 ItemKitAirlockGate Kit (Hangar Door) --98995857 ItemKitArcFurnace Kit (Arc Furnace) -1222286371 ItemKitAtmospherics Kit (Atmospherics) --1985198635 ItemKitAutoMiner Kit (Auto Miner) -1668815415 ItemKitAutoMinerSmall Kit (Autominer Small) --1753893214 ItemKitAutolathe Kit (Autolathe) --1931958659 ItemKitAutomatedOven Kit (Automated Oven) -148305004 ItemKitBasket Kit (Basket) -1406656973 ItemKitBattery Kit (Battery) --21225041 ItemKitBatteryLarge Kit (Battery Large) -249073136 ItemKitBeacon Kit (Beacon) --1241256797 ItemKitBeds Kit (Beds) --1755116240 ItemKitBlastDoor Kit (Blast Door) -578182956 ItemKitCentrifuge Kit (Centrifuge) --1394008073 ItemKitChairs Kit (Chairs) -1025254665 ItemKitChute Kit (Basic Chutes) --876560854 ItemKitChuteUmbilical Kit (Chute Umbilical) --1470820996 ItemKitCompositeCladding Kit (Cladding) -1182412869 ItemKitCompositeFloorGrating Kit (Floor Grating) -1990225489 ItemKitComputer Kit (Computer) --1241851179 ItemKitConsole Kit (Consoles) --581253863 ItemKitConveyor Kit (Conveyors) -429365598 ItemKitCrate Kit (Crate) --1585956426 ItemKitCrateMkII Kit (Crate Mk II) --551612946 ItemKitCrateMount Kit (Container Mount) --545234195 ItemKitCryoTube Kit (Cryo Tube) --1340655007 ItemKitCube Kit (Cube) --1825913764 ItemKitDebug Kit (Debug) --1935075707 ItemKitDeepMiner Kit (Deep Miner) -77421200 ItemKitDockingPort Kit (Docking Port) -168615924 ItemKitDoor Kit (Door) --1743663875 ItemKitDrinkingFountain Kit (Drinking Fountain) -1584075627 ItemKitDuct Kit (Duct) --1061945368 ItemKitDynamicCanister Kit (Portable Gas Tank) -1533501495 ItemKitDynamicGasTankAdvanced Kit (Portable Gas Tank Mk II) --732720413 ItemKitDynamicGenerator Kit (Portable Generator) --1861154222 ItemKitDynamicHydroponics Kit (Portable Hydroponics) -375541286 ItemKitDynamicLiquidCanister Kit (Portable Liquid Tank) --638019974 ItemKitDynamicMKIILiquidCanister Kit (Portable Liquid Tank Mk II) -1603046970 ItemKitElectricUmbilical Kit (Power Umbilical) --1181922382 ItemKitElectronicsPrinter Kit (Electronics Printer) --945806652 ItemKitElevator Kit (Elevator) --1036468582 ItemKitEngine Kit (Engines) -755302726 ItemKitEngineLarge Kit (Engine Large) -1969312177 ItemKitEngineMedium Kit (Engine Medium) -19645163 ItemKitEngineSmall Kit (Engine Small) -1587787610 ItemKitEvaporationChamber Kit (Phase Change Device) -750443106 ItemKitFabrication Kit (Fabrication) -1500664489 ItemKitFabricator Kit (Fabricator) -1701764190 ItemKitFlagODA Kit (ODA Flag) --1168199498 ItemKitFridgeBig Kit (Fridge Large) -1661226524 ItemKitFridgeSmall Kit (Fridge Small) --806743925 ItemKitFurnace Kit (Furnace) -1162905029 ItemKitFurniture Kit (Furniture) --366262681 ItemKitFuselage Kit (Fuselage) -1438837103 ItemKitFuselageTypeA Kit (Fuselage Type A) --859064107 ItemKitFuselageTypeB Kit (Fuselage Type B) --1144223677 ItemKitFuselageTypeC Kit (Fuselage Type C) -631774688 ItemKitFuselageTypeD Kit (Fuselage Type D) -377745425 ItemKitGasGenerator Kit (Gas Fuel Generator) --1867280568 ItemKitGasUmbilical Kit (Gas Umbilical) --375184378 ItemKitGenerator Kit (Generator) -206848766 ItemKitGovernedGasRocketEngine Kit (Pumped Gas Rocket Engine) -1354070388 ItemKitGovernedLiquidRocketEngine Kit (Pumped Liquid Rocket Engine) --2140672772 ItemKitGroundTelescope Kit (Telescope) -341030083 ItemKitGrowLight Kit (Grow Light) -180482893 ItemKitGyroscope Kit (Gyroscope) --1022693454 ItemKitHarvie Kit (Harvie) --1710540039 ItemKitHeatExchanger Kit Heat Exchanger -844391171 ItemKitHorizontalAutoMiner Kit (OGRE) --2098556089 ItemKitHydraulicPipeBender Kit (Hydraulic Pipe Bender) --927931558 ItemKitHydroponicAutomated Kit (Automated Hydroponics) -2057179799 ItemKitHydroponicStation Kit (Hydroponic Station) -288111533 ItemKitIceCrusher Kit (Ice Crusher) -2067655311 ItemKitInsulatedLiquidPipe Kit (Insulated Liquid Pipe) -452636699 ItemKitInsulatedPipe Kit (Insulated Pipe) --1708400347 ItemKitInsulatedWaterPipe Insulated Water Pipe Kit -1935945891 ItemKitInteriorDoors Kit (Interior Doors) -489494578 ItemKitLadder Kit (Ladder) --1793485995 ItemKitLandingPad Kit (Landing Pad) -1817007843 ItemKitLandingPadAtmos Kit (Landing Pad Atmospherics) -293581318 ItemKitLandingPadBasic Kit (Landing Pad Basic) --1267511065 ItemKitLandingPadWaypoint Kit (Landing Pad Runway) -450164077 ItemKitLargeDirectHeatExchanger Kit (Large Direct Heat Exchanger) -847430620 ItemKitLargeExtendableRadiator Kit (Large Extendable Radiator) --2039971217 ItemKitLargeSatelliteDish Kit (Large Satellite Dish) --1854167549 ItemKitLaunchMount Kit (Launch Mount) --1791423603 ItemKitLaunchPad Kit (Launch Pad) --174523552 ItemKitLaunchTower Kit (Rocket Launch Tower) -1951126161 ItemKitLiquidRegulator Kit (Liquid Regulator) --799849305 ItemKitLiquidTank Kit (Liquid Tank) -617773453 ItemKitLiquidTankInsulated Kit (Insulated Liquid Tank) --1805020897 ItemKitLiquidTurboVolumePump Kit (Turbo Volume Pump - Liquid) -1571996765 ItemKitLiquidUmbilical Kit (Liquid Umbilical) -882301399 ItemKitLocker Kit (Locker) -724972630 ItemKitLogic Kit (Logic Unit) -1512322581 ItemKitLogicCircuit Kit (IC Housing) -1997293610 ItemKitLogicInputOutput Kit (Logic I/O) --2098214189 ItemKitLogicMemory Kit (Logic Memory) -220644373 ItemKitLogicProcessor Kit (Logic Processor) -124499454 ItemKitLogicSwitch Kit (Logic Switch) -1005397063 ItemKitLogicTransmitter Kit (Logic Transmitter) -1709456101 ItemKitLowVolumeLiquidPipes Kit (Low Volume Liquid Pipe) --94545890 ItemKitLowVolumePipes Kit (Low Volume Pipe) --344968335 ItemKitMotherShipCore Kit (Mothership) --2038889137 ItemKitMusicMachines Kit (Music Machines) -313966123 ItemKitOrganicsPrinter Kit (Organics Printer) --559068873 ItemKitPassiveLargeRadiator Kit (Medium Radiator) --1752768283 ItemKitPassiveLargeRadiatorGas Kit (Medium Radiator) -1453961898 ItemKitPassiveLargeRadiatorLiquid Kit (Medium Radiator Liquid) -1546379588 ItemKitPassiveVent Kit (Passive Vent) -636112787 ItemKitPassthroughHeatExchanger Kit (CounterFlow Heat Exchanger) --2062364768 ItemKitPictureFrame Kit Picture Frame --1619793705 ItemKitPipe Kit (Pipe) --1166461357 ItemKitPipeLiquid Kit (Liquid Pipe) --827125300 ItemKitPipeOrgan Kit (Pipe Organ) -920411066 ItemKitPipeRadiator Kit (Pipe Radiator) --1697302609 ItemKitPipeRadiatorLiquid Kit (Pipe Radiator Liquid) -1934508338 ItemKitPipeUtility Kit (Pipe Utility Gas) -595478589 ItemKitPipeUtilityLiquid Kit (Pipe Utility Liquid) -2146152113 ItemKitPipeValve Kit (Pipe Valve) -119096484 ItemKitPlanter Kit (Planter) -1041148999 ItemKitPortablesConnector Kit (Portables Connector) -291368213 ItemKitPowerTransmitter Kit (Power Transmitter) --831211676 ItemKitPowerTransmitterOmni Kit (Power Transmitter Omni) -2015439334 ItemKitPoweredVent Kit (Powered Vent) --121514007 ItemKitPressureFedGasEngine Kit (Pressure Fed Gas Engine) --99091572 ItemKitPressureFedLiquidEngine Kit (Pressure Fed Liquid Engine) -123504691 ItemKitPressurePlate Kit (Trigger Plate) -1921918951 ItemKitPumpedLiquidEngine Kit (Pumped Liquid Engine) -750176282 ItemKitRailing Kit (Railing) -849148192 ItemKitRecycler Kit (Recycler) -1181371795 ItemKitRegulator Kit (Pressure Regulator) -1459985302 ItemKitReinforcedWindows Kit (Reinforced Windows) -724776762 ItemKitResearchMachine Kit Research Machine -1574688481 ItemKitRespawnPointWallMounted Kit (Respawn) -1396305045 ItemKitRocketAvionics Kit (Avionics) --314072139 ItemKitRocketBattery Kit (Rocket Battery) -479850239 ItemKitRocketCargoStorage Kit (Rocket Cargo Storage) --303008602 ItemKitRocketCelestialTracker Kit (Rocket Celestial Tracker) -721251202 ItemKitRocketCircuitHousing Kit (Rocket Circuit Housing) --1256996603 ItemKitRocketDatalink Kit (Rocket Datalink) --1811652578 ItemKitRocketFuelTanks Kit (Rocket Fuel Tanks) --1629347579 ItemKitRocketGasFuelTank Kit (Rocket Gas Fuel Tank) --368220577 ItemKitRocketLaunchPad Kit (Rocket Launch Pad) -2032027950 ItemKitRocketLiquidFuelTank Kit (Rocket Liquid Fuel Tank) --636127860 ItemKitRocketManufactory Kit (Rocket Manufactory) --867969909 ItemKitRocketMiner Kit (Rocket Miner) --1603934523 ItemKitRocketParts Rocket Internal Parts -1753647154 ItemKitRocketScanner Kit (Rocket Scanner) --932335800 ItemKitRocketTransformerSmall Kit (Transformer Small (Rocket)) -1647730352 ItemKitRockets Rocket External Parts -1827215803 ItemKitRoverFrame Kit (Rover Frame) -197243872 ItemKitRoverMKI Kit (Rover Mk I) -323957548 ItemKitSDBHopper Kit (SDB Hopper) -178422810 ItemKitSatelliteDish Kit (Medium Satellite Dish) -578078533 ItemKitSecurityPrinter Kit (Security Printer) --1776897113 ItemKitSensor Kit (Sensors) -735858725 ItemKitShower Kit (Shower) -529996327 ItemKitSign Kit (Sign) -326752036 ItemKitSleeper Kit (Sleeper) --1332682164 ItemKitSmallDirectHeatExchanger Kit (Small Direct Heat Exchanger) -1960952220 ItemKitSmallSatelliteDish Kit (Small Satellite Dish) --1924492105 ItemKitSolarPanel Kit (Solar Panel) -844961456 ItemKitSolarPanelBasic Kit (Solar Panel Basic) --528695432 ItemKitSolarPanelBasicReinforced Kit (Solar Panel Basic Heavy) --364868685 ItemKitSolarPanelReinforced Kit (Solar Panel Heavy) -1293995736 ItemKitSolidGenerator Kit (Solid Generator) -969522478 ItemKitSorter Kit (Sorter) --126038526 ItemKitSpeaker Kit (Speaker) -1013244511 ItemKitStacker Kit (Stacker) -170878959 ItemKitStairs Kit (Stairs) --1868555784 ItemKitStairwell Kit (Stairwell) -2133035682 ItemKitStandardChute Kit (Powered Chutes) --134410934 ItemKitStellarAnchor Kit (Stellar Anchor) --1821571150 ItemKitStirlingEngine Kit (Stirling Engine) --679276969 ItemKitStorage Kit (Storage) --1538229217 ItemKitStructureLaunchPad Kit (Launch Pad) --347156845 ItemKitStructureModularRocketCargo01 Kit (Modular Rocket Cargo) --34763297 ItemKitStructureModularRocketEngine01 Kit (Modular Rocket Engine) --1838947287 ItemKitStructureModularRocketFueltank01 Kit (Modular Rocket Fueltank) -1088892825 ItemKitSuitStorage Kit (Suit Storage) --1361598922 ItemKitTables Kit (Tables) -771439840 ItemKitTank Kit (Tank) -1021053608 ItemKitTankInsulated Kit (Tank Insulated) -529137748 ItemKitToolManufactory Kit (Tool Manufactory) --655661931 ItemKitTorpedoTube Kit (Torpedo Launcher) --453039435 ItemKitTransformer Kit (Transformer Large) -665194284 ItemKitTransformerSmall Kit (Transformer Small) --1590715731 ItemKitTurbineGenerator Kit (Turbine Generator) --1248429712 ItemKitTurboVolumePump Kit (Turbo Volume Pump - Gas) --479012046 ItemKitTurret Kit (Turret) --1798044015 ItemKitUprightWindTurbine Kit (Upright Wind Turbine) --2038384332 ItemKitVendingMachine Kit (Vending Machine) --1867508561 ItemKitVendingMachineRefrigerated Kit (Vending Machine Refrigerated) --1826855889 ItemKitWall Kit (Wall) -1625214531 ItemKitWallArch Kit (Arched Wall) --846838195 ItemKitWallFlat Kit (Flat Wall) --784733231 ItemKitWallGeometry Kit (Geometric Wall) --524546923 ItemKitWallIron Kit (Iron Wall) --821868990 ItemKitWallPadded Kit (Padded Wall) --210898273 ItemKitWallPanels Kit (Wall Panels) -159886536 ItemKitWaterBottleFiller Kit (Water Bottle Filler) -611181283 ItemKitWaterPurifier Kit (Water Purifier) -337505889 ItemKitWeatherStation Kit (Weather Station) --868916503 ItemKitWindTurbine Kit (Wind Turbine) -1779979754 ItemKitWindowShutter Kit (Window Shutter) --743968726 ItemLabeller Labeller -141535121 ItemLaptop Laptop -2134647745 ItemLeadIngot Ingot (Lead) --190236170 ItemLeadOre Ore (Lead) -1949076595 ItemLightSword Light Sword --185207387 ItemLiquidCanisterEmpty Liquid Canister -777684475 ItemLiquidCanisterSmart Liquid Canister (Smart) -2036225202 ItemLiquidDrain Kit (Liquid Drain) -226055671 ItemLiquidPipeAnalyzer Kit (Liquid Pipe Analyzer) --248475032 ItemLiquidPipeHeater Pipe Heater Kit (Liquid) --2126113312 ItemLiquidPipeValve Kit (Liquid Pipe Valve) --2106280569 ItemLiquidPipeVolumePump Kit (Liquid Volume Pump) -2037427578 ItemLiquidTankStorage Kit (Liquid Canister Storage) -240174650 ItemMKIIAngleGrinder Mk II Angle Grinder --2061979347 ItemMKIIArcWelder Mk II Arc Welder -1440775434 ItemMKIICrowbar Mk II Crowbar -324791548 ItemMKIIDrill Mk II Drill -388774906 ItemMKIIDuctTape Mk II Duct Tape --1875271296 ItemMKIIMiningDrill Mk II Mining Drill --2015613246 ItemMKIIScrewdriver Mk II Screwdriver --178893251 ItemMKIIWireCutters Mk II Wire Cutters -1862001680 ItemMKIIWrench Mk II Wrench -1399098998 ItemMarineBodyArmor Marine Armor -1073631646 ItemMarineHelmet Marine Helmet -1327248310 ItemMilk Milk --1650383245 ItemMiningBackPack Mining Backpack --676435305 ItemMiningBelt Mining Belt -1471707059 ItemMiningBeltAdvanced Mining Belt MK II -1470787934 ItemMiningBeltMKII Mining Belt MK II -15829510 ItemMiningCharge Mining Charge -1055173191 ItemMiningDrill Mining Drill --1663349918 ItemMiningDrillHeavy Mining Drill (Heavy) -1258187304 ItemMiningDrillPneumatic Pneumatic Mining Drill -1467558064 ItemMkIIToolbelt Tool Belt MK II --1864982322 ItemMuffin Muffin -2044798572 ItemMushroom Mushroom -982514123 ItemNVG Night Vision Goggles --1406385572 ItemNickelIngot Ingot (Nickel) -1830218956 ItemNickelOre Ore (Nickel) --1499471529 ItemNitrice Ice (Nitrice) --1805394113 ItemOxite Ice (Oxite) -238631271 ItemPassiveVent Passive Vent --1397583760 ItemPassiveVentInsulated Kit (Insulated Passive Vent) -2042955224 ItemPeaceLily Peace Lily --913649823 ItemPickaxe Pickaxe -1118069417 ItemPillHeal Pill (Medical) -418958601 ItemPillStun Pill (Paralysis) --767597887 ItemPipeAnalyizer Kit (Pipe Analyzer) --453870153 ItemPipeCorner Kit (Pipe Corner) --38898376 ItemPipeCowl Pipe Cowl --1315694144 ItemPipeCrossJunction Kit (Pipe Cross Junction) --167258062 ItemPipeCrossJunction3 Kit (Pipe 3-Way Junction) -526679303 ItemPipeCrossJunction5 Kit (Pipe 5-Way Junction) --2039665475 ItemPipeCrossJunction6 Kit (Pipe 6-Way Junction) --1532448832 ItemPipeDigitalValve Kit (Digital Valve) --1134459463 ItemPipeGasMixer Kit (Gas Mixer) --1751627006 ItemPipeHeater Pipe Heater Kit (Gas) -1366030599 ItemPipeIgniter Kit (Pipe Igniter) -391769637 ItemPipeLabel Kit (Pipe Label) --906521320 ItemPipeLiquidRadiator Kit (Liquid Radiator) -1207939683 ItemPipeMeter Kit (Pipe Meter) --1796655088 ItemPipeRadiator Kit (Radiator) --173267052 ItemPipeStraight Kit (Pipe Straight) --274679544 ItemPipeTJunction Kit (Pipe T Junction) -799323450 ItemPipeValve Kit (Pipe Valve) --1766301997 ItemPipeVolumePump Kit (Volume Pump) --1159179557 ItemPlantEndothermic_Creative Endothermic Plant Creative -851290561 ItemPlantEndothermic_Genepool1 Winterspawn (Alpha variant) --1414203269 ItemPlantEndothermic_Genepool2 Winterspawn (Beta variant) -173023800 ItemPlantSampler Plant Sampler --532672323 ItemPlantSwitchGrass Switch Grass --1208890208 ItemPlantThermogenic_Creative Thermogenic Plant Creative --177792789 ItemPlantThermogenic_Genepool1 Hades Flower (Alpha strain) -1819167057 ItemPlantThermogenic_Genepool2 Hades Flower (Beta strain) -662053345 ItemPlasticSheets Plastic Sheets -1929046963 ItemPotato Potato --2111886401 ItemPotatoBaked Baked Potato -1305806506 ItemPowderedeggs Powdered Eggs -839924019 ItemPowerConnector Kit (Power Connector) -616428336 ItemPoweredEggs Powered Eggs -1277828144 ItemPumpkin Pumpkin -62768076 ItemPumpkinPie Pumpkin Pie -1277979876 ItemPumpkinSoup Pumpkin Soup --1616308158 ItemPureIce Pure Ice Water --1251009404 ItemPureIceCarbonDioxide Pure Ice Carbon Dioxide -944530361 ItemPureIceHydrogen Pure Ice Hydrogen --1715945725 ItemPureIceLiquidCarbonDioxide Pure Ice Liquid Carbon Dioxide --1044933269 ItemPureIceLiquidHydrogen Pure Ice Liquid Hydrogen -1674576569 ItemPureIceLiquidNitrogen Pure Ice Liquid Nitrogen -1428477399 ItemPureIceLiquidNitrous Pure Ice Liquid Nitrous -541621589 ItemPureIceLiquidOxygen Pure Ice Liquid Oxygen --1748926678 ItemPureIceLiquidPollutant Pure Ice Liquid Pollutant --1306628937 ItemPureIceLiquidVolatiles Pure Ice Liquid Volatiles --1708395413 ItemPureIceNitrogen Pure Ice Nitrogen -386754635 ItemPureIceNitrous Pure Ice NitrousOxide --1150448260 ItemPureIceOxygen Pure Ice Oxygen --1755356 ItemPureIcePollutant Pure Ice Pollutant --2073202179 ItemPureIcePollutedWater Pure Ice Polluted Water --874791066 ItemPureIceSteam Pure Ice Steam --633723719 ItemPureIceVolatiles Pure Ice Volatiles -495305053 ItemRTG Kit (Creative RTG) -1817645803 ItemRTGSurvival Kit (RTG) --1641500434 ItemReagentMix Reagent Mix -678483886 ItemRemoteDetonator Remote Detonator -819096942 ItemResearchCapsule Research Capsule Blue --1352732550 ItemResearchCapsuleGreen Research Capsule Green -954947943 ItemResearchCapsuleRed Research Capsule Red -750952701 ItemResearchCapsuleYellow Research Capsule Yellow --1773192190 ItemReusableFireExtinguisher Fire Extinguisher (Reusable) -658916791 ItemRice Rice -871811564 ItemRoadFlare Road Flare -2109945337 ItemRocketMiningDrillHead Mining-Drill Head (Basic) -1530764483 ItemRocketMiningDrillHeadDurable Mining-Drill Head (Durable) -653461728 ItemRocketMiningDrillHeadHighSpeedIce Mining-Drill Head (High Speed Ice) -1440678625 ItemRocketMiningDrillHeadHighSpeedMineral Mining-Drill Head (High Speed Mineral) --380904592 ItemRocketMiningDrillHeadIce Mining-Drill Head (Ice) --684020753 ItemRocketMiningDrillHeadLongTerm Mining-Drill Head (Long Term) -1083675581 ItemRocketMiningDrillHeadMineral Mining-Drill Head (Mineral) --1198702771 ItemRocketScanningHead Rocket Scanner Head -1661270830 ItemScanner Handheld Scanner -687940869 ItemScrewdriver Screwdriver --1981101032 ItemSecurityCamera Security Camera --1176140051 ItemSensorLenses Sensor Lenses --1154200014 ItemSensorProcessingUnitCelestialScanner Sensor Processing Unit (Celestial Scanner) --1730464583 ItemSensorProcessingUnitMesonScanner Sensor Processing Unit (T-Ray Scanner) --1219128491 ItemSensorProcessingUnitOreScanner Sensor Processing Unit (Ore Scanner) --290196476 ItemSiliconIngot Ingot (Silicon) -1103972403 ItemSiliconOre Ore (Silicon) --929742000 ItemSilverIngot Ingot (Silver) --916518678 ItemSilverOre Ore (Silver) --82508479 ItemSolderIngot Ingot (Solder) --365253871 ItemSolidFuel Solid Fuel (Hydrocarbon) --1883441704 ItemSoundCartridgeBass Sound Cartridge Bass --1901500508 ItemSoundCartridgeDrums Sound Cartridge Drums --1174735962 ItemSoundCartridgeLeads Sound Cartridge Leads --1971419310 ItemSoundCartridgeSynth Sound Cartridge Synth -1387403148 ItemSoyOil Soy Oil -1924673028 ItemSoybean Soybean --1737666461 ItemSpaceCleaner Space Cleaner -714830451 ItemSpaceHelmet Space Helmet -675686937 ItemSpaceIce Space Ice -2131916219 ItemSpaceOre Dirty Ore --1260618380 ItemSpacepack Spacepack --688107795 ItemSprayCanBlack Spray Paint (Black) --498464883 ItemSprayCanBlue Spray Paint (Blue) -845176977 ItemSprayCanBrown Spray Paint (Brown) --1880941852 ItemSprayCanGreen Spray Paint (Green) --1645266981 ItemSprayCanGrey Spray Paint (Grey) -1918456047 ItemSprayCanKhaki Spray Paint (Khaki) --158007629 ItemSprayCanOrange Spray Paint (Orange) -1344257263 ItemSprayCanPink Spray Paint (Pink) -30686509 ItemSprayCanPurple Spray Paint (Purple) -1514393921 ItemSprayCanRed Spray Paint (Red) -498481505 ItemSprayCanWhite Spray Paint (White) -995468116 ItemSprayCanYellow Spray Paint (Yellow) -1289723966 ItemSprayGun Spray Gun --1448105779 ItemSteelFrames Steel Frames --654790771 ItemSteelIngot Ingot (Steel) -38555961 ItemSteelSheets Steel Sheets --2038663432 ItemStelliteGlassSheets Stellite Glass Sheets --1897868623 ItemStelliteIngot Ingot (Stellite) --1335056202 ItemSugarCane Sugar Cane -318109626 ItemSuitStorage Kit (Suit Storage) --229808600 ItemTablet Handheld Tablet --1782380726 ItemTankConnector Kit (Tank Connector) --1579112308 ItemTankConnectorLiquid Kit (Liquid Tank Connector) -111280987 ItemTerrainManipulator Terrain Manipulator --998592080 ItemTomato Tomato -688734890 ItemTomatoSoup Tomato Soup --355127880 ItemToolBelt Tool Belt --800947386 ItemTropicalPlant Tropical Lily --1516581844 ItemUraniumOre Ore (Uranium) -1253102035 ItemVolatiles Ice (Volatiles) -1707117569 ItemVoxelTool Voxel Tool --1567752627 ItemWallCooler Kit (Wall Cooler) -1880134612 ItemWallHeater Kit (Wall Heater) -1108423476 ItemWallLight Kit (Lights) -156348098 ItemWaspaloyIngot Ingot (Waspaloy) -1798764247 ItemWasteIngot Ingot (Waste) -107741229 ItemWaterBottle Water Bottle --1542288894 ItemWaterBottleFiller Water Bottle Filler -309693520 ItemWaterPipeDigitalValve Kit (Liquid Digital Valve) --1404370810 ItemWaterPipeHeater Pipe Heater Kit (Liquid) --90898877 ItemWaterPipeMeter Kit (Liquid Pipe Meter) --1721846327 ItemWaterWallCooler Kit (Liquid Wall Cooler) --598730959 ItemWearLamp Headlamp --2066892079 ItemWeldingTorch Welding Torch --1057658015 ItemWheat Wheat -1535854074 ItemWireCutters Wire Cutters --504717121 ItemWirelessBatteryCellExtraLarge Wireless Battery Cell Extra Large --777592237 ItemWreckage1 Wreckage -1219474409 ItemWreckage2 Wreckage -1068008319 ItemWreckage3 Wreckage --1580460324 ItemWreckage4 Wreckage -1443414563 ItemWreckageActiveVent1 Wreckage Active Vent --1826023284 ItemWreckageAirConditioner1 Wreckage Air Conditioner -169888054 ItemWreckageAirConditioner2 Wreckage Air Conditioner --486036403 ItemWreckageAirlock1 Wreckage Airlock -2047802871 ItemWreckageAirlock2 Wreckage Airlock -479890266 ItemWreckageArcFurnace1 Wreckage Arc Furnace --2053907744 ItemWreckageArcFurnace2 Wreckage Arc Furnace --225121674 ItemWreckageArcFurnace3 Wreckage Arc Furnace --1542823944 ItemWreckageAreaPowerControl1 Wreckage Area Power Control -1023610434 ItemWreckageAreaPowerControl2 Wreckage Area Power Control -1990336561 ItemWreckageAreaPowerControlReversed1 Wreckage Area Power Control Reversed --273976949 ItemWreckageAreaPowerControlReversed2 Wreckage Area Power Control Reversed --1207279124 ItemWreckageAutolathe1 Wreckage Autolathe -553857110 ItemWreckageAutolathe2 Wreckage Autolathe -1443102912 ItemWreckageAutolathe3 Wreckage Autolathe --933194397 ItemWreckageAutolathe4 Wreckage Autolathe --1083726347 ItemWreckageAutolathe5 Wreckage Autolathe -644805711 ItemWreckageAutolathe6 Wreckage Autolathe -1365886169 ItemWreckageAutolathe7 Wreckage Autolathe --1509194433 ItemWreckageBlastDoor1 Wreckage Blast Door -1057150085 ItemWreckageBlastDoor2 Wreckage Blast Door --208145314 ItemWreckageCentrifuge1 Wreckage Centrifuge -1788782052 ItemWreckageCentrifuge2 Wreckage Centrifuge -496604530 ItemWreckageCentrifuge3 Wreckage Centrifuge --2080571183 ItemWreckageCentrifuge4 Wreckage Centrifuge --184930233 ItemWreckageCentrifuge5 Wreckage Centrifuge -50205563 ItemWreckageCoalGenerator1 Wreckage Coal Generator --1678294335 ItemWreckageCoalGenerator2 Wreckage Coal Generator --319786409 ItemWreckageCoalGenerator3 Wreckage Coal Generator -2077142147 ItemWreckageCompositeDoor1 Wreckage Composite Door --490209991 ItemWreckageCompositeDoor2 Wreckage Composite Door --1782526545 ItemWreckageCompositeDoor3 Wreckage Composite Door -1635489893 ItemWreckageCompositeDoorGlass1 Wreckage Composite Door Glass --126694945 ItemWreckageCompositeDoorGlass2 Wreckage Composite Door Glass --1109808524 ItemWreckageConstructor Debug Wreckage Constructor -2053466622 ItemWreckageElectrolysis1 Wreckage Electrolysis --479446972 ItemWreckageElectrolysis2 Wreckage Electrolysis --299987533 ItemWreckageElectronicsPrinter1 Wreckage Electronics Printer1 -1998052361 ItemWreckageElectronicsPrinter2 Wreckage Electronics Printer2 -1109151 ItemWreckageElectronicsPrinter3 Wreckage Electronics Printer3 --1636533956 ItemWreckageElectronicsPrinter4 Wreckage Electronics Printer4 --378320470 ItemWreckageElectronicsPrinter5 Wreckage Electronics Printer5 -1887049744 ItemWreckageElectronicsPrinter6 Wreckage Electronics Printer6 -807820730 ItemWreckageElevatorLevelFront1 Wreckage Elevator Level Front --1456534528 ItemWreckageElevatorLevelFront2 Wreckage Elevator Level Front --441091249 ItemWreckageElevatorShaftIndustrial1 Wreckage Elevator Shaft Industrial -2092706549 ItemWreckageElevatorShaftIndustrial2 Wreckage Elevator Shaft Industrial -196811363 ItemWreckageElevatorShaftIndustrial3 Wreckage Elevator Shaft Industrial --690094117 ItemWreckageFlashingLight1 Wreckage Flashing Light -1339338337 ItemWreckageFlashingLight2 Wreckage Flashing Light -1504810883 ItemWreckageGasGenerator1 Wreckage Gas Generator --1061632455 ItemWreckageGasGenerator2 Wreckage Gas Generator --2111000740 ItemWreckageH2Combustor1 Wreckage H2 Combustor -697994371 ItemWreckageHydroponicsAutomatic1 Wreckage Hydroponics Automatic --1332486855 ItemWreckageHydroponicsAutomatic2 Wreckage Hydroponics Automatic --946541137 ItemWreckageHydroponicsAutomatic3 Wreckage Hydroponics Automatic --978136707 ItemWreckageHydroponicsStation1 Wreckage Hydroponics Station -1555792071 ItemWreckageHydroponicsStation2 Wreckage Hydroponics Station --310178617 ItemWreckageHydroponicsTray1 Wreckage Hydroponics Tray --997763 ItemWreckageLargeExtendableRadiator01 Wreckage Large Extendable Radiator -1494744304 ItemWreckageLight1 Wreckage Light --1071731382 ItemWreckageLight2 Wreckage Light --1932417031 ItemWreckageLightLongAngled1 Wreckage Light Long Angled -366540355 ItemWreckageLightLongAngled2 Wreckage Light Long Angled -512740782 ItemWreckageLightLongWide1 Wreckage Light Long Wide --2021221356 ItemWreckageLightLongWide2 Wreckage Light Long Wide --378382939 ItemWreckagePassiveVent1 Wreckage Passive Vent --1755613692 ItemWreckageRecycler1 Wreckage Recycler -240265150 ItemWreckageRecycler2 Wreckage Recycler -2035619624 ItemWreckageRecycler3 Wreckage Recycler --416185717 ItemWreckageRecycler4 Wreckage Recycler --1875463651 ItemWreckageRecycler5 Wreckage Recycler -155181991 ItemWreckageRecycler6 Wreckage Recycler -514013016 ItemWreckageSDBSilo1 Wreckage SDB Silo --2018875678 ItemWreckageSDBSilo2 Wreckage SDB Silo --257075596 ItemWreckageSDBSilo3 Wreckage SDB Silo -1858716631 ItemWreckageSDBSilo4 Wreckage SDB Silo -432993089 ItemWreckageSDBSilo5 Wreckage SDB Silo --1312888309 ItemWreckageSatelliteDish1 Wreckage Medium Satellite Dish -683129777 ItemWreckageSatelliteDish2 Wreckage Medium Satellite Dish -1605405479 ItemWreckageSatelliteDish3 Wreckage Medium Satellite Dish --875253743 ItemWreckageSecurityPrinter1 Wreckage Security Printer -1390272939 ItemWreckageSecurityPrinter2 Wreckage Security Printer -635097405 ItemWreckageSecurityPrinter3 Wreckage Security Printer --1145158498 ItemWreckageSecurityPrinter4 Wreckage Security Printer --860261368 ItemWreckageSecurityPrinter5 Wreckage Security Printer -1437607346 ItemWreckageSecurityPrinter6 Wreckage Security Printer --1847771550 ItemWreckageShuttleLandingPad1 Wreckage Shuttle Landing Pad -148139992 ItemWreckageShuttleLandingPad2 Wreckage Shuttle Landing Pad -2144558926 ItemWreckageShuttleLandingPad3 Wreckage Shuttle Landing Pad --508048659 ItemWreckageShuttleLandingPad4 Wreckage Shuttle Landing Pad --1766786437 ItemWreckageShuttleLandingPad5 Wreckage Shuttle Landing Pad --1796898215 ItemWreckageSolarPanel1 Wreckage Solar Panel -233624547 ItemWreckageSolarPanel2 Wreckage Solar Panel -2062279541 ItemWreckageSolarPanel3 Wreckage Solar Panel -391453348 ItemWreckageStructureRTG1 Wreckage Structure RTG --834664349 ItemWreckageStructureWeatherStation001 Wreckage Structure Weather Station -1464424921 ItemWreckageStructureWeatherStation002 Wreckage Structure Weather Station -542009679 ItemWreckageStructureWeatherStation003 Wreckage Structure Weather Station --1104478996 ItemWreckageStructureWeatherStation004 Wreckage Structure Weather Station --919745414 ItemWreckageStructureWeatherStation005 Wreckage Structure Weather Station -1344576960 ItemWreckageStructureWeatherStation006 Wreckage Structure Weather Station -656649558 ItemWreckageStructureWeatherStation007 Wreckage Structure Weather Station --1214467897 ItemWreckageStructureWeatherStation008 Wreckage Structure Weather Station -594559972 ItemWreckageTransformer1 Wreckage Transformer --1166470562 ItemWreckageTransformer2 Wreckage Transformer --123047854 ItemWreckageTransformerMedium1 Wreckage Transformer Medium -1638081000 ItemWreckageTransformerMedium2 Wreckage Transformer Medium -114353662 ItemWreckageTransformerSmall1 Wreckage Transformer Small --1613122492 ItemWreckageTransformerSmall2 Wreckage Transformer Small --1662394403 ItemWreckageTurbineGenerator1 Wreckage Turbine Generator -98602599 ItemWreckageTurbineGenerator2 Wreckage Turbine Generator -1927790321 ItemWreckageTurbineGenerator3 Wreckage Turbine Generator -989049177 ItemWreckageVendingMachine1 Wreckage Vending Machine --1543839517 ItemWreckageVendingMachine2 Wreckage Vending Machine --721563531 ItemWreckageVendingMachine3 Wreckage Vending Machine -1251558870 ItemWreckageVendingMachine4 Wreckage Vending Machine -608007229 ItemWreckageVent1 Wreckage Vent --1682930158 ItemWreckageWallCooler1 Wreckage Wall Cooler -45733800 ItemWreckageWallCooler2 Wreckage Wall Cooler -1989858879 ItemWreckageWallLightBatteryPowered1 Wreckage Wall Light Battery Powered --275544187 ItemWreckageWallLightBatteryPowered2 Wreckage Wall Light Battery Powered -1039364844 ItemWreckageWindTurbine001 Wreckage Wind Turbine --1527110826 ItemWreckageWindTurbine002 Wreckage Wind Turbine --738389056 ItemWreckageWindTurbine003 Wreckage Wind Turbine -1301907043 ItemWreckageWindTurbine004 Wreckage Wind Turbine -983480053 ItemWreckageWindTurbine005 Wreckage Wind Turbine --1886261558 ItemWrench Wrench --1959031919 KitPlanter Kit Planter -1932952652 KitSDBSilo Kit (SDB Silo) -231903234 KitStructureCombustionCentrifuge Kit (Combustion Centrifuge) --1427415566 KitchenTableShort Kitchen Table (Short) --78099334 KitchenTableSimpleShort Kitchen Table (Simple Short) --1068629349 KitchenTableSimpleTall Kitchen Table (Simple Tall) --1386237782 KitchenTableTall Kitchen Table (Tall) -1605130615 Lander Lander --1295222317 Landingpad_2x2CenterPiece01 Landingpad 2x2 Center Piece -912453390 Landingpad_BlankPiece Landingpad -1070143159 Landingpad_CenterPiece01 Landingpad Center -1101296153 Landingpad_CrossPiece Landingpad Cross --2066405918 Landingpad_DataConnectionPiece Landingpad Data And Power -977899131 Landingpad_DiagonalPiece01 Landingpad Diagonal -817945707 Landingpad_GasConnectorInwardPiece Landingpad Gas Input --1100218307 Landingpad_GasConnectorOutwardPiece Landingpad Gas Output -170818567 Landingpad_GasCylinderTankPiece Landingpad Gas Storage --1216167727 Landingpad_LiquidConnectorInwardPiece Landingpad Liquid Input --1788929869 Landingpad_LiquidConnectorOutwardPiece Landingpad Liquid Output --976273247 Landingpad_StraightPiece01 Landingpad Straight --1872345847 Landingpad_TaxiPieceCorner Landingpad Taxi Corner -146051619 Landingpad_TaxiPieceHold Landingpad Taxi Hold --1477941080 Landingpad_TaxiPieceStraight Landingpad Taxi Straight --1514298582 Landingpad_ThreshholdPiece Landingpad Threshhold --2002530571 Lead Lead --1748149715 LiquidRocketEngineBasic Liquid Rocket Engine Basic -1531272458 LogicStepSequencer8 Logic Step Sequencer --1650443378 ManualGetResearchPodsRequired PodTypeToSearchFor --99064335 Meteorite Meteorite -471085864 Milk Milk -96856935 ModularRocketCargo01 Rocket Cargo -762107604 ModularRocketCommand01Lander Rocket Command Lander --1667675295 MonsterEgg --337075633 MotherboardComms Communications Motherboard -502555944 MotherboardLogic Logic Motherboard -296034716 MotherboardManufacturing Manufacturing Motherboard --127121474 MotherboardMissionControl --161107071 MotherboardProgrammableChip IC Editor Motherboard --806986392 MotherboardRockets Rocket Control Motherboard --1908268220 MotherboardSorter Sorter Motherboard --1930442922 MothershipCore Mothership Core -516242109 Mushroom Mushroom --369148816 NPCDummyCharacter NPC Character -556601662 Nickel Nickel -155856647 NpcChick Chick -399074198 NpcChicken Chicken --561574140 NpcGrounder Npc Grounder -1958538866 Oil Oil -593101129 OrganBrain Human Brain --144408069 OrganLungs Human Lungs --2096246323 OrganLungsChicken Organ Lungs Chicken -248893646 PassiveSpeaker Passive Speaker -393296429 Phobos Phobos -443947415 PipeBenderMod Pipe Bender Mod -791382247 Plastic Plastic --1958705204 PortableComposter Portable Composter -2043318949 PortableSolarPanel Portable Solar Panel --1657266385 Potato Potato --1250164309 Pumpkin Pumpkin --1514425813 QuarryDrillBitBasic Quarry Drill Bit Basic -399661231 RailingElegant01 Railing Elegant (Type 1) --1898247915 RailingElegant02 Railing Elegant (Type 2) --2072792175 RailingIndustrial02 Railing Industrial (Type 2) -1343512922 ReagentCarbon Carbon Powder -1798609988 ReagentCobalt Cobalt Powder -980054869 ReagentColorBlue Color Dye (Blue) -120807542 ReagentColorGreen Color Dye (Green) --400696159 ReagentColorOrange Color Dye (Orange) -1998377961 ReagentColorRed Color Dye (Red) -635208006 ReagentColorYellow Color Dye (Yellow) -1281150963 ReagentElectrum Electrum Powder --1247719781 ReagentFenoxitone Fenoxitone Powder --867172244 ReagentGold Gold Powder -1133218057 ReagentInvar Invar Powder --1085822177 ReagentPotassiumIodide Potassium Iodide Powder -649443269 ReagentSilver Silver Powder --788672929 RespawnPoint Respawn Point --491247370 RespawnPointWallMounted Respawn Point (Mounted) -1951286569 Rice Rice -434786784 Robot AIMeE Bot -350726273 RoverCargo Rover (Cargo) --2049946335 Rover_MkI Rover MkI -861674123 Rover_MkI_build_states Rover MKI --256607540 SMGMagazine SMG Magazine --2086114347 SalicylicAcid Salicylic Acid --1290755415 SeedBag_Corn Corn Seeds --1990600883 SeedBag_Fern Fern Seeds -311593418 SeedBag_Mushroom Mushroom Seeds -1005571172 SeedBag_Potato Potato Seeds -1423199840 SeedBag_Pumpkin Pumpkin Seeds --1691151239 SeedBag_Rice Rice Seeds -1783004244 SeedBag_Soybean Soybean Seeds -488360169 SeedBag_Switchgrass Switchgrass Seed --1922066841 SeedBag_Tomato Tomato Seeds --654756733 SeedBag_Wheet Wheat Seeds --1195893171 Silicon Silicon -687283565 Silver Silver --1206542381 Solder Solder -1510471435 Soy Soy --1991297271 SpaceShuttle Space Shuttle --163799681 SpawnPoint Spawn Point -1547278694 SpecialBlocks Special Blocks -1331613335 Steel Steel --500544800 Stellite Stellite --1527229051 StopWatch Stop Watch -1298920475 StructureAccessBridge Access Bridge --1129453144 StructureActiveVent Active Vent -446212963 StructureAdvancedComposter Advanced Composter -545937711 StructureAdvancedFurnace Advanced Furnace --463037670 StructureAdvancedPackagingMachine Advanced Packaging Machine --2087593337 StructureAirConditioner Air Conditioner --2105052344 StructureAirlock Airlock -1736080881 StructureAirlockGate Small Hangar Door -1811979158 StructureAngledBench Bench (Angled) --247344692 StructureArcFurnace Arc Furnace -1999523701 StructureAreaPowerControl Area Power Control --1032513487 StructureAreaPowerControlReversed Area Power Control -7274344 StructureAutoMinerSmall Autominer (Small) -336213101 StructureAutolathe Autolathe --1672404896 StructureAutomatedOven Automated Oven -2099900163 StructureBackLiquidPressureRegulator Liquid Back Volume Regulator --1149857558 StructureBackPressureRegulator Back Pressure Regulator --1613497288 StructureBasketHoop Basket Hoop --400115994 StructureBattery Station Battery -1945930022 StructureBatteryCharger Battery Cell Charger --761772413 StructureBatteryChargerSmall Battery Charger Small --1388288459 StructureBatteryLarge Station Battery (Large) --1125305264 StructureBatteryMedium Battery (Medium) --2123455080 StructureBatterySmall Auxiliary Rocket Battery --188177083 StructureBeacon Beacon --2042448192 StructureBench Powered Bench -406745009 StructureBench1 Bench (Counter Style) --2127086069 StructureBench2 Bench (High Tech Style) --164622691 StructureBench3 Bench (Frame Style) -1750375230 StructureBench4 Bench (Workbench Style) -337416191 StructureBlastDoor Blast Door -697908419 StructureBlockBed Block Bed -378084505 StructureBlocker Blocker -1036015121 StructureCableAnalysizer Cable Analyzer --889269388 StructureCableCorner Cable (Corner) -980469101 StructureCableCorner3 Cable (3-Way Corner) -318437449 StructureCableCorner3Burnt Burnt Cable (3-Way Corner) -2393826 StructureCableCorner3HBurnt --1542172466 StructureCableCorner4 Cable (4-Way Corner) -268421361 StructureCableCorner4Burnt Burnt Cable (4-Way Corner) --981223316 StructureCableCorner4HBurnt Burnt Heavy Cable (4-Way Corner) --177220914 StructureCableCornerBurnt Burnt Cable (Corner) --39359015 StructureCableCornerH Heavy Cable (Corner) --1843379322 StructureCableCornerH3 Heavy Cable (3-Way Corner) -205837861 StructureCableCornerH4 Heavy Cable (4-Way Corner) -1931412811 StructureCableCornerHBurnt Burnt Cable (Corner) -281380789 StructureCableFuse100k Fuse (100kW) --1103727120 StructureCableFuse1k Fuse (1kW) --349716617 StructureCableFuse50k Fuse (50kW) --631590668 StructureCableFuse5k Fuse (5kW) --175342021 StructureCableJunction Cable (Junction) -1112047202 StructureCableJunction4 Cable (4-Way Junction) --1756896811 StructureCableJunction4Burnt Burnt Cable (4-Way Junction) --115809132 StructureCableJunction4HBurnt Burnt Cable (4-Way Junction) -894390004 StructureCableJunction5 Cable (5-Way Junction) -1545286256 StructureCableJunction5Burnt Burnt Cable (5-Way Junction) --1404690610 StructureCableJunction6 Cable (6-Way Junction) --628145954 StructureCableJunction6Burnt Burnt Cable (6-Way Junction) -1854404029 StructureCableJunction6HBurnt Burnt Cable (6-Way Junction) --1620686196 StructureCableJunctionBurnt Burnt Cable (Junction) -469451637 StructureCableJunctionH Heavy Cable (3-Way Junction) --742234680 StructureCableJunctionH4 Heavy Cable (4-Way Junction) --1530571426 StructureCableJunctionH5 Heavy Cable (5-Way Junction) -1701593300 StructureCableJunctionH5Burnt Burnt Heavy Cable (5-Way Junction) -1036780772 StructureCableJunctionH6 Heavy Cable (6-Way Junction) --341365649 StructureCableJunctionHBurnt Burnt Cable (Junction) -605357050 StructureCableStraight Cable (Straight) --1196981113 StructureCableStraightBurnt Burnt Cable (Straight) --146200530 StructureCableStraightH Heavy Cable (Straight) -2085762089 StructureCableStraightHBurnt Burnt Cable (Straight) --342072665 StructureCamera Camera -1063087964 StructureCapsuleTank Capsule Tank --1385712131 StructureCapsuleTankGas Gas Capsule Tank Small -1415396263 StructureCapsuleTankLiquid Liquid Capsule Tank Small -1151864003 StructureCargoStorageMedium Cargo Storage (Medium) --1493672123 StructureCargoStorageSmall Cargo Storage (Small) -690945935 StructureCentrifuge Centrifuge -1167659360 StructureChair Chair -1944858936 StructureChairBacklessDouble Chair (Backless Double) -1672275150 StructureChairBacklessSingle Chair (Backless Single) --367720198 StructureChairBoothCornerLeft Chair (Booth Corner Left) --1436813933 StructureChairBoothCornerRight Chair (Booth Corner Right) -1640720378 StructureChairBoothMiddle Chair (Booth Middle) --1152812099 StructureChairRectangleDouble Chair (Rectangle Double) --1425428917 StructureChairRectangleSingle Chair (Rectangle Single) --1245724402 StructureChairThickDouble Chair (Thick Double) --1510009608 StructureChairThickSingle Chair (Thick Single) --850484480 StructureChuteBin Chute Bin -1360330136 StructureChuteCorner Chute (Corner) --810874728 StructureChuteDigitalFlipFlopSplitterLeft Chute Digital Flip Flop Splitter Left -163728359 StructureChuteDigitalFlipFlopSplitterRight Chute Digital Flip Flop Splitter Right -648608238 StructureChuteDigitalValveLeft Chute Digital Valve Left --1337091041 StructureChuteDigitalValveRight Chute Digital Valve Right --1446854725 StructureChuteFlipFlopSplitter Chute Flip Flop Splitter --1469588766 StructureChuteInlet Chute Inlet --611232514 StructureChuteJunction Chute (Junction) --1022714809 StructureChuteOutlet Chute Outlet -225377225 StructureChuteOverflow Chute Overflow -168307007 StructureChuteStraight Chute (Straight) --1918892177 StructureChuteUmbilicalFemale Umbilical Socket (Chute) --659093969 StructureChuteUmbilicalFemaleSide Umbilical Socket Angle (Chute) --958884053 StructureChuteUmbilicalMale Umbilical (Chute) -434875271 StructureChuteValve Chute Valve --607241919 StructureChuteWindow Chute (Window) --128473777 StructureCircuitHousing IC Housing -1238905683 StructureCombustionCentrifuge Combustion Centrifuge --1513030150 StructureCompositeCladdingAngled Composite Cladding (Angled) --69685069 StructureCompositeCladdingAngledCorner Composite Cladding (Angled Corner) --1841871763 StructureCompositeCladdingAngledCornerInner Composite Cladding (Angled Corner Inner) --1417912632 StructureCompositeCladdingAngledCornerInnerLong Composite Cladding (Angled Corner Inner Long) -947705066 StructureCompositeCladdingAngledCornerInnerLongL Composite Cladding (Angled Corner Inner Long L) --1032590967 StructureCompositeCladdingAngledCornerInnerLongR Composite Cladding (Angled Corner Inner Long R) -850558385 StructureCompositeCladdingAngledCornerLong Composite Cladding (Long Angled Corner) --348918222 StructureCompositeCladdingAngledCornerLongR Composite Cladding (Long Angled Mirrored Corner) --387546514 StructureCompositeCladdingAngledLong Composite Cladding (Long Angled) -212919006 StructureCompositeCladdingCylindrical Composite Cladding (Cylindrical) -1077151132 StructureCompositeCladdingCylindricalPanel Composite Cladding (Cylindrical Panel) -1997436771 StructureCompositeCladdingPanel Composite Cladding (Panel) --259357734 StructureCompositeCladdingRounded Composite Cladding (Rounded) -1951525046 StructureCompositeCladdingRoundedCorner Composite Cladding (Rounded Corner) -110184667 StructureCompositeCladdingRoundedCornerInner Composite Cladding (Rounded Corner Inner) -139107321 StructureCompositeCladdingSpherical Composite Cladding (Spherical) -534213209 StructureCompositeCladdingSphericalCap Composite Cladding (Spherical Cap) -1751355139 StructureCompositeCladdingSphericalCorner Composite Cladding (Spherical Corner) --793837322 StructureCompositeDoor Composite Door -324868581 StructureCompositeFloorGrating Composite Floor Grating --895027741 StructureCompositeFloorGrating2 Composite Floor Grating (Type 2) --1113471627 StructureCompositeFloorGrating3 Composite Floor Grating (Type 3) -600133846 StructureCompositeFloorGrating4 Composite Floor Grating (Type 4) -2109695912 StructureCompositeFloorGratingOpen Composite Floor Grating Open -882307910 StructureCompositeFloorGratingOpenRotated Composite Floor Grating Open Rotated -1237302061 StructureCompositeWall Composite Wall (Type 1) -718343384 StructureCompositeWall02 Composite Wall (Type 2) -1574321230 StructureCompositeWall03 Composite Wall (Type 3) --1011701267 StructureCompositeWall04 Composite Wall (Type 4) --11567609 StructureCompositeWallPanelling1 Composite Wall Panelling -414493311 StructureCompositeWallRound Composite Wall Round -481880519 StructureCompositeWallType1 Composite Wall (Type 1) --2051950467 StructureCompositeWallType2 Composite Wall (Type 2) --222918421 StructureCompositeWallType3 Composite Wall (Type 3) -1825709384 StructureCompositeWallType4 Composite Wall (Type 4) -1782004613 StructureCompositeWallWindow Composite Window --2060571986 StructureCompositeWindow Composite Window --688284639 StructureCompositeWindowIron Iron Window --626563514 StructureComputer Computer -1420719315 StructureCondensationChamber Condensation Chamber --965741795 StructureCondensationValve Condensation Valve -235638270 StructureConsole Console --722284333 StructureConsoleDual Console Dual --53151617 StructureConsoleLED1x2 LED Display (Medium) --1949054743 StructureConsoleLED1x3 LED Display (Large) --815193061 StructureConsoleLED5 LED Display (Small) --1414618258 StructureConsoleLED5Large LED Display (Medium) -389066928 StructureConsoleLED8Large LED Display (Large) -801677497 StructureConsoleMonitor Console Monitor --1961153710 StructureControlChair Control Chair -1095344176 StructureConveyorCorner Conveyor (Corner) -1539241770 StructureConveyorRiser Conveyor (Riser) -2030838474 StructureConveyorStraight Conveyor (Straight) -1022368814 StructureConveyorStraightLong Conveyor (Straight Long) -277877682 StructureConveyorStraightShort Conveyor (Straight Short) --1968255729 StructureCornerLocker Corner Locker --733500083 StructureCrateMount Container Mount -1938254586 StructureCryoTube CryoTube -1443059329 StructureCryoTubeHorizontal Cryo Tube Horizontal --1381321828 StructureCryoTubeVertical Cryo Tube Vertical -1076425094 StructureDaylightSensor Daylight Sensor -265720906 StructureDeepMiner Deep Miner --1280984102 StructureDigitalValve Digital Valve -1944485013 StructureDiode LED -576516101 StructureDiodeSlide Diode Slide --137465079 StructureDockPortSide Dock (Port Side) -544677628 StructureDockShipSide Dock Ship Side -1968371847 StructureDrinkingFountain --1027802654 StructureDuctCorner Duct Corner -667066324 StructureDuctCrossJunction Duct Cross Junction --330605879 StructureDuctCrossJunction3 Duct Cross Junction3 -1915735914 StructureDuctCrossJunction4 Duct Cross Junction4 -86573052 StructureDuctCrossJunction5 Duct Cross Junction5 --1675514298 StructureDuctCrossJunction6 Duct Cross Junction6 --659165198 StructureDuctStraight Duct Straight -1264346285 StructureDuctTJunction Duct T Junction --1668992663 StructureElectrolyzer Electrolyzer -1307165496 StructureElectronicsPrinter Electronics Printer --827912235 StructureElevatorLevelFront Elevator Level (Cabled) -2060648791 StructureElevatorLevelIndustrial Elevator Level -826144419 StructureElevatorShaft Elevator Shaft (Cabled) -1998354978 StructureElevatorShaftIndustrial Elevator Shaft -1668452680 StructureEmergencyButton Important Button --1725252354 StructureEngineFuselage1x1 Engine Fuselage -2035781224 StructureEngineMountTypeA1 Engine Mount (Type A1) --530653230 StructureEngineMountTypeA2 Engine Mount (Type A2) --1755713724 StructureEngineMountTypeA3 Engine Mount (Type A3) -155024103 StructureEngineMountTypeA4 Engine Mount (Type A4) -1383783851 StructureEngineMountTypeB1 Engine Mount (Type B1) --881619951 StructureEngineMountTypeB2 Engine Mount (Type B2) --1133200249 StructureEngineMountTypeB3 Engine Mount (Type B3) -571484452 StructureEngineMountTypeB4 Engine Mount (Type B4) -1264708842 StructureEngineMountTypeC1 Engine Mount (Type C1) --764887728 StructureEngineMountTypeC2 Engine Mount (Type C2) --1519415866 StructureEngineMountTypeC3 Engine Mount (Type C3) -990582885 StructureEngineMountTypeC4 Engine Mount (Type C4) -69237293 StructureEngineMountTypeD1 Engine Mount (Type D1) --1658246249 StructureEngineMountTypeD2 Engine Mount (Type D2) --366077183 StructureEngineMountTypeD3 Engine Mount (Type D3) -1951043234 StructureEngineMountTypeD4 Engine Mount (Type D4) --1429782576 StructureEvaporationChamber Evaporation Chamber -195298587 StructureExpansionValve Expansion Valve -1378546186 StructureFabricator Fabricator -1622567418 StructureFairingTypeA1 Fairing (Type A1) --104908736 StructureFairingTypeA2 Fairing (Type A2) --1900541738 StructureFairingTypeA3 Fairing (Type A3) -1268464185 StructureFairingTypeB1 Fairing (Type B1) --762156157 StructureFairingTypeB2 Fairing (Type B2) -1384123256 StructureFairingTypeC1 Fairing (Type C1) --880190782 StructureFairingTypeC2 Fairing (Type C2) -499228095 StructureFairingTypeD1 Fairing (Type D1) --2067215355 StructureFairingTypeD2 Fairing (Type D2) --348054045 StructureFiltration Filtration --1529819532 StructureFlagSmall Small Flag --1535893860 StructureFlashingLight Flashing Light -839890807 StructureFlatBench Bench (Flat) -1048813293 StructureFloorDrain Passive Liquid Inlet -1432512808 StructureFrame Steel Frame --2112390778 StructureFrameCorner Steel Frame (Corner) -271315669 StructureFrameCornerCut Steel Frame (Corner Cut) --1240951678 StructureFrameIron Iron Frame --302420053 StructureFrameSide Steel Frame (Side) -958476921 StructureFridgeBig Fridge (Large) -751887598 StructureFridgeSmall Fridge Small -1947944864 StructureFurnace Furnace -1677968143 StructureFuselage1x1 Fuselage -1033024712 StructureFuselageTypeA1 Fuselage (Type A1) --1533287054 StructureFuselageTypeA2 Fuselage (Type A2) --744696348 StructureFuselageTypeA3 Fuselage (Type A3) -1308115015 StructureFuselageTypeA4 Fuselage (Type A4) -381675275 StructureFuselageTypeB1 Fuselage (Type B1) --1883851087 StructureFuselageTypeB2 Fuselage (Type B2) --122583513 StructureFuselageTypeB3 Fuselage (Type B3) -1725240196 StructureFuselageTypeB4 Fuselage (Type B4) -262461002 StructureFuselageTypeC1 Fuselage (Type C1) --1767012368 StructureFuselageTypeC2 Fuselage (Type C2) --508905626 StructureFuselageTypeC3 Fuselage (Type C3) -2144215749 StructureFuselageTypeC4 Fuselage (Type C4) -147395155 StructureFuselageTypeC5 Fuselage (Type C5) --1849670679 StructureFuselageTypeC6 Fuselage (Type C6) -1088766093 StructureFuselageTypeD1 Fuselage (Type D1) --638840521 StructureFuselageTypeD2 Fuselage (Type D2) --1360322143 StructureFuselageTypeD3 Fuselage (Type D3) -814724098 StructureFuselageTypeD4 Fuselage (Type D4) -1200129172 StructureFuselageTypeD5 Fuselage (Type D5) --561916626 StructureFuselageTypeD6 Fuselage (Type D6) -1165997963 StructureGasGenerator Gas Fuel Generator -2104106366 StructureGasMixer Gas Mixer --1252983604 StructureGasSensor Gas Sensor -1632165346 StructureGasTankStorage Gas Tank Storage --1680477930 StructureGasUmbilicalFemale Umbilical Socket (Gas) --648683847 StructureGasUmbilicalFemaleSide Umbilical Socket Angle (Gas) --1814939203 StructureGasUmbilicalMale Umbilical (Gas) --324331872 StructureGlassDoor Glass Door --214232602 StructureGovernedGasEngine Pumped Gas Engine --619745681 StructureGroundBasedTelescope Telescope --1758710260 StructureGrowLight Grow Light -1053578886 StructureGunTurret Gun Emplacement --1984007806 StructureGyroscope Gyroscope -643057382 StructureH2Combustor H2 Combustor -958056199 StructureHarvie Harvie --271480358 StructureHarvieReversed Harvie --1310204724 StructureHeatExchangeLiquidAndGas Heat Exchange Liquid And Gas -944685608 StructureHeatExchangeLiquidtoGas Heat Exchanger - Liquid + Gas -21266291 StructureHeatExchangerGastoGas Heat Exchanger - Gas --613784254 StructureHeatExchangerLiquidtoLiquid Heat Exchanger - Liquid -1070427573 StructureHorizontalAutoMiner OGRE --1888248335 StructureHydraulicPipeBender Hydraulic Pipe Bender -1812780450 StructureHydroponicsAutomated Automated Hydroponics -1441767298 StructureHydroponicsStation Hydroponics Station -1464854517 StructureHydroponicsTray Hydroponics Tray --1841632400 StructureHydroponicsTrayData Hydroponics Device -443849486 StructureIceCrusher Ice Crusher -1005491513 StructureIgniter Igniter --1693382705 StructureInLineTankGas1x1 In-Line Tank Small Gas -35149429 StructureInLineTankGas1x2 In-Line Tank Gas -543645499 StructureInLineTankLiquid1x1 In-Line Tank Small Liquid --1183969663 StructureInLineTankLiquid1x2 In-Line Tank Liquid --1967711059 StructureInsulatedPipeCorner Insulated Pipe (Corner) --92778058 StructureInsulatedPipeCrossJunction Insulated Pipe (Cross Junction) -1328210035 StructureInsulatedPipeCrossJunction3 Insulated Pipe (3-Way Junction) --783387184 StructureInsulatedPipeCrossJunction4 Insulated Pipe (4-Way Junction) --1505147578 StructureInsulatedPipeCrossJunction5 Insulated Pipe (5-Way Junction) -1061164284 StructureInsulatedPipeCrossJunction6 Insulated Pipe (6-Way Junction) -1713710802 StructureInsulatedPipeLiquidCorner Insulated Liquid Pipe (Corner) -1926651727 StructureInsulatedPipeLiquidCrossJunction Insulated Liquid Pipe (3-Way Junction) -363303270 StructureInsulatedPipeLiquidCrossJunction4 Insulated Liquid Pipe (4-Way Junction) -1654694384 StructureInsulatedPipeLiquidCrossJunction5 Insulated Liquid Pipe (5-Way Junction) --72748982 StructureInsulatedPipeLiquidCrossJunction6 Insulated Liquid Pipe (6-Way Junction) -295678685 StructureInsulatedPipeLiquidStraight Insulated Liquid Pipe (Straight) --532384855 StructureInsulatedPipeLiquidTJunction Insulated Liquid Pipe (T Junction) -2134172356 StructureInsulatedPipeStraight Insulated Pipe (Straight) --2076086215 StructureInsulatedPipeTJunction Insulated Pipe (T Junction) --31273349 StructureInsulatedTankConnector Insulated Tank Connector --1602030414 StructureInsulatedTankConnectorLiquid Insulated Tank Connector Liquid --2096421875 StructureInteriorDoorGlass Interior Door Glass -847461335 StructureInteriorDoorPadded Interior Door Padded -1981698201 StructureInteriorDoorPaddedThin Interior Door Padded Thin --1182923101 StructureInteriorDoorTriangle Interior Door Triangle --828056979 StructureKlaxon Klaxon Speaker --415420281 StructureLadder Ladder -1541734993 StructureLadderEnd Ladder End --1230658883 StructureLargeDirectHeatExchangeGastoGas Large Direct Heat Exchanger - Gas + Gas -1412338038 StructureLargeDirectHeatExchangeGastoLiquid Large Direct Heat Exchanger - Gas + Liquid -792686502 StructureLargeDirectHeatExchangeLiquidtoLiquid Large Direct Heat Exchange - Liquid + Liquid --566775170 StructureLargeExtendableRadiator Large Extendable Radiator --1351081801 StructureLargeHangerDoor Large Hangar Door -1913391845 StructureLargeSatelliteDish Large Satellite Dish --558953231 StructureLaunchMount Launch Mount -535711669 StructureLaunchPadCenter Launch Pad Center -1396343481 StructureLaunchPadModule Launch Pad Module -1160134233 StructureLaunchPadTower Launch Pad Tower --1641770018 StructureLaunchPadTowerScaffolding Launch Pad Tower Scaffolding -797794350 StructureLightLong Wall Light (Long) -1847265835 StructureLightLongAngled Wall Light (Long Angled) -555215790 StructureLightLongWide Wall Light (Long Wide) -1514476632 StructureLightRound Light Round -1592905386 StructureLightRoundAngled Light Round (Angled) -1436121888 StructureLightRoundSmall Light Round (Small) -1687692899 StructureLiquidDrain Active Liquid Outlet --2113838091 StructureLiquidPipeAnalyzer Liquid Pipe Analyzer --287495560 StructureLiquidPipeHeater Pipe Heater (Liquid) --782453061 StructureLiquidPipeOneWayValve One Way Valve (Liquid) -2072805863 StructureLiquidPipeRadiator Liquid Pipe Convection Radiator -482248766 StructureLiquidPressureRegulator Liquid Volume Regulator -1098900430 StructureLiquidTankBig Liquid Tank Big --1430440215 StructureLiquidTankBigInsulated Insulated Liquid Tank Big -1988118157 StructureLiquidTankSmall Liquid Tank Small -608607718 StructureLiquidTankSmallInsulated Insulated Liquid Tank Small -1691898022 StructureLiquidTankStorage Liquid Tank Storage --1051805505 StructureLiquidTurboVolumePump Turbo Volume Pump (Liquid) -1734723642 StructureLiquidUmbilicalFemale Umbilical Socket (Liquid) -1220870319 StructureLiquidUmbilicalFemaleSide Umbilical Socket Angle (Liquid) --1798420047 StructureLiquidUmbilicalMale Umbilical (Liquid) -1849974453 StructureLiquidValve Liquid Valve --454028979 StructureLiquidVolumePump Liquid Volume Pump --830017182 StructureLocker Locker --647164662 StructureLockerSmall Locker (Small) -264413729 StructureLogicBatchReader Batch Reader -436888930 StructureLogicBatchSlotReader Batch Slot Reader -1415443359 StructureLogicBatchWriter Batch Writer -491845673 StructureLogicButton Button --1489728908 StructureLogicCompare Logic Compare -554524804 StructureLogicDial Dial --1983222432 StructureLogicDisplay5 LED Display (Small) -1942143074 StructureLogicGate Logic Gate -2077593121 StructureLogicHashGen Logic Hash Generator -1657691323 StructureLogicMath Logic Math --1160020195 StructureLogicMathUnary Math Unary --851746783 StructureLogicMemory Logic Memory -929022276 StructureLogicMinMax Logic Min/Max -2096189278 StructureLogicMirror Logic Mirror --345383640 StructureLogicReader Logic Reader --124308857 StructureLogicReagentReader Reagent Reader -876108549 StructureLogicRocketDownlink Logic Rocket Downlink -546002924 StructureLogicRocketUplink Logic Uplink -1822736084 StructureLogicSelect Logic Select --767867194 StructureLogicSlotReader Slot Reader -1220484876 StructureLogicSwitch Lever -321604921 StructureLogicSwitch2 Switch --693235651 StructureLogicTransmitter Logic Transmitter -391271589 StructureLogicUnit Logic Unit --1326019434 StructureLogicWriter Logic Writer --1321250424 StructureLogicWriterSwitch Logic Writer Switch --1909140125 StructureLowVolumeLiquidPipeCorner Low Volume Liquid Pipe (Corner) -697935625 StructureLowVolumeLiquidPipeCrossJunction Low Volume Liquid Pipe (Cross Junction) -338145176 StructureLowVolumeLiquidPipeCrossJunction3 Low Volume Liquid Pipe (3-Way Junction) --1975305669 StructureLowVolumeLiquidPipeCrossJunction4 Low Volume Liquid Pipe (4-Way Junction) --45872467 StructureLowVolumeLiquidPipeCrossJunction5 Low Volume Liquid Pipe (5-Way Junction) -1682791191 StructureLowVolumeLiquidPipeCrossJunction6 Low Volume Liquid Pipe (6-Way Junction) --923441517 StructureLowVolumeLiquidPipeStraight Low Volume Liquid Pipe (Straight) -1912174058 StructureLowVolumeLiquidPipeTJunction Low Volume Liquid Pipe (T Junction) --1442601681 StructureLowVolumePipeCorner Low Volume Pipe (Corner) --1656624838 StructureLowVolumePipeCrossJunction Low Volume Pipe (Cross Junction) --1421666624 StructureLowVolumePipeCrossJunction3 Low Volume Pipe (3-Way Junction) -891781987 StructureLowVolumePipeCrossJunction4 Low Volume Pipe (4-Way Junction) -1109439477 StructureLowVolumePipeCrossJunction5 Low Volume Pipe (5-Way Junction) --618012081 StructureLowVolumePipeCrossJunction6 Low Volume Pipe (6-Way Junction) --1002687599 StructureLowVolumePipeStraight Low Volume Pipe (Straight) --1610883693 StructureLowVolumePipeTJunction Low Volume Pipe (T Junction) --1808154199 StructureManualHatch Manual Hatch --1918215845 StructureMediumConvectionRadiator Medium Convection Radiator --1169014183 StructureMediumConvectionRadiatorLiquid Medium Convection Radiator Liquid --566348148 StructureMediumHangerDoor Medium Hangar Door --975966237 StructureMediumRadiator Medium Radiator --1141760613 StructureMediumRadiatorLiquid Medium Radiator Liquid --1093860567 StructureMediumRocketGasFuelTank Gas Capsule Tank Medium -1143639539 StructureMediumRocketLiquidFuelTank Liquid Capsule Tank Medium --1713470563 StructureMotionSensor Motion Sensor -1898243702 StructureNitrolyzer Nitrolyzer -790511747 StructureNosecone1x1 Nosecone -322782515 StructureOccupancySensor Occupancy Sensor --744355143 StructureOneWayValve One Way Valve (Gas) --385751893 StructureOrganicsPrinter Organics Printer --1794932560 StructureOverheadShortCornerLocker Overhead Corner Locker -1468249454 StructureOverheadShortLocker Overhead Locker --56441216 StructurePassiveLargeRadiator Medium Convection Radiator -2066977095 StructurePassiveLargeRadiatorGas Medium Convection Radiator -24786172 StructurePassiveLargeRadiatorLiquid Medium Convection Radiator Liquid -1812364811 StructurePassiveLiquidDrain Passive Liquid Drain -335498166 StructurePassiveVent Passive Vent -1363077139 StructurePassiveVentInsulated Insulated Passive Vent --1674187440 StructurePassthroughHeatExchangerGasToGas CounterFlow Heat Exchanger - Gas + Gas -1928991265 StructurePassthroughHeatExchangerGasToLiquid CounterFlow Heat Exchanger - Gas + Liquid --1472829583 StructurePassthroughHeatExchangerLiquidToLiquid CounterFlow Heat Exchanger - Liquid + Liquid --1434523206 StructurePictureFrameThickLandscapeLarge Picture Frame Thick Landscape Large --2041566697 StructurePictureFrameThickLandscapeSmall Picture Frame Thick Landscape Small -950004659 StructurePictureFrameThickMountLandscapeLarge Picture Frame Thick Landscape Large -347154462 StructurePictureFrameThickMountLandscapeSmall Picture Frame Thick Landscape Small --1459641358 StructurePictureFrameThickMountPortraitLarge Picture Frame Thick Mount Portrait Large --2066653089 StructurePictureFrameThickMountPortraitSmall Picture Frame Thick Mount Portrait Small --1686949570 StructurePictureFrameThickPortraitLarge Picture Frame Thick Portrait Large --1218579821 StructurePictureFrameThickPortraitSmall Picture Frame Thick Portrait Small --1418288625 StructurePictureFrameThinLandscapeLarge Picture Frame Thin Landscape Large --2024250974 StructurePictureFrameThinLandscapeSmall Picture Frame Thin Landscape Small --1146760430 StructurePictureFrameThinMountLandscapeLarge Picture Frame Thin Landscape Large --1752493889 StructurePictureFrameThinMountLandscapeSmall Picture Frame Thin Landscape Small -1094895077 StructurePictureFrameThinMountPortraitLarge Picture Frame Thin Portrait Large -1835796040 StructurePictureFrameThinMountPortraitSmall Picture Frame Thin Portrait Small -1212777087 StructurePictureFrameThinPortraitLarge Picture Frame Thin Portrait Large -1684488658 StructurePictureFrameThinPortraitSmall Picture Frame Thin Portrait Small -435685051 StructurePipeAnalysizer Pipe Analyzer --1785673561 StructurePipeCorner Pipe (Corner) -465816159 StructurePipeCowl Pipe Cowl --1405295588 StructurePipeCrossJunction Pipe (Cross Junction) -2038427184 StructurePipeCrossJunction3 Pipe (3-Way Junction) --417629293 StructurePipeCrossJunction4 Pipe (4-Way Junction) --1877193979 StructurePipeCrossJunction5 Pipe (5-Way Junction) -152378047 StructurePipeCrossJunction6 Pipe (6-Way Junction) --419758574 StructurePipeHeater Pipe Heater (Gas) -1286441942 StructurePipeIgniter Pipe Igniter --2068497073 StructurePipeInsulatedLiquidCrossJunction Insulated Liquid Pipe (Cross Junction) --999721119 StructurePipeLabel Pipe Label --1856720921 StructurePipeLiquidCorner Liquid Pipe (Corner) -1848735691 StructurePipeLiquidCrossJunction Liquid Pipe (Cross Junction) -1628087508 StructurePipeLiquidCrossJunction3 Liquid Pipe (3-Way Junction) --9555593 StructurePipeLiquidCrossJunction4 Liquid Pipe (4-Way Junction) --2006384159 StructurePipeLiquidCrossJunction5 Liquid Pipe (5-Way Junction) -291524699 StructurePipeLiquidCrossJunction6 Liquid Pipe (6-Way Junction) -667597982 StructurePipeLiquidStraight Liquid Pipe (Straight) -262616717 StructurePipeLiquidTJunction Liquid Pipe (T Junction) --1798362329 StructurePipeMeter Pipe Meter -1580412404 StructurePipeOneWayValve One Way Valve (Gas) -1305252611 StructurePipeOrgan Pipe Organ -1696603168 StructurePipeRadiator Pipe Convection Radiator --399883995 StructurePipeRadiatorFlat Pipe Radiator -2024754523 StructurePipeRadiatorFlatLiquid Pipe Radiator Liquid -73728932 StructurePipeStraight Pipe (Straight) --913817472 StructurePipeTJunction Pipe (T Junction) --1125641329 StructurePlanter Planter -1559586682 StructurePlatformLadderOpen Ladder Platform -34040217 StructurePlatformLadderOpenRotated Ladder Platform Rotated -989835703 StructurePlinth Plinth --899013427 StructurePortablesConnector Portables Connector --782951720 StructurePowerConnector Power Connector --65087121 StructurePowerTransmitter Microwave Power Transmitter --327468845 StructurePowerTransmitterOmni Power Transmitter Omni -1195820278 StructurePowerTransmitterReceiver Microwave Power Receiver -101488029 StructurePowerUmbilicalFemale Umbilical Socket (Power) -1922506192 StructurePowerUmbilicalFemaleSide Umbilical Socket Angle (Power) -1529453938 StructurePowerUmbilicalMale Umbilical (Power) -938836756 StructurePoweredVent Powered Vent --785498334 StructurePoweredVentLarge Powered Vent Large -23052817 StructurePressurantValve Pressurant Valve --624011170 StructurePressureFedGasEngine Pressure Fed Gas Engine -379750958 StructurePressureFedLiquidEngine Pressure Fed Liquid Engine --2008706143 StructurePressurePlateLarge Trigger Plate (Large) -1269458680 StructurePressurePlateMedium Trigger Plate (Medium) --1536471028 StructurePressurePlateSmall Trigger Plate (Small) -209854039 StructurePressureRegulator Pressure Regulator -568800213 StructureProximitySensor Proximity Sensor --2031440019 StructurePumpedLiquidEngine Pumped Liquid Engine --737232128 StructurePurgeValve Purge Valve --44928532 StructureRTG Creative RTG -1905352762 StructureRTGSurvival RTG --1756913871 StructureRailing Railing Industrial (Type 1) --1633947337 StructureRecycler Recycler --1577831321 StructureRefrigeratedVendingMachine Refrigerated Vending Machine -2027713511 StructureReinforcedCompositeWindow Reinforced Window (Composite) --816454272 StructureReinforcedCompositeWindowSteel Reinforced Window (Composite Steel) -1939061729 StructureReinforcedWallPaddedWindow Reinforced Window (Padded) -158502707 StructureReinforcedWallPaddedWindowThin Reinforced Window (Thin) --796627526 StructureResearchMachine Research Machine --2786426 StructureReverseElectrolyzer Reverse Electrolyzer -808389066 StructureRocketAvionics Rocket Avionics -997453927 StructureRocketCelestialTracker Rocket Celestial Tracker -1977688565 StructureRocketChuteStorage Rocket Chute Storage -150135861 StructureRocketCircuitHousing Rocket Circuit Housing -177639794 StructureRocketEngine Rocket Engine -1234268097 StructureRocketEngineDestroyed Rocket Engine (Destroyed) -823909553 StructureRocketEngineSmall Rocket Engine (Small) -178472613 StructureRocketEngineTiny Rocket Engine (Tiny) -1781051034 StructureRocketManufactory Rocket Manufactory --2087223687 StructureRocketMiner Rocket Miner -407081452 StructureRocketPlaceHolderMiner Rocket Place Holder Miner -2014252591 StructureRocketScanner Rocket Scanner --654619479 StructureRocketTower Launch Tower -518925193 StructureRocketTransformerSmall Transformer Small (Rocket) -806513938 StructureRover Rover Frame --1875856925 StructureSDBHopper SDB Hopper -467225612 StructureSDBHopperAdvanced SDB Hopper Advanced -1155865682 StructureSDBSilo SDB Silo -439026183 StructureSatelliteDish Medium Satellite Dish --641491515 StructureSecurityPrinter Security Printer -1172114950 StructureShelf Shelf -182006674 StructureShelfMedium Shelf Medium -1330754486 StructureShortCornerLocker Short Corner Locker --554553467 StructureShortLocker Short Locker --775128944 StructureShower Shower --1081797501 StructureShowerPowered Shower (Powered) --1309237526 StructureShuttleLandingPad Landing Pad -879058460 StructureSign1x1 Sign 1x1 -908320837 StructureSign2x1 Sign 2x1 --492611 StructureSingleBed Single Bed --1467449329 StructureSleeper Sleeper -1213495833 StructureSleeperLeft Sleeper Left --1812330717 StructureSleeperRight Sleeper Right --1300059018 StructureSleeperVertical Sleeper Vertical -1382098999 StructureSleeperVerticalDroid Droid Sleeper Vertical -1310303582 StructureSmallDirectHeatExchangeGastoGas Small Direct Heat Exchanger - Gas + Gas -1825212016 StructureSmallDirectHeatExchangeLiquidtoGas Small Direct Heat Exchanger - Liquid + Gas --507770416 StructureSmallDirectHeatExchangeLiquidtoLiquid Small Direct Heat Exchanger - Liquid + Liquid --2138748650 StructureSmallSatelliteDish Small Satellite Dish --1633000411 StructureSmallTableBacklessDouble Small (Table Backless Double) --1897221677 StructureSmallTableBacklessSingle Small (Table Backless Single) -1260651529 StructureSmallTableDinnerSingle Small (Table Dinner Single) --660451023 StructureSmallTableRectangleDouble Small (Table Rectangle Double) --924678969 StructureSmallTableRectangleSingle Small (Table Rectangle Single) --19246131 StructureSmallTableThickDouble Small (Table Thick Double) --291862981 StructureSmallTableThickSingle Small Table (Thick Single) --2045627372 StructureSolarPanel Solar Panel --1554349863 StructureSolarPanel45 Solar Panel (Angled) -930865127 StructureSolarPanel45Reinforced Solar Panel (Heavy Angled) --539224550 StructureSolarPanelDual Solar Panel (Dual) --1545574413 StructureSolarPanelDualReinforced Solar Panel (Heavy Dual) -1968102968 StructureSolarPanelFlat Solar Panel (Flat) -1697196770 StructureSolarPanelFlatReinforced Solar Panel (Heavy Flat) --775884649 StructureSolarPanelFused Solar Panel --934345724 StructureSolarPanelReinforced Solar Panel (Heavy) -813146305 StructureSolidFuelGenerator Generator (Solid Fuel) --1009150565 StructureSorter Sorter -192735066 StructureSpawnPoint Spawn Point --947062903 StructureSphericalTank Spherical Tank --2020231820 StructureStacker Stacker -1585641623 StructureStackerReverse Stacker -1405018945 StructureStairs4x2 Stairs -155214029 StructureStairs4x2RailL Stairs with Rail (Left) --212902482 StructureStairs4x2RailR Stairs with Rail (Right) --1088008720 StructureStairs4x2Rails Stairs with Rails -505924160 StructureStairwellBackLeft Stairwell (Back Left) --862048392 StructureStairwellBackPassthrough Stairwell (Back Passthrough) --2128896573 StructureStairwellBackRight Stairwell (Back Right) --37454456 StructureStairwellFrontLeft Stairwell (Front Left) --1625452928 StructureStairwellFrontPassthrough Stairwell (Front Passthrough) -340210934 StructureStairwellFrontRight Stairwell (Front Right) -2049879875 StructureStairwellNoDoors Stairwell (No Doors) --411792553 StructureStellarAnchor Stellar Anchor --260316435 StructureStirlingEngine Stirling Engine --793623899 StructureStorageLocker Locker -255034731 StructureSuitStorage Suit Storage --1606848156 StructureTankBig Large Tank -1280378227 StructureTankBigInsulated Tank Big (Insulated) --1276379454 StructureTankConnector Tank Connector -1331802518 StructureTankConnectorLiquid Liquid Tank Connector -1013514688 StructureTankSmall Small Tank -955744474 StructureTankSmallAir Small Tank (Air) -2102454415 StructureTankSmallFuel Small Tank (Fuel) -272136332 StructureTankSmallInsulated Tank Small (Insulated) --465741100 StructureToolManufactory Tool Manufactory -1473807953 StructureTorpedoRack Torpedo Rack --1757426073 StructureTorpedoTube Torpedo Launcher -1570931620 StructureTraderWaypoint Trader Waypoint --1423212473 StructureTransformer Transformer (Large) --1065725831 StructureTransformerMedium Transformer (Medium) --771036757 StructureTransformerMedium(Reversed) Transformer Reversed (Medium) -833912764 StructureTransformerMediumReversed Transformer Reversed (Medium) --890946730 StructureTransformerSmall Transformer (Small) -1054059374 StructureTransformerSmallReversed Transformer Reversed (Small) -1282191063 StructureTurbineGenerator Turbine Generator -1310794736 StructureTurboVolumePump Turbo Volume Pump (Gas) -750118160 StructureUnloader Unloader --1892095368 StructureUnpoweredHatch Unpowered Hatch -1622183451 StructureUprightWindTurbine Upright Wind Turbine --692036078 StructureValve Valve --443130773 StructureVendingMachine Vending Machine --321403609 StructureVolumePump Volume Pump --858143148 StructureWallArch Wall (Arch) -1649708822 StructureWallArchArrow Wall (Arch Arrow) -1794588890 StructureWallArchCornerRound Wall (Arch Corner Round) --1963016580 StructureWallArchCornerSquare Wall (Arch Corner Square) -1281911841 StructureWallArchCornerTriangle Wall (Arch Corner Triangle) -1182510648 StructureWallArchPlating Wall (Arch Plating) -782529714 StructureWallArchTwoTone Wall (Arch Two Tone) --739292323 StructureWallCooler Wall Cooler -1635864154 StructureWallFlat Wall (Flat) -898708250 StructureWallFlatCornerRound Wall (Flat Corner Round) -298130111 StructureWallFlatCornerSquare Wall (Flat Corner Square) -2097419366 StructureWallFlatCornerTriangle Wall (Flat Corner Triangle) --1161662836 StructureWallFlatCornerTriangleFlat Wall (Flat Corner Triangle Flat) -1979212240 StructureWallGeometryCorner Wall (Geometry Corner) -1049735537 StructureWallGeometryStreight Wall (Geometry Straight) -1602758612 StructureWallGeometryT Wall (Geometry T) --1427845483 StructureWallGeometryTMirrored Wall (Geometry T Mirrored) -24258244 StructureWallHeater Wall Heater -1287324802 StructureWallIron Iron Wall (Type 1) -1485834215 StructureWallIron02 Iron Wall (Type 2) -798439281 StructureWallIron03 Iron Wall (Type 3) --1309433134 StructureWallIron04 Iron Wall (Type 4) -1492930217 StructureWallLargePanel Wall (Large Panel) --776581573 StructureWallLargePanelArrow Wall (Large Panel Arrow) --1860064656 StructureWallLight Wall Light --1306415132 StructureWallLightBattery Wall Light (Battery) -1590330637 StructureWallPaddedArch Wall (Padded Arch) --1126688298 StructureWallPaddedArchCorner Wall (Padded Arch Corner) -1171987947 StructureWallPaddedArchLightFittingTop Wall (Padded Arch Light Fitting Top) --1546743960 StructureWallPaddedArchLightsFittings Wall (Padded Arch Lights Fittings) --155945899 StructureWallPaddedCorner Wall (Padded Corner) -1183203913 StructureWallPaddedCornerThin Wall (Padded Corner Thin) -8846501 StructureWallPaddedNoBorder Wall (Padded No Border) -179694804 StructureWallPaddedNoBorderCorner Wall (Padded No Border Corner) --1611559100 StructureWallPaddedThinNoBorder Wall (Padded Thin No Border) -1769527556 StructureWallPaddedThinNoBorderCorner Wall (Padded Thin No Border Corner) -2087628940 StructureWallPaddedWindow Wall (Padded Window) --37302931 StructureWallPaddedWindowThin Wall (Padded Window Thin) -635995024 StructureWallPadding Wall (Padding) --1243329828 StructureWallPaddingArchVent Wall (Padding Arch Vent) -2024882687 StructureWallPaddingLightFitting Wall (Padding Light Fitting) --1102403554 StructureWallPaddingThin Wall (Padding Thin) -26167457 StructureWallPlating Wall (Plating) --1302523785 StructureWallSimple Wall (Simple) --825106501 StructureWallSmallPanels Wall (Small Panels) -619828719 StructureWallSmallPanelsAndHatch Wall (Small Panels And Hatch) --639306697 StructureWallSmallPanelsArrow Wall (Small Panels Arrow) -386820253 StructureWallSmallPanelsMonoChrome Wall (Small Panels Mono Chrome) --1407480603 StructureWallSmallPanelsOpen Wall (Small Panels Open) -1709994581 StructureWallSmallPanelsTwoTone Wall (Small Panels Two Tone) --1177469307 StructureWallVent Wall Vent --1178961954 StructureWaterBottleFiller Water Bottle Filler -1433754995 StructureWaterBottleFillerBottom Water Bottle Filler Bottom --756587791 StructureWaterBottleFillerPowered Waterbottle Filler -1986658780 StructureWaterBottleFillerPoweredBottom Waterbottle Filler --517628750 StructureWaterDigitalValve Liquid Digital Valve --1687126443 StructureWaterPipeHeater Pipe Heater (Gas) -433184168 StructureWaterPipeMeter Liquid Pipe Meter -887383294 StructureWaterPurifier Water Purifier --1369060582 StructureWaterWallCooler Liquid Wall Cooler -1997212478 StructureWeatherStation Weather Station --2082355173 StructureWindTurbine Wind Turbine -2056377335 StructureWindowShutter Window Shutter -328180977 StrutureDrinkingFountain Drinking Fountain -733496620 Tomato Tomato -1700018136 ToolPrinterMod Tool Printer Mod -94730034 ToyLuna Toy Luna --820692038 TriggerZone Trigger Zone --2083426457 UniformCommander Uniform Commander --48342840 UniformMarine Marine Uniform -810053150 UniformOrangeJumpSuit Jump Suit (Orange) --208860272 Uranium Uranium -1134509928 WallFrameCornerCut Steel Frame (Corner Cut) -1787814293 Waspaloy Waspaloy -789494694 WeaponEnergy Weapon Energy --385323479 WeaponPistolEnergy Energy Pistol -1154745374 WeaponRifleEnergy Energy Rifle --1102977898 WeaponTorpedo Torpedo --686695134 Wheat Wheat diff --git a/ic10emu/generate_data.py b/ic10emu/generate_data.py index 187bd7e..afece3d 100644 --- a/ic10emu/generate_data.py +++ b/ic10emu/generate_data.py @@ -210,7 +210,7 @@ def extract_data(install_path: Path, data_path: Path, language: str): continue key = key.text value = value.text - if key is None: + if key is None or any(bad in key for bad in "(){}|[]") : continue crc_u = binascii.crc32(key.encode('utf-8')) crc_i: int = struct.unpack("i", struct.pack("I", crc_u))[0] diff --git a/ic10emu/src/device.rs b/ic10emu/src/device.rs deleted file mode 100644 index 205a984..0000000 --- a/ic10emu/src/device.rs +++ /dev/null @@ -1,994 +0,0 @@ -use crate::{ - grammar::{LogicType, ReagentMode, SlotLogicType}, - interpreter::{ICError, ICState}, - network::{CableConnectionType, Connection}, - vm::VM, -}; -use std::{collections::BTreeMap, ops::Deref}; - -use itertools::Itertools; - -use serde::{Deserialize, Serialize}; -use strum_macros::{AsRefStr, EnumIter, EnumString}; - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] -pub enum FieldType { - Read, - Write, - ReadWrite, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct LogicField { - pub field_type: FieldType, - pub value: f64, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct SlotOccupant { - pub id: u32, - pub prefab_hash: i32, - pub quantity: u32, - pub max_quantity: u32, - pub sorting_class: SortingClass, - pub damage: f64, - fields: BTreeMap, -} - -impl SlotOccupant { - pub fn from_template(template: SlotOccupantTemplate, id_fn: F) -> Self - where - F: FnOnce() -> u32, - { - let mut fields = template.fields; - SlotOccupant { - id: template.id.unwrap_or_else(id_fn), - prefab_hash: fields - .remove(&SlotLogicType::PrefabHash) - .map(|field| field.value as i32) - .unwrap_or(0), - quantity: fields - .remove(&SlotLogicType::Quantity) - .map(|field| field.value as u32) - .unwrap_or(1), - max_quantity: fields - .remove(&SlotLogicType::MaxQuantity) - .map(|field| field.value as u32) - .unwrap_or(1), - damage: fields - .remove(&SlotLogicType::Damage) - .map(|field| field.value) - .unwrap_or(0.0), - sorting_class: fields - .remove(&SlotLogicType::SortingClass) - .map(|field| (field.value as u32).into()) - .unwrap_or(SortingClass::Default), - fields, - } - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct SlotOccupantTemplate { - pub id: Option, - pub fields: BTreeMap, -} - -impl SlotOccupant { - pub fn new(id: u32, prefab_hash: i32) -> Self { - SlotOccupant { - id, - prefab_hash, - quantity: 1, - max_quantity: 1, - damage: 0.0, - sorting_class: SortingClass::Default, - fields: BTreeMap::new(), - } - } - - /// chainable constructor - pub fn with_quantity(mut self, quantity: u32) -> Self { - self.quantity = quantity; - self - } - - /// chainable constructor - pub fn with_max_quantity(mut self, max_quantity: u32) -> Self { - self.max_quantity = max_quantity; - self - } - - /// chainable constructor - pub fn with_damage(mut self, damage: f64) -> Self { - self.damage = damage; - self - } - - /// chainable constructor - pub fn with_fields(mut self, fields: BTreeMap) -> Self { - self.fields.extend(fields); - self - } - - /// chainable constructor - pub fn get_fields(&self) -> BTreeMap { - let mut copy = self.fields.clone(); - copy.insert( - SlotLogicType::PrefabHash, - LogicField { - field_type: FieldType::Read, - value: self.prefab_hash as f64, - }, - ); - copy.insert( - SlotLogicType::SortingClass, - LogicField { - field_type: FieldType::Read, - value: self.sorting_class as u32 as f64, - }, - ); - copy.insert( - SlotLogicType::Quantity, - LogicField { - field_type: FieldType::Read, - value: self.quantity as f64, - }, - ); - copy.insert( - SlotLogicType::MaxQuantity, - LogicField { - field_type: FieldType::Read, - value: self.max_quantity as f64, - }, - ); - copy.insert( - SlotLogicType::Damage, - LogicField { - field_type: FieldType::Read, - value: self.damage, - }, - ); - copy - } - - pub fn set_field(&mut self, typ: SlotLogicType, val: f64, force: bool) -> Result<(), ICError> { - if (typ == SlotLogicType::Quantity) && force { - self.quantity = val as u32; - Ok(()) - } else if (typ == SlotLogicType::MaxQuantity) && force { - self.max_quantity = val as u32; - Ok(()) - } else if (typ == SlotLogicType::Damage) && force { - self.damage = val; - Ok(()) - } else if let Some(logic) = self.fields.get_mut(&typ) { - match logic.field_type { - FieldType::ReadWrite | FieldType::Write => { - logic.value = val; - Ok(()) - } - _ => { - if force { - logic.value = val; - Ok(()) - } else { - Err(ICError::ReadOnlyField(typ.to_string())) - } - } - } - } else if force { - self.fields.insert( - typ, - LogicField { - field_type: FieldType::ReadWrite, - value: val, - }, - ); - Ok(()) - } else { - Err(ICError::ReadOnlyField(typ.to_string())) - } - } - - pub fn can_logic_read(&self, field: SlotLogicType) -> bool { - if let Some(logic) = self.fields.get(&field) { - matches!(logic.field_type, FieldType::Read | FieldType::ReadWrite) - } else { - false - } - } - - pub fn can_logic_write(&self, field: SlotLogicType) -> bool { - if let Some(logic) = self.fields.get(&field) { - matches!(logic.field_type, FieldType::Write | FieldType::ReadWrite) - } else { - false - } - } -} - -#[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct Slot { - pub typ: SlotType, - pub occupant: Option, -} - -#[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct SlotTemplate { - pub typ: SlotType, - pub occupant: Option, -} - -impl Slot { - pub fn new(typ: SlotType) -> Self { - Slot { - typ, - occupant: None, - } - } - pub fn with_occupant(typ: SlotType, occupant: SlotOccupant) -> Self { - Slot { - typ, - occupant: Some(occupant), - } - } - - pub fn get_fields(&self) -> BTreeMap { - let mut copy = self - .occupant - .as_ref() - .map(|occupant| occupant.get_fields()) - .unwrap_or_default(); - copy.insert( - SlotLogicType::Occupied, - LogicField { - field_type: FieldType::Read, - value: if self.occupant.is_some() { 1.0 } else { 0.0 }, - }, - ); - copy.insert( - SlotLogicType::OccupantHash, - LogicField { - field_type: FieldType::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.prefab_hash as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - SlotLogicType::Quantity, - LogicField { - field_type: FieldType::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.quantity as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - SlotLogicType::Damage, - LogicField { - field_type: FieldType::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.damage) - .unwrap_or(0.0), - }, - ); - copy.insert( - SlotLogicType::Class, - LogicField { - field_type: FieldType::Read, - value: self.typ as u32 as f64, - }, - ); - copy.insert( - SlotLogicType::MaxQuantity, - LogicField { - field_type: FieldType::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.max_quantity as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - SlotLogicType::PrefabHash, - LogicField { - field_type: FieldType::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.prefab_hash as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - SlotLogicType::SortingClass, - LogicField { - field_type: FieldType::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.sorting_class as u32 as f64) - .unwrap_or(0.0), - }, - ); - copy.insert( - SlotLogicType::ReferenceId, - LogicField { - field_type: FieldType::Read, - value: self - .occupant - .as_ref() - .map(|occupant| occupant.id as f64) - .unwrap_or(0.0), - }, - ); - copy - } - - pub fn get_field(&self, field: SlotLogicType) -> f64 { - let fields = self.get_fields(); - fields - .get(&field) - .map(|field| match field.field_type { - FieldType::Read | FieldType::ReadWrite => field.value, - _ => 0.0, - }) - .unwrap_or(0.0) - } - - pub fn can_logic_read(&self, field: SlotLogicType) -> bool { - match field { - SlotLogicType::Pressure | SlotLogicType::Temperature | SlotLogicType::Volume => { - matches!( - self.typ, - SlotType::GasCanister | SlotType::LiquidCanister | SlotType::LiquidBottle - ) - } - SlotLogicType::Charge | SlotLogicType::ChargeRatio => { - matches!(self.typ, SlotType::Battery) - } - SlotLogicType::Open => matches!( - self.typ, - SlotType::Helmet | SlotType::Tool | SlotType::Appliance - ), - SlotLogicType::Lock => matches!(self.typ, SlotType::Helmet), - SlotLogicType::FilterType => matches!(self.typ, SlotType::GasFilter), - _ => { - if let Some(occupant) = self.occupant.as_ref() { - occupant.can_logic_read(field) - } else { - false - } - } - } - } - - pub fn can_logic_write(&self, field: SlotLogicType) -> bool { - match field { - SlotLogicType::Open => matches!( - self.typ, - SlotType::Helmet - | SlotType::GasCanister - | SlotType::LiquidCanister - | SlotType::LiquidBottle - ), - SlotLogicType::On => matches!( - self.typ, - SlotType::Helmet | SlotType::Tool | SlotType::Appliance - ), - SlotLogicType::Lock => matches!(self.typ, SlotType::Helmet), - _ => { - if let Some(occupant) = self.occupant.as_ref() { - occupant.can_logic_write(field) - } else { - false - } - } - } - } - - pub fn set_field(&mut self, typ: SlotLogicType, val: f64, force: bool) -> Result<(), ICError> { - if matches!( - typ, - SlotLogicType::Occupied - | SlotLogicType::OccupantHash - | SlotLogicType::Class - | SlotLogicType::PrefabHash - | SlotLogicType::SortingClass - | SlotLogicType::ReferenceId - ) { - return Err(ICError::ReadOnlyField(typ.to_string())); - } - if let Some(occupant) = self.occupant.as_mut() { - occupant.set_field(typ, val, force) - } else { - Err(ICError::SlotNotOccupied) - } - } -} - -#[derive( - Debug, - Default, - Clone, - Copy, - PartialEq, - Eq, - Hash, - strum_macros::Display, - EnumString, - EnumIter, - AsRefStr, - Serialize, - Deserialize, -)] -#[strum(serialize_all = "PascalCase")] -pub enum SortingClass { - #[default] - Default = 0, - Kits = 1, - Tools = 2, - Resources, - Food = 4, - Clothing, - Appliances, - Atmospherics, - Storage = 8, - Ores, - Ices, -} - -impl From for SortingClass { - fn from(value: u32) -> Self { - match value { - 1 => Self::Kits, - 2 => Self::Tools, - 3 => Self::Resources, - 4 => Self::Food, - 5 => Self::Clothing, - 6 => Self::Appliances, - 7 => Self::Atmospherics, - 8 => Self::Storage, - 9 => Self::Ores, - 10 => Self::Ices, - _ => Self::Default, - } - } -} - -#[derive( - Debug, - Default, - Clone, - Copy, - PartialEq, - Eq, - Hash, - strum_macros::Display, - EnumString, - EnumIter, - AsRefStr, - Serialize, - Deserialize, -)] -#[strum(serialize_all = "PascalCase")] -pub enum SlotType { - Helmet = 1, - Suit = 2, - Back, - GasFilter = 4, - GasCanister, - MotherBoard, - Circuitboard, - DataDisk = 8, - Organ, - Ore, - Plant, - Uniform, - Entity, - Battery, - Egg, - Belt = 16, - Tool, - Appliance, - Ingot, - Torpedo, - Cartridge, - AccessCard, - Magazine, - Circuit = 24, - Bottle, - ProgrammableChip, - Glasses, - CreditCard, - DirtCanister, - SensorProcessingUnit, - LiquidCanister, - LiquidBottle = 32, - Wreckage, - SoundCartridge, - DrillHead, - ScanningHead, - Flare, - Blocked, - #[default] - None = 0, -} - -#[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct Prefab { - pub name: String, - pub hash: i32, -} - -impl Prefab { - pub fn new(name: &str) -> Self { - Prefab { - name: name.to_owned(), - hash: const_crc32::crc32(name.as_bytes()) as i32, - } - } -} - -#[derive(Debug, Default)] -pub struct Device { - pub id: u32, - pub name: Option, - pub name_hash: Option, - pub prefab: Option, - pub slots: Vec, - pub reagents: BTreeMap>, - pub ic: Option, - pub connections: Vec, - fields: BTreeMap, -} - -impl Device { - pub fn new(id: u32) -> Self { - Device { - id, - name: None, - name_hash: None, - prefab: None, - fields: BTreeMap::new(), - slots: Vec::new(), - reagents: BTreeMap::new(), - ic: None, - connections: vec![Connection::CableNetwork { - net: None, - typ: CableConnectionType::default(), - }], - } - } - - pub fn with_ic(id: u32, ic: u32) -> Self { - let mut device = Device::new(id); - device.ic = Some(ic); - device.connections = vec![ - Connection::CableNetwork { - net: None, - typ: CableConnectionType::Data, - }, - Connection::CableNetwork { - net: None, - typ: CableConnectionType::Power, - }, - ]; - device.prefab = Some(Prefab::new("StructureCircuitHousing")); - device.fields.extend(vec![ - ( - LogicType::Setting, - LogicField { - field_type: FieldType::ReadWrite, - value: 0.0, - }, - ), - ( - LogicType::RequiredPower, - LogicField { - field_type: FieldType::Read, - value: 0.0, - }, - ), - ( - LogicType::PrefabHash, - LogicField { - field_type: FieldType::Read, - value: -128473777.0, - }, - ), - ]); - let occupant = SlotOccupant::new(ic, -744098481); - device.slots.push(Slot::with_occupant( - SlotType::ProgrammableChip, - // -744098481 = ItemIntegratedCircuit10 - occupant, - )); - - device - } - - pub fn get_fields(&self, vm: &VM) -> BTreeMap { - let mut copy = self.fields.clone(); - if let Some(ic_id) = &self.ic { - let ic = vm.ics.get(ic_id).expect("our own ic to exist").borrow(); - copy.insert( - LogicType::LineNumber, - LogicField { - field_type: FieldType::ReadWrite, - value: ic.ip() as f64, - }, - ); - copy.insert( - LogicType::Error, - LogicField { - field_type: FieldType::Read, - value: match *ic.state.borrow() { - ICState::Error(_) => 1.0, - _ => 0.0, - }, - }, - ); - } - if self.has_power_state() { - copy.insert( - LogicType::Power, - LogicField { - field_type: FieldType::Read, - value: if self.has_power_connection() { - 1.0 - } else { - 0.0 - }, - }, - ); - } - copy.insert( - LogicType::ReferenceId, - LogicField { - field_type: FieldType::Read, - value: self.id as f64, - }, - ); - copy - } - - pub fn get_network_id(&self, connection: usize) -> Result { - if connection >= self.connections.len() { - Err(ICError::ConnectionIndexOutOfRange( - connection, - self.connections.len(), - )) - } else if let Connection::CableNetwork { - net: network_id, .. - } = self.connections[connection] - { - if let Some(network_id) = network_id { - Ok(network_id) - } else { - Err(ICError::NetworkNotConnected(connection)) - } - } else { - Err(ICError::NotACableConnection(connection)) - } - } - - pub fn can_logic_read(&self, field: LogicType) -> bool { - match field { - LogicType::ReferenceId => true, - LogicType::LineNumber | LogicType::Error if self.ic.is_some() => true, - LogicType::Power if self.has_power_state() => true, - _ => { - if let Some(logic) = self.fields.get(&field) { - matches!(logic.field_type, FieldType::Read | FieldType::ReadWrite) - } else { - false - } - } - } - } - - pub fn can_logic_write(&self, field: LogicType) -> bool { - match field { - LogicType::ReferenceId => false, - LogicType::LineNumber if self.ic.is_some() => true, - _ => { - if let Some(logic) = self.fields.get(&field) { - matches!(logic.field_type, FieldType::Write | FieldType::ReadWrite) - } else { - false - } - } - } - } - - pub fn can_slot_logic_read(&self, field: SlotLogicType, slot: usize) -> bool { - if self.slots.is_empty() { - return false; - } - let Some(slot) = self.slots.get(slot) else { - return false; - }; - slot.can_logic_read(field) - } - - pub fn can_slot_logic_write(&self, field: SlotLogicType, slot: usize) -> bool { - if self.slots.is_empty() { - return false; - } - let Some(slot) = self.slots.get(slot) else { - return false; - }; - slot.can_logic_write(field) - } - - pub fn get_field(&self, typ: LogicType, vm: &VM) -> Result { - if typ == LogicType::LineNumber && self.ic.is_some() { - let ic = vm - .ics - .get(&self.ic.unwrap()) - .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? - .borrow(); - Ok(ic.ip() as f64) - } else if let Some(field) = self.get_fields(vm).get(&typ) { - if field.field_type == FieldType::Read || field.field_type == FieldType::ReadWrite { - Ok(field.value) - } else { - Err(ICError::WriteOnlyField(typ.to_string())) - } - } else { - Err(ICError::DeviceHasNoField(typ.to_string())) - } - } - - pub fn set_field( - &mut self, - typ: LogicType, - val: f64, - vm: &VM, - force: bool, - ) -> Result<(), ICError> { - if typ == LogicType::ReferenceId - || (typ == LogicType::Error && self.ic.is_some()) - || (typ == LogicType::Power && self.has_power_state()) - { - Err(ICError::ReadOnlyField(typ.to_string())) - } else if typ == LogicType::LineNumber && self.ic.is_some() { - let ic = vm - .ics - .get(&self.ic.unwrap()) - .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? - .borrow(); - ic.set_ip(val as u32); - Ok(()) - } else if let Some(field) = self.fields.get_mut(&typ) { - if field.field_type == FieldType::Write - || field.field_type == FieldType::ReadWrite - || force - { - field.value = val; - Ok(()) - } else { - Err(ICError::ReadOnlyField(typ.to_string())) - } - } else if force { - self.fields.insert( - typ, - LogicField { - field_type: FieldType::ReadWrite, - value: val, - }, - ); - Ok(()) - } else { - Err(ICError::DeviceHasNoField(typ.to_string())) - } - } - - pub fn get_slot_field(&self, index: f64, typ: SlotLogicType, vm: &VM) -> Result { - let slot = self - .slots - .get(index as usize) - .ok_or(ICError::SlotIndexOutOfRange(index))?; - if slot.typ == SlotType::ProgrammableChip - && slot.occupant.is_some() - && self.ic.is_some() - && typ == SlotLogicType::LineNumber - { - let ic = vm - .ics - .get(&self.ic.unwrap()) - .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? - .borrow(); - Ok(ic.ip() as f64) - } else { - Ok(slot.get_field(typ)) - } - } - - pub fn get_slot_fields( - &self, - index: f64, - vm: &VM, - ) -> Result, ICError> { - let slot = self - .slots - .get(index as usize) - .ok_or(ICError::SlotIndexOutOfRange(index))?; - let mut fields = slot.get_fields(); - if slot.typ == SlotType::ProgrammableChip && slot.occupant.is_some() && self.ic.is_some() { - let ic = vm - .ics - .get(&self.ic.unwrap()) - .ok_or_else(|| ICError::UnknownDeviceID(self.ic.unwrap() as f64))? - .borrow(); - fields.insert( - SlotLogicType::LineNumber, - LogicField { - field_type: FieldType::ReadWrite, - value: ic.ip() as f64, - }, - ); - } - Ok(fields) - } - - pub fn set_slot_field( - &mut self, - index: f64, - typ: SlotLogicType, - val: f64, - _vm: &VM, - force: bool, - ) -> Result<(), ICError> { - let slot = self - .slots - .get_mut(index as usize) - .ok_or(ICError::SlotIndexOutOfRange(index))?; - slot.set_field(typ, val, force) - } - - pub fn get_slot(&self, index: f64) -> Result<&Slot, ICError> { - self.slots - .get(index as usize) - .ok_or(ICError::SlotIndexOutOfRange(index)) - } - - pub fn get_reagent(&self, rm: &ReagentMode, reagent: f64) -> f64 { - if let Some(mode) = self.reagents.get(rm) { - if let Some(val) = mode.get(&(reagent as i32)) { - return *val; - } - } - 0.0 - } - - pub fn set_name(&mut self, name: &str) { - self.name_hash = Some(const_crc32::crc32(name.as_bytes()) as i32); - self.name = Some(name.to_owned()); - } - - pub fn has_power_state(&self) -> bool { - self.connections.iter().any(|conn| { - matches!( - conn, - Connection::CableNetwork { - typ: CableConnectionType::Power | CableConnectionType::PowerAndData, - .. - } - ) - }) - } - - pub fn has_power_connection(&self) -> bool { - self.connections.iter().any(|conn| { - matches!( - conn, - Connection::CableNetwork { - net: Some(_), - typ: CableConnectionType::Power | CableConnectionType::PowerAndData, - } - ) - }) - } -} - -#[derive(Debug, Default, Clone, Serialize, Deserialize)] -pub struct DeviceTemplate { - pub id: Option, - pub name: Option, - pub prefab_name: Option, - pub slots: Vec, - // pub reagents: BTreeMap>, - pub connections: Vec, - pub fields: BTreeMap, -} - -impl Device { - /// create a devive from a template and return the device, does not create it's own IC - pub fn from_template(template: DeviceTemplate, mut id_fn: F) -> Self - where - F: FnMut() -> u32, - { - // id_fn *must* be captured not moved - #[allow(clippy::redundant_closure)] - let device_id = template.id.unwrap_or_else(|| id_fn()); - let name_hash = template - .name - .as_ref() - .map(|name| const_crc32::crc32(name.as_bytes()) as i32); - - #[allow(clippy::redundant_closure)] - let slots = template - .slots - .into_iter() - .map(|slot| Slot { - typ: slot.typ, - occupant: slot - .occupant - .map(|occupant| SlotOccupant::from_template(occupant, || id_fn())), - }) - .collect_vec(); - - let ic = slots - .iter() - .find_map(|slot| { - if slot.typ == SlotType::ProgrammableChip && slot.occupant.is_some() { - Some(slot.occupant.clone()).flatten() - } else { - None - } - }) - .map(|occupant| occupant.id); - - let fields = template.fields; - - Device { - id: device_id, - name: template.name, - name_hash, - prefab: template.prefab_name.map(|name| Prefab::new(&name)), - slots, - // reagents: template.reagents, - reagents: BTreeMap::new(), - ic, - connections: template.connections, - fields, - } - } -} - -impl From for DeviceTemplate -where - T: Deref, -{ - fn from(device: T) -> Self { - DeviceTemplate { - id: Some(device.id), - name: device.name.clone(), - prefab_name: device.prefab.as_ref().map(|prefab| prefab.name.clone()), - slots: device - .slots - .iter() - .map(|slot| SlotTemplate { - typ: slot.typ, - occupant: slot.occupant.as_ref().map(|occupant| SlotOccupantTemplate { - id: Some(occupant.id), - fields: occupant.get_fields(), - }), - }) - .collect_vec(), - connections: device.connections.clone(), - fields: device.fields.clone(), - } - } -} diff --git a/ic10emu/src/errors.rs b/ic10emu/src/errors.rs new file mode 100644 index 0000000..a4e0af7 --- /dev/null +++ b/ic10emu/src/errors.rs @@ -0,0 +1,297 @@ +use crate::vm::{ + instructions::enums::InstructionOp, + object::{ + errors::{LogicError, MemoryError}, + templates::Prefab, + ObjectID, + }, +}; +use serde_derive::{Deserialize, Serialize}; +use stationeers_data::templates::ObjectTemplate; +use std::error::Error as StdError; +use std::fmt::Display; +use thiserror::Error; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; + +#[derive(Error, Debug, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum VMError { + #[error("device with id '{0}' does not exist")] + UnknownId(ObjectID), + #[error("ic with id '{0}' does not exist")] + UnknownIcId(ObjectID), + #[error("ic encountered an error: {0}")] + ICError(#[from] ICError), + #[error("ic encountered an error: {0}")] + LineError(#[from] LineError), + #[error("invalid network id {0}")] + InvalidNetwork(ObjectID), + #[error("device {0} not visible to device {1} (not on the same networks)")] + DeviceNotVisible(u32, u32), + #[error("a device with id {0} already exists")] + IdInUse(u32), + #[error("device(s) with ids {0:?} already exist")] + IdsInUse(Vec), + #[error("attempt to use a set of id's with duplicates: id(s) {0:?} exist more than once")] + DuplicateIds(Vec), + #[error("object {0} is not a device")] + NotADevice(ObjectID), + #[error("device object {0} has no pins")] + NoDevicePins(ObjectID), + #[error("object {0} has no slots")] + NotStorage(ObjectID), + #[error("object {0} is not an item")] + NotAnItem(ObjectID), + #[error("object {0} is not programmable")] + NotProgrammable(ObjectID), + #[error("object {0} is not memory writable")] + NotMemoryWritable(ObjectID), + #[error("object {0} is not a circuit holder or programmable")] + NotCircuitHolderOrProgrammable(ObjectID), + #[error("object {0} is not a circuit holder or memory writable")] + NotCircuitHolderOrMemoryWritable(ObjectID), + #[error("object {0} is a circuit holder but there is no programmable ic present")] + NoIC(ObjectID), + #[error("{0}")] + TemplateError(#[from] TemplateError), + #[error("missing child object {0}")] + MissingChild(ObjectID), + #[error("object {0} is not parentable")] + NotParentable(ObjectID), + #[error("object {0} is not logicable")] + NotLogicable(ObjectID), + #[error("network object {0} is not a network")] + NonNetworkNetwork(ObjectID), +} + +#[derive(Error, Debug, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum TemplateError { + #[error("object id {0} has a non conforming set of interfaces")] + NonConformingObject(ObjectID), + #[error("object id {0} is missing from the VM")] + MissingVMObject(ObjectID), + #[error("database has no template for prefab {0}")] + NoTemplateForPrefab(Prefab), + #[error("no prefab provided")] + MissingPrefab, + #[error("incorrect template for concrete impl {0} from prefab {1}: {2:?}")] + IncorrectTemplate(String, Prefab, ObjectTemplate), + #[error("frozen memory size error: {0} is not {1}")] + MemorySize(usize, usize), +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct LineError { + pub error: ICError, + pub line: u32, + pub msg: String, +} + +impl Display for LineError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Error on line {}: {}", self.line, self.error) + } +} + +impl StdError for LineError {} + +#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ParseError { + pub line: usize, + pub start: usize, + pub end: usize, + pub msg: String, +} + +impl Display for ParseError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{} at line {} {}:{}", + self.msg, self.line, self.start, self.end + ) + } +} + +impl StdError for ParseError {} + +impl ParseError { + /// Offset the ParseError in it's line, adding the passed values to it's `start` and `end` + #[must_use] + pub fn offset(self, offset: usize) -> Self { + ParseError { + start: self.start + offset, + end: self.end + offset, + ..self + } + } + + /// Offset the ParseError line, adding the passed value to it's `line` + #[must_use] + pub fn offset_line(self, offset: usize) -> Self { + ParseError { + line: self.line + offset, + start: self.start, + ..self + } + } + + /// Mark the parse error as extending 'length' bytes from `start` + #[must_use] + pub fn span(self, length: usize) -> Self { + ParseError { + start: self.start, + end: self.start + length, + ..self + } + } +} + +#[derive(Debug, Error, Clone, Serialize, Deserialize)] +#[serde(tag = "typ")] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum ICError { + #[error("error compiling code: {0}")] + ParseError(#[from] ParseError), + #[error("{0}")] + LogicError(#[from] LogicError), + #[error("{0}")] + MemoryError(#[from] MemoryError), + #[error("duplicate label {label}: first encountered on line {source_line}")] + DuplicateLabel { + label: String, + line: u32, + source_line: u32, + }, + #[error("instruction pointer out of range: '{0}'")] + InstructionPointerOutOfRange(usize), + #[error("register pointer out of range: '{0}'")] + RegisterIndexOutOfRange(f64), + #[error("device pointer out of range: '{0}'")] + DeviceIndexOutOfRange(f64), + #[error("stack index out of range: '{0}'")] + StackIndexOutOfRange(f64), + #[error("slot index out of range: '{0}'")] + SlotIndexOutOfRange(f64), + #[error("pin index {0} out of range 0-6")] + PinIndexOutOfRange(usize), + #[error("connection index {index} out of range {range}")] + ConnectionIndexOutOfRange { index: usize, range: usize }, + #[error("unknown device ID '{0}'")] + UnknownDeviceID(f64), + #[error("too few operands!: provide: '{provided}', desired: '{desired}'")] + TooFewOperands { provided: u32, desired: u32 }, + #[error("too many operands!: provide: '{provided}', desired: '{desired}'")] + TooManyOperands { provided: u32, desired: u32 }, + #[error("incorrect operand type for instruction `{inst}` operand {index}, not a {desired} ")] + IncorrectOperandType { + inst: InstructionOp, + index: usize, + desired: String, + }, + #[error("unknown identifier {0}")] + UnknownIdentifier(String), + #[error("device Not Set")] + DeviceNotSet, + #[error("shift Underflow i64(signed long)")] + ShiftUnderflowI64, + #[error("shift Overflow i64(signed long)")] + ShiftOverflowI64, + #[error("shift underflow i32(signed int)")] + ShiftUnderflowI32, + #[error("shift overflow i32(signed int)")] + ShiftOverflowI32, + #[error("duplicate define '{0}'")] + DuplicateDefine(String), + #[error("read only field '{0}'")] + ReadOnlyField(String), + #[error("write only field '{0}'")] + WriteOnlyField(String), + #[error("device has no field '{0}'")] + DeviceHasNoField(String), + #[error("device has no ic")] + DeviceHasNoIC, + #[error("unknown device '{0}'")] + UnknownDeviceId(f64), + #[error("unknown logic type '{0}'")] + UnknownLogicType(f64), + #[error("unknown slot logic type '{0}'")] + UnknownLogicSlotType(f64), + #[error("unknown batch mode '{0}'")] + UnknownBatchMode(f64), + #[error("unknown reagent mode '{0}'")] + UnknownReagentMode(f64), + #[error("type value not known")] + TypeValueNotKnown, + #[error("empty device list")] + EmptyDeviceList, + #[error("connection specifier missing")] + MissingConnectionSpecifier, + #[error("no data network on connection '{0}'")] + NotACableConnection(usize), + #[error("network not connected on connection '{0}'")] + NetworkNotConnected(usize), + #[error("bad network Id '{0}'")] + BadNetworkId(u32), + #[error("channel index out of range '{0}'")] + ChannelIndexOutOfRange(usize), + #[error("slot has no occupant")] + SlotNotOccupied, + #[error("generated Enum {0} has no value attached. Report this error.")] + NoGeneratedValue(String), + #[error( + "generated Enum {enum_name}'s value does not parse as {parse_type} . Report this error." + )] + BadGeneratedValueParse { + enum_name: String, + parse_type: String, + }, + #[error("IC with id {0} is not slotted into a circuit holder")] + NoCircuitHolder(ObjectID), + #[error("IC with id {0} is slotted into a circuit holder with no logic interface?")] + CircuitHolderNotLogicable(ObjectID), + #[error("object {0} is not slot writeable")] + NotSlotWriteable(ObjectID), + #[error("object {0} does not use reagents ")] + NotReagentReadable(ObjectID), + #[error("object {0} is not slot logicable")] + NotLogicable(ObjectID), + #[error("{0} is not a valid number of sleep seconds")] + SleepDurationError(f64), + #[error("{duration} can not be added to {time} ")] + SleepAdditionError { + duration: time::Duration, + #[cfg_attr(feature = "tsify", tsify(type = "Date"))] + time: time::OffsetDateTime, + }, +} + +impl ICError { + pub const fn too_few_operands(provided: usize, desired: u32) -> Self { + ICError::TooFewOperands { + provided: provided as u32, + desired, + } + } + + pub const fn too_many_operands(provided: usize, desired: u32) -> Self { + ICError::TooManyOperands { + provided: provided as u32, + desired, + } + } + + pub const fn mismatch_operands(provided: usize, desired: u32) -> Self { + if provided < desired as usize { + ICError::too_few_operands(provided, desired) + } else { + ICError::too_many_operands(provided, desired) + } + } +} diff --git a/ic10emu/src/grammar.rs b/ic10emu/src/grammar.rs index 027dc14..2d4272f 100644 --- a/ic10emu/src/grammar.rs +++ b/ic10emu/src/grammar.rs @@ -1,144 +1,19 @@ -use crate::interpreter::{self, ICError}; -use crate::tokens::{SplitConsecutiveIndicesExt, SplitConsecutiveWithIndices}; +use crate::{ + errors::ParseError, + interpreter, + tokens::{SplitConsecutiveIndicesExt, SplitConsecutiveWithIndices}, + vm::instructions::{ + enums::InstructionOp, + operands::{Device, DeviceSpec, Identifier, Number, Operand, RegisterSpec}, + Instruction, CONSTANTS_LOOKUP, + }, +}; use itertools::Itertools; -use std::error::Error; -use std::fmt::Display; -use std::str::FromStr; -use strum::EnumProperty; - -pub mod generated { - use super::ParseError; - use crate::interpreter::ICError; - use serde::{Deserialize, Serialize}; - use std::str::FromStr; - use strum::AsRefStr; - use strum::Display; - use strum::EnumIter; - use strum::EnumProperty; - use strum::EnumString; - use strum::IntoEnumIterator; - - include!(concat!(env!("OUT_DIR"), "/instructions.rs")); - include!(concat!(env!("OUT_DIR"), "/logictypes.rs")); - include!(concat!(env!("OUT_DIR"), "/modes.rs")); - include!(concat!(env!("OUT_DIR"), "/constants.rs")); - include!(concat!(env!("OUT_DIR"), "/enums.rs")); - - impl TryFrom for LogicType { - type Error = ICError; - fn try_from(value: f64) -> Result>::Error> { - if let Some(lt) = LogicType::iter().find(|lt| { - lt.get_str("value") - .map(|val| val.parse::().unwrap() as f64 == value) - .unwrap_or(false) - }) { - Ok(lt) - } else { - Err(crate::interpreter::ICError::UnknownLogicType(value)) - } - } - } - - impl TryFrom for SlotLogicType { - type Error = ICError; - fn try_from(value: f64) -> Result>::Error> { - if let Some(slt) = SlotLogicType::iter().find(|lt| { - lt.get_str("value") - .map(|val| val.parse::().unwrap() as f64 == value) - .unwrap_or(false) - }) { - Ok(slt) - } else { - Err(crate::interpreter::ICError::UnknownSlotLogicType(value)) - } - } - } - - impl TryFrom for BatchMode { - type Error = ICError; - fn try_from(value: f64) -> Result>::Error> { - if let Some(bm) = BatchMode::iter().find(|lt| { - lt.get_str("value") - .map(|val| val.parse::().unwrap() as f64 == value) - .unwrap_or(false) - }) { - Ok(bm) - } else { - Err(crate::interpreter::ICError::UnknownBatchMode(value)) - } - } - } - - impl TryFrom for ReagentMode { - type Error = ICError; - fn try_from(value: f64) -> Result>::Error> { - if let Some(rm) = ReagentMode::iter().find(|lt| { - lt.get_str("value") - .map(|val| val.parse::().unwrap() as f64 == value) - .unwrap_or(false) - }) { - Ok(rm) - } else { - Err(crate::interpreter::ICError::UnknownReagentMode(value)) - } - } - } -} - -pub use generated::*; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] -pub struct ParseError { - pub line: usize, - pub start: usize, - pub end: usize, - pub msg: String, -} - -impl Display for ParseError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "{} at line {} {}:{}", - self.msg, self.line, self.start, self.end - ) - } -} - -impl Error for ParseError {} - -impl ParseError { - /// Offset the ParseError in it's line, adding the passed values to it's `start` and `end` - #[must_use] - pub fn offset(self, offset: usize) -> Self { - ParseError { - start: self.start + offset, - end: self.end + offset, - ..self - } - } - - /// Offset the ParseError line, adding the passed value to it's `line` - #[must_use] - pub fn offset_line(self, offset: usize) -> Self { - ParseError { - line: self.line + offset, - start: self.start, - ..self - } - } - - /// Mark the parse error as extending 'length' bytes from `start` - #[must_use] - pub fn span(self, length: usize) -> Self { - ParseError { - start: self.start, - end: self.start + length, - ..self - } - } -} +use stationeers_data::enums::{ + basic::BasicEnum, + script::{LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType}, +}; +use std::{fmt::Display, str::FromStr}; pub fn parse(code: &str) -> Result, ParseError> { code.lines() @@ -148,7 +23,7 @@ pub fn parse(code: &str) -> Result, ParseError> { } /// Like `parse` but can return Code::Invalid for some lines -pub fn parse_with_invlaid(code: &str) -> Vec { +pub fn parse_with_invalid(code: &str) -> Vec { code.lines() .enumerate() .map(|(n, l)| Line::from_str_with_invalid(n, l)) @@ -249,12 +124,6 @@ impl FromStr for Comment { } } -#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] -pub struct Instruction { - pub instruction: InstructionOp, - pub operands: Vec, -} - impl FromStr for Instruction { type Err = ParseError; /// parse a non-empty string for an instruction and it's operands @@ -262,9 +131,16 @@ impl FromStr for Instruction { let mut tokens_iter = s.split_consecutive_with_indices(&[' ', '\t'][..]); let instruction: InstructionOp = { if let Some((index, token)) = tokens_iter.next() { - token - .parse::() - .map_err(|e| e.offset(index).span(token.len())) + token.parse::().map_err(|_e| { + ParseError { + line: 0, + start: 0, + end: 0, + msg: format!("unknown instruction '{token}'"), + } + .offset(index) + .span(token.len()) + }) } else { Err(ParseError { line: 0, @@ -323,290 +199,6 @@ fn get_operand_tokens<'a>( operand_tokens } -#[derive(PartialEq, Eq, Debug, Clone, Copy, Serialize, Deserialize)] -pub enum Device { - Db, - Numbered(u32), - Indirect { indirection: u32, target: u32 }, -} - -#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] -pub struct RegisterSpec { - pub indirection: u32, - pub target: u32, -} - -#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] -pub struct DeviceSpec { - pub device: Device, - pub connection: Option, -} - -#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] -pub enum Operand { - RegisterSpec(RegisterSpec), - DeviceSpec(DeviceSpec), - Number(Number), - Type { - logic_type: Option, - slot_logic_type: Option, - batch_mode: Option, - reagent_mode: Option, - identifier: Identifier, - }, - Identifier(Identifier), -} - -impl Operand { - pub fn as_value( - &self, - ic: &interpreter::IC, - inst: InstructionOp, - index: u32, - ) -> Result { - match self.translate_alias(ic) { - Operand::RegisterSpec(RegisterSpec { - indirection, - target, - }) => ic.get_register(indirection, target), - Operand::Number(num) => Ok(num.value()), - Operand::Type { - logic_type, - slot_logic_type, - batch_mode, - reagent_mode, - identifier: _, - } => { - if let Some(lt) = logic_type { - Ok(lt - .get_str("value") - .ok_or_else(|| ICError::NoGeneratedValue(lt.to_string()))? - .parse::() - .map_err(|_| { - ICError::BadGeneratedValueParse(lt.to_string(), "u16".to_owned()) - })? as f64) - } else if let Some(slt) = slot_logic_type { - Ok(slt - .get_str("value") - .ok_or_else(|| ICError::NoGeneratedValue(slt.to_string()))? - .parse::() - .map_err(|_| { - ICError::BadGeneratedValueParse(slt.to_string(), "u8".to_owned()) - })? as f64) - } else if let Some(bm) = batch_mode { - Ok(bm - .get_str("value") - .ok_or_else(|| ICError::NoGeneratedValue(bm.to_string()))? - .parse::() - .map_err(|_| { - ICError::BadGeneratedValueParse(bm.to_string(), "u8".to_owned()) - })? as f64) - } else if let Some(rm) = reagent_mode { - Ok(rm - .get_str("value") - .ok_or_else(|| ICError::NoGeneratedValue(rm.to_string()))? - .parse::() - .map_err(|_| { - ICError::BadGeneratedValueParse(rm.to_string(), "u8".to_owned()) - })? as f64) - } else { - Err(interpreter::ICError::TypeValueNotKnown) - } - } - Operand::Identifier(id) => { - Err(interpreter::ICError::UnknownIdentifier(id.name.to_string())) - } - Operand::DeviceSpec { .. } => Err(interpreter::ICError::IncorrectOperandType { - inst, - index, - desired: "Value".to_owned(), - }), - } - } - - pub fn as_value_i64( - &self, - ic: &interpreter::IC, - signed: bool, - inst: InstructionOp, - index: u32, - ) -> Result { - match self { - Self::Number(num) => Ok(num.value_i64(signed)), - _ => { - let val = self.as_value(ic, inst, index)?; - if val < -9.223_372_036_854_776E18 { - Err(interpreter::ICError::ShiftUnderflowI64) - } else if val <= 9.223_372_036_854_776E18 { - Ok(interpreter::f64_to_i64(val, signed)) - } else { - Err(interpreter::ICError::ShiftOverflowI64) - } - } - } - } - pub fn as_value_i32( - &self, - ic: &interpreter::IC, - signed: bool, - inst: InstructionOp, - index: u32, - ) -> Result { - match self { - Self::Number(num) => Ok(num.value_i64(signed) as i32), - _ => { - let val = self.as_value(ic, inst, index)?; - if val < -2147483648.0 { - Err(interpreter::ICError::ShiftUnderflowI32) - } else if val <= 2147483647.0 { - Ok(val as i32) - } else { - Err(interpreter::ICError::ShiftOverflowI32) - } - } - } - } - - pub fn as_register( - &self, - ic: &interpreter::IC, - inst: InstructionOp, - index: u32, - ) -> Result { - match self.translate_alias(ic) { - Operand::RegisterSpec(reg) => Ok(reg), - Operand::Identifier(id) => { - Err(interpreter::ICError::UnknownIdentifier(id.name.to_string())) - } - _ => Err(interpreter::ICError::IncorrectOperandType { - inst, - index, - desired: "Register".to_owned(), - }), - } - } - - pub fn as_device( - &self, - ic: &interpreter::IC, - inst: InstructionOp, - index: u32, - ) -> Result<(Option, Option), interpreter::ICError> { - match self.translate_alias(ic) { - Operand::DeviceSpec(DeviceSpec { device, connection }) => match device { - Device::Db => Ok((Some(ic.device), connection)), - Device::Numbered(p) => { - let dp = ic - .pins - .borrow() - .get(p as usize) - .ok_or(interpreter::ICError::DeviceIndexOutOfRange(p as f64)) - .copied()?; - Ok((dp, connection)) - } - Device::Indirect { - indirection, - target, - } => { - let val = ic.get_register(indirection, target)?; - let dp = ic - .pins - .borrow() - .get(val as usize) - .ok_or(interpreter::ICError::DeviceIndexOutOfRange(val)) - .copied()?; - Ok((dp, connection)) - } - }, - Operand::Identifier(id) => { - Err(interpreter::ICError::UnknownIdentifier(id.name.to_string())) - } - _ => Err(interpreter::ICError::IncorrectOperandType { - inst, - index, - desired: "Value".to_owned(), - }), - } - } - - pub fn as_logic_type( - &self, - ic: &interpreter::IC, - inst: InstructionOp, - index: u32, - ) -> Result { - match &self { - Operand::Type { - logic_type: Some(lt), - .. - } => Ok(*lt), - _ => LogicType::try_from(self.as_value(ic, inst, index)?), - } - } - - pub fn as_slot_logic_type( - &self, - ic: &interpreter::IC, - inst: InstructionOp, - index: u32, - ) -> Result { - match &self { - Operand::Type { - slot_logic_type: Some(slt), - .. - } => Ok(*slt), - _ => SlotLogicType::try_from(self.as_value(ic, inst, index)?), - } - } - - pub fn as_batch_mode( - &self, - ic: &interpreter::IC, - inst: InstructionOp, - index: u32, - ) -> Result { - match &self { - Operand::Type { - batch_mode: Some(bm), - .. - } => Ok(*bm), - _ => BatchMode::try_from(self.as_value(ic, inst, index)?), - } - } - - pub fn as_reagent_mode( - &self, - ic: &interpreter::IC, - inst: InstructionOp, - index: u32, - ) -> Result { - match &self { - Operand::Type { - reagent_mode: Some(rm), - .. - } => Ok(*rm), - _ => ReagentMode::try_from(self.as_value(ic, inst, index)?), - } - } - - pub fn translate_alias(&self, ic: &interpreter::IC) -> Self { - match &self { - Operand::Identifier(id) | Operand::Type { identifier: id, .. } => { - if let Some(alias) = ic.aliases.borrow().get(&id.name) { - alias.clone() - } else if let Some(define) = ic.defines.borrow().get(&id.name) { - Operand::Number(Number::Float(*define)) - } else if let Some(label) = ic.program.borrow().labels.get(&id.name) { - Operand::Number(Number::Float(*label as f64)) - } else { - self.clone() - } - } - _ => self.clone(), - } - } -} - impl FromStr for Operand { type Err = ParseError; /// Parse a str containing an single instruction operand @@ -877,15 +469,13 @@ impl FromStr for Operand { } } else if let Some(val) = CONSTANTS_LOOKUP.get(s) { Ok(Operand::Number(Number::Constant(*val))) - } else if let Ok(val) = LogicEnums::from_str(s) { - Ok(Operand::Number(Number::Enum( - val.get_str("value").unwrap().parse().unwrap(), - ))) + } else if let Ok(val) = BasicEnum::from_str(s) { + Ok(Operand::Number(Number::Enum(val.get_value() as f64))) } else { let lt = LogicType::from_str(s).ok(); - let slt = SlotLogicType::from_str(s).ok(); - let bm = BatchMode::from_str(s).ok(); - let rm = ReagentMode::from_str(s).ok(); + let slt = LogicSlotType::from_str(s).ok(); + let bm = LogicBatchMethod::from_str(s).ok(); + let rm = LogicReagentMode::from_str(s).ok(); let identifier = Identifier::from_str(s)?; if lt.is_some() || slt.is_some() || bm.is_some() || rm.is_some() { Ok(Operand::Type { @@ -1010,11 +600,6 @@ impl FromStr for Label { } } -#[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] -pub struct Identifier { - pub name: String, -} - impl FromStr for Identifier { type Err = ParseError; fn from_str(s: &str) -> Result { @@ -1060,16 +645,6 @@ impl Display for Identifier { } } -#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] -pub enum Number { - Float(f64), - Binary(i64), - Hexadecimal(i64), - Constant(f64), - String(String), - Enum(f64), -} - impl Number { pub fn value(&self) -> f64 { match self { @@ -1081,7 +656,9 @@ impl Number { } pub fn value_i64(&self, signed: bool) -> i64 { match self { - Number::Enum(val) | Number::Float(val) | Number::Constant(val) => interpreter::f64_to_i64(*val, signed), + Number::Enum(val) | Number::Float(val) | Number::Constant(val) => { + interpreter::f64_to_i64(*val, signed) + } Number::Binary(val) | Number::Hexadecimal(val) => *val, Number::String(s) => const_crc32::crc32(s.as_bytes()) as i32 as i64, } @@ -1090,10 +667,22 @@ impl Number { #[cfg(test)] mod tests { + use color_eyre::eyre::Ok; + use strum::EnumProperty; + use super::*; + static INIT: std::sync::Once = std::sync::Once::new(); + + fn setup() { + INIT.call_once(|| { + let _ = color_eyre::install(); + }) + } + #[test] - fn parse_register() { + fn parse_register() -> color_eyre::Result<()> { + setup(); let op = "requestingot".parse::(); assert_eq!( op.unwrap(), @@ -1101,10 +690,12 @@ mod tests { name: "requestingot".to_owned() }) ); + Ok(()) } #[test] - fn successful_parse() { + fn successful_parse() -> color_eyre::Result<()> { + setup(); let parsed = parse("s d0 Setting 0 # This is a comment\n"); dbg!(&parsed); assert_eq!( @@ -1152,10 +743,12 @@ mod tests { comment: None, },], ); + Ok(()) } #[test] - fn parse_code_chunk() { + fn parse_code_chunk() -> color_eyre::Result<()> { + setup(); let code = "# This is a comment\n\ define a_def 10\n\ define a_hash HASH(\"This is a String\")\n\ @@ -1250,7 +843,7 @@ mod tests { }), Operand::Type { logic_type: Some(LogicType::On), - slot_logic_type: Some(SlotLogicType::On), + slot_logic_type: Some(LogicSlotType::On), batch_mode: None, reagent_mode: None, identifier: Identifier { @@ -1425,15 +1018,19 @@ mod tests { }, ], ); + Ok(()) } #[test] - fn test_operand_display() { + fn test_operand_display() -> color_eyre::Result<()> { + setup(); + #[track_caller] fn test_roundtrip(s: &str) { let o: Operand = s.parse().expect("test string should parse with FromStr"); assert_eq!(o.to_string(), s); } + test_roundtrip("r0"); test_roundtrip("r15"); test_roundtrip("rr4"); @@ -1459,9 +1056,9 @@ mod tests { test_roundtrip("1.2345"); test_roundtrip("-1.2345"); test_roundtrip(LogicType::Pressure.as_ref()); - test_roundtrip(SlotLogicType::Occupied.as_ref()); - test_roundtrip(BatchMode::Average.as_ref()); - test_roundtrip(ReagentMode::Recipe.as_ref()); + test_roundtrip(LogicSlotType::Occupied.as_ref()); + test_roundtrip(LogicBatchMethod::Average.as_ref()); + test_roundtrip(LogicReagentMode::Recipe.as_ref()); test_roundtrip("pi"); test_roundtrip("pinf"); test_roundtrip("ninf"); @@ -1469,48 +1066,58 @@ mod tests { test_roundtrip(r#"HASH("StructureFurnace")"#); test_roundtrip("$abcd"); test_roundtrip("%1001"); + Ok(()) } #[test] - fn all_generated_enums_have_value() { + fn all_generated_enums_have_value() -> color_eyre::Result<()> { + setup(); use strum::IntoEnumIterator; for lt in LogicType::iter() { println!("testing LogicType.{lt}"); let value = lt.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); + assert_eq!(lt as u16, value.unwrap().parse::().unwrap()); } - for slt in SlotLogicType::iter() { - println!("testing SlotLogicType.{slt}"); + for slt in LogicSlotType::iter() { + println!("testing LogicSlotType.{slt}"); let value = slt.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); + assert_eq!(slt as u8, value.unwrap().parse::().unwrap()); } - for bm in BatchMode::iter() { + for bm in LogicReagentMode::iter() { println!("testing BatchMode.{bm}"); let value = bm.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); + assert_eq!(bm as u8, value.unwrap().parse::().unwrap()); } - for rm in ReagentMode::iter() { + for rm in LogicReagentMode::iter() { println!("testing ReagentMode.{rm}"); let value = rm.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); + assert_eq!(rm as u8, value.unwrap().parse::().unwrap()); } - for le in LogicEnums::iter() { - println!("testing Enum.{le}"); + for le in BasicEnum::iter() { + println!("testing BasicEnum {le}"); let value = le.get_str("value"); assert!(value.is_some()); assert!(value.unwrap().parse::().is_ok()); + assert_eq!(le.get_value(), value.unwrap().parse::().unwrap()); } + Ok(()) } #[test] - fn bad_parse_does_not_panic() { + fn bad_parse_does_not_panic() -> color_eyre::Result<()> { + setup(); let code = "move foo -"; let parsed = parse(code); assert!(parsed.is_err()); println!("{}", parsed.unwrap_err()); + Ok(()) } } diff --git a/ic10emu/src/interpreter.rs b/ic10emu/src/interpreter.rs index 1094b51..70ec601 100644 --- a/ic10emu/src/interpreter.rs +++ b/ic10emu/src/interpreter.rs @@ -1,167 +1,54 @@ use core::f64; -use serde::{Deserialize, Serialize}; -use std::{ - cell::{Cell, RefCell}, - ops::Deref, - string::ToString, -}; +use serde_derive::{Deserialize, Serialize}; use std::{ collections::{BTreeMap, HashSet}, - error::Error, fmt::Display, u32, }; use itertools::Itertools; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; use time::format_description; use crate::{ - device::SlotType, - grammar::{self, LogicType, ParseError, SlotLogicType}, - vm::VM, + errors::{ICError, LineError}, + grammar, + vm::instructions::{enums::InstructionOp, operands::Operand, Instruction}, }; -use serde_with::serde_as; - -use thiserror::Error; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct LineError { - error: ICError, - line: u32, -} - -impl Display for LineError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "Error on line {}: {}", self.line, self.error) - } -} - -impl Error for LineError {} - -#[derive(Debug, Error, Clone, Serialize, Deserialize)] -pub enum ICError { - #[error("error compiling code: {0}")] - ParseError(#[from] ParseError), - #[error("duplicate label {0}")] - DuplicateLabel(String), - #[error("instruction pointer out of range: '{0}'")] - InstructionPointerOutOfRange(u32), - #[error("register pointer out of range: '{0}'")] - RegisterIndexOutOfRange(f64), - #[error("device pointer out of range: '{0}'")] - DeviceIndexOutOfRange(f64), - #[error("stack index out of range: '{0}'")] - StackIndexOutOfRange(f64), - #[error("slot index out of range: '{0}'")] - SlotIndexOutOfRange(f64), - #[error("pin index {0} out of range 0-6")] - PinIndexOutOfRange(usize), - #[error("connection index {0} out of range {1}")] - ConnectionIndexOutOfRange(usize, usize), - #[error("unknown device ID '{0}'")] - UnknownDeviceID(f64), - #[error("too few operands!: provide: '{provided}', desired: '{desired}'")] - TooFewOperands { provided: u32, desired: u32 }, - #[error("too many operands!: provide: '{provided}', desired: '{desired}'")] - TooManyOperands { provided: u32, desired: u32 }, - #[error("incorrect operand type for instruction `{inst}` operand {index}, not a {desired} ")] - IncorrectOperandType { - inst: grammar::InstructionOp, - index: u32, - desired: String, - }, - #[error("unknown identifier {0}")] - UnknownIdentifier(String), - #[error("device Not Set")] - DeviceNotSet, - #[error("shift Underflow i64(signed long)")] - ShiftUnderflowI64, - #[error("shift Overflow i64(signed long)")] - ShiftOverflowI64, - #[error("shift underflow i32(signed int)")] - ShiftUnderflowI32, - #[error("shift overflow i32(signed int)")] - ShiftOverflowI32, - #[error("stack underflow")] - StackUnderflow, - #[error("stack overflow")] - StackOverflow, - #[error("duplicate define '{0}'")] - DuplicateDefine(String), - #[error("read only field '{0}'")] - ReadOnlyField(String), - #[error("write only field '{0}'")] - WriteOnlyField(String), - #[error("device has no field '{0}'")] - DeviceHasNoField(String), - #[error("device has not ic")] - DeviceHasNoIC, - #[error("unknown device '{0}'")] - UnknownDeviceId(f64), - #[error("unknown logic type '{0}'")] - UnknownLogicType(f64), - #[error("unknown slot logic type '{0}'")] - UnknownSlotLogicType(f64), - #[error("unknown batch mode '{0}'")] - UnknownBatchMode(f64), - #[error("unknown reagent mode '{0}'")] - UnknownReagentMode(f64), - #[error("type value not known")] - TypeValueNotKnown, - #[error("empty device list")] - EmptyDeviceList, - #[error("connection specifier missing")] - MissingConnectionSpecifier, - #[error("no data network on connection '{0}'")] - NotACableConnection(usize), - #[error("network not connected on connection '{0}'")] - NetworkNotConnected(usize), - #[error("bad network Id '{0}'")] - BadNetworkId(u32), - #[error("channel index out of range '{0}'")] - ChannelIndexOutOfRange(usize), - #[error("slot has no occupant")] - SlotNotOccupied, - #[error("generated Enum {0} has no value attached. Report this error.")] - NoGeneratedValue(String), - #[error("generated Enum {0}'s value does not parse as {1} . Report this error.")] - BadGeneratedValueParse(String, String), -} - -impl ICError { - pub const fn too_few_operands(provided: usize, desired: u32) -> Self { - ICError::TooFewOperands { - provided: provided as u32, - desired, - } - } - - pub const fn too_many_operands(provided: usize, desired: u32) -> Self { - ICError::TooManyOperands { - provided: provided as u32, - desired, - } - } - - pub const fn mismatch_operands(provided: usize, desired: u32) -> Self { - if provided < desired as usize { - ICError::too_few_operands(provided, desired) - } else { - ICError::too_many_operands(provided, desired) - } - } -} +pub mod instructions; #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum ICState { Start, Running, Yield, - Sleep(time::OffsetDateTime, f64), - HasCaughtFire, + Sleep( + #[cfg_attr(feature = "tsify", tsify(type = "string"))] + #[serde(with = "time::serde::rfc3339")] + time::OffsetDateTime, + f64, + ), Error(LineError), + HasCaughtFire, + Ended, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ICInfo { + pub instruction_pointer: u32, + pub registers: Vec, + pub aliases: BTreeMap, + pub defines: BTreeMap, + pub labels: BTreeMap, + pub state: ICState, + pub yield_instruction_count: u16, } impl Display for ICState { @@ -169,7 +56,7 @@ impl Display for ICState { let out = match self { ICState::Start => "Not Run".to_owned(), ICState::Running => "Running".to_owned(), - ICState::Yield => "Ic has yielded, Resume on next tick".to_owned(), + ICState::Yield => "IC has yielded, Resume on next tick".to_owned(), ICState::Sleep(then, sleep_for) => { let format = format_description::parse("[hour]:[minute]:[second]").unwrap(); let resume = *then + time::Duration::new(*sleep_for as i64, 0); @@ -180,91 +67,16 @@ impl Display for ICState { } ICState::Error(err) => format!("{err}"), ICState::HasCaughtFire => "IC has caught fire! this is not a joke!".to_owned(), + ICState::Ended => "Program has reached the end of exacution".to_owned(), }; write!(f, "{out}") } } -#[derive(Debug)] -pub struct IC { - pub device: u32, - pub id: u32, - pub registers: RefCell<[f64; 18]>, - /// Instruction Pointer - pub ip: Cell, - /// Instruction Count since last yield - pub ic: Cell, - pub stack: RefCell<[f64; 512]>, - pub aliases: RefCell>, - pub defines: RefCell>, - pub pins: RefCell<[Option; 6]>, - pub code: RefCell, - pub program: RefCell, - pub state: RefCell, -} - -#[serde_as] -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct FrozenIC { - pub device: u32, - pub id: u32, - pub registers: [f64; 18], - /// Instruction Pointer - pub ip: u32, - /// Instruction Count since last yield - pub ic: u16, - #[serde_as(as = "[_; 512]")] - pub stack: [f64; 512], - pub aliases: BTreeMap, - pub defines: BTreeMap, - pub pins: [Option; 6], - pub state: ICState, - pub code: String, -} - -impl From for FrozenIC -where - T: Deref, -{ - fn from(ic: T) -> Self { - FrozenIC { - device: ic.device, - id: ic.id, - registers: *ic.registers.borrow(), - ip: ic.ip.get(), - ic: ic.ic.get(), - stack: *ic.stack.borrow(), - aliases: ic.aliases.borrow().clone(), - defines: ic.defines.borrow().clone(), - pins: *ic.pins.borrow(), - state: ic.state.borrow().clone(), - code: ic.code.borrow().clone(), - } - } -} - -impl From for IC { - fn from(value: FrozenIC) -> Self { - IC { - device: value.device, - id: value.id, - registers: RefCell::new(value.registers), - ip: Cell::new(value.ip), - ic: Cell::new(value.ic), - stack: RefCell::new(value.stack), - aliases: RefCell::new(value.aliases), - defines: RefCell::new(value.defines), - pins: RefCell::new(value.pins), - state: RefCell::new(value.state), - code: RefCell::new(value.code.clone()), - program: RefCell::new(Program::from_code_with_invalid(&value.code)), - } - } -} - #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub struct Program { - pub instructions: Vec, + pub instructions: Vec, pub errors: Vec, pub labels: BTreeMap, } @@ -284,6 +96,15 @@ impl Program { } } + pub fn len(&self) -> usize { + self.instructions.len() + } + + #[must_use] + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + pub fn try_from_code(code: &str) -> Result { let parse_tree = grammar::parse(code)?; let mut labels_set = HashSet::new(); @@ -293,19 +114,25 @@ impl Program { .into_iter() .enumerate() .map(|(line_number, line)| match line.code { - None => Ok(grammar::Instruction { - instruction: grammar::InstructionOp::Nop, + None => Ok(Instruction { + instruction: InstructionOp::Nop, operands: vec![], }), Some(code) => match code { grammar::Code::Label(label) => { if labels_set.contains(&label.id.name) { - Err(ICError::DuplicateLabel(label.id.name)) + let source_line = + labels.get(&label.id.name).copied().unwrap_or_default(); + Err(ICError::DuplicateLabel { + label: label.id.name, + line: line_number as u32, + source_line, + }) } else { labels_set.insert(label.id.name.clone()); labels.insert(label.id.name, line_number as u32); - Ok(grammar::Instruction { - instruction: grammar::InstructionOp::Nop, + Ok(Instruction { + instruction: InstructionOp::Nop, operands: vec![], }) } @@ -323,7 +150,7 @@ impl Program { } pub fn from_code_with_invalid(code: &str) -> Self { - let parse_tree = grammar::parse_with_invlaid(code); + let parse_tree = grammar::parse_with_invalid(code); let mut labels_set = HashSet::new(); let mut labels = BTreeMap::new(); let mut errors = Vec::new(); @@ -331,28 +158,34 @@ impl Program { .into_iter() .enumerate() .map(|(line_number, line)| match line.code { - None => grammar::Instruction { - instruction: grammar::InstructionOp::Nop, + None => Instruction { + instruction: InstructionOp::Nop, operands: vec![], }, Some(code) => match code { grammar::Code::Label(label) => { if labels_set.contains(&label.id.name) { - errors.push(ICError::DuplicateLabel(label.id.name)); + let source_line = + labels.get(&label.id.name).copied().unwrap_or_default(); + errors.push(ICError::DuplicateLabel { + label: label.id.name, + line: line_number as u32, + source_line, + }); } else { labels_set.insert(label.id.name.clone()); labels.insert(label.id.name, line_number as u32); } - grammar::Instruction { - instruction: grammar::InstructionOp::Nop, + Instruction { + instruction: InstructionOp::Nop, operands: vec![], } } grammar::Code::Instruction(instruction) => instruction, grammar::Code::Invalid(err) => { errors.push(err.into()); - grammar::Instruction { - instruction: grammar::InstructionOp::Nop, + Instruction { + instruction: InstructionOp::Nop, operands: vec![], } } @@ -366,2247 +199,14 @@ impl Program { } } - pub fn get_line(&self, line: u32) -> Result<&grammar::Instruction, ICError> { + pub fn get_line(&self, line: usize) -> Result { self.instructions - .get(line as usize) + .get(line) + .cloned() .ok_or(ICError::InstructionPointerOutOfRange(line)) } } -impl IC { - pub fn new(id: u32, device: u32) -> Self { - IC { - device, - id, - ip: Cell::new(0), - ic: Cell::new(0), - registers: RefCell::new([0.0; 18]), - stack: RefCell::new([0.0; 512]), - pins: RefCell::new([None; 6]), - program: RefCell::new(Program::new()), - code: RefCell::new(String::new()), - aliases: RefCell::new(BTreeMap::new()), - defines: RefCell::new(BTreeMap::new()), - state: RefCell::new(ICState::Start), - } - } - - pub fn reset(&self) { - self.ip.replace(0); - self.ic.replace(0); - self.registers.replace([0.0; 18]); - self.stack.replace([0.0; 512]); - self.aliases.replace(BTreeMap::new()); - self.defines.replace(BTreeMap::new()); - self.state.replace(ICState::Start); - } - - /// Set program code if it's valid - pub fn set_code(&self, code: &str) -> Result<(), ICError> { - let prog = Program::try_from_code(code)?; - self.program.replace(prog); - self.code.replace(code.to_string()); - Ok(()) - } - - /// Set program code and translate invalid lines to Nop, collecting errors - pub fn set_code_invalid(&mut self, code: &str) { - let prog = Program::from_code_with_invalid(code); - self.program.replace(prog); - self.code.replace(code.to_string()); - } - - pub fn get_real_target(&self, indirection: u32, target: u32) -> Result { - let mut i = indirection; - let mut t = target as f64; - while i > 0 { - if let Some(new_t) = self.registers.borrow().get(t as usize) { - t = *new_t; - } else { - return Err(ICError::RegisterIndexOutOfRange(t)); - } - i -= 1; - } - Ok(t) - } - - pub fn get_register(&self, indirection: u32, target: u32) -> Result { - let t = self.get_real_target(indirection, target)?; - self.registers - .borrow() - .get(t as usize) - .ok_or(ICError::RegisterIndexOutOfRange(t)) - .copied() - } - - /// sets a register thorough, recursing through provided indirection, returns value previously - pub fn set_register(&self, indirection: u32, target: u32, val: f64) -> Result { - let t = self.get_real_target(indirection, target)?; - let mut registers = self.registers.borrow_mut(); - let old_val = registers - .get(t as usize) - .ok_or(ICError::RegisterIndexOutOfRange(t)) - .copied()?; - registers[t as usize] = val; - Ok(old_val) - } - - /// save ip to 'ra' or register 18 - fn al(&self) { - self.registers.borrow_mut()[17] = self.ip() as f64 + 1.0; - } - - pub fn push(&self, val: f64) -> Result { - let mut registers = self.registers.borrow_mut(); - let mut stack = self.stack.borrow_mut(); - let sp = (registers[16].round()) as i32; - if sp < 0 { - Err(ICError::StackUnderflow) - } else if sp >= 512 { - Err(ICError::StackOverflow) - } else { - let last = stack[sp as usize]; - stack[sp as usize] = val; - registers[16] += 1.0; - Ok(last) - } - } - - pub fn pop(&self) -> Result { - let mut registers = self.registers.borrow_mut(); - registers[16] -= 1.0; - let sp = (registers[16].round()) as i32; - if sp < 0 { - Err(ICError::StackUnderflow) - } else if sp >= 512 { - Err(ICError::StackOverflow) - } else { - let last = self.stack.borrow()[sp as usize]; - Ok(last) - } - } - - pub fn poke(&self, address: f64, val: f64) -> Result { - let sp = address.round() as i32; - if !(0..512).contains(&sp) { - Err(ICError::StackIndexOutOfRange(address)) - } else { - let mut stack = self.stack.borrow_mut(); - let last = stack[sp as usize]; - stack[sp as usize] = val; - Ok(last) - } - } - - pub fn peek(&self) -> Result { - let sp = (self.registers.borrow()[16] - 1.0).round() as i32; - if sp < 0 { - Err(ICError::StackUnderflow) - } else if sp >= 512 { - Err(ICError::StackOverflow) - } else { - let last = self.stack.borrow()[sp as usize]; - Ok(last) - } - } - - pub fn peek_addr(&self, addr: f64) -> Result { - let sp = (addr) as i32; - if sp < 0 { - Err(ICError::StackUnderflow) - } else if sp >= 512 { - Err(ICError::StackOverflow) - } else { - let last = self.stack.borrow()[sp as usize]; - Ok(last) - } - } - - pub fn propgate_line_number(&self, vm: &VM) { - if let Some(device) = vm.devices.get(&self.device) { - let mut device_ref = device.borrow_mut(); - let _ = device_ref.set_field(LogicType::LineNumber, self.ip.get() as f64, vm, true); - if let Some(slot) = device_ref - .slots - .iter_mut() - .find(|slot| slot.typ == SlotType::ProgrammableChip) - { - let _ = slot.set_field(SlotLogicType::LineNumber, self.ip.get() as f64, true); - } - } - } - - /// processes one line of the contained program - pub fn step(&self, vm: &VM, advance_ip_on_err: bool) -> Result { - // TODO: handle sleep - self.state.replace(ICState::Running); - let line = self.ip(); - let result = self.internal_step(vm, advance_ip_on_err); - if let Err(error) = result { - let error = LineError { error, line }; - self.state.replace(ICState::Error(error.clone())); - Err(error) - } else { - Ok(true) - } - } - - pub fn ip(&self) -> u32 { - self.ip.get() - } - - pub fn set_ip(&self, val: u32) { - self.ip.replace(val); - } - - fn internal_step(&self, vm: &VM, advance_ip_on_err: bool) -> Result<(), ICError> { - use grammar::*; - use ICError::*; - - let mut next_ip = self.ip() + 1; - // XXX: This closure should be replaced with a try block - // https://github.com/rust-lang/rust/issues/31436 - let mut process_op = |this: &Self| -> Result<(), ICError> { - use grammar::InstructionOp::*; - - // force the program borrow to drop - let line = { - let prog = this.program.borrow(); - prog.get_line(this.ip())?.clone() - }; - let operands = &line.operands; - let inst = line.instruction; - match inst { - Nop => Ok(()), - Hcf => Ok(()), // TODO - Sleep => match &operands[..] { - [a] => { - let a = a.as_value(this, inst, 1)?; - let now = time::OffsetDateTime::now_local() - .unwrap_or_else(|_| time::OffsetDateTime::now_utc()); - this.state.replace(ICState::Sleep(now, a)); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 1)), - }, // TODO - Yield => match &operands[..] { - [] => { - this.state.replace(ICState::Yield); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 0)), - }, - Define => match &operands[..] { - [name, number] => { - let &Operand::Identifier(ident) = &name else { - return Err(IncorrectOperandType { - inst: line.instruction, - index: 1, - desired: "Name".to_owned(), - }); - }; - let &Operand::Number(num) = &number else { - return Err(IncorrectOperandType { - inst: line.instruction, - index: 2, - desired: "Number".to_owned(), - }); - }; - let mut defines = this.defines.borrow_mut(); - if defines.contains_key(&ident.name) { - Err(DuplicateDefine(ident.name.clone())) - } else { - defines.insert(ident.name.clone(), num.value()); - Ok(()) - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Alias => match &operands[..] { - [name, device_reg] => { - let &Operand::Identifier(ident) = &name else { - return Err(IncorrectOperandType { - inst: line.instruction, - index: 1, - desired: "Name".to_owned(), - }); - }; - let alias = match &device_reg { - Operand::RegisterSpec(RegisterSpec { - indirection, - target, - }) => Operand::RegisterSpec(RegisterSpec { - indirection: *indirection, - target: *target, - }), - Operand::DeviceSpec(DeviceSpec { device, connection }) => { - Operand::DeviceSpec(DeviceSpec { - device: *device, - connection: *connection, - }) - } - _ => { - return Err(IncorrectOperandType { - inst: line.instruction, - index: 2, - desired: "Device Or Register".to_owned(), - }) - } - }; - this.aliases.borrow_mut().insert(ident.name.clone(), alias); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Move => match &operands[..] { - [reg, val] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, line.instruction, 1)?; - - let val = val.as_value(this, inst, 2)?; - this.set_register(indirection, target, val)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - - Beq => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a == b { c as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Beqal => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a == b { c as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Breq => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a == b { - (this.ip() as f64 + c) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Beqz => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a == 0.0 { b as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Beqzal => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a == 0.0 { b as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Breqz => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a == 0.0 { - (this.ip() as f64 + b) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bne => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a != b { c as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bneal => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a != b { c as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Brne => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a != b { - (this.ip() as f64 + c) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bnez => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a != 0.0 { b as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bnezal => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a != 0.0 { b as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Brnez => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a != 0.0 { - (this.ip() as f64 + b) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Blt => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a < b { c as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bltal => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a < b { c as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Brlt => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a < b { - (this.ip() as f64 + c) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Ble => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a <= b { c as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bleal => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a <= b { c as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Brle => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a <= b { - (this.ip() as f64 + c) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Blez => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a <= 0.0 { b as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Blezal => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a <= 0.0 { b as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Brlez => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a <= 0.0 { - (this.ip() as f64 + b) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bltz => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a < 0.0 { b as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bltzal => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a < 0.0 { b as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Brltz => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a < 0.0 { - (this.ip() as f64 + b) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bgt => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a > b { c as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bgtal => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a > b { c as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Brgt => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a > b { - (this.ip() as f64 + c) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bgtz => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a > 0.0 { b as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bgtzal => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a > 0.0 { b as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Brgtz => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a > 0.0 { - (this.ip() as f64 + b) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bge => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a >= b { c as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bgeal => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a >= b { c as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Brge => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a >= b { - (this.ip() as f64 + c) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bgez => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a >= 0.0 { b as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bgezal => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a >= 0.0 { b as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Brgez => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a >= 0.0 { - (this.ip() as f64 + b) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bap => match &operands[..] { - [a, b, c, d] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - let d = d.as_value(this, inst, 4)?; - next_ip = if f64::abs(a - b) - <= f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) - { - d as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Bapal => match &operands[..] { - [a, b, c, d] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - let d = d.as_value(this, inst, 4)?; - next_ip = if f64::abs(a - b) - <= f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) - { - d as u32 - } else { - next_ip - }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Brap => match &operands[..] { - [a, b, c, d] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - let d = d.as_value(this, inst, 4)?; - next_ip = if f64::abs(a - b) - <= f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) - { - (this.ip() as f64 + d) as u32 - } else { - next_ip - }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Bapz => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { - c as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bapzal => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { - c as u32 - } else { - next_ip - }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Brapz => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { - (this.ip() as f64 + c) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bna => match &operands[..] { - [a, b, c, d] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - let d = d.as_value(this, inst, 4)?; - next_ip = if f64::abs(a - b) - > f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) - { - d as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Bnaal => match &operands[..] { - [a, b, c, d] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - let d = d.as_value(this, inst, 4)?; - next_ip = if f64::abs(a - b) - > f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) - { - d as u32 - } else { - next_ip - }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Brna => match &operands[..] { - [a, b, c, d] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - let d = d.as_value(this, inst, 4)?; - next_ip = if f64::abs(a - b) - > f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) - { - (this.ip() as f64 + d) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Bnaz => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { - c as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bnazal => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { - c as u32 - } else { - next_ip - }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Brnaz => match &operands[..] { - [a, b, c] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - let c = c.as_value(this, inst, 3)?; - next_ip = if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { - (this.ip() as f64 + c) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Bdse => match &operands[..] { - [d, a] => { - let (device, _connection) = d.as_device(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - next_ip = if device.is_some() { a as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bdseal => match &operands[..] { - [d, a] => { - let (device, _connection) = d.as_device(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - next_ip = if device.is_some() { a as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Brdse => match &operands[..] { - [d, a] => { - let (device, _connection) = d.as_device(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - next_ip = if device.is_some() { - (this.ip() as f64 + a) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bdns => match &operands[..] { - [d, a] => { - let (device, _connection) = d.as_device(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - next_ip = if device.is_none() { a as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bdnsal => match &operands[..] { - [d, a] => { - let (device, _connection) = d.as_device(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - next_ip = if device.is_none() { a as u32 } else { next_ip }; - this.al(); - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Brdns => match &operands[..] { - [d, a] => { - let (device, _connection) = d.as_device(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - next_ip = if device.is_none() { - (this.ip() as f64 + a) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Bnan => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a.is_nan() { b as u32 } else { next_ip }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Brnan => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - next_ip = if a.is_nan() { - (this.ip() as f64 + b) as u32 - } else { - next_ip - }; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - - J => match &operands[..] { - [a] => { - let a = a.as_value(this, inst, 1)?; - next_ip = a as u32; - Ok(()) - } - oprs => Err(ICError::too_many_operands(oprs.len(), 1)), - }, - Jal => match &operands[..] { - [a] => { - let a = a.as_value(this, inst, 1)?; - next_ip = a as u32; - this.al(); - Ok(()) - } - oprs => Err(ICError::too_many_operands(oprs.len(), 1)), - }, - Jr => match &operands[..] { - [a] => { - let a = a.as_value(this, inst, 1)?; - next_ip = (this.ip() as f64 + a) as u32; - Ok(()) - } - oprs => Err(ICError::too_many_operands(oprs.len(), 1)), - }, - - Seq => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, if a == b { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Seqz => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, if a == 0.0 { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sne => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, if a != b { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Snez => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, if a != 0.0 { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Slt => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, if a < b { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sltz => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, if a < 0.0 { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sle => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, if a <= b { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Slez => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, if a <= 0.0 { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sgt => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, if a > b { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sgtz => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, if a > 0.0 { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sge => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, if a >= b { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sgez => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, if a >= 0.0 { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sap => match &operands[..] { - [reg, a, b, c] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - let c = c.as_value(this, inst, 4)?; - this.set_register( - indirection, - target, - if f64::abs(a - b) - <= f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) - { - 1.0 - } else { - 0.0 - }, - )?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sapz => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register( - indirection, - target, - if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { - 1.0 - } else { - 0.0 - }, - )?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sna => match &operands[..] { - [reg, a, b, c] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - let c = c.as_value(this, inst, 4)?; - this.set_register( - indirection, - target, - if f64::abs(a - b) - > f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) - { - 1.0 - } else { - 0.0 - }, - )?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Snaz => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register( - indirection, - target, - if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { - 1.0 - } else { - 0.0 - }, - )?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sdse => match &operands[..] { - [reg, device] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let (device, _connection) = device.as_device(this, inst, 2)?; - this.set_register( - indirection, - target, - if device.is_some() { 1.0 } else { 0.0 }, - )?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Sdns => match &operands[..] { - [reg, device] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let (device, _connection) = device.as_device(this, inst, 2)?; - this.set_register( - indirection, - target, - if device.is_none() { 1.0 } else { 0.0 }, - )?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Snan => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, if a.is_nan() { 1.0 } else { 0.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Snanz => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, if a.is_nan() { 0.0 } else { 1.0 })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - - Select => match &operands[..] { - [reg, a, b, c] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - let c = c.as_value(this, inst, 4)?; - this.set_register(indirection, target, if a != 0.0 { b } else { c })?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - - Add => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, a + b)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sub => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, a - b)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Mul => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, a * b)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Div => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, a / b)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Mod => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 1)?; - let mut m = a % b; - if m < 0.0 { - m += b; - } - this.set_register(indirection, target, m)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Exp => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::exp(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Log => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::ln(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Sqrt => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::sqrt(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - - Max => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, f64::max(a, b))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Min => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, f64::min(a, b))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Ceil => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::ceil(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Floor => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::floor(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Abs => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::abs(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Round => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::round(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Trunc => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::trunc(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - - Rand => match &operands[..] { - [reg] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let val = vm.random_f64(); - this.set_register(indirection, target, val)?; - Ok(()) - } - oprs => Err(ICError::too_many_operands(oprs.len(), 1)), - }, - - Sin => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::sin(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Cos => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::cos(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Tan => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::tan(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Asin => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::asin(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Acos => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::acos(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Atan => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - this.set_register(indirection, target, f64::atan(a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Atan2 => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value(this, inst, 2)?; - let b = b.as_value(this, inst, 3)?; - this.set_register(indirection, target, f64::atan2(a, b))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - - Sll | Sla => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value_i64(this, true, inst, 2)?; - let b = b.as_value_i32(this, true, inst, 3)?; - this.set_register(indirection, target, i64_to_f64(a << b))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Srl => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value_i64(this, false, inst, 2)?; - let b = b.as_value_i32(this, true, inst, 3)?; - this.set_register(indirection, target, i64_to_f64((a as u64 >> b) as i64))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sra => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value_i64(this, true, inst, 2)?; - let b = b.as_value_i32(this, true, inst, 3)?; - this.set_register(indirection, target, i64_to_f64(a >> b))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - - And => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value_i64(this, true, inst, 2)?; - let b = b.as_value_i64(this, true, inst, 3)?; - this.set_register(indirection, target, i64_to_f64(a & b))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Or => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value_i64(this, true, inst, 2)?; - let b = b.as_value_i64(this, true, inst, 3)?; - this.set_register(indirection, target, i64_to_f64(a | b))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Xor => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value_i64(this, true, inst, 2)?; - let b = b.as_value_i64(this, true, inst, 3)?; - this.set_register(indirection, target, i64_to_f64(a ^ b))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Nor => match &operands[..] { - [reg, a, b] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value_i64(this, true, inst, 2)?; - let b = b.as_value_i64(this, true, inst, 3)?; - this.set_register(indirection, target, i64_to_f64(!(a | b)))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Not => match &operands[..] { - [reg, a] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let a = a.as_value_i64(this, true, inst, 2)?; - this.set_register(indirection, target, i64_to_f64(!a))?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - - Push => match &operands[..] { - [a] => { - let a = a.as_value(this, inst, 1)?; - this.push(a)?; - Ok(()) - } - oprs => Err(ICError::too_many_operands(oprs.len(), 1)), - }, - Pop => match &operands[..] { - [reg] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let val = this.pop()?; - this.set_register(indirection, target, val)?; - Ok(()) - } - oprs => Err(ICError::too_many_operands(oprs.len(), 1)), - }, - Poke => match &operands[..] { - [a, b] => { - let a = a.as_value(this, inst, 1)?; - let b = b.as_value(this, inst, 2)?; - this.poke(a, b)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 2)), - }, - Peek => match &operands[..] { - [reg] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let val = this.peek()?; - this.set_register(indirection, target, val)?; - Ok(()) - } - oprs => Err(ICError::too_many_operands(oprs.len(), 1)), - }, - - Get => match &operands[..] { - [reg, dev_id, addr] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let (Some(device_id), _connection) = dev_id.as_device(this, inst, 2)? - else { - return Err(DeviceNotSet); - }; - let device = vm.get_device_same_network(this.device, device_id); - match device { - Some(device) => match device.borrow().ic.as_ref() { - Some(ic_id) => { - let addr = addr.as_value(this, inst, 3)?; - let val = { - if ic_id == &this.id { - this.peek_addr(addr) - } else { - let ic = vm.ics.get(ic_id).unwrap().borrow(); - ic.peek_addr(addr) - } - }?; - this.set_register(indirection, target, val)?; - Ok(()) - } - None => Err(DeviceHasNoIC), - }, - None => Err(UnknownDeviceID(device_id as f64)), - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Getd => match &operands[..] { - [reg, dev_id, addr] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let (Some(device_id), _connection) = dev_id.as_device(this, inst, 2)? - else { - return Err(DeviceNotSet); - }; - let device = vm.get_device_same_network(this.device, device_id); - match device { - Some(device) => match device.borrow().ic.as_ref() { - Some(ic_id) => { - let addr = addr.as_value(this, inst, 3)?; - let val = { - if ic_id == &this.id { - this.peek_addr(addr) - } else { - let ic = vm.ics.get(ic_id).unwrap().borrow(); - ic.peek_addr(addr) - } - }?; - this.set_register(indirection, target, val)?; - Ok(()) - } - None => Err(DeviceHasNoIC), - }, - None => Err(UnknownDeviceID(device_id as f64)), - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Put => match &operands[..] { - [dev_id, addr, val] => { - let (Some(device_id), _connection) = dev_id.as_device(this, inst, 1)? - else { - return Err(DeviceNotSet); - }; - let device = vm.get_device_same_network(this.device, device_id); - match device { - Some(device) => match device.borrow().ic.as_ref() { - Some(ic_id) => { - let addr = addr.as_value(this, inst, 2)?; - let val = val.as_value(this, inst, 3)?; - if ic_id == &this.id { - this.poke(addr, val)?; - } else { - let ic = vm.ics.get(ic_id).unwrap().borrow(); - ic.poke(addr, val)?; - } - vm.set_modified(device_id); - Ok(()) - } - None => Err(DeviceHasNoIC), - }, - None => Err(UnknownDeviceID(device_id as f64)), - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Putd => match &operands[..] { - [dev_id, addr, val] => { - let device_id = dev_id.as_value(this, inst, 1)?; - if device_id >= u16::MAX as f64 || device_id < u16::MIN as f64 { - return Err(DeviceIndexOutOfRange(device_id)); - } - let device = vm.get_device_same_network(this.device, device_id as u32); - match device { - Some(device) => match device.borrow().ic.as_ref() { - Some(ic_id) => { - let addr = addr.as_value(this, inst, 2)?; - let val = val.as_value(this, inst, 3)?; - if ic_id == &this.id { - this.poke(addr, val)?; - } else { - let ic = vm.ics.get(ic_id).unwrap().borrow(); - ic.poke(addr, val)?; - } - vm.set_modified(device_id as u32); - Ok(()) - } - None => Err(DeviceHasNoIC), - }, - None => Err(UnknownDeviceID(device_id)), - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - - S => match &operands[..] { - [dev, lt, val] => { - let (Some(device_id), connection) = dev.as_device(this, inst, 1)? else { - return Err(DeviceNotSet); - }; - let lt = lt.as_logic_type(this, inst, 2)?; - if CHANNEL_LOGIC_TYPES.contains(<) { - let channel = lt.as_channel().unwrap(); - let Some(connection) = connection else { - return Err(MissingConnectionSpecifier); - }; - let network_id = vm - .get_device_same_network(this.device, device_id) - .map(|device| device.borrow().get_network_id(connection)) - .unwrap_or(Err(UnknownDeviceID(device_id as f64)))?; - let val = val.as_value(this, inst, 3)?; - vm.set_network_channel(network_id, channel, val)?; - return Ok(()); - } - let device = vm.get_device_same_network(this.device, device_id); - match device { - Some(device) => { - let val = val.as_value(this, inst, 1)?; - device.borrow_mut().set_field(lt, val, vm, false)?; - vm.set_modified(device_id); - Ok(()) - } - None => Err(UnknownDeviceID(device_id as f64)), - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sd => match &operands[..] { - [dev, lt, val] => { - let device_id = dev.as_value(this, inst, 1)?; - if device_id >= u16::MAX as f64 || device_id < u16::MIN as f64 { - return Err(DeviceIndexOutOfRange(device_id)); - } - let device = vm.get_device_same_network(this.device, device_id as u32); - match device { - Some(device) => { - let lt = lt.as_logic_type(this, inst, 2)?; - let val = val.as_value(this, inst, 3)?; - device.borrow_mut().set_field(lt, val, vm, false)?; - vm.set_modified(device_id as u32); - Ok(()) - } - None => Err(UnknownDeviceID(device_id)), - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Ss => match &operands[..] { - [dev, index, slt, val] => { - let (Some(device_id), _connection) = dev.as_device(this, inst, 1)? else { - return Err(DeviceNotSet); - }; - let device = vm.get_device_same_network(this.device, device_id); - match device { - Some(device) => { - let index = index.as_value(this, inst, 2)?; - let slt = slt.as_slot_logic_type(this, inst, 3)?; - let val = val.as_value(this, inst, 4)?; - device - .borrow_mut() - .set_slot_field(index, slt, val, vm, false)?; - vm.set_modified(device_id); - Ok(()) - } - None => Err(UnknownDeviceID(device_id as f64)), - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Sb => match &operands[..] { - [prefab, lt, val] => { - let prefab = prefab.as_value(this, inst, 1)?; - let lt = lt.as_logic_type(this, inst, 2)?; - let val = val.as_value(this, inst, 3)?; - vm.set_batch_device_field(this.device, prefab, lt, val, false)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Sbs => match &operands[..] { - [prefab, index, slt, val] => { - let prefab = prefab.as_value(this, inst, 1)?; - let index = index.as_value(this, inst, 2)?; - let slt = slt.as_slot_logic_type(this, inst, 3)?; - let val = val.as_value(this, inst, 4)?; - vm.set_batch_device_slot_field( - this.device, - prefab, - index, - slt, - val, - false, - )?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Sbn => match &operands[..] { - [prefab, name, lt, val] => { - let prefab = prefab.as_value(this, inst, 1)?; - let name = name.as_value(this, inst, 2)?; - let lt = lt.as_logic_type(this, inst, 3)?; - let val = val.as_value(this, inst, 4)?; - vm.set_batch_name_device_field(this.device, prefab, name, lt, val, false)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - - L => match &operands[..] { - [reg, dev, lt] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let (Some(device_id), connection) = dev.as_device(this, inst, 2)? else { - return Err(DeviceNotSet); - }; - let lt = lt.as_logic_type(this, inst, 3)?; - if CHANNEL_LOGIC_TYPES.contains(<) { - let channel = lt.as_channel().unwrap(); - let Some(connection) = connection else { - return Err(MissingConnectionSpecifier); - }; - let network_id = vm - .get_device_same_network(this.device, device_id) - .map(|device| device.borrow().get_network_id(connection)) - .unwrap_or(Err(UnknownDeviceID(device_id as f64)))?; - let val = vm.get_network_channel(network_id, channel)?; - this.set_register(indirection, target, val)?; - return Ok(()); - } - if lt == LogicType::LineNumber && this.device == device_id { - // HACK: we can't use device.get_field as that will try to reborrow our - // ic which will panic - this.set_register(indirection, target, this.ip() as f64)?; - Ok(()) - } else { - let device = vm.get_device_same_network(this.device, device_id); - match device { - Some(device) => { - let val = device.borrow().get_field(lt, vm)?; - this.set_register(indirection, target, val)?; - Ok(()) - } - None => Err(UnknownDeviceID(device_id as f64)), - } - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Ld => match &operands[..] { - [reg, dev, lt] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let device_id = dev.as_value(this, inst, 2)?; - if device_id >= u16::MAX as f64 || device_id < u16::MIN as f64 { - return Err(DeviceIndexOutOfRange(device_id)); - } - let lt = lt.as_logic_type(this, inst, 3)?; - if lt == LogicType::LineNumber && this.device == device_id as u32 { - // HACK: we can't use device.get_field as that will try to reborrow our - // ic which will panic - this.set_register(indirection, target, this.ip() as f64)?; - Ok(()) - } else { - let device = vm.get_device_same_network(this.device, device_id as u32); - match device { - Some(device) => { - let val = device.borrow().get_field(lt, vm)?; - this.set_register(indirection, target, val)?; - Ok(()) - } - None => Err(UnknownDeviceID(device_id)), - } - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 3)), - }, - Ls => match &operands[..] { - [reg, dev, index, slt] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let (Some(device_id), _connection) = dev.as_device(this, inst, 2)? else { - return Err(DeviceNotSet); - }; - let slt = slt.as_slot_logic_type(this, inst, 4)?; - if slt == SlotLogicType::LineNumber && this.device == device_id { - // HACK: we can't use device.get_slot_field as that will try to reborrow our - // ic which will panic - this.set_register(indirection, target, this.ip() as f64)?; - Ok(()) - } else { - let device = vm.get_device_same_network(this.device, device_id); - match device { - Some(device) => { - let index = index.as_value(this, inst, 3)?; - let val = device.borrow().get_slot_field(index, slt, vm)?; - this.set_register(indirection, target, val)?; - Ok(()) - } - None => Err(UnknownDeviceID(device_id as f64)), - } - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Lr => match &operands[..] { - [reg, dev, rm, name] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let (Some(device_id), _connection) = dev.as_device(this, inst, 2)? else { - return Err(DeviceNotSet); - }; - let device = vm.get_device_same_network(this.device, device_id); - match device { - Some(device) => { - let rm = rm.as_reagent_mode(this, inst, 3)?; - let name = name.as_value(this, inst, 4)?; - let val = device.borrow().get_reagent(&rm, name); - this.set_register(indirection, target, val)?; - Ok(()) - } - None => Err(UnknownDeviceID(device_id as f64)), - } - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Lb => match &operands[..] { - [reg, prefab, lt, bm] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let prefab = prefab.as_value(this, inst, 2)?; - let lt = lt.as_logic_type(this, inst, 3)?; - let bm = bm.as_batch_mode(this, inst, 4)?; - let val = vm.get_batch_device_field(this.device, prefab, lt, bm)?; - this.set_register(indirection, target, val)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 4)), - }, - Lbn => match &operands[..] { - [reg, prefab, name, lt, bm] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let prefab = prefab.as_value(this, inst, 2)?; - let name = name.as_value(this, inst, 3)?; - let lt = lt.as_logic_type(this, inst, 4)?; - let bm = bm.as_batch_mode(this, inst, 5)?; - let val = - vm.get_batch_name_device_field(this.device, prefab, name, lt, bm)?; - this.set_register(indirection, target, val)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 5)), - }, - Lbns => match &operands[..] { - [reg, prefab, name, index, slt, bm] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let prefab = prefab.as_value(this, inst, 2)?; - let name = name.as_value(this, inst, 3)?; - let index = index.as_value(this, inst, 4)?; - let slt = slt.as_slot_logic_type(this, inst, 5)?; - let bm = bm.as_batch_mode(this, inst, 6)?; - let val = vm.get_batch_name_device_slot_field( - this.device, - prefab, - name, - index, - slt, - bm, - )?; - this.set_register(indirection, target, val)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 6)), - }, - Lbs => match &operands[..] { - [reg, prefab, index, slt, bm] => { - let RegisterSpec { - indirection, - target, - } = reg.as_register(this, inst, 1)?; - let prefab = prefab.as_value(this, inst, 2)?; - let index = index.as_value(this, inst, 3)?; - let slt = slt.as_slot_logic_type(this, inst, 4)?; - let bm = bm.as_batch_mode(this, inst, 5)?; - let val = - vm.get_batch_device_slot_field(this.device, prefab, index, slt, bm)?; - this.set_register(indirection, target, val)?; - Ok(()) - } - oprs => Err(ICError::mismatch_operands(oprs.len(), 5)), - }, - } - }; - let result = process_op(self); - if result.is_ok() || advance_ip_on_err { - self.ic.set(self.ic.get() + 1); - self.set_ip(next_ip); - self.propgate_line_number(vm); - } - result - } -} - -#[allow(dead_code)] -const CHANNEL_LOGIC_TYPES: [grammar::LogicType; 8] = [ - grammar::LogicType::Channel0, - grammar::LogicType::Channel1, - grammar::LogicType::Channel2, - grammar::LogicType::Channel3, - grammar::LogicType::Channel4, - grammar::LogicType::Channel5, - grammar::LogicType::Channel6, - grammar::LogicType::Channel7, -]; - -trait LogicTypeExt { - fn as_channel(&self) -> Option; -} -impl LogicTypeExt for grammar::LogicType { - fn as_channel(&self) -> Option { - match self { - grammar::LogicType::Channel0 => Some(0), - grammar::LogicType::Channel1 => Some(1), - grammar::LogicType::Channel2 => Some(2), - grammar::LogicType::Channel3 => Some(3), - grammar::LogicType::Channel4 => Some(4), - grammar::LogicType::Channel5 => Some(5), - grammar::LogicType::Channel6 => Some(6), - grammar::LogicType::Channel7 => Some(7), - _ => None, - } - } -} - pub fn f64_to_i64(f: f64, signed: bool) -> i64 { let mut num: i64 = (f % (1i64 << 53) as f64) as i64; if !signed { @@ -2626,48 +226,103 @@ pub fn i64_to_f64(i: i64) -> f64 { #[cfg(test)] mod tests { - use crate::vm::VMError; + use std::rc::Rc; - use super::*; + use stationeers_data::enums::prefabs::StationpediaPrefab; + + use crate::vm::{ + object::{ + templates::{FrozenObject, ObjectInfo, Prefab}, + ObjectID, + }, + VM, + }; + + static INIT: std::sync::Once = std::sync::Once::new(); + + fn setup() -> color_eyre::Result<(Rc, ObjectID, ObjectID)> { + INIT.call_once(|| { + let _ = color_eyre::install(); + }); + + println!("building VM"); + let vm = VM::new(); + + println!("VM built"); + + let frozen_ic = FrozenObject { + obj_info: ObjectInfo::with_prefab(Prefab::Name( + StationpediaPrefab::ItemIntegratedCircuit10.to_string(), + )), + database_template: true, + template: None, + }; + + println!("Adding IC"); + let ic = vm.add_object_frozen(frozen_ic)?; + let frozen_circuit_holder = FrozenObject { + obj_info: ObjectInfo::with_prefab(Prefab::Name( + StationpediaPrefab::StructureCircuitHousing.to_string(), + )), + database_template: true, + template: None, + }; + println!("Adding circuit holder"); + let ch = vm.add_object_frozen(frozen_circuit_holder)?; + println!("socketing ic into circuit holder"); + vm.set_slot_occupant(ch, 0, Some(ic), 1)?; + Ok((vm, ch, ic)) + } #[test] - fn batch_modes() -> Result<(), VMError> { - let mut vm = VM::new(); - let ic = vm.add_ic(None).unwrap(); - let ic_id = { - let device = vm.devices.get(&ic).unwrap(); - let device_ref = device.borrow(); - device_ref.ic.unwrap() - }; - let ic_chip = vm.ics.get(&ic_id).unwrap().borrow(); + fn batch_modes() -> color_eyre::Result<()> { + let (vm, ch, ic) = setup()?; + eprintln!("Beginning batch mode test"); + let ic_chip = vm.get_object(ic).unwrap(); + let circuit_holder = vm.get_object(ch).unwrap(); + eprintln!("IC Chip: {ic_chip:?}"); + eprintln!("Circuit Holder: {circuit_holder:?}"); vm.set_code( ic, r#"lb r0 HASH("ItemActiveVent") On Sum lb r1 HASH("ItemActiveVent") On Maximum lb r2 HASH("ItemActiveVent") On Minimum"#, )?; - vm.step_ic(ic, false)?; - let r0 = ic_chip.get_register(0, 0).unwrap(); + vm.step_programmable(ic, false)?; + let r0 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_register(0, 0) + .unwrap(); assert_eq!(r0, 0.0); - vm.step_ic(ic, false)?; - let r1 = ic_chip.get_register(0, 1).unwrap(); + vm.step_programmable(ic, false)?; + let r1 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_register(0, 1) + .unwrap(); assert_eq!(r1, f64::NEG_INFINITY); - vm.step_ic(ic, false)?; - let r2 = ic_chip.get_register(0, 2).unwrap(); + vm.step_programmable(ic, false)?; + let r2 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_register(0, 2) + .unwrap(); assert_eq!(r2, f64::INFINITY); Ok(()) } #[test] - fn stack() -> Result<(), VMError> { - let mut vm = VM::new(); - let ic = vm.add_ic(None).unwrap(); - let ic_id = { - let device = vm.devices.get(&ic).unwrap(); - let device_ref = device.borrow(); - device_ref.ic.unwrap() - }; - let ic_chip = vm.ics.get(&ic_id).unwrap().borrow(); + fn stack() -> color_eyre::Result<()> { + let (vm, ch, ic) = setup()?; + eprintln!("Beginning stack test"); + let ic_chip = vm.get_object(ic).unwrap(); + let circuit_holder = vm.get_object(ch).unwrap(); + eprintln!("IC Chip: {ic_chip:?}"); + eprintln!("Circuit Holder: {circuit_holder:?}"); vm.set_code( ic, r#"push 100 @@ -2679,26 +334,57 @@ mod tests { pop r2 "#, )?; - vm.step_ic(ic, false)?; - let stack0 = ic_chip.peek_addr(0.0)?; + vm.step_programmable(ic, false)?; + let stack0 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_stack(0.0)?; assert_eq!(stack0, 100.0); - vm.step_ic(ic, false)?; - let stack1 = ic_chip.peek_addr(1.0)?; + vm.step_programmable(ic, false)?; + let stack1 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_stack(1.0)?; assert_eq!(stack1, 10.0); - vm.step_ic(ic, false)?; - let r0 = ic_chip.get_register(0, 0).unwrap(); + vm.step_programmable(ic, false)?; + let r0 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_register(0, 0) + .unwrap(); assert_eq!(r0, 10.0); - vm.step_ic(ic, false)?; - let stack1 = ic_chip.peek_addr(1.0)?; + vm.step_programmable(ic, false)?; + let stack1 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_stack(1.0)?; assert_eq!(stack1, 1000.0); - vm.step_ic(ic, false)?; - let r1 = ic_chip.get_register(0, 1).unwrap(); + vm.step_programmable(ch, false)?; + let r1 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_register(0, 1) + .unwrap(); assert_eq!(r1, 1000.0); - vm.step_ic(ic, false)?; - let stack1 = ic_chip.peek_addr(1.0)?; + vm.step_programmable(ch, false)?; + let stack1 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_stack(1.0)?; assert_eq!(stack1, 20.0); - vm.step_ic(ic, false)?; - let r2 = ic_chip.get_register(0, 2).unwrap(); + vm.step_programmable(ch, false)?; + let r2 = ic_chip + .borrow() + .as_integrated_circuit() + .unwrap() + .get_register(0, 2) + .unwrap(); assert_eq!(r2, 20.0); Ok(()) } diff --git a/ic10emu/src/interpreter/instructions.rs b/ic10emu/src/interpreter/instructions.rs new file mode 100644 index 0000000..6322378 --- /dev/null +++ b/ic10emu/src/interpreter/instructions.rs @@ -0,0 +1,2756 @@ +use crate::{ + errors::ICError, + interpreter::{i64_to_f64, ICState}, + vm::{ + instructions::{ + operands::{InstOperand, RegisterSpec}, + traits::*, + }, + object::{ + errors::{LogicError, MemoryError}, + traits::*, + ObjectID, + }, + }, +}; +use stationeers_data::enums::script::LogicReagentMode; +pub trait IC10Marker: IntegratedCircuit {} + +impl SleepInstruction for T { + /// sleep a(r?|num) + fn execute_inner(&mut self, a: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let now = + time::OffsetDateTime::now_local().unwrap_or_else(|_| time::OffsetDateTime::now_utc()); + self.set_state(ICState::Sleep(now, a)); + Ok(()) + } +} + +impl YieldInstruction for T { + /// yield + fn execute_inner(&mut self) -> Result<(), ICError> { + self.set_state(ICState::Yield); + Ok(()) + } +} + +impl DefineInstruction for T { + /// define str num + fn execute_inner(&mut self, string: &InstOperand, num: &InstOperand) -> Result<(), ICError> { + let ident = string.as_ident()?; + let num = num.as_number()?; + if self.get_defines().contains_key(&ident.name) { + Err(ICError::DuplicateDefine(ident.name.clone())) + } else { + self.get_defines_mut() + .insert(ident.name.clone(), num.value()); + Ok(()) + } + } +} + +impl AliasInstruction for T { + /// alias str r?|d? + fn execute_inner(&mut self, string: &InstOperand, r: &InstOperand) -> Result<(), ICError> { + let ident = string.as_ident()?; + let alias = r.as_aliasable()?; + self.get_aliases_mut().insert(ident.name.clone(), alias); + Ok(()) + } +} + +impl MoveInstruction for T { + /// move r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + + let val = a.as_value(self)?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl BeqInstruction for T { + /// beq a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a == b { + self.set_next_instruction(c); + } + Ok(()) + } +} +impl BeqalInstruction for T { + /// beqal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a == b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BreqInstruction for T { + /// breq a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a == b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BeqzInstruction for T { + /// beqz a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a == 0.0 { + self.set_next_instruction(b) + } + Ok(()) + } +} + +impl BeqzalInstruction for T { + /// beqzal a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a == 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BreqzInstruction for T { + /// breqz a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a == 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl BneInstruction for T { + /// bne a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a != b { + self.set_next_instruction(c); + } + Ok(()) + } +} + +impl BnealInstruction for T { + /// bneal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a != b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrneInstruction for T { + /// brne a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a != b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BnezInstruction for T { + /// bnez a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a != 0.0 { + self.set_next_instruction(b) + } + Ok(()) + } +} + +impl BnezalInstruction for T { + /// bnezal a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a != 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrnezInstruction for T { + /// brnez a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a != 0.0 { + self.set_next_instruction_relative(b) + } + Ok(()) + } +} + +impl BltInstruction for T { + /// blt a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a < b { + self.set_next_instruction(c); + } + Ok(()) + } +} + +impl BltalInstruction for T { + /// bltal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a < b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrltInstruction for T { + /// brlt a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a < b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BltzInstruction for T { + /// bltz a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a < 0.0 { + self.set_next_instruction(b); + } + Ok(()) + } +} + +impl BltzalInstruction for T { + /// bltzal a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a < 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrltzInstruction for T { + /// brltz a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a < 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl BleInstruction for T { + /// ble a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a <= b { + self.set_next_instruction(c); + } + Ok(()) + } +} +impl BlealInstruction for T { + /// bleal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a <= b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrleInstruction for T { + /// brle a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a <= b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BlezInstruction for T { + /// blez a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a <= 0.0 { + self.set_next_instruction(b); + } + Ok(()) + } +} + +impl BlezalInstruction for T { + /// blezal a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a <= 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrlezInstruction for T { + /// brlez a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a <= 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl BgtInstruction for T { + /// bgt a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a > b { + self.set_next_instruction(c); + } + Ok(()) + } +} +impl BgtalInstruction for T { + /// bgtal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a > b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrgtInstruction for T { + /// brgt a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a > b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BgtzInstruction for T { + /// bgtz a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a > 0.0 { + self.set_next_instruction(b); + } + Ok(()) + } +} + +impl BgtzalInstruction for T { + /// bgtzal a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a > 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrgtzInstruction for T { + /// brgtz a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a > 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl BgeInstruction for T { + /// bge a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a >= b { + self.set_next_instruction(c); + } + Ok(()) + } +} + +impl BgealInstruction for T { + /// bgeal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a >= b { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrgeInstruction for T { + /// brge a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a >= b { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BgezInstruction for T { + /// bgez a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a >= 0.0 { + self.set_next_instruction(b); + } + Ok(()) + } +} + +impl BgezalInstruction for T { + /// bgezal a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a >= 0.0 { + self.set_next_instruction(b); + self.al(); + } + Ok(()) + } +} + +impl BrgezInstruction for T { + /// brgez a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a >= 0.0 { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl BapInstruction for T { + /// bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + d: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + let d = d.as_value(self)?; + if f64::abs(a - b) <= f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) { + self.set_next_instruction(d); + } + Ok(()) + } +} + +impl BapalInstruction for T { + /// bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + d: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + let d = d.as_value(self)?; + if f64::abs(a - b) <= f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) { + self.set_next_instruction(d); + self.al(); + } + Ok(()) + } +} + +impl BrapInstruction for T { + /// brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + d: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + let d = d.as_value(self)?; + if f64::abs(a - b) <= f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) { + self.set_next_instruction_relative(d); + } + Ok(()) + } +} + +impl BapzInstruction for T { + /// bapz a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { + } else { + self.set_next_instruction(c); + } + Ok(()) + } +} + +impl BapzalInstruction for T { + /// bapzal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { + } else { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} + +impl BrapzInstruction for T { + /// brapz a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { + } else { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} + +impl BnaInstruction for T { + /// bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + d: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + let d = d.as_value(self)?; + if f64::abs(a - b) > f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) { + self.set_next_instruction(d); + } + Ok(()) + } +} +impl BnaalInstruction for T { + /// bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + d: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + let d = d.as_value(self)?; + if f64::abs(a - b) > f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) { + self.set_next_instruction(d); + self.al(); + } + Ok(()) + } +} +impl BrnaInstruction for T { + /// brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + d: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + let d = d.as_value(self)?; + if f64::abs(a - b) > f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) { + self.set_next_instruction_relative(d); + } + Ok(()) + } +} + +impl BnazInstruction for T { + /// bnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { + self.set_next_instruction(c); + } + Ok(()) + } +} +impl BnazalInstruction for T { + /// bnazal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { + self.set_next_instruction(c); + self.al(); + } + Ok(()) + } +} +impl BrnazInstruction for T { + /// brnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { + self.set_next_instruction_relative(c); + } + Ok(()) + } +} +impl BdseInstruction for T { + /// bdse d? a(r?|num) + fn execute_inner(&mut self, d: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let a = a.as_value(self)?; + if self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .is_some() + { + self.set_next_instruction(a); + } + Ok(()) + } +} + +impl BdsealInstruction for T { + /// bdseal d? a(r?|num) + fn execute_inner(&mut self, d: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let a = a.as_value(self)?; + if self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .is_some() + { + self.set_next_instruction(a); + self.al(); + } + Ok(()) + } +} + +impl BrdseInstruction for T { + /// brdse d? a(r?|num) + fn execute_inner(&mut self, d: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let a = a.as_value(self)?; + if self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .is_some() + { + self.set_next_instruction_relative(a); + } + Ok(()) + } +} + +impl BdnsInstruction for T { + /// bdns d? a(r?|num) + fn execute_inner(&mut self, d: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let a = a.as_value(self)?; + if self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .is_none() + { + self.set_next_instruction(a); + } + Ok(()) + } +} + +impl BdnsalInstruction for T { + /// bdnsal d? a(r?|num) + fn execute_inner(&mut self, d: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let a = a.as_value(self)?; + if self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .is_none() + { + self.set_next_instruction(a); + self.al(); + } + Ok(()) + } +} + +impl BrdnsInstruction for T { + /// brdns d? a(r?|num) + fn execute_inner(&mut self, d: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let a = a.as_value(self)?; + if self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .is_none() + { + self.set_next_instruction_relative(a); + } + Ok(()) + } +} + +impl BnanInstruction for T { + /// bnan a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a.is_nan() { + self.set_next_instruction(b); + } + Ok(()) + } +} + +impl BrnanInstruction for T { + /// brnan a(r?|num) b(r?|num) + fn execute_inner(&mut self, a: &InstOperand, b: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + let b = b.as_value(self)?; + if a.is_nan() { + self.set_next_instruction_relative(b); + } + Ok(()) + } +} + +impl JInstruction for T { + /// j int + fn execute_inner(&mut self, int: &InstOperand) -> Result<(), ICError> { + let int = int.as_value(self)?; + self.set_next_instruction(int); + Ok(()) + } +} +impl JalInstruction for T { + /// jal int + fn execute_inner(&mut self, int: &InstOperand) -> Result<(), ICError> { + let int = int.as_value(self)?; + self.set_next_instruction(int); + self.al(); + Ok(()) + } +} +impl JrInstruction for T { + /// jr int + fn execute_inner(&mut self, int: &InstOperand) -> Result<(), ICError> { + let int = int.as_value(self)?; + self.set_next_instruction_relative(int); + Ok(()) + } +} +impl SeqInstruction for T { + /// seq r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, if a == b { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SeqzInstruction for T { + /// seqz r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, if a == 0.0 { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SneInstruction for T { + /// sne r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, if a != b { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SnezInstruction for T { + /// snez r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, if a != 0.0 { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SltInstruction for T { + /// slt r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, if a < b { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SltzInstruction for T { + /// sltz r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, if a < 0.0 { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SleInstruction for T { + /// sle r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, if a <= b { 1.0 } else { 0.0 })?; + Ok(()) + } +} +impl SlezInstruction for T { + /// slez r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, if a <= 0.0 { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SgtInstruction for T { + /// sgt r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, if a > b { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SgtzInstruction for T { + /// sgtz r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, if a > 0.0 { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SgeInstruction for T { + /// sge r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, if a >= b { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SgezInstruction for T { + /// sgez r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, if a >= 0.0 { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SapInstruction for T { + /// sap r? a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + self.set_register( + indirection, + target, + if f64::abs(a - b) <= f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) { + 1.0 + } else { + 0.0 + }, + )?; + Ok(()) + } +} + +impl SapzInstruction for T { + /// sapz r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register( + indirection, + target, + if a.abs() <= f64::max(b * a.abs(), f64::EPSILON * 8.0) { + 1.0 + } else { + 0.0 + }, + )?; + Ok(()) + } +} + +impl SnaInstruction for T { + /// sna r? a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + self.set_register( + indirection, + target, + if f64::abs(a - b) > f64::max(c * f64::max(a.abs(), b.abs()), f64::EPSILON * 8.0) { + 1.0 + } else { + 0.0 + }, + )?; + Ok(()) + } +} + +impl SnazInstruction for T { + /// snaz r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register( + indirection, + target, + if a.abs() > f64::max(b * a.abs(), f64::EPSILON * 8.0) { + 1.0 + } else { + 0.0 + }, + )?; + Ok(()) + } +} + +impl SdseInstruction for T { + /// sdse r? d? + fn execute_inner(&mut self, r: &InstOperand, d: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let (device, connection) = d.as_device(self)?; + let is_some = { + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .is_some() + }; + self.set_register(indirection, target, if is_some { 1.0 } else { 0.0 })?; + Ok(()) + } +} +impl SdnsInstruction for T { + /// sdns r? d? + fn execute_inner(&mut self, r: &InstOperand, d: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let (device, connection) = d.as_device(self)?; + let is_none = { + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .is_none() + }; + self.set_register(indirection, target, if is_none { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SnanInstruction for T { + /// snan r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, if a.is_nan() { 1.0 } else { 0.0 })?; + Ok(()) + } +} + +impl SnanzInstruction for T { + /// snanz r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, if a.is_nan() { 0.0 } else { 1.0 })?; + Ok(()) + } +} + +impl SelectInstruction for T { + /// select r? a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + c: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let c = c.as_value(self)?; + self.set_register(indirection, target, if a != 0.0 { b } else { c })?; + Ok(()) + } +} + +impl AddInstruction for T { + /// add r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, a + b)?; + Ok(()) + } +} + +impl SubInstruction for T { + /// sub r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, a - b)?; + Ok(()) + } +} +impl MulInstruction for T { + /// mul r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, a * b)?; + Ok(()) + } +} +impl DivInstruction for T { + /// div r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, a / b)?; + Ok(()) + } +} + +impl ModInstruction for T { + /// mod r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + let mut m = a % b; + if m < 0.0 { + m += b; + } + self.set_register(indirection, target, m)?; + Ok(()) + } +} + +impl ExpInstruction for T { + /// exp r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::exp(a))?; + Ok(()) + } +} + +impl LogInstruction for T { + /// log r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::ln(a))?; + Ok(()) + } +} + +impl SqrtInstruction for T { + /// sqrt r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::sqrt(a))?; + Ok(()) + } +} + +impl MaxInstruction for T { + /// max r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, f64::max(a, b))?; + Ok(()) + } +} + +impl MinInstruction for T { + /// min r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, f64::min(a, b))?; + Ok(()) + } +} +impl CeilInstruction for T { + /// ceil r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::ceil(a))?; + Ok(()) + } +} + +impl FloorInstruction for T { + /// floor r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::floor(a))?; + Ok(()) + } +} + +impl AbsInstruction for T { + /// abs r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::abs(a))?; + Ok(()) + } +} + +impl RoundInstruction for T { + /// round r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::round(a))?; + Ok(()) + } +} + +impl TruncInstruction for T { + /// trunc r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::trunc(a))?; + Ok(()) + } +} + +impl RandInstruction for T { + /// rand r? + fn execute_inner(&mut self, r: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let val = self.get_vm().random_f64(); + self.set_register(indirection, target, val)?; + Ok(()) + } +} +impl SinInstruction for T { + /// sin r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::sin(a))?; + Ok(()) + } +} +impl CosInstruction for T { + /// cos r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::cos(a))?; + Ok(()) + } +} +impl TanInstruction for T { + /// tan r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::tan(a))?; + Ok(()) + } +} +impl AsinInstruction for T { + /// asin r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::asin(a))?; + Ok(()) + } +} +impl AcosInstruction for T { + /// acos r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::acos(a))?; + Ok(()) + } +} +impl AtanInstruction for T { + /// atan r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + self.set_register(indirection, target, f64::atan(a))?; + Ok(()) + } +} +impl Atan2Instruction for T { + /// atan2 r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value(self)?; + let b = b.as_value(self)?; + self.set_register(indirection, target, f64::atan2(a, b))?; + Ok(()) + } +} + +impl SllInstruction for T { + /// sll r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value_i64(self, true)?; + let b = b.as_value_i32(self, true)?; + self.set_register(indirection, target, i64_to_f64(a << b))?; + Ok(()) + } +} + +impl SlaInstruction for T { + /// sla r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value_i64(self, true)?; + let b = b.as_value_i32(self, true)?; + self.set_register(indirection, target, i64_to_f64(a << b))?; + Ok(()) + } +} + +impl SrlInstruction for T { + /// srl r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value_i64(self, false)?; + let b = b.as_value_i32(self, true)?; + self.set_register(indirection, target, i64_to_f64((a as u64 >> b) as i64))?; + Ok(()) + } +} + +impl SraInstruction for T { + /// sra r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value_i64(self, true)?; + let b = b.as_value_i32(self, true)?; + self.set_register(indirection, target, i64_to_f64(a >> b))?; + Ok(()) + } +} + +impl AndInstruction for T { + /// and r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value_i64(self, true)?; + let b = b.as_value_i64(self, true)?; + self.set_register(indirection, target, i64_to_f64(a & b))?; + Ok(()) + } +} + +impl OrInstruction for T { + /// or r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value_i64(self, true)?; + let b = b.as_value_i64(self, true)?; + self.set_register(indirection, target, i64_to_f64(a | b))?; + Ok(()) + } +} + +impl XorInstruction for T { + /// xor r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value_i64(self, true)?; + let b = b.as_value_i64(self, true)?; + self.set_register(indirection, target, i64_to_f64(a ^ b))?; + Ok(()) + } +} + +impl NorInstruction for T { + /// nor r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + a: &InstOperand, + b: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value_i64(self, true)?; + let b = b.as_value_i64(self, true)?; + self.set_register(indirection, target, i64_to_f64(!(a | b)))?; + Ok(()) + } +} + +impl NotInstruction for T { + /// not r? a(r?|num) + fn execute_inner(&mut self, r: &InstOperand, a: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let a = a.as_value_i64(self, true)?; + self.set_register(indirection, target, i64_to_f64(!a))?; + Ok(()) + } +} + +impl PushInstruction for T { + /// push a(r?|num) + fn execute_inner(&mut self, a: &InstOperand) -> Result<(), ICError> { + let a = a.as_value(self)?; + self.push_stack(a)?; + Ok(()) + } +} + +impl PopInstruction for T { + /// pop r? + fn execute_inner(&mut self, r: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let val = self.pop_stack()?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl PokeInstruction for T { + /// poke address(r?|num) value(r?|num) + fn execute_inner(&mut self, address: &InstOperand, value: &InstOperand) -> Result<(), ICError> { + let address = address.as_value(self)?; + let value = value.as_value(self)?; + self.put_stack(address, value)?; + Ok(()) + } +} + +impl PeekInstruction for T { + /// peek r? + fn execute_inner(&mut self, r: &InstOperand) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let val = self.peek_stack()?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl GetInstruction for T { + /// get r? d? address(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + d: &InstOperand, + address: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let address = address.as_value(self)?; + let (device, connection) = d.as_device(self)?; + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .ok_or(ICError::DeviceNotSet) + .and_then(|obj| { + obj.map(|obj_ref| { + let val = obj_ref + .as_memory_readable() + .ok_or(MemoryError::NotWriteable)? + .get_memory(address as i32)?; + self.set_register(indirection, target, val) + }) + })?; + Ok(()) + } +} + +impl GetdInstruction for T { + /// getd r? id(r?|num) address(r?|num) + fn execute_inner( + &mut self, + r: &InstOperand, + id: &InstOperand, + address: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let id = id.as_value(self)?; + let address = address.as_value(self)?; + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_id(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet) + .and_then(|obj| { + obj.map(|obj_ref| { + let val = obj_ref + .as_memory_readable() + .ok_or(MemoryError::NotWriteable)? + .get_memory(address as i32)?; + self.set_register(indirection, target, val) + }) + })?; + Ok(()) + } +} + +impl PutInstruction for T { + /// put d? address(r?|num) value(r?|num) + fn execute_inner( + &mut self, + d: &InstOperand, + address: &InstOperand, + value: &InstOperand, + ) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let address = address.as_value(self)?; + let value = value.as_value(self)?; + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index_mut(device, connection) + .ok_or(ICError::DeviceNotSet) + .and_then(|mut obj| { + obj.map(|obj_ref| { + obj_ref + .as_mut_memory_writable() + .ok_or(MemoryError::NotWriteable)? + .set_memory(address as i32, value) + .map_err(Into::into) + }) + })?; + Ok(()) + } +} + +impl PutdInstruction for T { + /// putd id(r?|num) address(r?|num) value(r?|num) + fn execute_inner( + &mut self, + id: &InstOperand, + address: &InstOperand, + value: &InstOperand, + ) -> Result<(), ICError> { + let id = id.as_value(self)?; + let address = address.as_value(self)?; + let value = value.as_value(self)?; + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_id_mut(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet) + .and_then(|mut obj| { + obj.map(|obj_ref| { + obj_ref + .as_mut_memory_writable() + .ok_or(MemoryError::NotWriteable)? + .set_memory(address as i32, value) + .map_err(Into::into) + }) + })?; + Ok(()) + } +} + +impl ClrInstruction for T { + /// clr d? + fn execute_inner(&mut self, d: &InstOperand) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index_mut(device, connection) + .ok_or(ICError::DeviceNotSet) + .and_then(|mut obj| { + obj.map(|obj_ref| { + obj_ref + .as_mut_memory_writable() + .ok_or(MemoryError::NotWriteable)? + .clear_memory(); + Ok(()) + }) + })?; + Ok(()) + } +} +impl ClrdInstruction for T { + /// clrd id(r?|num) + fn execute_inner(&mut self, id: &InstOperand) -> Result<(), ICError> { + let id = id.as_value(self)?; + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_id_mut(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet) + .and_then(|mut obj| { + obj.map(|obj_ref| { + obj_ref + .as_mut_memory_writable() + .ok_or(MemoryError::NotWriteable)? + .clear_memory(); + Ok(()) + }) + })?; + Ok(()) + } +} + +impl SInstruction for T { + /// s d? logicType r? + fn execute_inner( + &mut self, + d: &InstOperand, + logic_type: &InstOperand, + r: &InstOperand, + ) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let logic_type = logic_type.as_logic_type(self)?; + let val = r.as_value(self)?; + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index_mut(device, connection) + .ok_or(ICError::DeviceNotSet) + .and_then(|mut obj| { + let obj_id = obj.get_id(); + obj.map(|obj_ref| { + obj_ref + .as_mut_logicable() + .ok_or(ICError::NotLogicable(obj_id)) + .and_then(|logicable| { + if !logicable.can_logic_write(logic_type) { + Err(LogicError::CantWrite(logic_type).into()) + } else { + logicable + .set_logic(logic_type, val, false) + .map_err(Into::into) + } + }) + }) + })?; + Ok(()) + } +} + +impl SdInstruction for T { + /// sd id(r?|num) logicType r? + fn execute_inner( + &mut self, + id: &InstOperand, + logic_type: &InstOperand, + r: &InstOperand, + ) -> Result<(), ICError> { + let id = id.as_value(self)?; + let logic_type = logic_type.as_logic_type(self)?; + let val = r.as_value(self)?; + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_id_mut(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet) + .and_then(|mut obj| { + let obj_id = obj.get_id(); + obj.map(|obj_ref| { + obj_ref + .as_mut_logicable() + .ok_or(ICError::NotLogicable(obj_id)) + .and_then(|logicable| { + if !logicable.can_logic_write(logic_type) { + Err(LogicError::CantWrite(logic_type).into()) + } else { + logicable + .set_logic(logic_type, val, false) + .map_err(Into::into) + } + }) + }) + })?; + Ok(()) + } +} + +impl SsInstruction for T { + /// ss d? slotIndex logicSlotType r? + fn execute_inner( + &mut self, + d: &InstOperand, + slot_index: &InstOperand, + logic_slot_type: &InstOperand, + r: &InstOperand, + ) -> Result<(), ICError> { + let (device, connection) = d.as_device(self)?; + let slot_index = slot_index.as_value(self)?; + let logic_slot_type = logic_slot_type.as_slot_logic_type(self)?; + let val = r.as_value(self)?; + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index_mut(device, connection) + .ok_or(ICError::DeviceNotSet) + .and_then(|mut obj| { + let obj_id = obj.get_id(); + obj.map(|obj_ref| { + obj_ref + .as_mut_device() + .ok_or(ICError::NotLogicable(obj_id)) + .and_then(|logicable| { + if !logicable.can_slot_logic_write(logic_slot_type, slot_index) { + Err(LogicError::CantSlotWrite(logic_slot_type, slot_index).into()) + } else { + logicable + .set_slot_logic(logic_slot_type, slot_index, val, false) + .map_err(Into::into) + } + }) + }) + })?; + Ok(()) + } +} + +impl SbInstruction for T { + /// sb deviceHash logicType r? + fn execute_inner( + &mut self, + + device_hash: &InstOperand, + logic_type: &InstOperand, + r: &InstOperand, + ) -> Result<(), ICError> { + let prefab = device_hash.as_value(self)?; + let logic_type = logic_type.as_logic_type(self)?; + let val = r.as_value(self)?; + self.get_vm() + .set_batch_device_field(*self.get_id(), prefab, logic_type, val, false)?; + Ok(()) + } +} + +impl SbsInstruction for T { + /// sbs deviceHash slotIndex logicSlotType r? + fn execute_inner( + &mut self, + + device_hash: &InstOperand, + slot_index: &InstOperand, + logic_slot_type: &InstOperand, + r: &InstOperand, + ) -> Result<(), ICError> { + let prefab = device_hash.as_value(self)?; + let slot_index = slot_index.as_value(self)?; + let logic_slot_type = logic_slot_type.as_slot_logic_type(self)?; + let val = r.as_value(self)?; + self.get_vm().set_batch_device_slot_field( + *self.get_id(), + prefab, + slot_index, + logic_slot_type, + val, + false, + )?; + Ok(()) + } +} + +impl SbnInstruction for T { + /// sbn deviceHash nameHash logicType r? + fn execute_inner( + &mut self, + + device_hash: &InstOperand, + name_hash: &InstOperand, + logic_type: &InstOperand, + r: &InstOperand, + ) -> Result<(), ICError> { + let prefab = device_hash.as_value(self)?; + let name = name_hash.as_value(self)?; + let logic_type = logic_type.as_logic_type(self)?; + let val = r.as_value(self)?; + self.get_vm().set_batch_name_device_field( + *self.get_id(), + prefab, + name, + logic_type, + val, + false, + )?; + Ok(()) + } +} + +impl LInstruction for T { + /// l r? d? logicType + fn execute_inner( + &mut self, + + r: &InstOperand, + d: &InstOperand, + logic_type: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let (device, connection) = d.as_device(self)?; + let logic_type = logic_type.as_logic_type(self)?; + let val = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .ok_or(ICError::DeviceNotSet) + .and_then(|obj| { + obj.map(|obj_ref| { + obj_ref + .as_logicable() + .ok_or(ICError::NotLogicable(*obj_ref.get_id())) + .and_then(|logicable| { + if !logicable.can_logic_read(logic_type) { + Err(LogicError::CantRead(logic_type).into()) + } else { + logicable.get_logic(logic_type).map_err(Into::into) + } + }) + }) + })?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl LdInstruction for T { + /// ld r? id(r?|num) logicType + fn execute_inner( + &mut self, + r: &InstOperand, + id: &InstOperand, + logic_type: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let id = id.as_value(self)?; + let logic_type = logic_type.as_logic_type(self)?; + let val = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_id(id as ObjectID, None) + .ok_or(ICError::DeviceNotSet) + .and_then(|obj| { + obj.map(|obj_ref| { + obj_ref + .as_logicable() + .ok_or(ICError::NotLogicable(*obj_ref.get_id())) + .and_then(|logicable| { + if !logicable.can_logic_read(logic_type) { + Err(LogicError::CantRead(logic_type).into()) + } else { + logicable.get_logic(logic_type).map_err(Into::into) + } + }) + }) + })?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl LsInstruction for T { + /// ls r? d? slotIndex logicSlotType + fn execute_inner( + &mut self, + r: &InstOperand, + d: &InstOperand, + slot_index: &InstOperand, + logic_slot_type: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let (device, connection) = d.as_device(self)?; + let slot_index = slot_index.as_value(self)?; + let logic_slot_type = logic_slot_type.as_slot_logic_type(self)?; + let val = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .ok_or(ICError::DeviceNotSet) + .and_then(|obj| { + obj.map(|obj_ref| { + obj_ref + .as_logicable() + .ok_or(ICError::NotLogicable(*obj_ref.get_id())) + .and_then(|logicable| { + if !logicable.can_slot_logic_read(logic_slot_type, slot_index) { + Err(LogicError::CantSlotRead(logic_slot_type, slot_index).into()) + } else { + logicable + .get_slot_logic(logic_slot_type, slot_index) + .map_err(Into::into) + } + }) + }) + })?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl LrInstruction for T { + /// lr r? d? reagentMode int + fn execute_inner( + &mut self, + r: &InstOperand, + d: &InstOperand, + reagent_mode: &InstOperand, + int: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let vm = self.get_vm(); + let (device, connection) = d.as_device(self)?; + let reagent_mode = reagent_mode.as_reagent_mode(self)?; + let int = int.as_value(self)?; + let val = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .ok_or(ICError::DeviceNotSet) + .and_then(|obj| { + obj.map(|obj_ref| { + obj_ref + .as_logicable() + .ok_or(ICError::NotLogicable(*obj_ref.get_id())) + .and_then(|logicable| { + let result = match reagent_mode { + LogicReagentMode::Contents => { + let device = logicable + .as_device() + .ok_or(ICError::NotReagentReadable(*logicable.get_id()))?; + device + .get_reagents() + .iter() + .find(|(hash, _)| *hash as f64 == int) + .map(|(_, quantity)| *quantity) + .unwrap_or(0.0) + } + LogicReagentMode::TotalContents => { + let device = logicable + .as_device() + .ok_or(ICError::NotReagentReadable(*logicable.get_id()))?; + device + .get_reagents() + .iter() + .map(|(_, quantity)| quantity) + .sum() + } + LogicReagentMode::Required => { + let reagent_interface = logicable + .as_reagent_requirer() + .ok_or(ICError::NotReagentReadable(*logicable.get_id()))?; + reagent_interface + .get_current_required() + .iter() + .find(|(hash, _)| *hash as f64 == int) + .map(|(_, quantity)| *quantity) + .unwrap_or(0.0) + } + LogicReagentMode::Recipe => { + let reagent_interface = logicable + .as_reagent_requirer() + .ok_or(ICError::NotReagentReadable(*logicable.get_id()))?; + reagent_interface + .get_current_recipe() + .and_then(|recipe_order| { + recipe_order + .recipe + .reagents + .iter() + .map(|(name, quantity)| { + ( + vm.lookup_reagent_by_name(name) + .map(|reagent| reagent.hash) + .unwrap_or(0), + quantity, + ) + }) + .find(|(hash, _)| *hash as f64 == int) + .map(|(_, quantity)| *quantity) + }) + .unwrap_or(0.0) + } + }; + Ok(result) + }) + }) + })?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl LbInstruction for T { + /// lb r? deviceHash logicType batchMode + fn execute_inner( + &mut self, + r: &InstOperand, + device_hash: &InstOperand, + logic_type: &InstOperand, + batch_mode: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + + let prefab = device_hash.as_value(self)?; + let logic_type = logic_type.as_logic_type(self)?; + let batch_mode = batch_mode.as_batch_mode(self)?; + let val = + self.get_vm() + .get_batch_device_field(*self.get_id(), prefab, logic_type, batch_mode)?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl LbnInstruction for T { + /// lbn r? deviceHash nameHash logicType batchMode + fn execute_inner( + &mut self, + + r: &InstOperand, + device_hash: &InstOperand, + name_hash: &InstOperand, + logic_type: &InstOperand, + batch_mode: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let prefab = device_hash.as_value(self)?; + let name = name_hash.as_value(self)?; + let logic_type = logic_type.as_logic_type(self)?; + let batch_mode = batch_mode.as_batch_mode(self)?; + let val = self.get_vm().get_batch_name_device_field( + *self.get_id(), + prefab, + name, + logic_type, + batch_mode, + )?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl LbnsInstruction for T { + /// lbns r? deviceHash nameHash slotIndex logicSlotType batchMode + fn execute_inner( + &mut self, + + r: &InstOperand, + device_hash: &InstOperand, + name_hash: &InstOperand, + slot_index: &InstOperand, + logic_slot_type: &InstOperand, + batch_mode: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let prefab = device_hash.as_value(self)?; + let name = name_hash.as_value(self)?; + let slot_index = slot_index.as_value(self)?; + let logic_slot_type = logic_slot_type.as_slot_logic_type(self)?; + let batch_mode = batch_mode.as_batch_mode(self)?; + let val = self.get_vm().get_batch_name_device_slot_field( + *self.get_id(), + prefab, + name, + slot_index, + logic_slot_type, + batch_mode, + )?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl LbsInstruction for T { + /// lbs r? deviceHash slotIndex logicSlotType batchMode + fn execute_inner( + &mut self, + + r: &InstOperand, + device_hash: &InstOperand, + slot_index: &InstOperand, + logic_slot_type: &InstOperand, + batch_mode: &InstOperand, + ) -> Result<(), ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let prefab = device_hash.as_value(self)?; + let slot_index = slot_index.as_value(self)?; + let logic_slot_type = logic_slot_type.as_slot_logic_type(self)?; + let batch_mode = batch_mode.as_batch_mode(self)?; + let val = self.get_vm().get_batch_device_slot_field( + *self.get_id(), + prefab, + slot_index, + logic_slot_type, + batch_mode, + )?; + self.set_register(indirection, target, val)?; + Ok(()) + } +} + +impl HcfInstruction for T { + /// hcf + fn execute_inner(&mut self) -> Result<(), ICError> { + { + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .halt_and_catch_fire(); + } + self.set_state(ICState::HasCaughtFire); + Ok(()) + } +} + +impl LabelInstruction for T { + /// label d? str + fn execute_inner(&mut self, _d: &InstOperand, _str: &InstOperand) -> Result<(), ICError> { + // No op, handled by program compilation, should never be called? + Ok(()) + } +} + +impl RmapInstruction for T { + ///rmap r? d? reagentHash(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + reagent_hash: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError> { + let RegisterSpec { + indirection, + target, + } = r.as_register(self)?; + let (device, connection) = d.as_device(self)?; + + let reagent_hash = reagent_hash.as_value_i32(self, true)?; + let val = self + .get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(*self.get_id()))? + .borrow() + .as_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(*self.get_id()))? + .get_logicable_from_index(device, connection) + .ok_or(ICError::DeviceNotSet) + .and_then(|obj| { + obj.map(|obj_ref| { + obj_ref + .as_reagent_requirer() + .ok_or(ICError::NotReagentReadable(*obj_ref.get_id())) + .map(|reagent_interface| { + reagent_interface + .get_prefab_hash_from_reagent_hash(reagent_hash) + .unwrap_or(0) + }) + }) + })?; + self.set_register(indirection, target, val as f64)?; + Ok(()) + } +} diff --git a/ic10emu/src/lib.rs b/ic10emu/src/lib.rs index 92a61f3..ab218fc 100644 --- a/ic10emu/src/lib.rs +++ b/ic10emu/src/lib.rs @@ -1,8 +1,7 @@ +pub mod errors; pub mod grammar; pub mod interpreter; +pub mod network; mod rand_mscorlib; pub mod tokens; -pub mod device; pub mod vm; -pub mod network; - diff --git a/ic10emu/src/network.rs b/ic10emu/src/network.rs index 7823675..6299452 100644 --- a/ic10emu/src/network.rs +++ b/ic10emu/src/network.rs @@ -1,12 +1,25 @@ -use std::{collections::HashSet, ops::Deref}; - -use serde::{Deserialize, Serialize}; -use strum_macros::{AsRefStr, EnumIter}; -use thiserror::Error; +use std::{collections::HashSet, ops::Deref, rc::Rc}; +use crate::vm::{ + object::{errors::LogicError, macros::ObjectInterface, traits::*, Name, ObjectID}, + VM, +}; use itertools::Itertools; +use macro_rules_attribute::derive; +use serde_derive::{Deserialize, Serialize}; +use stationeers_data::{ + enums::{script::LogicType, ConnectionRole, ConnectionType}, + templates::ConnectionInfo, +}; + +use thiserror::Error; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum CableConnectionType { Power, Data, @@ -14,158 +27,296 @@ pub enum CableConnectionType { PowerAndData, } +#[serde_with::skip_serializing_none] #[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] pub enum Connection { CableNetwork { - net: Option, + net: Option, typ: CableConnectionType, + role: ConnectionRole, + }, + Chute { + role: ConnectionRole, + }, + Pipe { + role: ConnectionRole, + }, + Elevator { + role: ConnectionRole, + }, + LandingPad { + role: ConnectionRole, + }, + LaunchPad { + role: ConnectionRole, + }, + PipeLiquid { + role: ConnectionRole, + }, + RoboticArmRail { + role: ConnectionRole, }, - #[default] - Other, -} - -#[derive( - Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, EnumIter, AsRefStr, -)] -pub enum ConnectionType { - Pipe, - Power, - Data, - Chute, - Elevator, - PipeLiquid, - LandingPad, - LaunchPad, - PowerAndData, - #[serde(other)] - #[default] - None, -} - -#[derive( - Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, EnumIter, AsRefStr, -)] -pub enum ConnectionRole { - Input, - Input2, - Output, - Output2, - Waste, - #[serde(other)] #[default] None, } impl Connection { #[allow(dead_code)] - fn from(typ: ConnectionType, _role: ConnectionRole) -> Self { + pub fn from_info(typ: ConnectionType, role: ConnectionRole, net: Option) -> Self { match typ { - ConnectionType::None - | ConnectionType::Chute - | ConnectionType::Pipe - | ConnectionType::Elevator - | ConnectionType::LandingPad - | ConnectionType::LaunchPad - | ConnectionType::PipeLiquid => Self::Other, + ConnectionType::None => Self::None, ConnectionType::Data => Self::CableNetwork { - net: None, + net, typ: CableConnectionType::Data, + role, }, ConnectionType::Power => Self::CableNetwork { - net: None, + net, typ: CableConnectionType::Power, + role, }, ConnectionType::PowerAndData => Self::CableNetwork { - net: None, + net, typ: CableConnectionType::PowerAndData, + role, + }, + ConnectionType::Chute => Self::Chute { role }, + ConnectionType::Pipe => Self::Pipe { role }, + ConnectionType::Elevator => Self::Elevator { role }, + ConnectionType::LandingPad => Self::LandingPad { role }, + ConnectionType::LaunchPad => Self::LaunchPad { role }, + ConnectionType::PipeLiquid => Self::PipeLiquid { role }, + ConnectionType::RoboticArmRail => Self::RoboticArmRail { role }, + } + } + + pub fn to_info(&self) -> ConnectionInfo { + match self { + Self::None => ConnectionInfo { + typ: ConnectionType::None, + role: ConnectionRole::None, + }, + Self::CableNetwork { + typ: CableConnectionType::Data, + role, + .. + } => ConnectionInfo { + typ: ConnectionType::Data, + role: *role, + }, + Self::CableNetwork { + typ: CableConnectionType::Power, + role, + .. + } => ConnectionInfo { + typ: ConnectionType::Power, + role: *role, + }, + Self::CableNetwork { + typ: CableConnectionType::PowerAndData, + role, + .. + } => ConnectionInfo { + typ: ConnectionType::PowerAndData, + role: *role, + }, + Self::Chute { role } => ConnectionInfo { + typ: ConnectionType::Chute, + role: *role, + }, + Self::Pipe { role } => ConnectionInfo { + typ: ConnectionType::Pipe, + role: *role, + }, + Self::PipeLiquid { role } => ConnectionInfo { + typ: ConnectionType::PipeLiquid, + role: *role, + }, + Self::Elevator { role } => ConnectionInfo { + typ: ConnectionType::Elevator, + role: *role, + }, + Self::LandingPad { role } => ConnectionInfo { + typ: ConnectionType::LandingPad, + role: *role, + }, + Self::LaunchPad { role } => ConnectionInfo { + typ: ConnectionType::LaunchPad, + role: *role, + }, + Self::RoboticArmRail { role } => ConnectionInfo { + typ: ConnectionType::RoboticArmRail, + role: *role, }, } } + + pub fn get_network(&self) -> Option { + match self { + Self::CableNetwork { net, .. } => *net, + _ => None, + } + } } -#[derive(Debug, Serialize, Deserialize)] -pub struct Network { - pub id: u32, - pub devices: HashSet, - pub power_only: HashSet, +#[derive(ObjectInterface!, Debug)] +#[custom(implements(Object { Storage, Logicable, Network}))] +pub struct CableNetwork { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + /// required by object interface but atm unused by network + pub prefab: Name, + #[custom(object_name)] + /// required by object interface but atm unused by network + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + /// data enabled objects (must be devices) + pub devices: HashSet, + /// power only connections + pub power_only: HashSet, + /// channel data pub channels: [f64; 8], } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct FrozenNetwork { - pub id: u32, - pub devices: Vec, - pub power_only: Vec, - pub channels: [f64; 8], -} - -impl From for FrozenNetwork -where - T: Deref, -{ - fn from(value: T) -> Self { - FrozenNetwork { - id: value.id, - devices: value.devices.iter().copied().collect_vec(), - power_only: value.power_only.iter().copied().collect_vec(), - channels: value.channels, - } +impl Storage for CableNetwork { + fn debug_storage(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + fn slots_count(&self) -> usize { + 0 + } + fn get_slot(&self, _index: usize) -> Option<&crate::vm::object::Slot> { + None + } + fn get_slot_mut(&mut self, _index: usize) -> Option<&mut crate::vm::object::Slot> { + None + } + fn get_slots(&self) -> Vec<(usize, &crate::vm::object::Slot)> { + vec![] + } + fn get_slots_mut(&mut self) -> Vec<(usize, &mut crate::vm::object::Slot)> { + vec![] } } -impl From for Network { - fn from(value: FrozenNetwork) -> Self { - Network { - id: value.id, - devices: value.devices.into_iter().collect(), - power_only: value.power_only.into_iter().collect(), - channels: value.channels, - } +impl Logicable for CableNetwork { + fn debug_logicable(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + fn prefab_hash(&self) -> i32 { + 0 + } + fn name_hash(&self) -> i32 { + 0 + } + fn is_logic_readable(&self) -> bool { + true + } + fn is_logic_writeable(&self) -> bool { + true + } + fn can_logic_read(&self, lt: LogicType) -> bool { + use LogicType::*; + matches!( + lt, + Channel0 | Channel1 | Channel2 | Channel3 | Channel4 | Channel5 | Channel6 | Channel7 + ) + } + fn can_logic_write(&self, lt: LogicType) -> bool { + use LogicType::*; + matches!( + lt, + Channel0 | Channel1 | Channel2 | Channel3 | Channel4 | Channel5 | Channel6 | Channel7 + ) + } + fn get_logic(&self, lt: LogicType) -> Result { + use LogicType::*; + let index: usize = match lt { + Channel0 => 0, + Channel1 => 1, + Channel2 => 2, + Channel3 => 3, + Channel4 => 4, + Channel5 => 5, + Channel6 => 6, + Channel7 => 7, + _ => return Err(LogicError::CantRead(lt)), + }; + Ok(self.channels[index]) + } + fn set_logic(&mut self, lt: LogicType, value: f64, _force: bool) -> Result<(), LogicError> { + use LogicType::*; + let index: usize = match lt { + Channel0 => 0, + Channel1 => 1, + Channel2 => 2, + Channel3 => 3, + Channel4 => 4, + Channel5 => 5, + Channel6 => 6, + Channel7 => 7, + _ => return Err(LogicError::CantWrite(lt)), + }; + self.channels[index] = value; + Ok(()) + } + fn can_slot_logic_read( + &self, + _slt: stationeers_data::enums::script::LogicSlotType, + _index: f64, + ) -> bool { + false + } + fn get_slot_logic( + &self, + slt: stationeers_data::enums::script::LogicSlotType, + index: f64, + ) -> Result { + Err(LogicError::CantSlotRead(slt, index)) + } + fn valid_logic_types(&self) -> Vec { + use LogicType::*; + vec![ + Channel0, Channel1, Channel2, Channel3, Channel4, Channel5, Channel6, Channel7, + ] + } + fn known_modes(&self) -> Option> { + None } } -#[derive(Debug, Error)] -pub enum NetworkError { - #[error("")] - ChannelIndexOutOfRange, -} - -impl Network { - - pub fn new(id: u32) -> Self { - Network { - id, - devices: HashSet::new(), - power_only: HashSet::new(), - channels: [f64::NAN; 8], - } +impl Network for CableNetwork { + fn debug_network(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement } - - pub fn contains(&self, id: &u32) -> bool { + fn contains(&self, id: &ObjectID) -> bool { self.devices.contains(id) || self.power_only.contains(id) } - pub fn contains_all(&self, ids: &[u32]) -> bool { + fn contains_all(&self, ids: &[ObjectID]) -> bool { ids.iter().all(|id| self.contains(id)) } - pub fn contains_data(&self, id: &u32) -> bool { + fn contains_data(&self, id: &ObjectID) -> bool { self.devices.contains(id) } - pub fn contains_all_data(&self, ids: &[u32]) -> bool { + fn contains_all_data(&self, ids: &[ObjectID]) -> bool { ids.iter().all(|id| self.contains_data(id)) } - pub fn contains_power(&self, id: &u32) -> bool { + fn contains_power(&self, id: &ObjectID) -> bool { self.power_only.contains(id) } - pub fn contains_all_power(&self, ids: &[u32]) -> bool { + fn contains_all_power(&self, ids: &[ObjectID]) -> bool { ids.iter().all(|id| self.contains_power(id)) } - pub fn data_visible(&self, source: &u32) -> Vec { + fn data_visible(&self, source: &ObjectID) -> Vec { if self.contains_data(source) { self.devices .iter() @@ -177,25 +328,102 @@ impl Network { } } - pub fn add_data(&mut self, id: u32) -> bool { + fn add_data(&mut self, id: ObjectID) -> bool { self.devices.insert(id) } - pub fn add_power(&mut self, id: u32) -> bool { + fn add_power(&mut self, id: ObjectID) -> bool { self.power_only.insert(id) } - pub fn remove_all(&mut self, id: u32) -> bool { + fn remove_all(&mut self, id: ObjectID) -> bool { self.devices.remove(&id) || self.power_only.remove(&id) } - pub fn remove_data(&mut self, id: u32) -> bool { + fn remove_data(&mut self, id: ObjectID) -> bool { self.devices.remove(&id) } - pub fn remove_power(&mut self, id: u32) -> bool { + fn remove_power(&mut self, id: ObjectID) -> bool { self.devices.remove(&id) } + fn get_devices(&self) -> Vec { + self.devices.iter().copied().collect_vec() + } + + fn get_power_only(&self) -> Vec { + self.power_only.iter().copied().collect_vec() + } + + fn get_channel_data(&self) -> &[f64; 8] { + &self.channels + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct FrozenCableNetwork { + pub id: ObjectID, + pub devices: Vec, + pub power_only: Vec, + pub channels: [f64; 8], +} + +impl From for FrozenCableNetwork +where + T: Deref, +{ + fn from(value: T) -> Self { + FrozenCableNetwork { + id: value.id, + devices: value.devices.iter().copied().collect_vec(), + power_only: value.power_only.iter().copied().collect_vec(), + channels: value.channels, + } + } +} + +impl From> for FrozenCableNetwork { + fn from(value: NetworkRef) -> Self { + FrozenCableNetwork { + id: *value.get_id(), + devices: value.get_devices(), + power_only: value.get_power_only(), + channels: *value.get_channel_data(), + } + } +} + +#[derive(Debug, Error)] +pub enum NetworkError { + #[error("")] + ChannelIndexOutOfRange, +} + +impl CableNetwork { + pub fn new(id: u32, vm: Rc) -> Self { + CableNetwork { + id, + prefab: Name::new(""), + name: Name::new(""), + vm, + devices: HashSet::new(), + power_only: HashSet::new(), + channels: [f64::NAN; 8], + } + } + pub fn from_frozen(value: FrozenCableNetwork, vm: Rc) -> Self { + CableNetwork { + id: value.id, + prefab: Name::new(""), + name: Name::new(""), + vm, + devices: value.devices.into_iter().collect(), + power_only: value.power_only.into_iter().collect(), + channels: value.channels, + } + } + pub fn set_channel(&mut self, chan: usize, val: f64) -> Result { if chan > 7 { Err(NetworkError::ChannelIndexOutOfRange) diff --git a/ic10emu/src/vm.rs b/ic10emu/src/vm.rs index f95c5b9..72ba687 100644 --- a/ic10emu/src/vm.rs +++ b/ic10emu/src/vm.rs @@ -1,488 +1,969 @@ +pub mod instructions; +pub mod object; + use crate::{ - device::{Device, DeviceTemplate, SlotOccupant, SlotOccupantTemplate}, - grammar::{BatchMode, LogicType, SlotLogicType}, - interpreter::{self, FrozenIC, ICError, LineError}, - network::{CableConnectionType, Connection, FrozenNetwork, Network}, + errors::{ICError, VMError}, + interpreter::ICState, + network::{CableConnectionType, CableNetwork, Connection, FrozenCableNetwork}, + vm::object::{ + templates::{FrozenObject, FrozenObjectFull, Prefab}, + traits::ParentSlotInfo, + ObjectID, SlotOccupantInfo, VMObject, + }, +}; +use stationeers_data::{ + enums::{ + script::{LogicBatchMethod, LogicSlotType, LogicType}, + ConnectionRole, + }, + templates::{ObjectTemplate, Reagent}, }; use std::{ cell::RefCell, collections::{BTreeMap, HashSet}, rc::Rc, }; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; use itertools::Itertools; -use serde::{Deserialize, Serialize}; -use thiserror::Error; - -#[derive(Error, Debug, Serialize, Deserialize)] -pub enum VMError { - #[error("device with id '{0}' does not exist")] - UnknownId(u32), - #[error("ic with id '{0}' does not exist")] - UnknownIcId(u32), - #[error("device with id '{0}' does not have a ic slot")] - NoIC(u32), - #[error("ic encountered an error: {0}")] - ICError(#[from] ICError), - #[error("ic encountered an error: {0}")] - LineError(#[from] LineError), - #[error("invalid network id {0}")] - InvalidNetwork(u32), - #[error("device {0} not visible to device {1} (not on the same networks)")] - DeviceNotVisible(u32, u32), - #[error("a device with id {0} already exists")] - IdInUse(u32), - #[error("device(s) with ids {0:?} already exist")] - IdsInUse(Vec), - #[error("atempt to use a set of id's with duplicates: id(s) {0:?} exsist more than once")] - DuplicateIds(Vec), -} +use serde_derive::{Deserialize, Serialize}; #[derive(Debug)] pub struct VM { - pub ics: BTreeMap>>, - pub devices: BTreeMap>>, - pub networks: BTreeMap>>, - pub default_network: u32, - id_space: IdSpace, - network_id_space: IdSpace, + pub objects: RefCell>, + pub circuit_holders: RefCell>, + pub program_holders: RefCell>, + pub networks: RefCell>, + pub default_network_key: RefCell, + pub wireless_transmitters: RefCell>, + pub wireless_receivers: RefCell>, + id_space: RefCell, + network_id_space: RefCell, random: Rc>, - /// list of device id's touched on the last operation - operation_modified: RefCell>, + /// list of object id's touched on the last operation + operation_modified: RefCell>, + template_database: RefCell>>, + reagent_database: RefCell>>, } -impl Default for VM { - fn default() -> Self { - Self::new() - } +#[derive(Debug, Default)] +pub struct VMTransactionNetwork { + pub devices: Vec, + pub power_only: Vec, +} + +#[allow(dead_code)] +#[derive(Debug)] +/// used as a temp structure to add objects in case +/// there are errors on nested templates +struct VMTransaction { + pub objects: BTreeMap, + pub circuit_holders: Vec, + pub program_holders: Vec, + pub default_network_key: ObjectID, + pub wireless_transmitters: Vec, + pub wireless_receivers: Vec, + pub id_space: IdSpace, + pub networks: BTreeMap, + object_parents: BTreeMap, + vm: Rc, } impl VM { - pub fn new() -> Self { - let id_gen = IdSpace::default(); + /// Create a new VM with it's own state and a default network + pub fn new() -> Rc { + let id_space = IdSpace::default(); let mut network_id_space = IdSpace::default(); let default_network_key = network_id_space.next(); - let default_network = Rc::new(RefCell::new(Network::new(default_network_key))); - let mut networks = BTreeMap::new(); - networks.insert(default_network_key, default_network); + let networks = BTreeMap::new(); - let mut vm = VM { - ics: BTreeMap::new(), - devices: BTreeMap::new(), - networks, - default_network: default_network_key, - id_space: id_gen, - network_id_space, + let vm = Rc::new(VM { + objects: RefCell::new(BTreeMap::new()), + circuit_holders: RefCell::new(Vec::new()), + program_holders: RefCell::new(Vec::new()), + networks: RefCell::new(networks), + default_network_key: RefCell::new(default_network_key), + wireless_transmitters: RefCell::new(Vec::new()), + wireless_receivers: RefCell::new(Vec::new()), + id_space: RefCell::new(id_space), + network_id_space: RefCell::new(network_id_space), random: Rc::new(RefCell::new(crate::rand_mscorlib::Random::new())), operation_modified: RefCell::new(Vec::new()), - }; - let _ = vm.add_ic(None); + template_database: RefCell::new(stationeers_data::build_prefab_database()), + reagent_database: RefCell::new(stationeers_data::build_reagent_database()), + }); + + let default_network = VMObject::new(CableNetwork::new(default_network_key, vm.clone())); + vm.networks + .borrow_mut() + .insert(default_network_key, default_network); + vm } - fn new_device(&mut self) -> Device { - Device::new(self.id_space.next()) - } - - fn new_ic(&mut self) -> (Device, interpreter::IC) { - let id = self.id_space.next(); - let ic_id = self.id_space.next(); - let ic = interpreter::IC::new(ic_id, id); - let device = Device::with_ic(id, ic_id); - (device, ic) - } - - pub fn random_f64(&self) -> f64 { + /// get a random f64 value using a mscorlib rand PRNG + /// (Stationeers, being written in .net, using mscorlib's rand) + pub fn random_f64(self: &Rc) -> f64 { self.random.borrow_mut().next_f64() } - pub fn add_device(&mut self, network: Option) -> Result { - if let Some(n) = &network { - if !self.networks.contains_key(n) { - return Err(VMError::InvalidNetwork(*n)); - } - } - let mut device = self.new_device(); - if let Some(first_network) = device.connections.iter_mut().find_map(|c| { - if let Connection::CableNetwork { - net, - typ: CableConnectionType::Data | CableConnectionType::PowerAndData, - } = c - { - Some(net) - } else { - None - } - }) { - first_network.replace(if let Some(network) = network { - network - } else { - self.default_network - }); - } - let id = device.id; + /// Take ownership of an iterable that produces (prefab hash, ObjectTemplate) pairs and build a prefab + /// database + #[tracing::instrument(skip(db))] + pub fn import_template_database( + self: &Rc, + db: impl IntoIterator, + ) { + tracing::info!("importing new template database"); + self.template_database + .borrow_mut() + .replace(db.into_iter().collect()); + } - let first_data_network = device - .connections - .iter() - .enumerate() - .find_map(|(index, conn)| match conn { - Connection::CableNetwork { - typ: CableConnectionType::Data | CableConnectionType::PowerAndData, - .. - } => Some(index), - _ => None, - }); - self.devices.insert(id, Rc::new(RefCell::new(device))); - if let Some(first_data_network) = first_data_network { - let _ = self.set_device_connection( - id, - first_data_network, - if let Some(network) = network { - Some(network) + /// Take ownership of an iterable that produces (reagent id, Reagent) pairs and build a reagent + /// database + #[tracing::instrument(skip(db))] + pub fn import_reagent_database(self: &Rc, db: impl IntoIterator) { + tracing::info!("importing new reagent database"); + self.reagent_database + .borrow_mut() + .replace(db.into_iter().collect()); + } + + pub fn lookup_reagent_by_hash(self: &Rc, hash: i32) -> Option { + self.reagent_database.borrow().as_ref().and_then(|db| { + db.iter().find_map(|(_id, reagent)| { + if reagent.hash == hash { + Some(reagent.clone()) } else { - Some(self.default_network) - }, - ); - } - Ok(id) + None + } + }) + }) } - pub fn add_ic(&mut self, network: Option) -> Result { - if let Some(n) = &network { - if !self.networks.contains_key(n) { - return Err(VMError::InvalidNetwork(*n)); - } - } - let (mut device, ic) = self.new_ic(); - if let Some(first_network) = device.connections.iter_mut().find_map(|c| { - if let Connection::CableNetwork { - net, - typ: CableConnectionType::Data | CableConnectionType::PowerAndData, - } = c - { - Some(net) - } else { - None - } - }) { - first_network.replace(if let Some(network) = network { - network - } else { - self.default_network - }); - } - let id = device.id; - let ic_id = ic.id; - let first_data_network = device - .connections - .iter() - .enumerate() - .find_map(|(index, conn)| match conn { - Connection::CableNetwork { - typ: CableConnectionType::Data | CableConnectionType::PowerAndData, - .. - } => Some(index), - _ => None, - }); - self.devices.insert(id, Rc::new(RefCell::new(device))); - self.ics.insert(ic_id, Rc::new(RefCell::new(ic))); - if let Some(first_data_network) = first_data_network { - let _ = self.set_device_connection( - id, - first_data_network, - if let Some(network) = network { - Some(network) + pub fn lookup_reagent_by_name(self: &Rc, name: impl AsRef) -> Option { + let name = name.as_ref(); + self.reagent_database.borrow().as_ref().and_then(|db| { + db.iter().find_map(|(_id, reagent)| { + if reagent.name.as_str() == name { + Some(reagent.clone()) } else { - Some(self.default_network) - }, - ); - } - Ok(id) + None + } + }) + }) } - pub fn add_device_from_template(&mut self, template: DeviceTemplate) -> Result { - for conn in &template.connections { - if let Connection::CableNetwork { net: Some(net), .. } = conn { - if !self.networks.contains_key(net) { - return Err(VMError::InvalidNetwork(*net)); + pub fn lookup_template_by_name( + self: &Rc, + name: impl AsRef, + ) -> Option { + let name = name.as_ref(); + self.template_database.borrow().as_ref().and_then(|db| { + db.iter().find_map(|(_hash, template)| { + if &template.prefab().prefab_name == name { + Some(template.clone()) + } else { + None } + }) + }) + } + + /// Get a Object Template by either prefab name or hash + pub fn get_template(self: &Rc, prefab: Prefab) -> Option { + let hash = match prefab { + Prefab::Hash(hash) => hash, + Prefab::Name(name) => const_crc32::crc32(name.as_bytes()) as i32, + }; + self.template_database + .borrow() + .as_ref() + .and_then(|db| db.get(&hash).cloned()) + } + + pub fn get_template_database(self: &Rc) -> BTreeMap { + self.template_database + .borrow() + .as_ref() + .cloned() + .unwrap_or_default() + } + + /// Add an number of object to the VM state using Frozen Object structs. + /// See also `add_objects_frozen` + /// Returns the built objects' IDs + #[tracing::instrument(skip(frozen_objects))] + pub fn add_objects_frozen( + self: &Rc, + frozen_objects: impl IntoIterator, + ) -> Result, VMError> { + let mut transaction = VMTransaction::new(self); + + let mut obj_ids = Vec::new(); + for frozen in frozen_objects { + let obj_id = transaction.add_object_from_frozen(frozen)?; + obj_ids.push(obj_id) + } + + transaction.finalize()?; + + let transaction_ids = transaction.id_space.in_use_ids(); + self.id_space.borrow_mut().use_new_ids(&transaction_ids); + + self.objects.borrow_mut().extend(transaction.objects); + self.wireless_transmitters + .borrow_mut() + .extend(transaction.wireless_transmitters); + self.wireless_receivers + .borrow_mut() + .extend(transaction.wireless_receivers); + self.circuit_holders + .borrow_mut() + .extend(transaction.circuit_holders); + self.program_holders + .borrow_mut() + .extend(transaction.program_holders); + for (net_id, trans_net) in transaction.networks.into_iter() { + let net = self + .networks + .borrow() + .get(&net_id) + .cloned() + .unwrap_or_else(|| panic!("desync between vm and transaction networks: {net_id}")); + let mut net_ref = net.borrow_mut(); + let net_interface = net_ref + .as_mut_network() + .ok_or(VMError::NonNetworkNetwork(net_id))?; + for id in trans_net.devices { + net_interface.add_data(id); + } + for id in trans_net.power_only { + net_interface.add_power(id); } } - // collect the id's this template wants to use - let to_use_ids = template - .slots - .iter() - .filter_map(|slot| slot.occupant.as_ref().and_then(|occupant| occupant.id)) - .collect_vec(); - - // use those ids or fail - self.id_space.use_ids(&to_use_ids)?; - - let device = Device::from_template(template, || self.id_space.next()); - let device_id: u32 = device.id; - - // if this device says it has an IC make it so. - if let Some(ic_id) = &device.ic { - let chip = interpreter::IC::new(*ic_id, device_id); - self.ics.insert(*ic_id, Rc::new(RefCell::new(chip))); - } - - device.connections.iter().for_each(|conn| { - if let Connection::CableNetwork { - net: Some(net), - typ, - } = conn - { - if let Some(network) = self.networks.get(net) { - match typ { - CableConnectionType::Power => { - network.borrow_mut().add_power(device_id); - } - _ => { - network.borrow_mut().add_data(device_id); - } - } - } - } - }); - - self.devices - .insert(device_id, Rc::new(RefCell::new(device))); - - Ok(device_id) + Ok(obj_ids) } - pub fn add_network(&mut self) -> u32 { - let next_id = self.network_id_space.next(); - self.networks - .insert(next_id, Rc::new(RefCell::new(Network::new(next_id)))); + /// Add an object to the VM state using a frozen object struct + /// Errors if the frozen object does not provide a template and the prefab has is not in the + /// current database. + /// Errors if the object can not be built do to a template error + /// Returns the built object's ID + #[tracing::instrument] + pub fn add_object_frozen(self: &Rc, frozen: FrozenObject) -> Result { + let mut transaction = VMTransaction::new(self); + + let obj_id = transaction.add_object_from_frozen(frozen)?; + + transaction.finalize()?; + + let transaction_ids = transaction.id_space.in_use_ids(); + self.id_space.borrow_mut().use_new_ids(&transaction_ids); + + self.objects.borrow_mut().extend(transaction.objects); + self.wireless_transmitters + .borrow_mut() + .extend(transaction.wireless_transmitters); + self.wireless_receivers + .borrow_mut() + .extend(transaction.wireless_receivers); + self.circuit_holders + .borrow_mut() + .extend(transaction.circuit_holders); + self.program_holders + .borrow_mut() + .extend(transaction.program_holders); + for (net_id, trans_net) in transaction.networks.into_iter() { + let net = self + .networks + .borrow() + .get(&net_id) + .cloned() + .unwrap_or_else(|| panic!("desync between vm and transaction networks: {net_id}")); + let mut net_ref = net.borrow_mut(); + let net_interface = net_ref + .as_mut_network() + .ok_or(VMError::NonNetworkNetwork(net_id))?; + for id in trans_net.devices { + net_interface.add_data(id); + } + for id in trans_net.power_only { + net_interface.add_power(id); + } + } + + Ok(obj_id) + } + + /// Creates a new network adn return it's ID + #[tracing::instrument] + pub fn add_network(self: &Rc) -> ObjectID { + let next_id = self.network_id_space.borrow_mut().next(); + self.networks.borrow_mut().insert( + next_id, + VMObject::new(CableNetwork::new(next_id, self.clone())), + ); next_id } - pub fn get_default_network(&self) -> Rc> { - self.networks.get(&self.default_network).cloned().unwrap() + /// Get Id of default network + pub fn get_default_network(self: &Rc) -> VMObject { + self.networks + .borrow() + .get(&*self.default_network_key.borrow()) + .cloned() + .expect("default network not present") } - pub fn get_network(&self, id: u32) -> Option>> { - self.networks.get(&id).cloned() + /// Get network form Id + pub fn get_network(self: &Rc, id: ObjectID) -> Option { + self.networks.borrow().get(&id).cloned() } - pub fn remove_ic(&mut self, id: u32) { - if self.ics.remove(&id).is_some() { - self.devices.remove(&id); + /// Change an object's ID + /// + /// Iterates over all objects borrowing them mutably, never call unless VM is not currently + /// stepping or you'll get reborrow panics + #[tracing::instrument] + pub fn change_device_id( + self: &Rc, + old_id: ObjectID, + new_id: ObjectID, + ) -> Result<(), VMError> { + if self.id_space.borrow().has_id(&new_id) { + return Err(VMError::IdInUse(new_id)); } - } - - pub fn change_device_id(&mut self, old_id: u32, new_id: u32) -> Result<(), VMError> { - self.id_space.use_id(new_id)?; - let device = self - .devices + let obj = self + .objects + .borrow_mut() .remove(&old_id) .ok_or(VMError::UnknownId(old_id))?; - device.borrow_mut().id = new_id; - self.devices.insert(new_id, device); - self.ics.iter().for_each(|(_id, ic)| { - let mut ic_ref = ic.borrow_mut(); - if ic_ref.device == old_id { - ic_ref.device = new_id; + self.id_space.borrow_mut().use_id(new_id)?; + obj.borrow_mut().set_id(new_id); + self.objects.borrow_mut().insert(new_id, obj); + + for obj in self.objects.borrow().values() { + let mut obj_ref = obj.borrow_mut(); + if let Some(device) = obj_ref.as_mut_device() { + device + .get_slots_mut() + .iter_mut() + .for_each(|(_index, slot)| { + if slot.parent == old_id { + slot.parent = new_id; + } + match slot.occupant.as_mut() { + Some(info) if info.id == old_id => { + info.id = new_id; + } + _ => (), + } + }); } - ic_ref.pins.borrow_mut().iter_mut().for_each(|pin| { - if pin.is_some_and(|d| d == old_id) { - pin.replace(new_id); - } - }); - }); - self.networks.iter().for_each(|(_net_id, net)| { - if let Ok(mut net_ref) = net.try_borrow_mut() { - if net_ref.devices.remove(&old_id) { - net_ref.devices.insert(new_id); - } + } + + self.circuit_holders.borrow_mut().iter_mut().for_each(|id| { + if *id == old_id { + *id = new_id; } }); - self.id_space.free_id(old_id); + self.program_holders.borrow_mut().iter_mut().for_each(|id| { + if *id == old_id { + *id = new_id; + } + }); + self.networks.borrow().iter().for_each(|(_net_id, net)| { + let mut net_ref = net.borrow_mut(); + let net_interface = net_ref.as_mut_network().expect("non-network network"); + if net_interface.remove_data(old_id) { + net_interface.add_data(new_id); + } + if net_interface.remove_power(old_id) { + net_interface.add_power(new_id); + } + }); + self.id_space.borrow_mut().free_id(old_id); Ok(()) } /// Set program code if it's valid - pub fn set_code(&self, id: u32, code: &str) -> Result { - let device = self - .devices + /// Object Id is the programmable Id or the circuit holder's id + #[tracing::instrument] + pub fn set_code(self: &Rc, id: ObjectID, code: &str) -> Result { + let obj = self + .objects + .borrow() .get(&id) - .ok_or(VMError::UnknownId(id))? - .borrow(); - let ic_id = *device.ic.as_ref().ok_or(VMError::NoIC(id))?; - let ic = self - .ics - .get(&ic_id) - .ok_or(VMError::UnknownIcId(ic_id))? - .borrow(); - let new_prog = interpreter::Program::try_from_code(code)?; - ic.program.replace(new_prog); - ic.code.replace(code.to_string()); - Ok(true) + .cloned() + .ok_or(VMError::UnknownId(id))?; + { + let mut obj_ref = obj.borrow_mut(); + if let Some(programmable) = obj_ref.as_mut_source_code() { + programmable.set_source_code(code)?; + return Ok(true); + } + } + let ic_obj = { + let obj_ref = obj.borrow(); + if let Some(circuit_holder) = obj_ref.as_circuit_holder() { + circuit_holder.get_ic() + } else { + return Err(VMError::NotCircuitHolderOrProgrammable(id)); + } + }; + if let Some(ic_obj) = ic_obj { + let mut ic_obj_ref = ic_obj.borrow_mut(); + if let Some(programmable) = ic_obj_ref.as_mut_programmable() { + programmable.set_source_code(code)?; + return Ok(true); + } + return Err(VMError::NotProgrammable(*ic_obj_ref.get_id())); + } + Err(VMError::NoIC(id)) } /// Set program code and translate invalid lines to Nop, collecting errors - pub fn set_code_invalid(&self, id: u32, code: &str) -> Result { - let device = self - .devices + /// Object Id is the programmable Id or the circuit holder's id + #[tracing::instrument] + pub fn set_code_invalid(self: &Rc, id: ObjectID, code: &str) -> Result { + let obj = self + .objects + .borrow() .get(&id) - .ok_or(VMError::UnknownId(id))? - .borrow(); - let ic_id = *device.ic.as_ref().ok_or(VMError::NoIC(id))?; - let ic = self - .ics - .get(&ic_id) - .ok_or(VMError::UnknownIcId(ic_id))? - .borrow_mut(); - let new_prog = interpreter::Program::from_code_with_invalid(code); - ic.program.replace(new_prog); - ic.code.replace(code.to_string()); - Ok(true) + .cloned() + .ok_or(VMError::UnknownId(id))?; + { + let mut obj_ref = obj.borrow_mut(); + if let Some(programmable) = obj_ref.as_mut_programmable() { + programmable.set_source_code_with_invalid(code); + return Ok(true); + } + } + let ic_obj = { + let obj_ref = obj.borrow(); + if let Some(circuit_holder) = obj_ref.as_circuit_holder() { + circuit_holder.get_ic() + } else { + return Err(VMError::NotCircuitHolderOrProgrammable(id)); + } + }; + if let Some(ic_obj) = ic_obj { + let mut ic_obj_ref = ic_obj.borrow_mut(); + if let Some(programmable) = ic_obj_ref.as_mut_programmable() { + programmable.set_source_code_with_invalid(code); + return Ok(true); + } + return Err(VMError::NotProgrammable(*ic_obj_ref.get_id())); + } + Err(VMError::NoIC(id)) + } + + /// Get program code + /// Object Id is the programmable Id or the circuit holder's id + #[tracing::instrument] + pub fn get_code(self: &Rc, id: ObjectID) -> Result { + let obj = self + .objects + .borrow() + .get(&id) + .cloned() + .ok_or(VMError::UnknownId(id))?; + { + let obj_ref = obj.borrow(); + if let Some(programmable) = obj_ref.as_source_code() { + return Ok(programmable.get_source_code()); + } + } + let ic_obj = { + let obj_ref = obj.borrow(); + if let Some(circuit_holder) = obj_ref.as_circuit_holder() { + circuit_holder.get_ic() + } else { + return Err(VMError::NotCircuitHolderOrProgrammable(id)); + } + }; + if let Some(ic_obj) = ic_obj { + let ic_obj_ref = ic_obj.borrow(); + if let Some(programmable) = ic_obj_ref.as_source_code() { + return Ok(programmable.get_source_code()); + } + return Err(VMError::NotProgrammable(*ic_obj_ref.get_id())); + } + Err(VMError::NoIC(id)) + } + + /// Get a vector of any errors compiling the source code + /// Object Id is the programmable Id or the circuit holder's id + #[tracing::instrument] + pub fn get_compile_errors(self: &Rc, id: ObjectID) -> Result, VMError> { + let obj = self + .objects + .borrow() + .get(&id) + .cloned() + .ok_or(VMError::UnknownId(id))?; + { + let obj_ref = obj.borrow(); + if let Some(programmable) = obj_ref.as_source_code() { + return Ok(programmable.get_compile_errors()); + } + } + let ic_obj = { + let obj_ref = obj.borrow(); + if let Some(circuit_holder) = obj_ref.as_circuit_holder() { + circuit_holder.get_ic() + } else { + return Err(VMError::NotCircuitHolderOrProgrammable(id)); + } + }; + if let Some(ic_obj) = ic_obj { + let ic_obj_ref = ic_obj.borrow(); + if let Some(programmable) = ic_obj_ref.as_source_code() { + return Ok(programmable.get_compile_errors()); + } + return Err(VMError::NotProgrammable(*ic_obj_ref.get_id())); + } + Err(VMError::NoIC(id)) + } + + /// Set register of integrated circuit + /// Object Id is the circuit Id or the circuit holder's id + #[tracing::instrument] + pub fn set_register( + self: &Rc, + id: ObjectID, + index: u32, + val: f64, + ) -> Result { + let obj = self + .objects + .borrow() + .get(&id) + .cloned() + .ok_or(VMError::UnknownId(id))?; + { + let mut obj_ref = obj.borrow_mut(); + if let Some(circuit) = obj_ref.as_mut_integrated_circuit() { + let last = circuit.set_register(0, index, val)?; + return Ok(last); + } + } + let ic_obj = { + let obj_ref = obj.borrow(); + if let Some(circuit_holder) = obj_ref.as_circuit_holder() { + circuit_holder.get_ic() + } else { + return Err(VMError::NotCircuitHolderOrProgrammable(id)); + } + }; + if let Some(ic_obj) = ic_obj { + let mut ic_obj_ref = ic_obj.borrow_mut(); + if let Some(circuit) = ic_obj_ref.as_mut_integrated_circuit() { + let last = circuit.set_register(0, index, val)?; + return Ok(last); + } + return Err(VMError::NotProgrammable(*ic_obj_ref.get_id())); + } + Err(VMError::NoIC(id)) + } + + /// Set memory at address of object with memory + /// Object Id is the memory writable Id or the circuit holder's id + #[tracing::instrument] + pub fn set_memory( + self: &Rc, + id: ObjectID, + address: u32, + val: f64, + ) -> Result { + let obj = self + .objects + .borrow() + .get(&id) + .cloned() + .ok_or(VMError::UnknownId(id))?; + { + let mut obj_ref = obj.borrow_mut(); + if let Some(circuit) = obj_ref.as_mut_memory_writable() { + let last = circuit + .get_memory(address as i32) + .map_err(Into::::into)?; + circuit + .set_memory(address as i32, val) + .map_err(Into::::into)?; + return Ok(last); + } + } + let ic_obj = { + let obj_ref = obj.borrow(); + if let Some(circuit_holder) = obj_ref.as_circuit_holder() { + circuit_holder.get_ic() + } else { + None + } + }; + if let Some(ic_obj) = ic_obj { + let mut ic_obj_ref = ic_obj.borrow_mut(); + if let Some(circuit) = ic_obj_ref.as_mut_memory_writable() { + let last = circuit + .get_memory(address as i32) + .map_err(Into::::into)?; + circuit + .set_memory(address as i32, val) + .map_err(Into::::into)?; + return Ok(last); + } + return Err(VMError::NotMemoryWritable(*ic_obj_ref.get_id())); + } + Err(VMError::NotCircuitHolderOrMemoryWritable(id)) + } + + /// Set logic field on a logicable object + #[tracing::instrument] + pub fn set_logic_field( + self: &Rc, + id: ObjectID, + lt: LogicType, + val: f64, + force: bool, + ) -> Result<(), VMError> { + let obj = self + .objects + .borrow() + .get(&id) + .cloned() + .ok_or(VMError::UnknownId(id))?; + let mut obj_ref = obj.borrow_mut(); + let logicable = obj_ref + .as_mut_logicable() + .ok_or(VMError::NotLogicable(id))?; + logicable + .set_logic(lt, val, force) + .map_err(Into::::into)?; + Ok(()) + } + + /// Set slot logic filed on device object + #[tracing::instrument] + pub fn set_slot_logic_field( + self: &Rc, + id: ObjectID, + slt: LogicSlotType, + index: u32, + val: f64, + force: bool, + ) -> Result<(), VMError> { + let obj = self + .objects + .borrow() + .get(&id) + .cloned() + .ok_or(VMError::UnknownId(id))?; + let mut obj_ref = obj.borrow_mut(); + let device = obj_ref.as_mut_device().ok_or(VMError::NotLogicable(id))?; + device + .set_slot_logic(slt, index as f64, val, force) + .map_err(Into::::into)?; + Ok(()) } /// returns a list of device ids modified in the last operations - pub fn last_operation_modified(&self) -> Vec { + pub fn last_operation_modified(self: &Rc) -> Vec { self.operation_modified.borrow().clone() } - pub fn step_ic(&self, id: u32, advance_ip_on_err: bool) -> Result { - self.operation_modified.borrow_mut().clear(); - let ic_id = { - let device = self.devices.get(&id).ok_or(VMError::UnknownId(id))?; - let device_ref = device.borrow(); - let ic_id = device_ref.ic.as_ref().ok_or(VMError::NoIC(id))?; - *ic_id + #[tracing::instrument] + pub fn step_programmable( + self: &Rc, + id: ObjectID, + advance_ip_on_err: bool, + ) -> Result<(), VMError> { + let obj = self + .objects + .borrow() + .get(&id) + .cloned() + .ok_or(VMError::UnknownId(id))?; + { + let mut obj_ref = obj.borrow_mut(); + if let Some(programmable) = obj_ref.as_mut_programmable() { + self.operation_modified.borrow_mut().clear(); + self.set_modified(id); + programmable.step(advance_ip_on_err)?; + return Ok(()); + } + } + let ic_obj = { + let obj_ref = obj.borrow(); + if let Some(circuit_holder) = obj_ref.as_circuit_holder() { + circuit_holder.get_ic() + } else { + return Err(VMError::NotCircuitHolderOrProgrammable(id)); + } }; - self.set_modified(id); - let ic = self - .ics - .get(&ic_id) - .ok_or(VMError::UnknownIcId(ic_id))? - .clone(); - ic.borrow().ic.replace(0); - let result = ic.borrow().step(self, advance_ip_on_err)?; - Ok(result) + + if let Some(ic_obj) = ic_obj { + let mut ic_obj_ref = ic_obj.borrow_mut(); + let ic_id = *ic_obj_ref.get_id(); + if let Some(programmable) = ic_obj_ref.as_mut_programmable() { + self.operation_modified.borrow_mut().clear(); + self.set_modified(ic_id); + programmable.step(advance_ip_on_err)?; + return Ok(()); + } + return Err(VMError::NotProgrammable(ic_id)); + } + Err(VMError::NoIC(id)) } /// returns true if executed 128 lines, false if returned early. - pub fn run_ic(&self, id: u32, ignore_errors: bool) -> Result { - self.operation_modified.borrow_mut().clear(); - let device = self.devices.get(&id).ok_or(VMError::UnknownId(id))?.clone(); - let ic_id = *device.borrow().ic.as_ref().ok_or(VMError::NoIC(id))?; - let ic = self - .ics - .get(&ic_id) - .ok_or(VMError::UnknownIcId(ic_id))? - .clone(); - ic.borrow().ic.replace(0); - self.set_modified(id); - for _i in 0..128 { - if let Err(err) = ic.borrow().step(self, ignore_errors) { - if !ignore_errors { - return Err(err.into()); + #[tracing::instrument] + pub fn run_programmable( + self: &Rc, + id: ObjectID, + ignore_errors: bool, + ) -> Result { + let obj = self + .objects + .borrow() + .get(&id) + .cloned() + .ok_or(VMError::UnknownId(id))?; + { + let mut obj_ref = obj.borrow_mut(); + if let Some(programmable) = obj_ref.as_mut_programmable() { + self.operation_modified.borrow_mut().clear(); + self.set_modified(id); + for _i in 0..128 { + if let Err(err) = programmable.step(ignore_errors) { + if !ignore_errors { + return Err(err.into()); + } + } + match programmable.get_state() { + ICState::Yield => return Ok(false), + ICState::Sleep(_then, _sleep_for) => return Ok(false), + ICState::HasCaughtFire => return Ok(false), + ICState::Error(_) if !ignore_errors => return Ok(false), + _ => {} + } } - } - if let interpreter::ICState::Yield = *ic.borrow().state.borrow() { - return Ok(false); - } else if let interpreter::ICState::Sleep(_then, _sleep_for) = - *ic.borrow().state.borrow() - { - return Ok(false); + programmable.set_state(ICState::Yield); + return Ok(true); } } - ic.borrow().state.replace(interpreter::ICState::Yield); - Ok(true) + let ic_obj = { + let obj_ref = obj.borrow(); + if let Some(circuit_holder) = obj_ref.as_circuit_holder() { + circuit_holder.get_ic() + } else { + return Err(VMError::NotCircuitHolderOrProgrammable(id)); + } + }; + if let Some(ic_obj) = ic_obj { + let mut ic_obj_ref = ic_obj.borrow_mut(); + let ic_id = *ic_obj_ref.get_id(); + if let Some(programmable) = ic_obj_ref.as_mut_programmable() { + self.operation_modified.borrow_mut().clear(); + self.set_modified(ic_id); + for _i in 0..128 { + if let Err(err) = programmable.step(ignore_errors) { + if !ignore_errors { + return Err(err.into()); + } + } + match programmable.get_state() { + ICState::Yield => return Ok(false), + ICState::Sleep(_then, _sleep_for) => return Ok(false), + ICState::HasCaughtFire => return Ok(false), + ICState::Error(_) if !ignore_errors => return Ok(false), + _ => {} + } + } + programmable.set_state(ICState::Yield); + return Ok(true); + } + return Err(VMError::NotProgrammable(ic_id)); + } + Err(VMError::NoIC(id)) } - pub fn set_modified(&self, id: u32) { + pub fn set_modified(self: &Rc, id: ObjectID) { self.operation_modified.borrow_mut().push(id); } - pub fn reset_ic(&self, id: u32) -> Result { - let device = self.devices.get(&id).ok_or(VMError::UnknownId(id))?.clone(); - let ic_id = *device.borrow().ic.as_ref().ok_or(VMError::NoIC(id))?; - let ic = self - .ics - .get(&ic_id) - .ok_or(VMError::UnknownIcId(ic_id))? - .clone(); - ic.borrow().ic.replace(0); - ic.borrow().reset(); - Ok(true) + #[tracing::instrument] + pub fn reset_programmable(self: &Rc, id: ObjectID) -> Result { + let obj = self + .objects + .borrow() + .get(&id) + .cloned() + .ok_or(VMError::UnknownId(id))?; + { + let mut obj_ref = obj.borrow_mut(); + if let Some(programmable) = obj_ref.as_mut_programmable() { + tracing::debug!(id, "resetting"); + programmable.reset(); + return Ok(true); + } + } + let ic_obj = { + let obj_ref = obj.borrow(); + if let Some(circuit_holder) = obj_ref.as_circuit_holder() { + circuit_holder.get_ic() + } else { + return Err(VMError::NotCircuitHolderOrProgrammable(id)); + } + }; + if let Some(ic_obj) = ic_obj { + let mut ic_obj_ref = ic_obj.borrow_mut(); + let ic_id = *ic_obj_ref.get_id(); + if let Some(programmable) = ic_obj_ref.as_mut_programmable() { + tracing::debug!(id = ic_id, "resetting"); + programmable.reset(); + return Ok(true); + } + return Err(VMError::NotProgrammable(ic_id)); + } + Err(VMError::NoIC(id)) } - pub fn get_device(&self, id: u32) -> Option>> { - self.devices.get(&id).cloned() + #[tracing::instrument] + pub fn get_object(self: &Rc, id: ObjectID) -> Option { + self.objects.borrow().get(&id).cloned() } + #[tracing::instrument] pub fn batch_device( - &self, - source: u32, + self: &Rc, + source: ObjectID, prefab_hash: f64, name: Option, - ) -> impl Iterator>> { - self.devices + ) -> impl Iterator { + self.objects + .borrow() .iter() .filter(move |(id, device)| { - device - .borrow() - .get_fields(self) - .get(&LogicType::PrefabHash) - .is_some_and(|f| f.value == prefab_hash) - && (name.is_none() - || name == device.borrow().name_hash.as_ref().map(|hash| *hash as f64)) - && self.devices_on_same_network(&[source, **id]) + if **id == source { + // FIXME: check to make sure this won't cause issues + // if it will pass in a self ref for access + false // exclude source to prevent re-borrow panics + } else { + device.borrow().as_device().is_some_and(|device| { + device + .get_logic(LogicType::PrefabHash) + .is_ok_and(|f| f == prefab_hash) + }) && (name.is_none() + || name.is_some_and(|name| name == device.borrow().get_name().hash as f64)) + && self.devices_on_same_network(&[source, **id]) + } }) .map(|(_, d)| d) + .cloned() + .collect::>() + .into_iter() } - pub fn get_device_same_network(&self, source: u32, other: u32) -> Option>> { + #[tracing::instrument] + pub fn get_device_same_network( + self: &Rc, + source: ObjectID, + other: ObjectID, + ) -> Option { if self.devices_on_same_network(&[source, other]) { - self.get_device(other) + self.get_object(other) } else { None } } - pub fn get_network_channel(&self, id: u32, channel: usize) -> Result { - let network = self.networks.get(&id).ok_or(ICError::BadNetworkId(id))?; + #[tracing::instrument] + pub fn get_network_channel( + self: &Rc, + id: ObjectID, + channel: usize, + ) -> Result { + let network = self + .networks + .borrow() + .get(&id) + .cloned() + .ok_or(ICError::BadNetworkId(id))?; if !(0..8).contains(&channel) { Err(ICError::ChannelIndexOutOfRange(channel)) } else { - Ok(network.borrow().channels[channel]) + let channel_lt = LogicType::from_repr((LogicType::Channel0 as usize + channel) as u16) + .expect("channel logictype repr out of range"); + let net_ref = network.borrow(); + let val = net_ref + .as_network() + .expect("non-network network") + .get_logic(channel_lt)?; + Ok(val) } } - pub fn set_network_channel(&self, id: u32, channel: usize, val: f64) -> Result<(), ICError> { - let network = self.networks.get(&(id)).ok_or(ICError::BadNetworkId(id))?; + #[tracing::instrument] + pub fn set_network_channel( + self: &Rc, + id: ObjectID, + channel: usize, + val: f64, + ) -> Result<(), ICError> { + let network = self + .networks + .borrow() + .get(&(id)) + .cloned() + .ok_or(ICError::BadNetworkId(id))?; if !(0..8).contains(&channel) { Err(ICError::ChannelIndexOutOfRange(channel)) } else { - network.borrow_mut().channels[channel] = val; + let channel_lt = LogicType::from_repr((LogicType::Channel0 as usize + channel) as u16) + .expect("channel logictype repr out of range"); + network + .borrow_mut() + .as_mut_network() + .expect("non-network network") + .set_logic(channel_lt, val, true)?; Ok(()) } } - pub fn devices_on_same_network(&self, ids: &[u32]) -> bool { - for net in self.networks.values() { - if net.borrow().contains_all_data(ids) { + #[tracing::instrument] + pub fn devices_on_same_network(self: &Rc, ids: &[ObjectID]) -> bool { + for net in self.networks.borrow().values() { + if net + .borrow() + .as_network() + .expect("non network network") + .contains_all_data(ids) + { return true; } } false } - /// return a vecter with the device ids the source id can see via it's connected networks - pub fn visible_devices(&self, source: u32) -> Vec { + /// return a vector with the device ids the source id can see via it's connected networks + #[tracing::instrument] + pub fn visible_devices(self: &Rc, source: ObjectID) -> Vec { self.networks + .borrow() .values() .filter_map(|net| { - if net.borrow().contains_data(&source) { - Some(net.borrow().data_visible(&source)) + let net_ref = net.borrow(); + let net_interface = net_ref.as_network().expect("non-network network"); + if net_interface.contains_data(&source) { + Some(net_interface.data_visible(&source)) } else { None } @@ -490,97 +971,130 @@ impl VM { .concat() } - pub fn set_pin(&self, id: u32, pin: usize, val: Option) -> Result { - let Some(device) = self.devices.get(&id) else { + #[tracing::instrument] + pub fn set_pin( + self: &Rc, + id: ObjectID, + pin: usize, + val: Option, + ) -> Result { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { return Err(VMError::UnknownId(id)); }; if let Some(other_device) = val { - if !self.devices.contains_key(&other_device) { + if !self.objects.borrow().contains_key(&other_device) { return Err(VMError::UnknownId(other_device)); } if !self.devices_on_same_network(&[id, other_device]) { return Err(VMError::DeviceNotVisible(other_device, id)); } } - if !(0..6).contains(&pin) { + let mut obj_ref = obj.borrow_mut(); + let Some(device) = obj_ref.as_mut_device() else { + return Err(VMError::NotADevice(id)); + }; + let Some(pins) = device.device_pins_mut() else { + return Err(VMError::NoDevicePins(id)); + }; + if !(0..pins.len()).contains(&pin) { Err(ICError::PinIndexOutOfRange(pin).into()) } else { - let Some(ic_id) = device.borrow().ic else { - return Err(VMError::NoIC(id)); - }; - self.ics.get(&ic_id).unwrap().borrow().pins.borrow_mut()[pin] = val; + pins[pin] = val; Ok(true) } } + #[tracing::instrument] pub fn set_device_connection( - &self, - id: u32, + self: &Rc, + id: ObjectID, connection: usize, - target_net: Option, + target_net: Option, ) -> Result { - let Some(device) = self.devices.get(&id) else { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { return Err(VMError::UnknownId(id)); }; - if connection >= device.borrow().connections.len() { - let conn_len = device.borrow().connections.len(); - return Err(ICError::ConnectionIndexOutOfRange(connection, conn_len).into()); + let mut obj_ref = obj.borrow_mut(); + let Some(device) = obj_ref.as_mut_device() else { + return Err(VMError::NotADevice(id)); + }; + let connections = device.connection_list_mut(); + if connection >= connections.len() { + let conn_len = connections.len(); + return Err(ICError::ConnectionIndexOutOfRange { + index: connection, + range: conn_len, + } + .into()); } - { - // scope this borrow - let connections = &device.borrow().connections; - let Connection::CableNetwork { net, typ } = &connections[connection] else { - return Err(ICError::NotACableConnection(connection).into()); - }; - // remove from current network - if let Some(net) = net { - if let Some(network) = self.networks.get(net) { - // if there is no other connection to this network - if connections - .iter() - .filter(|conn| { - matches!(conn, Connection::CableNetwork { - net: Some(other_net), - typ: other_typ - } if other_net == net && ( - !matches!(typ, CableConnectionType::Power) || - matches!(other_typ, CableConnectionType::Data | CableConnectionType::PowerAndData)) - ) - }) - .count() - == 1 - { - match typ { - CableConnectionType::Power => { - network.borrow_mut().remove_power(id); - } - _ => { - network.borrow_mut().remove_data(id); - - } + // scope this borrow + let Connection::CableNetwork { net, typ, .. } = &connections[connection] else { + return Err(ICError::NotACableConnection(connection).into()); + }; + // remove from current network + if let Some(net) = net { + if let Some(network) = self.networks.borrow().get(net) { + // if there is no other connection to this network + if connections + .iter() + .filter(|conn| { + matches!(conn, Connection::CableNetwork { + net: Some(other_net), + typ: other_typ, + .. + } if other_net == net && ( + !matches!(typ, CableConnectionType::Power) || + matches!(other_typ, CableConnectionType::Data | CableConnectionType::PowerAndData)) + ) + }) + .count() + == 1 + { + match typ { + CableConnectionType::Power => { + network + .borrow_mut() + .as_mut_network() + .ok_or(VMError::NonNetworkNetwork(*net))? + .remove_power(id); + } + _ => { + network + .borrow_mut() + .as_mut_network() + .ok_or(VMError::NonNetworkNetwork(*net))? + .remove_data(id); } } } } } - let mut device_ref = device.borrow_mut(); - let connections = &mut device_ref.connections; + let Connection::CableNetwork { ref mut net, ref typ, + .. } = connections[connection] else { return Err(ICError::NotACableConnection(connection).into()); }; if let Some(target_net) = target_net { - if let Some(network) = self.networks.get(&target_net) { + if let Some(network) = self.networks.borrow().get(&target_net) { match typ { CableConnectionType::Power => { - network.borrow_mut().add_power(id); + network + .borrow_mut() + .as_mut_network() + .ok_or(VMError::NonNetworkNetwork(target_net))? + .add_power(id); } _ => { - network.borrow_mut().add_data(id); + network + .borrow_mut() + .as_mut_network() + .ok_or(VMError::NonNetworkNetwork(target_net))? + .add_data(id); } } } else { @@ -591,30 +1105,43 @@ impl VM { Ok(true) } - pub fn remove_device_from_network(&self, id: u32, network_id: u32) -> Result { - if let Some(network) = self.networks.get(&network_id) { - let Some(device) = self.devices.get(&id) else { + #[tracing::instrument] + pub fn remove_device_from_network( + self: &Rc, + id: ObjectID, + network_id: ObjectID, + ) -> Result { + if let Some(network) = self.networks.borrow().get(&network_id) { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { return Err(VMError::UnknownId(id)); }; - let mut device_ref = device.borrow_mut(); + let mut obj_ref = obj.borrow_mut(); + let Some(device) = obj_ref.as_mut_device() else { + return Err(VMError::NotADevice(id)); + }; - for conn in device_ref.connections.iter_mut() { + for conn in device.connection_list_mut().iter_mut() { if let Connection::CableNetwork { net, .. } = conn { if net.is_some_and(|id| id == network_id) { *net = None; } } } - network.borrow_mut().remove_all(id); + network + .borrow_mut() + .as_mut_network() + .ok_or(VMError::NonNetworkNetwork(network_id))? + .remove_all(id); Ok(true) } else { Err(VMError::InvalidNetwork(network_id)) } } + #[tracing::instrument] pub fn set_batch_device_field( - &self, - source: u32, + self: &Rc, + source: ObjectID, prefab: f64, typ: LogicType, val: f64, @@ -622,36 +1149,44 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, None) .map(|device| { - self.set_modified(device.borrow().id); + self.set_modified(*device.borrow().get_id()); device .borrow_mut() - .set_field(typ, val, self, write_readonly) + .as_mut_device() + .expect("batch iter yielded non device") + .set_logic(typ, val, write_readonly) + .map_err(Into::into) }) .try_collect() } + #[tracing::instrument] pub fn set_batch_device_slot_field( - &self, - source: u32, + self: &Rc, + source: ObjectID, prefab: f64, index: f64, - typ: SlotLogicType, + typ: LogicSlotType, val: f64, write_readonly: bool, ) -> Result<(), ICError> { self.batch_device(source, prefab, None) .map(|device| { - self.set_modified(device.borrow().id); + self.set_modified(*device.borrow().get_id()); device .borrow_mut() - .set_slot_field(index, typ, val, self, write_readonly) + .as_mut_device() + .expect("batch iter yielded non device") + .set_slot_logic(typ, index, val, write_readonly) + .map_err(Into::into) }) .try_collect() } + #[tracing::instrument] pub fn set_batch_name_device_field( - &self, - source: u32, + self: &Rc, + source: ObjectID, prefab: f64, name: f64, typ: LogicType, @@ -660,232 +1195,519 @@ impl VM { ) -> Result<(), ICError> { self.batch_device(source, prefab, Some(name)) .map(|device| { - self.set_modified(device.borrow().id); + self.set_modified(*device.borrow().get_id()); device .borrow_mut() - .set_field(typ, val, self, write_readonly) + .as_mut_device() + .expect("batch iter yielded non device") + .set_logic(typ, val, write_readonly) + .map_err(Into::into) }) .try_collect() } + #[tracing::instrument] pub fn get_batch_device_field( - &self, - source: u32, + self: &Rc, + source: ObjectID, prefab: f64, typ: LogicType, - mode: BatchMode, + mode: LogicBatchMethod, ) -> Result { let samples = self .batch_device(source, prefab, None) - .map(|device| device.borrow_mut().get_field(typ, self)) + .map(|device| { + device + .borrow() + .as_device() + .expect("batch iter yielded non device") + .get_logic(typ) + .map_err(Into::into) + }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; - Ok(mode.apply(&samples)) + Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } + #[tracing::instrument] pub fn get_batch_name_device_field( - &self, - source: u32, + self: &Rc, + source: ObjectID, prefab: f64, name: f64, typ: LogicType, - mode: BatchMode, + mode: LogicBatchMethod, ) -> Result { let samples = self .batch_device(source, prefab, Some(name)) - .map(|device| device.borrow_mut().get_field(typ, self)) + .map(|device| { + device + .borrow() + .as_device() + .expect("batch iter yielded non device") + .get_logic(typ) + .map_err(Into::into) + }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; - Ok(mode.apply(&samples)) + Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } + #[tracing::instrument] pub fn get_batch_name_device_slot_field( - &self, - source: u32, + self: &Rc, + source: ObjectID, prefab: f64, name: f64, index: f64, - typ: SlotLogicType, - mode: BatchMode, + typ: LogicSlotType, + mode: LogicBatchMethod, ) -> Result { let samples = self .batch_device(source, prefab, Some(name)) - .map(|device| device.borrow().get_slot_field(index, typ, self)) + .map(|device| { + device + .borrow() + .as_device() + .expect("batch iter yielded non device") + .get_slot_logic(typ, index) + .map_err(Into::into) + }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; - Ok(mode.apply(&samples)) + Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } + #[tracing::instrument] pub fn get_batch_device_slot_field( - &self, - source: u32, + self: &Rc, + source: ObjectID, prefab: f64, index: f64, - typ: SlotLogicType, - mode: BatchMode, + typ: LogicSlotType, + mode: LogicBatchMethod, ) -> Result { let samples = self .batch_device(source, prefab, None) - .map(|device| device.borrow().get_slot_field(index, typ, self)) + .map(|device| { + device + .borrow() + .as_device() + .expect("batch iter yielded non device") + .get_slot_logic(typ, index) + .map_err(Into::into) + }) .filter_ok(|val| !val.is_nan()) .collect::, ICError>>()?; - Ok(mode.apply(&samples)) + Ok(LogicBatchMethodWrapper(mode).apply(&samples)) } - pub fn remove_device(&mut self, id: u32) -> Result<(), VMError> { - let Some(device) = self.devices.remove(&id) else { + #[tracing::instrument] + pub fn remove_object(self: &Rc, id: ObjectID) -> Result<(), VMError> { + let Some(obj) = self.objects.borrow_mut().remove(&id) else { return Err(VMError::UnknownId(id)); }; - for conn in device.borrow().connections.iter() { - if let Connection::CableNetwork { net: Some(net), .. } = conn { - if let Some(network) = self.networks.get(net) { - network.borrow_mut().remove_all(id); + if let Some(device) = obj.borrow().as_device() { + for conn in device.connection_list().iter() { + if let Connection::CableNetwork { net: Some(net), .. } = conn { + if let Some(network) = self.networks.borrow().get(net) { + network + .borrow_mut() + .as_mut_network() + .expect("non-network network") + .remove_all(id); + } + } + } + if device.as_circuit_holder().is_some() { + self.circuit_holders.borrow_mut().retain(|a| *a != id); + } + } + self.id_space.borrow_mut().free_id(id); + Ok(()) + } + + /// set a slot to contain some quantity of an object with ID + /// object must already be added to the VM + /// does not clean up previous object + /// returns the id of any former occupant + #[tracing::instrument] + pub fn set_slot_occupant( + self: &Rc, + id: ObjectID, + index: usize, + target: Option, + quantity: u32, + ) -> Result, VMError> { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { + return Err(VMError::UnknownId(id)); + }; + let mut obj_ref = obj.borrow_mut(); + let Some(storage) = obj_ref.as_mut_storage() else { + return Err(VMError::NotStorage(id)); + }; + let slot = storage + .get_slot_mut(index) + .ok_or(ICError::SlotIndexOutOfRange(index as f64))?; + if let Some(target) = target { + match slot.occupant.as_mut() { + Some(info) if info.id == target => { + info.quantity = quantity; + Ok(None) + } + _ => { + let Some(item_obj) = self.objects.borrow().get(&target).cloned() else { + return Err(VMError::UnknownId(id)); + }; + let mut item_obj_ref = item_obj.borrow_mut(); + let Some(item) = item_obj_ref.as_mut_item() else { + return Err(VMError::NotAnItem(target)); + }; + if let Some(parent_slot_info) = item.get_parent_slot() { + self.remove_slot_occupant(parent_slot_info.parent, parent_slot_info.slot)?; + } + item.set_parent_slot(Some(ParentSlotInfo { + parent: id, + slot: index, + })); + let last = slot.occupant.as_ref().map(|info| info.id); + slot.occupant.replace(SlotOccupantInfo { + id: target, + quantity, + }); + Ok(last) + } + } + } else { + let last = slot.occupant.as_ref().map(|info| info.id); + slot.occupant = None; + Ok(last) + } + } + + /// returns former occupant id if any + #[tracing::instrument] + pub fn remove_slot_occupant( + self: &Rc, + id: ObjectID, + index: usize, + ) -> Result, VMError> { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { + return Err(VMError::UnknownId(id)); + }; + let mut obj_ref = obj.borrow_mut(); + let Some(storage) = obj_ref.as_mut_storage() else { + return Err(VMError::NotStorage(id)); + }; + let slot = storage + .get_slot_mut(index) + .ok_or(ICError::SlotIndexOutOfRange(index as f64))?; + + let last = slot.occupant.as_ref().map(|info| info.id); + Ok(last) + } + + #[tracing::instrument] + pub fn freeze_object(self: &Rc, id: ObjectID) -> Result { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { + return Err(VMError::UnknownId(id)); + }; + Ok(FrozenObject::freeze_object(&obj, self)?) + } + + #[tracing::instrument(skip(ids))] + pub fn freeze_objects( + self: &Rc, + ids: impl IntoIterator, + ) -> Result, VMError> { + ids.into_iter() + .map(|id| { + let Some(obj) = self.objects.borrow().get(&id).cloned() else { + return Err(VMError::UnknownId(id)); + }; + Ok(FrozenObject::freeze_object(&obj, self)?) + }) + .collect() + } + + #[tracing::instrument] + pub fn freeze_network(self: &Rc, id: ObjectID) -> Result { + Ok(self + .networks + .borrow() + .get(&id) + .ok_or(VMError::UnknownId(id))? + .borrow() + .as_network() + .ok_or(VMError::NonNetworkNetwork(id))? + .into()) + } + + #[tracing::instrument(skip(ids))] + pub fn freeze_networks( + self: &Rc, + ids: impl IntoIterator, + ) -> Result, VMError> { + ids.into_iter() + .map(|id| { + Ok(self + .networks + .borrow() + .get(&id) + .ok_or(VMError::UnknownId(id))? + .borrow() + .as_network() + .ok_or(VMError::NonNetworkNetwork(id))? + .into()) + }) + .collect::, VMError>>() + } + + #[tracing::instrument] + pub fn save_vm_state(self: &Rc) -> Result { + tracing::trace!("saving vm state"); + Ok(FrozenVM { + objects: self + .objects + .borrow() + .iter() + .map(|(_obj_id, obj)| FrozenObject::freeze_object_sparse(obj, self)) + .collect::, _>>()?, + networks: self + .networks + .borrow() + .values() + .map(|network| { + let net_id = network.get_id(); + Ok(network + .borrow() + .as_network() + .ok_or(VMError::NonNetworkNetwork(net_id))? + .into()) + }) + .collect::, VMError>>()?, + default_network_key: *self.default_network_key.borrow(), + circuit_holders: self.circuit_holders.borrow().clone(), + program_holders: self.program_holders.borrow().clone(), + wireless_transmitters: self.wireless_transmitters.borrow().clone(), + wireless_receivers: self.wireless_receivers.borrow().clone(), + }) + } + + #[tracing::instrument] + pub fn restore_vm_state(self: &Rc, state: FrozenVM) -> Result<(), VMError> { + tracing::trace!("restoring vm state from {:?}", &state); + let mut transaction_network_id_space = IdSpace::new(); + transaction_network_id_space + .use_ids(&state.networks.iter().map(|net| net.id).collect_vec())?; + let transaction_networks: BTreeMap = state + .networks + .into_iter() + .map(|network| { + ( + network.id, + VMObject::new(CableNetwork::from_frozen(network, self.clone())), + ) + }) + .collect(); + let mut transaction = VMTransaction::from_scratch_with_networks( + self, + &transaction_networks, + state.default_network_key, + ); + for frozen in state.objects { + let _ = transaction.add_object_from_frozen(frozen)?; + } + transaction.finalize()?; + + self.circuit_holders.borrow_mut().clear(); + self.program_holders.borrow_mut().clear(); + self.objects.borrow_mut().clear(); + self.networks.borrow_mut().clear(); + self.wireless_transmitters.borrow_mut().clear(); + self.wireless_receivers.borrow_mut().clear(); + self.id_space.borrow_mut().reset(); + self.network_id_space.borrow_mut().reset(); + + self.network_id_space.replace(transaction_network_id_space); + self.networks.replace(transaction_networks); + + let transaction_ids = transaction.id_space.in_use_ids(); + self.id_space.borrow_mut().use_ids(&transaction_ids)?; + + self.objects.borrow_mut().extend(transaction.objects); + self.circuit_holders + .borrow_mut() + .extend(transaction.circuit_holders); + self.program_holders + .borrow_mut() + .extend(transaction.program_holders); + self.wireless_transmitters + .borrow_mut() + .extend(transaction.wireless_transmitters); + self.wireless_receivers + .borrow_mut() + .extend(transaction.wireless_receivers); + + for (net_id, trans_net) in transaction.networks.into_iter() { + let networks_ref = self.networks.borrow(); + let net = networks_ref + .get(&net_id) + .unwrap_or_else(|| panic!("desync between vm and transaction networks: {net_id}")); + let mut net_ref = net.borrow_mut(); + let net_interface = net_ref + .as_mut_network() + .ok_or(VMError::NonNetworkNetwork(net_id))?; + for id in trans_net.devices { + net_interface.add_data(id); + } + for id in trans_net.power_only { + net_interface.add_power(id); + } + } + + Ok(()) + } +} + +impl VMTransaction { + pub fn new(vm: &Rc) -> Self { + VMTransaction { + objects: BTreeMap::new(), + circuit_holders: Vec::new(), + program_holders: Vec::new(), + default_network_key: *vm.default_network_key.borrow(), + wireless_transmitters: Vec::new(), + wireless_receivers: Vec::new(), + id_space: vm.id_space.borrow().clone(), + networks: vm + .networks + .borrow() + .keys() + .map(|net_id| (*net_id, VMTransactionNetwork::default())) + .collect(), + object_parents: BTreeMap::new(), + vm: vm.clone(), + } + } + + pub fn from_scratch_with_networks( + vm: &Rc, + networks: &BTreeMap, + default: ObjectID, + ) -> Self { + VMTransaction { + objects: BTreeMap::new(), + circuit_holders: Vec::new(), + program_holders: Vec::new(), + default_network_key: default, + wireless_transmitters: Vec::new(), + wireless_receivers: Vec::new(), + id_space: IdSpace::new(), + networks: networks + .keys() + .map(|net_id| (*net_id, VMTransactionNetwork::default())) + .collect(), + object_parents: BTreeMap::new(), + vm: vm.clone(), + } + } + + pub fn add_object_from_frozen(&mut self, frozen: FrozenObject) -> Result { + for net_id in &frozen.connected_networks() { + if !self.networks.contains_key(net_id) { + return Err(VMError::InvalidNetwork(*net_id)); + } + } + + let obj_id = if let Some(obj_id) = frozen.obj_info.id { + self.id_space.use_id(obj_id)?; + obj_id + } else { + self.id_space.next() + }; + + let obj = frozen.build_vm_obj(obj_id, &self.vm)?; + + for (index, child_id) in frozen.contained_object_slots() { + self.object_parents.insert(child_id, (index, obj_id)); + } + + if let Some(_w_logicable) = obj.borrow().as_wireless_transmit() { + self.wireless_transmitters.push(obj_id); + } + if let Some(_r_logicable) = obj.borrow().as_wireless_receive() { + self.wireless_receivers.push(obj_id); + } + if let Some(_circuit_holder) = obj.borrow().as_circuit_holder() { + self.circuit_holders.push(obj_id); + } + if let Some(_programmable) = obj.borrow().as_programmable() { + self.program_holders.push(obj_id); + } + if let Some(device) = obj.borrow_mut().as_mut_device() { + for conn in device.connection_list() { + if let Connection::CableNetwork { + net: Some(net_id), + typ, + role: ConnectionRole::None, + } = conn + { + if let Some(net) = self.networks.get_mut(net_id) { + match typ { + CableConnectionType::Power => net.power_only.push(obj_id), + _ => net.devices.push(obj_id), + } + } else { + return Err(VMError::InvalidNetwork(*net_id)); + } } } } - if let Some(ic_id) = device.borrow().ic { - let _ = self.ics.remove(&ic_id); - } - self.id_space.free_id(id); - Ok(()) + + self.objects.insert(obj_id, obj); + + Ok(obj_id) } - pub fn set_slot_occupant( - &mut self, - id: u32, - index: usize, - template: SlotOccupantTemplate, - ) -> Result<(), VMError> { - let Some(device) = self.devices.get(&id) else { - return Err(VMError::UnknownId(id)); - }; - - let mut device_ref = device.borrow_mut(); - let slot = device_ref - .slots - .get_mut(index) - .ok_or(ICError::SlotIndexOutOfRange(index as f64))?; - - if let Some(id) = template.id.as_ref() { - self.id_space.use_id(*id)?; + pub fn finalize(&mut self) -> Result<(), VMError> { + tracing::trace!("finalizing vm transaction: {:?}", &self); + for (child, (slot, parent)) in &self.object_parents { + let child_obj = self + .objects + .get(child) + .ok_or(VMError::MissingChild(*child))?; + let mut child_obj_ref = child_obj.borrow_mut(); + let item = child_obj_ref + .as_mut_item() + .ok_or(VMError::NotParentable(*child))?; + item.set_parent_slot(Some(ParentSlotInfo { + slot: *slot as usize, + parent: *parent, + })); } - - let occupant = SlotOccupant::from_template(template, || self.id_space.next()); - if let Some(last) = slot.occupant.as_ref() { - self.id_space.free_id(last.id); - } - slot.occupant = Some(occupant); - - Ok(()) - } - - pub fn remove_slot_occupant(&mut self, id: u32, index: usize) -> Result<(), VMError> { - let Some(device) = self.devices.get(&id) else { - return Err(VMError::UnknownId(id)); - }; - - let mut device_ref = device.borrow_mut(); - let slot = device_ref - .slots - .get_mut(index) - .ok_or(ICError::SlotIndexOutOfRange(index as f64))?; - if let Some(last) = slot.occupant.as_ref() { - self.id_space.free_id(last.id); - } - slot.occupant = None; - Ok(()) - } - - pub fn save_vm_state(&self) -> FrozenVM { - FrozenVM { - ics: self.ics.values().map(|ic| ic.borrow().into()).collect(), - devices: self - .devices - .values() - .map(|device| device.borrow().into()) - .collect(), - networks: self - .networks - .values() - .map(|network| network.borrow().into()) - .collect(), - default_network: self.default_network, - } - } - - pub fn restore_vm_state(&mut self, state: FrozenVM) -> Result<(), VMError> { - self.ics.clear(); - self.devices.clear(); - self.networks.clear(); - self.id_space.reset(); - self.network_id_space.reset(); - - // ic ids sould be in slot occupants, don't duplicate - let to_use_ids = state - .devices - .iter() - .map(|template| { - let mut ids = template - .slots - .iter() - .filter_map(|slot| slot.occupant.as_ref().and_then(|occupant| occupant.id)) - .collect_vec(); - if let Some(id) = template.id { - ids.push(id); - } - ids - }) - .concat(); - self.id_space.use_ids(&to_use_ids)?; - - self.network_id_space - .use_ids(&state.networks.iter().map(|net| net.id).collect_vec())?; - - self.ics = state - .ics - .into_iter() - .map(|ic| (ic.id, Rc::new(RefCell::new(ic.into())))) - .collect(); - self.devices = state - .devices - .into_iter() - .map(|template| { - let device = Device::from_template(template, || self.id_space.next()); - (device.id, Rc::new(RefCell::new(device))) - }) - .collect(); - self.networks = state - .networks - .into_iter() - .map(|network| (network.id, Rc::new(RefCell::new(network.into())))) - .collect(); - self.default_network = state.default_network; Ok(()) } } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct FrozenVM { - pub ics: Vec, - pub devices: Vec, - pub networks: Vec, - pub default_network: u32, -} +pub struct LogicBatchMethodWrapper(LogicBatchMethod); -impl BatchMode { +impl LogicBatchMethodWrapper { pub fn apply(&self, samples: &[f64]) -> f64 { - match self { - BatchMode::Sum => samples.iter().sum(), - // Both c-charp and rust return NaN for 0.0/0.0 so we're good here - BatchMode::Average => samples.iter().copied().sum::() / samples.len() as f64, + match self.0 { + LogicBatchMethod::Sum => samples.iter().sum(), + // Both c-sharp and rust return NaN for 0.0/0.0 so we're good here + LogicBatchMethod::Average => { + samples.iter().copied().sum::() / samples.len() as f64 + } // Game uses a default of Positive INFINITY for Minimum - BatchMode::Minimum => *samples + LogicBatchMethod::Minimum => *samples .iter() .min_by(|a, b| a.partial_cmp(b).unwrap()) .unwrap_or(&f64::INFINITY), // Game uses default of NEG_INFINITY for Maximum - BatchMode::Maximum => *samples + LogicBatchMethod::Maximum => *samples .iter() .max_by(|a, b| a.partial_cmp(b).unwrap()) .unwrap_or(&f64::NEG_INFINITY), @@ -893,10 +1715,10 @@ impl BatchMode { } } -#[derive(Debug)] +#[derive(Debug, Clone)] struct IdSpace { - next: u32, - in_use: HashSet, + next: ObjectID, + in_use: HashSet, } impl Default for IdSpace { @@ -913,14 +1735,22 @@ impl IdSpace { } } - pub fn next(&mut self) -> u32 { + pub fn next(&mut self) -> ObjectID { let val = self.next; self.next += 1; self.in_use.insert(val); val } - pub fn use_id(&mut self, id: u32) -> Result<(), VMError> { + pub fn has_id(&self, id: &ObjectID) -> bool { + self.in_use.contains(id) + } + + pub fn in_use_ids(&self) -> Vec { + self.in_use.iter().copied().collect() + } + + pub fn use_id(&mut self, id: ObjectID) -> Result<(), VMError> { if self.in_use.contains(&id) { Err(VMError::IdInUse(id)) } else { @@ -931,10 +1761,10 @@ impl IdSpace { pub fn use_ids<'a, I>(&mut self, ids: I) -> Result<(), VMError> where - I: IntoIterator + std::marker::Copy, + I: IntoIterator + std::marker::Copy, { - let mut to_use: HashSet = HashSet::new(); - let mut duplicates: HashSet = HashSet::new(); + let mut to_use: HashSet = HashSet::new(); + let mut duplicates: HashSet = HashSet::new(); let all_uniq = ids.into_iter().copied().all(|id| { if to_use.insert(id) { true @@ -955,7 +1785,16 @@ impl IdSpace { Ok(()) } - pub fn free_id(&mut self, id: u32) { + /// use the ids in the iterator that aren't already in use + pub fn use_new_ids<'a, I>(&mut self, ids: I) + where + I: IntoIterator + std::marker::Copy, + { + self.in_use.extend(ids); + self.next = self.in_use.iter().max().unwrap_or(&0) + 1; + } + + pub fn free_id(&mut self, id: ObjectID) { self.in_use.remove(&id); } @@ -963,3 +1802,15 @@ impl IdSpace { self.in_use.clear(); } } + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct FrozenVM { + pub objects: Vec, + pub circuit_holders: Vec, + pub program_holders: Vec, + pub default_network_key: ObjectID, + pub networks: Vec, + pub wireless_transmitters: Vec, + pub wireless_receivers: Vec, +} diff --git a/ic10emu/src/vm/instructions.rs b/ic10emu/src/vm/instructions.rs new file mode 100644 index 0000000..e80b328 --- /dev/null +++ b/ic10emu/src/vm/instructions.rs @@ -0,0 +1,27 @@ +mod codegen; +pub mod operands; +pub use codegen::enums; +pub use codegen::traits; + +use enums::InstructionOp; +use operands::Operand; +use serde_derive::{Deserialize, Serialize}; + +use phf::phf_map; + +#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] +pub struct Instruction { + pub instruction: InstructionOp, + pub operands: Vec, +} + +#[allow(clippy::approx_constant)] +pub static CONSTANTS_LOOKUP: phf::Map<&'static str, f64> = phf_map! { + "nan" => f64::NAN, + "ninf" => f64::NEG_INFINITY, + "deg2rad" => 0.0174532923847437f64, + "rad2deg" => 57.2957801818848f64, + "epsilon" => f64::EPSILON, + "pinf" => f64::INFINITY, + "pi" => 3.141592653589793f64, +}; diff --git a/ic10emu/src/vm/instructions/codegen.rs b/ic10emu/src/vm/instructions/codegen.rs new file mode 100644 index 0000000..b5dcdc5 --- /dev/null +++ b/ic10emu/src/vm/instructions/codegen.rs @@ -0,0 +1,2 @@ +pub mod traits; +pub mod enums; diff --git a/ic10emu/src/vm/instructions/codegen/enums.rs b/ic10emu/src/vm/instructions/codegen/enums.rs new file mode 100644 index 0000000..80d659a --- /dev/null +++ b/ic10emu/src/vm/instructions/codegen/enums.rs @@ -0,0 +1,1592 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run +// +// `cargo xtask generate -m instructions` +// +// from the workspace to regenerate +// +// ================================================= + +use serde_derive::{Deserialize, Serialize}; +use strum::{Display, EnumIter, EnumProperty, EnumString, FromRepr}; +use crate::vm::object::traits::Programmable; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; +#[derive( + Debug, + Display, + PartialEq, + Eq, + PartialOrd, + Ord, + Clone, + Copy, + Serialize, + Deserialize +)] +#[derive(EnumIter, EnumString, EnumProperty, FromRepr)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf, serialize_all = "lowercase")] +#[serde(rename_all = "lowercase")] +pub enum InstructionOp { + #[strum(props(example = "", desc = "No Operation", operands = "0"))] + Nop, + #[strum( + props( + example = "abs r? a(r?|num)", + desc = "Register = the absolute value of a", + operands = "2" + ) + )] + Abs, + #[strum( + props( + example = "acos r? a(r?|num)", + desc = "Returns the cosine of the specified angle (radians)", + operands = "2" + ) + )] + Acos, + #[strum( + props( + example = "add r? a(r?|num) b(r?|num)", + desc = "Register = a + b.", + operands = "3" + ) + )] + Add, + #[strum( + props( + example = "alias str r?|d?", + desc = "Labels register or device reference with name, device references also affect what shows on the screws on the IC base.", + operands = "2" + ) + )] + Alias, + #[strum( + props( + example = "and r? a(r?|num) b(r?|num)", + desc = "Performs a bitwise logical AND operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If both bits are 1, the resulting bit is set to 1. Otherwise the resulting bit is set to 0.", + operands = "3" + ) + )] + And, + #[strum( + props( + example = "asin r? a(r?|num)", + desc = "Returns the angle (radians) whos sine is the specified value", + operands = "2" + ) + )] + Asin, + #[strum( + props( + example = "atan r? a(r?|num)", + desc = "Returns the angle (radians) whos tan is the specified value", + operands = "2" + ) + )] + Atan, + #[strum( + props( + example = "atan2 r? a(r?|num) b(r?|num)", + desc = "Returns the angle (radians) whose tangent is the quotient of two specified values: a (y) and b (x)", + operands = "3" + ) + )] + Atan2, + #[strum( + props( + example = "bap a(r?|num) b(r?|num) c(r?|num) d(r?|num)", + desc = "Branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8)", + operands = "4" + ) + )] + Bap, + #[strum( + props( + example = "bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num)", + desc = "Branch to line c if a != b and store next line number in ra", + operands = "4" + ) + )] + Bapal, + #[strum( + props( + example = "bapz a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8)", + operands = "3" + ) + )] + Bapz, + #[strum( + props( + example = "bapzal a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8) and store next line number in ra", + operands = "3" + ) + )] + Bapzal, + #[strum( + props( + example = "bdns d? a(r?|num)", + desc = "Branch to line a if device d isn't set", + operands = "2" + ) + )] + Bdns, + #[strum( + props( + example = "bdnsal d? a(r?|num)", + desc = "Jump execution to line a and store next line number if device is not set", + operands = "2" + ) + )] + Bdnsal, + #[strum( + props( + example = "bdse d? a(r?|num)", + desc = "Branch to line a if device d is set", + operands = "2" + ) + )] + Bdse, + #[strum( + props( + example = "bdseal d? a(r?|num)", + desc = "Jump execution to line a and store next line number if device is set", + operands = "2" + ) + )] + Bdseal, + #[strum( + props( + example = "beq a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a == b", + operands = "3" + ) + )] + Beq, + #[strum( + props( + example = "beqal a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a == b and store next line number in ra", + operands = "3" + ) + )] + Beqal, + #[strum( + props( + example = "beqz a(r?|num) b(r?|num)", + desc = "Branch to line b if a == 0", + operands = "2" + ) + )] + Beqz, + #[strum( + props( + example = "beqzal a(r?|num) b(r?|num)", + desc = "Branch to line b if a == 0 and store next line number in ra", + operands = "2" + ) + )] + Beqzal, + #[strum( + props( + example = "bge a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a >= b", + operands = "3" + ) + )] + Bge, + #[strum( + props( + example = "bgeal a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a >= b and store next line number in ra", + operands = "3" + ) + )] + Bgeal, + #[strum( + props( + example = "bgez a(r?|num) b(r?|num)", + desc = "Branch to line b if a >= 0", + operands = "2" + ) + )] + Bgez, + #[strum( + props( + example = "bgezal a(r?|num) b(r?|num)", + desc = "Branch to line b if a >= 0 and store next line number in ra", + operands = "2" + ) + )] + Bgezal, + #[strum( + props( + example = "bgt a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a > b", + operands = "3" + ) + )] + Bgt, + #[strum( + props( + example = "bgtal a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a > b and store next line number in ra", + operands = "3" + ) + )] + Bgtal, + #[strum( + props( + example = "bgtz a(r?|num) b(r?|num)", + desc = "Branch to line b if a > 0", + operands = "2" + ) + )] + Bgtz, + #[strum( + props( + example = "bgtzal a(r?|num) b(r?|num)", + desc = "Branch to line b if a > 0 and store next line number in ra", + operands = "2" + ) + )] + Bgtzal, + #[strum( + props( + example = "ble a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a <= b", + operands = "3" + ) + )] + Ble, + #[strum( + props( + example = "bleal a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a <= b and store next line number in ra", + operands = "3" + ) + )] + Bleal, + #[strum( + props( + example = "blez a(r?|num) b(r?|num)", + desc = "Branch to line b if a <= 0", + operands = "2" + ) + )] + Blez, + #[strum( + props( + example = "blezal a(r?|num) b(r?|num)", + desc = "Branch to line b if a <= 0 and store next line number in ra", + operands = "2" + ) + )] + Blezal, + #[strum( + props( + example = "blt a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a < b", + operands = "3" + ) + )] + Blt, + #[strum( + props( + example = "bltal a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a < b and store next line number in ra", + operands = "3" + ) + )] + Bltal, + #[strum( + props( + example = "bltz a(r?|num) b(r?|num)", + desc = "Branch to line b if a < 0", + operands = "2" + ) + )] + Bltz, + #[strum( + props( + example = "bltzal a(r?|num) b(r?|num)", + desc = "Branch to line b if a < 0 and store next line number in ra", + operands = "2" + ) + )] + Bltzal, + #[strum( + props( + example = "bna a(r?|num) b(r?|num) c(r?|num) d(r?|num)", + desc = "Branch to line d if abs(a - b) > max(c * max(abs(a), abs(b)), float.epsilon * 8)", + operands = "4" + ) + )] + Bna, + #[strum( + props( + example = "bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num)", + desc = "Branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8) and store next line number in ra", + operands = "4" + ) + )] + Bnaal, + #[strum( + props( + example = "bnan a(r?|num) b(r?|num)", + desc = "Branch to line b if a is not a number (NaN)", + operands = "2" + ) + )] + Bnan, + #[strum( + props( + example = "bnaz a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if abs(a) > max (b * abs(a), float.epsilon * 8)", + operands = "3" + ) + )] + Bnaz, + #[strum( + props( + example = "bnazal a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if abs(a) > max (b * abs(a), float.epsilon * 8) and store next line number in ra", + operands = "3" + ) + )] + Bnazal, + #[strum( + props( + example = "bne a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a != b", + operands = "3" + ) + )] + Bne, + #[strum( + props( + example = "bneal a(r?|num) b(r?|num) c(r?|num)", + desc = "Branch to line c if a != b and store next line number in ra", + operands = "3" + ) + )] + Bneal, + #[strum( + props( + example = "bnez a(r?|num) b(r?|num)", + desc = "branch to line b if a != 0", + operands = "2" + ) + )] + Bnez, + #[strum( + props( + example = "bnezal a(r?|num) b(r?|num)", + desc = "Branch to line b if a != 0 and store next line number in ra", + operands = "2" + ) + )] + Bnezal, + #[strum( + props( + example = "brap a(r?|num) b(r?|num) c(r?|num) d(r?|num)", + desc = "Relative branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8)", + operands = "4" + ) + )] + Brap, + #[strum( + props( + example = "brapz a(r?|num) b(r?|num) c(r?|num)", + desc = "Relative branch to line c if abs(a) <= max(b * abs(a), float.epsilon * 8)", + operands = "3" + ) + )] + Brapz, + #[strum( + props( + example = "brdns d? a(r?|num)", + desc = "Relative jump to line a if device is not set", + operands = "2" + ) + )] + Brdns, + #[strum( + props( + example = "brdse d? a(r?|num)", + desc = "Relative jump to line a if device is set", + operands = "2" + ) + )] + Brdse, + #[strum( + props( + example = "breq a(r?|num) b(r?|num) c(r?|num)", + desc = "Relative branch to line c if a == b", + operands = "3" + ) + )] + Breq, + #[strum( + props( + example = "breqz a(r?|num) b(r?|num)", + desc = "Relative branch to line b if a == 0", + operands = "2" + ) + )] + Breqz, + #[strum( + props( + example = "brge a(r?|num) b(r?|num) c(r?|num)", + desc = "Relative jump to line c if a >= b", + operands = "3" + ) + )] + Brge, + #[strum( + props( + example = "brgez a(r?|num) b(r?|num)", + desc = "Relative branch to line b if a >= 0", + operands = "2" + ) + )] + Brgez, + #[strum( + props( + example = "brgt a(r?|num) b(r?|num) c(r?|num)", + desc = "relative jump to line c if a > b", + operands = "3" + ) + )] + Brgt, + #[strum( + props( + example = "brgtz a(r?|num) b(r?|num)", + desc = "Relative branch to line b if a > 0", + operands = "2" + ) + )] + Brgtz, + #[strum( + props( + example = "brle a(r?|num) b(r?|num) c(r?|num)", + desc = "Relative jump to line c if a <= b", + operands = "3" + ) + )] + Brle, + #[strum( + props( + example = "brlez a(r?|num) b(r?|num)", + desc = "Relative branch to line b if a <= 0", + operands = "2" + ) + )] + Brlez, + #[strum( + props( + example = "brlt a(r?|num) b(r?|num) c(r?|num)", + desc = "Relative jump to line c if a < b", + operands = "3" + ) + )] + Brlt, + #[strum( + props( + example = "brltz a(r?|num) b(r?|num)", + desc = "Relative branch to line b if a < 0", + operands = "2" + ) + )] + Brltz, + #[strum( + props( + example = "brna a(r?|num) b(r?|num) c(r?|num) d(r?|num)", + desc = "Relative branch to line d if abs(a - b) > max(c * max(abs(a), abs(b)), float.epsilon * 8)", + operands = "4" + ) + )] + Brna, + #[strum( + props( + example = "brnan a(r?|num) b(r?|num)", + desc = "Relative branch to line b if a is not a number (NaN)", + operands = "2" + ) + )] + Brnan, + #[strum( + props( + example = "brnaz a(r?|num) b(r?|num) c(r?|num)", + desc = "Relative branch to line c if abs(a) > max(b * abs(a), float.epsilon * 8)", + operands = "3" + ) + )] + Brnaz, + #[strum( + props( + example = "brne a(r?|num) b(r?|num) c(r?|num)", + desc = "Relative branch to line c if a != b", + operands = "3" + ) + )] + Brne, + #[strum( + props( + example = "brnez a(r?|num) b(r?|num)", + desc = "Relative branch to line b if a != 0", + operands = "2" + ) + )] + Brnez, + #[strum( + props( + example = "ceil r? a(r?|num)", + desc = "Register = smallest integer greater than a", + operands = "2" + ) + )] + Ceil, + #[strum( + props( + example = "clr d?", + desc = "Clears the stack memory for the provided device.", + operands = "1" + ) + )] + Clr, + #[strum( + props( + example = "clrd id(r?|num)", + desc = "Seeks directly for the provided device id and clears the stack memory of that device", + operands = "1" + ) + )] + Clrd, + #[strum( + props( + example = "cos r? a(r?|num)", + desc = "Returns the cosine of the specified angle (radians)", + operands = "2" + ) + )] + Cos, + #[strum( + props( + example = "define str num", + desc = "Creates a label that will be replaced throughout the program with the provided value.", + operands = "2" + ) + )] + Define, + #[strum( + props( + example = "div r? a(r?|num) b(r?|num)", + desc = "Register = a / b", + operands = "3" + ) + )] + Div, + #[strum( + props( + example = "exp r? a(r?|num)", + desc = "Register = exp(a) or e^a", + operands = "2" + ) + )] + Exp, + #[strum( + props( + example = "floor r? a(r?|num)", + desc = "Register = largest integer less than a", + operands = "2" + ) + )] + Floor, + #[strum( + props( + example = "get r? d? address(r?|num)", + desc = "Using the provided device, attempts to read the stack value at the provided address, and places it in the register.", + operands = "3" + ) + )] + Get, + #[strum( + props( + example = "getd r? id(r?|num) address(r?|num)", + desc = "Seeks directly for the provided device id, attempts to read the stack value at the provided address, and places it in the register.", + operands = "3" + ) + )] + Getd, + #[strum(props(example = "hcf", desc = "Halt and catch fire", operands = "0"))] + Hcf, + #[strum(props(example = "j int", desc = "Jump execution to line a", operands = "1"))] + J, + #[strum( + props( + example = "jal int", + desc = "Jump execution to line a and store next line number in ra", + operands = "1" + ) + )] + Jal, + #[strum(props(example = "jr int", desc = "Relative jump to line a", operands = "1"))] + Jr, + #[strum( + props( + example = "l r? d? logicType", + desc = "Loads device LogicType to register by housing index value.", + operands = "3" + ) + )] + L, + #[strum(props(example = "label d? str", desc = "DEPRECATED", operands = "2"))] + Label, + #[strum( + props( + example = "lb r? deviceHash logicType batchMode", + desc = "Loads LogicType from all output network devices with provided type hash using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number.", + operands = "4" + ) + )] + Lb, + #[strum( + props( + example = "lbn r? deviceHash nameHash logicType batchMode", + desc = "Loads LogicType from all output network devices with provided type and name hashes using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number.", + operands = "5" + ) + )] + Lbn, + #[strum( + props( + example = "lbns r? deviceHash nameHash slotIndex logicSlotType batchMode", + desc = "Loads LogicSlotType from slotIndex from all output network devices with provided type and name hashes using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number.", + operands = "6" + ) + )] + Lbns, + #[strum( + props( + example = "lbs r? deviceHash slotIndex logicSlotType batchMode", + desc = "Loads LogicSlotType from slotIndex from all output network devices with provided type hash using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number.", + operands = "5" + ) + )] + Lbs, + #[strum( + props( + example = "ld r? id(r?|num) logicType", + desc = "Loads device LogicType to register by direct ID reference.", + operands = "3" + ) + )] + Ld, + #[strum( + props( + example = "log r? a(r?|num)", + desc = "Register = base e log(a) or ln(a)", + operands = "2" + ) + )] + Log, + #[strum( + props( + example = "lr r? d? reagentMode int", + desc = "Loads reagent of device's ReagentMode where a hash of the reagent type to check for. ReagentMode can be either Contents (0), Required (1), Recipe (2). Can use either the word, or the number.", + operands = "4" + ) + )] + Lr, + #[strum( + props( + example = "ls r? d? slotIndex logicSlotType", + desc = "Loads slot LogicSlotType on device to register.", + operands = "4" + ) + )] + Ls, + #[strum( + props( + example = "max r? a(r?|num) b(r?|num)", + desc = "Register = max of a or b", + operands = "3" + ) + )] + Max, + #[strum( + props( + example = "min r? a(r?|num) b(r?|num)", + desc = "Register = min of a or b", + operands = "3" + ) + )] + Min, + #[strum( + props( + example = "mod r? a(r?|num) b(r?|num)", + desc = "Register = a mod b (note: NOT a % b)", + operands = "3" + ) + )] + Mod, + #[strum( + props( + example = "move r? a(r?|num)", + desc = "Register = provided num or register value.", + operands = "2" + ) + )] + Move, + #[strum( + props( + example = "mul r? a(r?|num) b(r?|num)", + desc = "Register = a * b", + operands = "3" + ) + )] + Mul, + #[strum( + props( + example = "nor r? a(r?|num) b(r?|num)", + desc = "Performs a bitwise logical NOR (NOT OR) operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If both bits are 0, the resulting bit is set to 1. Otherwise, if at least one bit is 1, the resulting bit is set to 0.", + operands = "3" + ) + )] + Nor, + #[strum( + props( + example = "not r? a(r?|num)", + desc = "Performs a bitwise logical NOT operation flipping each bit of the input value, resulting in a binary complement. If a bit is 1, it becomes 0, and if a bit is 0, it becomes 1.", + operands = "2" + ) + )] + Not, + #[strum( + props( + example = "or r? a(r?|num) b(r?|num)", + desc = "Performs a bitwise logical OR operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If either bit is 1, the resulting bit is set to 1. If both bits are 0, the resulting bit is set to 0.", + operands = "3" + ) + )] + Or, + #[strum( + props( + example = "peek r?", + desc = "Register = the value at the top of the stack", + operands = "1" + ) + )] + Peek, + #[strum( + props( + example = "poke address(r?|num) value(r?|num)", + desc = "Stores the provided value at the provided address in the stack.", + operands = "2" + ) + )] + Poke, + #[strum( + props( + example = "pop r?", + desc = "Register = the value at the top of the stack and decrements sp", + operands = "1" + ) + )] + Pop, + #[strum( + props( + example = "push a(r?|num)", + desc = "Pushes the value of a to the stack at sp and increments sp", + operands = "1" + ) + )] + Push, + #[strum( + props( + example = "put d? address(r?|num) value(r?|num)", + desc = "Using the provided device, attempts to write the provided value to the stack at the provided address.", + operands = "3" + ) + )] + Put, + #[strum( + props( + example = "putd id(r?|num) address(r?|num) value(r?|num)", + desc = "Seeks directly for the provided device id, attempts to write the provided value to the stack at the provided address.", + operands = "3" + ) + )] + Putd, + #[strum( + props( + example = "rand r?", + desc = "Register = a random value x with 0 <= x < 1", + operands = "1" + ) + )] + Rand, + #[strum( + props( + example = "rmap r? d? reagentHash(r?|num)", + desc = "Given a reagent hash, store the corresponding prefab hash that the device expects to fulfill the reagent requirement. For example, on an autolathe, the hash for Iron will store the hash for ItemIronIngot.", + operands = "3" + ) + )] + Rmap, + #[strum( + props( + example = "round r? a(r?|num)", + desc = "Register = a rounded to nearest integer", + operands = "2" + ) + )] + Round, + #[strum( + props( + example = "s d? logicType r?", + desc = "Stores register value to LogicType on device by housing index value.", + operands = "3" + ) + )] + S, + #[strum( + props( + example = "sap r? a(r?|num) b(r?|num) c(r?|num)", + desc = "Register = 1 if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8), otherwise 0", + operands = "4" + ) + )] + Sap, + #[strum( + props( + example = "sapz r? a(r?|num) b(r?|num)", + desc = "Register = 1 if abs(a) <= max(b * abs(a), float.epsilon * 8), otherwise 0", + operands = "3" + ) + )] + Sapz, + #[strum( + props( + example = "sb deviceHash logicType r?", + desc = "Stores register value to LogicType on all output network devices with provided type hash.", + operands = "3" + ) + )] + Sb, + #[strum( + props( + example = "sbn deviceHash nameHash logicType r?", + desc = "Stores register value to LogicType on all output network devices with provided type hash and name.", + operands = "4" + ) + )] + Sbn, + #[strum( + props( + example = "sbs deviceHash slotIndex logicSlotType r?", + desc = "Stores register value to LogicSlotType on all output network devices with provided type hash in the provided slot.", + operands = "4" + ) + )] + Sbs, + #[strum( + props( + example = "sd id(r?|num) logicType r?", + desc = "Stores register value to LogicType on device by direct ID reference.", + operands = "3" + ) + )] + Sd, + #[strum( + props( + example = "sdns r? d?", + desc = "Register = 1 if device is not set, otherwise 0", + operands = "2" + ) + )] + Sdns, + #[strum( + props( + example = "sdse r? d?", + desc = "Register = 1 if device is set, otherwise 0.", + operands = "2" + ) + )] + Sdse, + #[strum( + props( + example = "select r? a(r?|num) b(r?|num) c(r?|num)", + desc = "Register = b if a is non-zero, otherwise c", + operands = "4" + ) + )] + Select, + #[strum( + props( + example = "seq r? a(r?|num) b(r?|num)", + desc = "Register = 1 if a == b, otherwise 0", + operands = "3" + ) + )] + Seq, + #[strum( + props( + example = "seqz r? a(r?|num)", + desc = "Register = 1 if a == 0, otherwise 0", + operands = "2" + ) + )] + Seqz, + #[strum( + props( + example = "sge r? a(r?|num) b(r?|num)", + desc = "Register = 1 if a >= b, otherwise 0", + operands = "3" + ) + )] + Sge, + #[strum( + props( + example = "sgez r? a(r?|num)", + desc = "Register = 1 if a >= 0, otherwise 0", + operands = "2" + ) + )] + Sgez, + #[strum( + props( + example = "sgt r? a(r?|num) b(r?|num)", + desc = "Register = 1 if a > b, otherwise 0", + operands = "3" + ) + )] + Sgt, + #[strum( + props( + example = "sgtz r? a(r?|num)", + desc = "Register = 1 if a > 0, otherwise 0", + operands = "2" + ) + )] + Sgtz, + #[strum( + props( + example = "sin r? a(r?|num)", + desc = "Returns the sine of the specified angle (radians)", + operands = "2" + ) + )] + Sin, + #[strum( + props( + example = "sla r? a(r?|num) b(r?|num)", + desc = "Performs a bitwise arithmetic left shift operation on the binary representation of a value. It shifts the bits to the left and fills the vacated rightmost bits with a copy of the sign bit (the most significant bit).", + operands = "3" + ) + )] + Sla, + #[strum( + props( + example = "sle r? a(r?|num) b(r?|num)", + desc = "Register = 1 if a <= b, otherwise 0", + operands = "3" + ) + )] + Sle, + #[strum( + props( + example = "sleep a(r?|num)", + desc = "Pauses execution on the IC for a seconds", + operands = "1" + ) + )] + Sleep, + #[strum( + props( + example = "slez r? a(r?|num)", + desc = "Register = 1 if a <= 0, otherwise 0", + operands = "2" + ) + )] + Slez, + #[strum( + props( + example = "sll r? a(r?|num) b(r?|num)", + desc = "Performs a bitwise logical left shift operation on the binary representation of a value. It shifts the bits to the left and fills the vacated rightmost bits with zeros.", + operands = "3" + ) + )] + Sll, + #[strum( + props( + example = "slt r? a(r?|num) b(r?|num)", + desc = "Register = 1 if a < b, otherwise 0", + operands = "3" + ) + )] + Slt, + #[strum( + props( + example = "sltz r? a(r?|num)", + desc = "Register = 1 if a < 0, otherwise 0", + operands = "2" + ) + )] + Sltz, + #[strum( + props( + example = "sna r? a(r?|num) b(r?|num) c(r?|num)", + desc = "Register = 1 if abs(a - b) > max(c * max(abs(a), abs(b)), float.epsilon * 8), otherwise 0", + operands = "4" + ) + )] + Sna, + #[strum( + props( + example = "snan r? a(r?|num)", + desc = "Register = 1 if a is NaN, otherwise 0", + operands = "2" + ) + )] + Snan, + #[strum( + props( + example = "snanz r? a(r?|num)", + desc = "Register = 0 if a is NaN, otherwise 1", + operands = "2" + ) + )] + Snanz, + #[strum( + props( + example = "snaz r? a(r?|num) b(r?|num)", + desc = "Register = 1 if abs(a) > max(b * abs(a), float.epsilon), otherwise 0", + operands = "3" + ) + )] + Snaz, + #[strum( + props( + example = "sne r? a(r?|num) b(r?|num)", + desc = "Register = 1 if a != b, otherwise 0", + operands = "3" + ) + )] + Sne, + #[strum( + props( + example = "snez r? a(r?|num)", + desc = "Register = 1 if a != 0, otherwise 0", + operands = "2" + ) + )] + Snez, + #[strum( + props( + example = "sqrt r? a(r?|num)", + desc = "Register = square root of a", + operands = "2" + ) + )] + Sqrt, + #[strum( + props( + example = "sra r? a(r?|num) b(r?|num)", + desc = "Performs a bitwise arithmetic right shift operation on the binary representation of a value. It shifts the bits to the right and fills the vacated leftmost bits with a copy of the sign bit (the most significant bit).", + operands = "3" + ) + )] + Sra, + #[strum( + props( + example = "srl r? a(r?|num) b(r?|num)", + desc = "Performs a bitwise logical right shift operation on the binary representation of a value. It shifts the bits to the right and fills the vacated leftmost bits with zeros", + operands = "3" + ) + )] + Srl, + #[strum( + props( + example = "ss d? slotIndex logicSlotType r?", + desc = "Stores register value to device stored in a slot LogicSlotType on device.", + operands = "4" + ) + )] + Ss, + #[strum( + props( + example = "sub r? a(r?|num) b(r?|num)", + desc = "Register = a - b.", + operands = "3" + ) + )] + Sub, + #[strum( + props( + example = "tan r? a(r?|num)", + desc = "Returns the tan of the specified angle (radians) ", + operands = "2" + ) + )] + Tan, + #[strum( + props( + example = "trunc r? a(r?|num)", + desc = "Register = a with fractional part removed", + operands = "2" + ) + )] + Trunc, + #[strum( + props( + example = "xor r? a(r?|num) b(r?|num)", + desc = "Performs a bitwise logical XOR (exclusive OR) operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If the bits are different (one bit is 0 and the other is 1), the resulting bit is set to 1. If the bits are the same (both 0 or both 1), the resulting bit is set to 0.", + operands = "3" + ) + )] + Xor, + #[strum( + props(example = "yield", desc = "Pauses execution for 1 tick", operands = "0") + )] + Yield, +} +impl InstructionOp { + pub fn num_operands(&self) -> usize { + self.get_str("operands") + .expect("instruction without operand property") + .parse::() + .expect("invalid instruction operand property") + } + pub fn execute( + &self, + ic: &mut T, + operands: &[crate::vm::instructions::operands::Operand], + ) -> Result<(), crate::errors::ICError> + where + T: Programmable, + { + let num_operands = self.num_operands(); + if operands.len() != num_operands { + return Err( + crate::errors::ICError::mismatch_operands( + operands.len(), + num_operands as u32, + ), + ); + } + match self { + Self::Nop => Ok(()), + Self::Abs => ic.execute_abs(&operands[0usize], &operands[1usize]), + Self::Acos => ic.execute_acos(&operands[0usize], &operands[1usize]), + Self::Add => { + ic.execute_add(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Alias => ic.execute_alias(&operands[0usize], &operands[1usize]), + Self::And => { + ic.execute_and(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Asin => ic.execute_asin(&operands[0usize], &operands[1usize]), + Self::Atan => ic.execute_atan(&operands[0usize], &operands[1usize]), + Self::Atan2 => { + ic.execute_atan2(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bap => { + ic.execute_bap( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Bapal => { + ic.execute_bapal( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Bapz => { + ic.execute_bapz(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bapzal => { + ic.execute_bapzal( + &operands[0usize], + &operands[1usize], + &operands[2usize], + ) + } + Self::Bdns => ic.execute_bdns(&operands[0usize], &operands[1usize]), + Self::Bdnsal => ic.execute_bdnsal(&operands[0usize], &operands[1usize]), + Self::Bdse => ic.execute_bdse(&operands[0usize], &operands[1usize]), + Self::Bdseal => ic.execute_bdseal(&operands[0usize], &operands[1usize]), + Self::Beq => { + ic.execute_beq(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Beqal => { + ic.execute_beqal(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Beqz => ic.execute_beqz(&operands[0usize], &operands[1usize]), + Self::Beqzal => ic.execute_beqzal(&operands[0usize], &operands[1usize]), + Self::Bge => { + ic.execute_bge(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bgeal => { + ic.execute_bgeal(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bgez => ic.execute_bgez(&operands[0usize], &operands[1usize]), + Self::Bgezal => ic.execute_bgezal(&operands[0usize], &operands[1usize]), + Self::Bgt => { + ic.execute_bgt(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bgtal => { + ic.execute_bgtal(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bgtz => ic.execute_bgtz(&operands[0usize], &operands[1usize]), + Self::Bgtzal => ic.execute_bgtzal(&operands[0usize], &operands[1usize]), + Self::Ble => { + ic.execute_ble(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bleal => { + ic.execute_bleal(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Blez => ic.execute_blez(&operands[0usize], &operands[1usize]), + Self::Blezal => ic.execute_blezal(&operands[0usize], &operands[1usize]), + Self::Blt => { + ic.execute_blt(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bltal => { + ic.execute_bltal(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bltz => ic.execute_bltz(&operands[0usize], &operands[1usize]), + Self::Bltzal => ic.execute_bltzal(&operands[0usize], &operands[1usize]), + Self::Bna => { + ic.execute_bna( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Bnaal => { + ic.execute_bnaal( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Bnan => ic.execute_bnan(&operands[0usize], &operands[1usize]), + Self::Bnaz => { + ic.execute_bnaz(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bnazal => { + ic.execute_bnazal( + &operands[0usize], + &operands[1usize], + &operands[2usize], + ) + } + Self::Bne => { + ic.execute_bne(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bneal => { + ic.execute_bneal(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Bnez => ic.execute_bnez(&operands[0usize], &operands[1usize]), + Self::Bnezal => ic.execute_bnezal(&operands[0usize], &operands[1usize]), + Self::Brap => { + ic.execute_brap( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Brapz => { + ic.execute_brapz(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Brdns => ic.execute_brdns(&operands[0usize], &operands[1usize]), + Self::Brdse => ic.execute_brdse(&operands[0usize], &operands[1usize]), + Self::Breq => { + ic.execute_breq(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Breqz => ic.execute_breqz(&operands[0usize], &operands[1usize]), + Self::Brge => { + ic.execute_brge(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Brgez => ic.execute_brgez(&operands[0usize], &operands[1usize]), + Self::Brgt => { + ic.execute_brgt(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Brgtz => ic.execute_brgtz(&operands[0usize], &operands[1usize]), + Self::Brle => { + ic.execute_brle(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Brlez => ic.execute_brlez(&operands[0usize], &operands[1usize]), + Self::Brlt => { + ic.execute_brlt(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Brltz => ic.execute_brltz(&operands[0usize], &operands[1usize]), + Self::Brna => { + ic.execute_brna( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Brnan => ic.execute_brnan(&operands[0usize], &operands[1usize]), + Self::Brnaz => { + ic.execute_brnaz(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Brne => { + ic.execute_brne(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Brnez => ic.execute_brnez(&operands[0usize], &operands[1usize]), + Self::Ceil => ic.execute_ceil(&operands[0usize], &operands[1usize]), + Self::Clr => ic.execute_clr(&operands[0usize]), + Self::Clrd => ic.execute_clrd(&operands[0usize]), + Self::Cos => ic.execute_cos(&operands[0usize], &operands[1usize]), + Self::Define => ic.execute_define(&operands[0usize], &operands[1usize]), + Self::Div => { + ic.execute_div(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Exp => ic.execute_exp(&operands[0usize], &operands[1usize]), + Self::Floor => ic.execute_floor(&operands[0usize], &operands[1usize]), + Self::Get => { + ic.execute_get(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Getd => { + ic.execute_getd(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Hcf => ic.execute_hcf(), + Self::J => ic.execute_j(&operands[0usize]), + Self::Jal => ic.execute_jal(&operands[0usize]), + Self::Jr => ic.execute_jr(&operands[0usize]), + Self::L => { + ic.execute_l(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Label => ic.execute_label(&operands[0usize], &operands[1usize]), + Self::Lb => { + ic.execute_lb( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Lbn => { + ic.execute_lbn( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + &operands[4usize], + ) + } + Self::Lbns => { + ic.execute_lbns( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + &operands[4usize], + &operands[5usize], + ) + } + Self::Lbs => { + ic.execute_lbs( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + &operands[4usize], + ) + } + Self::Ld => { + ic.execute_ld(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Log => ic.execute_log(&operands[0usize], &operands[1usize]), + Self::Lr => { + ic.execute_lr( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Ls => { + ic.execute_ls( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Max => { + ic.execute_max(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Min => { + ic.execute_min(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Mod => { + ic.execute_mod(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Move => ic.execute_move(&operands[0usize], &operands[1usize]), + Self::Mul => { + ic.execute_mul(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Nor => { + ic.execute_nor(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Not => ic.execute_not(&operands[0usize], &operands[1usize]), + Self::Or => { + ic.execute_or(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Peek => ic.execute_peek(&operands[0usize]), + Self::Poke => ic.execute_poke(&operands[0usize], &operands[1usize]), + Self::Pop => ic.execute_pop(&operands[0usize]), + Self::Push => ic.execute_push(&operands[0usize]), + Self::Put => { + ic.execute_put(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Putd => { + ic.execute_putd(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Rand => ic.execute_rand(&operands[0usize]), + Self::Rmap => { + ic.execute_rmap(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Round => ic.execute_round(&operands[0usize], &operands[1usize]), + Self::S => { + ic.execute_s(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sap => { + ic.execute_sap( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Sapz => { + ic.execute_sapz(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sb => { + ic.execute_sb(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sbn => { + ic.execute_sbn( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Sbs => { + ic.execute_sbs( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Sd => { + ic.execute_sd(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sdns => ic.execute_sdns(&operands[0usize], &operands[1usize]), + Self::Sdse => ic.execute_sdse(&operands[0usize], &operands[1usize]), + Self::Select => { + ic.execute_select( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Seq => { + ic.execute_seq(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Seqz => ic.execute_seqz(&operands[0usize], &operands[1usize]), + Self::Sge => { + ic.execute_sge(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sgez => ic.execute_sgez(&operands[0usize], &operands[1usize]), + Self::Sgt => { + ic.execute_sgt(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sgtz => ic.execute_sgtz(&operands[0usize], &operands[1usize]), + Self::Sin => ic.execute_sin(&operands[0usize], &operands[1usize]), + Self::Sla => { + ic.execute_sla(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sle => { + ic.execute_sle(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sleep => ic.execute_sleep(&operands[0usize]), + Self::Slez => ic.execute_slez(&operands[0usize], &operands[1usize]), + Self::Sll => { + ic.execute_sll(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Slt => { + ic.execute_slt(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sltz => ic.execute_sltz(&operands[0usize], &operands[1usize]), + Self::Sna => { + ic.execute_sna( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Snan => ic.execute_snan(&operands[0usize], &operands[1usize]), + Self::Snanz => ic.execute_snanz(&operands[0usize], &operands[1usize]), + Self::Snaz => { + ic.execute_snaz(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Sne => { + ic.execute_sne(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Snez => ic.execute_snez(&operands[0usize], &operands[1usize]), + Self::Sqrt => ic.execute_sqrt(&operands[0usize], &operands[1usize]), + Self::Sra => { + ic.execute_sra(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Srl => { + ic.execute_srl(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Ss => { + ic.execute_ss( + &operands[0usize], + &operands[1usize], + &operands[2usize], + &operands[3usize], + ) + } + Self::Sub => { + ic.execute_sub(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Tan => ic.execute_tan(&operands[0usize], &operands[1usize]), + Self::Trunc => ic.execute_trunc(&operands[0usize], &operands[1usize]), + Self::Xor => { + ic.execute_xor(&operands[0usize], &operands[1usize], &operands[2usize]) + } + Self::Yield => ic.execute_yield(), + } + } +} diff --git a/ic10emu/src/vm/instructions/codegen/traits.rs b/ic10emu/src/vm/instructions/codegen/traits.rs new file mode 100644 index 0000000..eff587a --- /dev/null +++ b/ic10emu/src/vm/instructions/codegen/traits.rs @@ -0,0 +1,4664 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run +// +// `cargo xtask generate -m instructions` +// +// from the workspace to regenerate +// +// ================================================= + +use crate::vm::object::traits::IntegratedCircuit; +use crate::vm::instructions::enums::InstructionOp; +pub trait AbsInstruction: IntegratedCircuit { + ///abs r? a(r?|num) + fn execute_abs( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + AbsInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Abs, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Abs, + 1usize, + ), + ) + } + ///abs r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AcosInstruction: IntegratedCircuit { + ///acos r? a(r?|num) + fn execute_acos( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + AcosInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Acos, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Acos, + 1usize, + ), + ) + } + ///acos r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AddInstruction: IntegratedCircuit { + ///add r? a(r?|num) b(r?|num) + fn execute_add( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + AddInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Add, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Add, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Add, + 2usize, + ), + ) + } + ///add r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AliasInstruction: IntegratedCircuit { + ///alias str r?|d? + fn execute_alias( + &mut self, + string: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + AliasInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + string, + InstructionOp::Alias, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Alias, + 1usize, + ), + ) + } + ///alias str r?|d? + fn execute_inner( + &mut self, + string: &crate::vm::instructions::operands::InstOperand, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AndInstruction: IntegratedCircuit { + ///and r? a(r?|num) b(r?|num) + fn execute_and( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + AndInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::And, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::And, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::And, + 2usize, + ), + ) + } + ///and r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AsinInstruction: IntegratedCircuit { + ///asin r? a(r?|num) + fn execute_asin( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + AsinInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Asin, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Asin, + 1usize, + ), + ) + } + ///asin r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait AtanInstruction: IntegratedCircuit { + ///atan r? a(r?|num) + fn execute_atan( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + AtanInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Atan, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Atan, + 1usize, + ), + ) + } + ///atan r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait Atan2Instruction: IntegratedCircuit { + ///atan2 r? a(r?|num) b(r?|num) + fn execute_atan2( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + Atan2Instruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Atan2, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Atan2, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Atan2, + 2usize, + ), + ) + } + ///atan2 r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BapInstruction: IntegratedCircuit { + ///bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bap( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BapInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bap, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bap, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bap, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Bap, + 3usize, + ), + ) + } + ///bap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BapalInstruction: IntegratedCircuit { + ///bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bapal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BapalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bapal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bapal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bapal, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Bapal, + 3usize, + ), + ) + } + ///bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BapzInstruction: IntegratedCircuit { + ///bapz a(r?|num) b(r?|num) c(r?|num) + fn execute_bapz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BapzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bapz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bapz, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bapz, + 2usize, + ), + ) + } + ///bapz a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BapzalInstruction: IntegratedCircuit { + ///bapzal a(r?|num) b(r?|num) c(r?|num) + fn execute_bapzal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BapzalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bapzal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bapzal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bapzal, + 2usize, + ), + ) + } + ///bapzal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BdnsInstruction: IntegratedCircuit { + ///bdns d? a(r?|num) + fn execute_bdns( + &mut self, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BdnsInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Bdns, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bdns, + 1usize, + ), + ) + } + ///bdns d? a(r?|num) + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BdnsalInstruction: IntegratedCircuit { + ///bdnsal d? a(r?|num) + fn execute_bdnsal( + &mut self, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BdnsalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Bdnsal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bdnsal, + 1usize, + ), + ) + } + ///bdnsal d? a(r?|num) + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BdseInstruction: IntegratedCircuit { + ///bdse d? a(r?|num) + fn execute_bdse( + &mut self, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BdseInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Bdse, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bdse, + 1usize, + ), + ) + } + ///bdse d? a(r?|num) + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BdsealInstruction: IntegratedCircuit { + ///bdseal d? a(r?|num) + fn execute_bdseal( + &mut self, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BdsealInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Bdseal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bdseal, + 1usize, + ), + ) + } + ///bdseal d? a(r?|num) + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BeqInstruction: IntegratedCircuit { + ///beq a(r?|num) b(r?|num) c(r?|num) + fn execute_beq( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BeqInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Beq, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Beq, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Beq, + 2usize, + ), + ) + } + ///beq a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BeqalInstruction: IntegratedCircuit { + ///beqal a(r?|num) b(r?|num) c(r?|num) + fn execute_beqal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BeqalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Beqal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Beqal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Beqal, + 2usize, + ), + ) + } + ///beqal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BeqzInstruction: IntegratedCircuit { + ///beqz a(r?|num) b(r?|num) + fn execute_beqz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BeqzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Beqz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Beqz, + 1usize, + ), + ) + } + ///beqz a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BeqzalInstruction: IntegratedCircuit { + ///beqzal a(r?|num) b(r?|num) + fn execute_beqzal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BeqzalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Beqzal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Beqzal, + 1usize, + ), + ) + } + ///beqzal a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgeInstruction: IntegratedCircuit { + ///bge a(r?|num) b(r?|num) c(r?|num) + fn execute_bge( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BgeInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bge, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bge, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bge, + 2usize, + ), + ) + } + ///bge a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgealInstruction: IntegratedCircuit { + ///bgeal a(r?|num) b(r?|num) c(r?|num) + fn execute_bgeal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BgealInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bgeal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bgeal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bgeal, + 2usize, + ), + ) + } + ///bgeal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgezInstruction: IntegratedCircuit { + ///bgez a(r?|num) b(r?|num) + fn execute_bgez( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BgezInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bgez, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bgez, + 1usize, + ), + ) + } + ///bgez a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgezalInstruction: IntegratedCircuit { + ///bgezal a(r?|num) b(r?|num) + fn execute_bgezal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BgezalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bgezal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bgezal, + 1usize, + ), + ) + } + ///bgezal a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgtInstruction: IntegratedCircuit { + ///bgt a(r?|num) b(r?|num) c(r?|num) + fn execute_bgt( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BgtInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bgt, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bgt, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bgt, + 2usize, + ), + ) + } + ///bgt a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgtalInstruction: IntegratedCircuit { + ///bgtal a(r?|num) b(r?|num) c(r?|num) + fn execute_bgtal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BgtalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bgtal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bgtal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bgtal, + 2usize, + ), + ) + } + ///bgtal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgtzInstruction: IntegratedCircuit { + ///bgtz a(r?|num) b(r?|num) + fn execute_bgtz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BgtzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bgtz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bgtz, + 1usize, + ), + ) + } + ///bgtz a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BgtzalInstruction: IntegratedCircuit { + ///bgtzal a(r?|num) b(r?|num) + fn execute_bgtzal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BgtzalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bgtzal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bgtzal, + 1usize, + ), + ) + } + ///bgtzal a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BleInstruction: IntegratedCircuit { + ///ble a(r?|num) b(r?|num) c(r?|num) + fn execute_ble( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BleInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Ble, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Ble, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Ble, + 2usize, + ), + ) + } + ///ble a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BlealInstruction: IntegratedCircuit { + ///bleal a(r?|num) b(r?|num) c(r?|num) + fn execute_bleal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BlealInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bleal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bleal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bleal, + 2usize, + ), + ) + } + ///bleal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BlezInstruction: IntegratedCircuit { + ///blez a(r?|num) b(r?|num) + fn execute_blez( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BlezInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Blez, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Blez, + 1usize, + ), + ) + } + ///blez a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BlezalInstruction: IntegratedCircuit { + ///blezal a(r?|num) b(r?|num) + fn execute_blezal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BlezalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Blezal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Blezal, + 1usize, + ), + ) + } + ///blezal a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BltInstruction: IntegratedCircuit { + ///blt a(r?|num) b(r?|num) c(r?|num) + fn execute_blt( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BltInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Blt, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Blt, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Blt, + 2usize, + ), + ) + } + ///blt a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BltalInstruction: IntegratedCircuit { + ///bltal a(r?|num) b(r?|num) c(r?|num) + fn execute_bltal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BltalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bltal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bltal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bltal, + 2usize, + ), + ) + } + ///bltal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BltzInstruction: IntegratedCircuit { + ///bltz a(r?|num) b(r?|num) + fn execute_bltz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BltzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bltz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bltz, + 1usize, + ), + ) + } + ///bltz a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BltzalInstruction: IntegratedCircuit { + ///bltzal a(r?|num) b(r?|num) + fn execute_bltzal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BltzalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bltzal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bltzal, + 1usize, + ), + ) + } + ///bltzal a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnaInstruction: IntegratedCircuit { + ///bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bna( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BnaInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bna, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bna, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bna, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Bna, + 3usize, + ), + ) + } + ///bna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnaalInstruction: IntegratedCircuit { + ///bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_bnaal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BnaalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bnaal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bnaal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bnaal, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Bnaal, + 3usize, + ), + ) + } + ///bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnanInstruction: IntegratedCircuit { + ///bnan a(r?|num) b(r?|num) + fn execute_bnan( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BnanInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bnan, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bnan, + 1usize, + ), + ) + } + ///bnan a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnazInstruction: IntegratedCircuit { + ///bnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_bnaz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BnazInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bnaz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bnaz, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bnaz, + 2usize, + ), + ) + } + ///bnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnazalInstruction: IntegratedCircuit { + ///bnazal a(r?|num) b(r?|num) c(r?|num) + fn execute_bnazal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BnazalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bnazal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bnazal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bnazal, + 2usize, + ), + ) + } + ///bnazal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BneInstruction: IntegratedCircuit { + ///bne a(r?|num) b(r?|num) c(r?|num) + fn execute_bne( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BneInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bne, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bne, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bne, + 2usize, + ), + ) + } + ///bne a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnealInstruction: IntegratedCircuit { + ///bneal a(r?|num) b(r?|num) c(r?|num) + fn execute_bneal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BnealInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bneal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bneal, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Bneal, + 2usize, + ), + ) + } + ///bneal a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnezInstruction: IntegratedCircuit { + ///bnez a(r?|num) b(r?|num) + fn execute_bnez( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BnezInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bnez, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bnez, + 1usize, + ), + ) + } + ///bnez a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BnezalInstruction: IntegratedCircuit { + ///bnezal a(r?|num) b(r?|num) + fn execute_bnezal( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BnezalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Bnezal, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Bnezal, + 1usize, + ), + ) + } + ///bnezal a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrapInstruction: IntegratedCircuit { + ///brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_brap( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrapInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brap, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brap, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Brap, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Brap, + 3usize, + ), + ) + } + ///brap a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrapzInstruction: IntegratedCircuit { + ///brapz a(r?|num) b(r?|num) c(r?|num) + fn execute_brapz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrapzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brapz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brapz, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Brapz, + 2usize, + ), + ) + } + ///brapz a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrdnsInstruction: IntegratedCircuit { + ///brdns d? a(r?|num) + fn execute_brdns( + &mut self, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrdnsInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Brdns, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brdns, + 1usize, + ), + ) + } + ///brdns d? a(r?|num) + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrdseInstruction: IntegratedCircuit { + ///brdse d? a(r?|num) + fn execute_brdse( + &mut self, + d: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrdseInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Brdse, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brdse, + 1usize, + ), + ) + } + ///brdse d? a(r?|num) + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BreqInstruction: IntegratedCircuit { + ///breq a(r?|num) b(r?|num) c(r?|num) + fn execute_breq( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BreqInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Breq, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Breq, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Breq, + 2usize, + ), + ) + } + ///breq a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BreqzInstruction: IntegratedCircuit { + ///breqz a(r?|num) b(r?|num) + fn execute_breqz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BreqzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Breqz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Breqz, + 1usize, + ), + ) + } + ///breqz a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrgeInstruction: IntegratedCircuit { + ///brge a(r?|num) b(r?|num) c(r?|num) + fn execute_brge( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrgeInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brge, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brge, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Brge, + 2usize, + ), + ) + } + ///brge a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrgezInstruction: IntegratedCircuit { + ///brgez a(r?|num) b(r?|num) + fn execute_brgez( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrgezInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brgez, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brgez, + 1usize, + ), + ) + } + ///brgez a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrgtInstruction: IntegratedCircuit { + ///brgt a(r?|num) b(r?|num) c(r?|num) + fn execute_brgt( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrgtInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brgt, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brgt, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Brgt, + 2usize, + ), + ) + } + ///brgt a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrgtzInstruction: IntegratedCircuit { + ///brgtz a(r?|num) b(r?|num) + fn execute_brgtz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrgtzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brgtz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brgtz, + 1usize, + ), + ) + } + ///brgtz a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrleInstruction: IntegratedCircuit { + ///brle a(r?|num) b(r?|num) c(r?|num) + fn execute_brle( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrleInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brle, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brle, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Brle, + 2usize, + ), + ) + } + ///brle a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrlezInstruction: IntegratedCircuit { + ///brlez a(r?|num) b(r?|num) + fn execute_brlez( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrlezInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brlez, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brlez, + 1usize, + ), + ) + } + ///brlez a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrltInstruction: IntegratedCircuit { + ///brlt a(r?|num) b(r?|num) c(r?|num) + fn execute_brlt( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrltInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brlt, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brlt, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Brlt, + 2usize, + ), + ) + } + ///brlt a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrltzInstruction: IntegratedCircuit { + ///brltz a(r?|num) b(r?|num) + fn execute_brltz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrltzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brltz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brltz, + 1usize, + ), + ) + } + ///brltz a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrnaInstruction: IntegratedCircuit { + ///brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_brna( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrnaInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brna, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brna, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Brna, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Brna, + 3usize, + ), + ) + } + ///brna a(r?|num) b(r?|num) c(r?|num) d(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrnanInstruction: IntegratedCircuit { + ///brnan a(r?|num) b(r?|num) + fn execute_brnan( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrnanInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brnan, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brnan, + 1usize, + ), + ) + } + ///brnan a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrnazInstruction: IntegratedCircuit { + ///brnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_brnaz( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrnazInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brnaz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brnaz, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Brnaz, + 2usize, + ), + ) + } + ///brnaz a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrneInstruction: IntegratedCircuit { + ///brne a(r?|num) b(r?|num) c(r?|num) + fn execute_brne( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrneInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brne, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brne, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Brne, + 2usize, + ), + ) + } + ///brne a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait BrnezInstruction: IntegratedCircuit { + ///brnez a(r?|num) b(r?|num) + fn execute_brnez( + &mut self, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + BrnezInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Brnez, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Brnez, + 1usize, + ), + ) + } + ///brnez a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait CeilInstruction: IntegratedCircuit { + ///ceil r? a(r?|num) + fn execute_ceil( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + CeilInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Ceil, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Ceil, + 1usize, + ), + ) + } + ///ceil r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait ClrInstruction: IntegratedCircuit { + ///clr d? + fn execute_clr( + &mut self, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + ClrInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Clr, + 0usize, + ), + ) + } + ///clr d? + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait ClrdInstruction: IntegratedCircuit { + ///clrd id(r?|num) + fn execute_clrd( + &mut self, + id: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + ClrdInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + id, + InstructionOp::Clrd, + 0usize, + ), + ) + } + ///clrd id(r?|num) + fn execute_inner( + &mut self, + id: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait CosInstruction: IntegratedCircuit { + ///cos r? a(r?|num) + fn execute_cos( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + CosInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Cos, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Cos, + 1usize, + ), + ) + } + ///cos r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait DefineInstruction: IntegratedCircuit { + ///define str num + fn execute_define( + &mut self, + string: &crate::vm::instructions::operands::Operand, + num: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + DefineInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + string, + InstructionOp::Define, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + num, + InstructionOp::Define, + 1usize, + ), + ) + } + ///define str num + fn execute_inner( + &mut self, + string: &crate::vm::instructions::operands::InstOperand, + num: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait DivInstruction: IntegratedCircuit { + ///div r? a(r?|num) b(r?|num) + fn execute_div( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + DivInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Div, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Div, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Div, + 2usize, + ), + ) + } + ///div r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait ExpInstruction: IntegratedCircuit { + ///exp r? a(r?|num) + fn execute_exp( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + ExpInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Exp, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Exp, + 1usize, + ), + ) + } + ///exp r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait FloorInstruction: IntegratedCircuit { + ///floor r? a(r?|num) + fn execute_floor( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + FloorInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Floor, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Floor, + 1usize, + ), + ) + } + ///floor r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait GetInstruction: IntegratedCircuit { + ///get r? d? address(r?|num) + fn execute_get( + &mut self, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + address: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + GetInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Get, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Get, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + address, + InstructionOp::Get, + 2usize, + ), + ) + } + ///get r? d? address(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + address: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait GetdInstruction: IntegratedCircuit { + ///getd r? id(r?|num) address(r?|num) + fn execute_getd( + &mut self, + r: &crate::vm::instructions::operands::Operand, + id: &crate::vm::instructions::operands::Operand, + address: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + GetdInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Getd, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + id, + InstructionOp::Getd, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + address, + InstructionOp::Getd, + 2usize, + ), + ) + } + ///getd r? id(r?|num) address(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + id: &crate::vm::instructions::operands::InstOperand, + address: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait HcfInstruction: IntegratedCircuit { + ///hcf + fn execute_hcf(&mut self) -> Result<(), crate::errors::ICError> { + HcfInstruction::execute_inner(self) + } + ///hcf + fn execute_inner(&mut self) -> Result<(), crate::errors::ICError>; +} +pub trait JInstruction: IntegratedCircuit { + ///j int + fn execute_j( + &mut self, + int: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + JInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + int, + InstructionOp::J, + 0usize, + ), + ) + } + ///j int + fn execute_inner( + &mut self, + int: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait JalInstruction: IntegratedCircuit { + ///jal int + fn execute_jal( + &mut self, + int: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + JalInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + int, + InstructionOp::Jal, + 0usize, + ), + ) + } + ///jal int + fn execute_inner( + &mut self, + int: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait JrInstruction: IntegratedCircuit { + ///jr int + fn execute_jr( + &mut self, + int: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + JrInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + int, + InstructionOp::Jr, + 0usize, + ), + ) + } + ///jr int + fn execute_inner( + &mut self, + int: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LInstruction: IntegratedCircuit { + ///l r? d? logicType + fn execute_l( + &mut self, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::L, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::L, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_type, + InstructionOp::L, + 2usize, + ), + ) + } + ///l r? d? logicType + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + logic_type: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LabelInstruction: IntegratedCircuit { + ///label d? str + fn execute_label( + &mut self, + d: &crate::vm::instructions::operands::Operand, + string: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LabelInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Label, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + string, + InstructionOp::Label, + 1usize, + ), + ) + } + ///label d? str + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + string: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LbInstruction: IntegratedCircuit { + ///lb r? deviceHash logicType batchMode + fn execute_lb( + &mut self, + r: &crate::vm::instructions::operands::Operand, + device_hash: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + batch_mode: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LbInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Lb, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Lb, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_type, + InstructionOp::Lb, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + batch_mode, + InstructionOp::Lb, + 3usize, + ), + ) + } + ///lb r? deviceHash logicType batchMode + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + device_hash: &crate::vm::instructions::operands::InstOperand, + logic_type: &crate::vm::instructions::operands::InstOperand, + batch_mode: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LbnInstruction: IntegratedCircuit { + ///lbn r? deviceHash nameHash logicType batchMode + fn execute_lbn( + &mut self, + r: &crate::vm::instructions::operands::Operand, + device_hash: &crate::vm::instructions::operands::Operand, + name_hash: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + batch_mode: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LbnInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Lbn, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Lbn, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + name_hash, + InstructionOp::Lbn, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_type, + InstructionOp::Lbn, + 3usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + batch_mode, + InstructionOp::Lbn, + 4usize, + ), + ) + } + ///lbn r? deviceHash nameHash logicType batchMode + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + device_hash: &crate::vm::instructions::operands::InstOperand, + name_hash: &crate::vm::instructions::operands::InstOperand, + logic_type: &crate::vm::instructions::operands::InstOperand, + batch_mode: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LbnsInstruction: IntegratedCircuit { + ///lbns r? deviceHash nameHash slotIndex logicSlotType batchMode + fn execute_lbns( + &mut self, + r: &crate::vm::instructions::operands::Operand, + device_hash: &crate::vm::instructions::operands::Operand, + name_hash: &crate::vm::instructions::operands::Operand, + slot_index: &crate::vm::instructions::operands::Operand, + logic_slot_type: &crate::vm::instructions::operands::Operand, + batch_mode: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LbnsInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Lbns, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Lbns, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + name_hash, + InstructionOp::Lbns, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + slot_index, + InstructionOp::Lbns, + 3usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Lbns, + 4usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + batch_mode, + InstructionOp::Lbns, + 5usize, + ), + ) + } + ///lbns r? deviceHash nameHash slotIndex logicSlotType batchMode + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + device_hash: &crate::vm::instructions::operands::InstOperand, + name_hash: &crate::vm::instructions::operands::InstOperand, + slot_index: &crate::vm::instructions::operands::InstOperand, + logic_slot_type: &crate::vm::instructions::operands::InstOperand, + batch_mode: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LbsInstruction: IntegratedCircuit { + ///lbs r? deviceHash slotIndex logicSlotType batchMode + fn execute_lbs( + &mut self, + r: &crate::vm::instructions::operands::Operand, + device_hash: &crate::vm::instructions::operands::Operand, + slot_index: &crate::vm::instructions::operands::Operand, + logic_slot_type: &crate::vm::instructions::operands::Operand, + batch_mode: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LbsInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Lbs, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Lbs, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + slot_index, + InstructionOp::Lbs, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Lbs, + 3usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + batch_mode, + InstructionOp::Lbs, + 4usize, + ), + ) + } + ///lbs r? deviceHash slotIndex logicSlotType batchMode + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + device_hash: &crate::vm::instructions::operands::InstOperand, + slot_index: &crate::vm::instructions::operands::InstOperand, + logic_slot_type: &crate::vm::instructions::operands::InstOperand, + batch_mode: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LdInstruction: IntegratedCircuit { + ///ld r? id(r?|num) logicType + fn execute_ld( + &mut self, + r: &crate::vm::instructions::operands::Operand, + id: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LdInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Ld, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + id, + InstructionOp::Ld, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_type, + InstructionOp::Ld, + 2usize, + ), + ) + } + ///ld r? id(r?|num) logicType + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + id: &crate::vm::instructions::operands::InstOperand, + logic_type: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LogInstruction: IntegratedCircuit { + ///log r? a(r?|num) + fn execute_log( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LogInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Log, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Log, + 1usize, + ), + ) + } + ///log r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LrInstruction: IntegratedCircuit { + ///lr r? d? reagentMode int + fn execute_lr( + &mut self, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + reagent_mode: &crate::vm::instructions::operands::Operand, + int: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LrInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Lr, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Lr, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + reagent_mode, + InstructionOp::Lr, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + int, + InstructionOp::Lr, + 3usize, + ), + ) + } + ///lr r? d? reagentMode int + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + reagent_mode: &crate::vm::instructions::operands::InstOperand, + int: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait LsInstruction: IntegratedCircuit { + ///ls r? d? slotIndex logicSlotType + fn execute_ls( + &mut self, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + slot_index: &crate::vm::instructions::operands::Operand, + logic_slot_type: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + LsInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Ls, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Ls, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + slot_index, + InstructionOp::Ls, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Ls, + 3usize, + ), + ) + } + ///ls r? d? slotIndex logicSlotType + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + slot_index: &crate::vm::instructions::operands::InstOperand, + logic_slot_type: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait MaxInstruction: IntegratedCircuit { + ///max r? a(r?|num) b(r?|num) + fn execute_max( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + MaxInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Max, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Max, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Max, + 2usize, + ), + ) + } + ///max r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait MinInstruction: IntegratedCircuit { + ///min r? a(r?|num) b(r?|num) + fn execute_min( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + MinInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Min, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Min, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Min, + 2usize, + ), + ) + } + ///min r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait ModInstruction: IntegratedCircuit { + ///mod r? a(r?|num) b(r?|num) + fn execute_mod( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + ModInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Mod, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Mod, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Mod, + 2usize, + ), + ) + } + ///mod r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait MoveInstruction: IntegratedCircuit { + ///move r? a(r?|num) + fn execute_move( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + MoveInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Move, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Move, + 1usize, + ), + ) + } + ///move r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait MulInstruction: IntegratedCircuit { + ///mul r? a(r?|num) b(r?|num) + fn execute_mul( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + MulInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Mul, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Mul, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Mul, + 2usize, + ), + ) + } + ///mul r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait NorInstruction: IntegratedCircuit { + ///nor r? a(r?|num) b(r?|num) + fn execute_nor( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + NorInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Nor, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Nor, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Nor, + 2usize, + ), + ) + } + ///nor r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait NotInstruction: IntegratedCircuit { + ///not r? a(r?|num) + fn execute_not( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + NotInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Not, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Not, + 1usize, + ), + ) + } + ///not r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait OrInstruction: IntegratedCircuit { + ///or r? a(r?|num) b(r?|num) + fn execute_or( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + OrInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Or, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Or, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Or, + 2usize, + ), + ) + } + ///or r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PeekInstruction: IntegratedCircuit { + ///peek r? + fn execute_peek( + &mut self, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + PeekInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Peek, + 0usize, + ), + ) + } + ///peek r? + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PokeInstruction: IntegratedCircuit { + ///poke address(r?|num) value(r?|num) + fn execute_poke( + &mut self, + address: &crate::vm::instructions::operands::Operand, + value: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + PokeInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + address, + InstructionOp::Poke, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + value, + InstructionOp::Poke, + 1usize, + ), + ) + } + ///poke address(r?|num) value(r?|num) + fn execute_inner( + &mut self, + address: &crate::vm::instructions::operands::InstOperand, + value: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PopInstruction: IntegratedCircuit { + ///pop r? + fn execute_pop( + &mut self, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + PopInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Pop, + 0usize, + ), + ) + } + ///pop r? + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PushInstruction: IntegratedCircuit { + ///push a(r?|num) + fn execute_push( + &mut self, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + PushInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Push, + 0usize, + ), + ) + } + ///push a(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PutInstruction: IntegratedCircuit { + ///put d? address(r?|num) value(r?|num) + fn execute_put( + &mut self, + d: &crate::vm::instructions::operands::Operand, + address: &crate::vm::instructions::operands::Operand, + value: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + PutInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Put, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + address, + InstructionOp::Put, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + value, + InstructionOp::Put, + 2usize, + ), + ) + } + ///put d? address(r?|num) value(r?|num) + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + address: &crate::vm::instructions::operands::InstOperand, + value: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait PutdInstruction: IntegratedCircuit { + ///putd id(r?|num) address(r?|num) value(r?|num) + fn execute_putd( + &mut self, + id: &crate::vm::instructions::operands::Operand, + address: &crate::vm::instructions::operands::Operand, + value: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + PutdInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + id, + InstructionOp::Putd, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + address, + InstructionOp::Putd, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + value, + InstructionOp::Putd, + 2usize, + ), + ) + } + ///putd id(r?|num) address(r?|num) value(r?|num) + fn execute_inner( + &mut self, + id: &crate::vm::instructions::operands::InstOperand, + address: &crate::vm::instructions::operands::InstOperand, + value: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait RandInstruction: IntegratedCircuit { + ///rand r? + fn execute_rand( + &mut self, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + RandInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Rand, + 0usize, + ), + ) + } + ///rand r? + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait RmapInstruction: IntegratedCircuit { + ///rmap r? d? reagentHash(r?|num) + fn execute_rmap( + &mut self, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + reagent_hash: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + RmapInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Rmap, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Rmap, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + reagent_hash, + InstructionOp::Rmap, + 2usize, + ), + ) + } + ///rmap r? d? reagentHash(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + reagent_hash: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait RoundInstruction: IntegratedCircuit { + ///round r? a(r?|num) + fn execute_round( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + RoundInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Round, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Round, + 1usize, + ), + ) + } + ///round r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SInstruction: IntegratedCircuit { + ///s d? logicType r? + fn execute_s( + &mut self, + d: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::S, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_type, + InstructionOp::S, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::S, + 2usize, + ), + ) + } + ///s d? logicType r? + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + logic_type: &crate::vm::instructions::operands::InstOperand, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SapInstruction: IntegratedCircuit { + ///sap r? a(r?|num) b(r?|num) c(r?|num) + fn execute_sap( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SapInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sap, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sap, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sap, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Sap, + 3usize, + ), + ) + } + ///sap r? a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SapzInstruction: IntegratedCircuit { + ///sapz r? a(r?|num) b(r?|num) + fn execute_sapz( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SapzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sapz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sapz, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sapz, + 2usize, + ), + ) + } + ///sapz r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SbInstruction: IntegratedCircuit { + ///sb deviceHash logicType r? + fn execute_sb( + &mut self, + device_hash: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SbInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Sb, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_type, + InstructionOp::Sb, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sb, + 2usize, + ), + ) + } + ///sb deviceHash logicType r? + fn execute_inner( + &mut self, + device_hash: &crate::vm::instructions::operands::InstOperand, + logic_type: &crate::vm::instructions::operands::InstOperand, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SbnInstruction: IntegratedCircuit { + ///sbn deviceHash nameHash logicType r? + fn execute_sbn( + &mut self, + device_hash: &crate::vm::instructions::operands::Operand, + name_hash: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SbnInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Sbn, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + name_hash, + InstructionOp::Sbn, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_type, + InstructionOp::Sbn, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sbn, + 3usize, + ), + ) + } + ///sbn deviceHash nameHash logicType r? + fn execute_inner( + &mut self, + device_hash: &crate::vm::instructions::operands::InstOperand, + name_hash: &crate::vm::instructions::operands::InstOperand, + logic_type: &crate::vm::instructions::operands::InstOperand, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SbsInstruction: IntegratedCircuit { + ///sbs deviceHash slotIndex logicSlotType r? + fn execute_sbs( + &mut self, + device_hash: &crate::vm::instructions::operands::Operand, + slot_index: &crate::vm::instructions::operands::Operand, + logic_slot_type: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SbsInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + device_hash, + InstructionOp::Sbs, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + slot_index, + InstructionOp::Sbs, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Sbs, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sbs, + 3usize, + ), + ) + } + ///sbs deviceHash slotIndex logicSlotType r? + fn execute_inner( + &mut self, + device_hash: &crate::vm::instructions::operands::InstOperand, + slot_index: &crate::vm::instructions::operands::InstOperand, + logic_slot_type: &crate::vm::instructions::operands::InstOperand, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SdInstruction: IntegratedCircuit { + ///sd id(r?|num) logicType r? + fn execute_sd( + &mut self, + id: &crate::vm::instructions::operands::Operand, + logic_type: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SdInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + id, + InstructionOp::Sd, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_type, + InstructionOp::Sd, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sd, + 2usize, + ), + ) + } + ///sd id(r?|num) logicType r? + fn execute_inner( + &mut self, + id: &crate::vm::instructions::operands::InstOperand, + logic_type: &crate::vm::instructions::operands::InstOperand, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SdnsInstruction: IntegratedCircuit { + ///sdns r? d? + fn execute_sdns( + &mut self, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SdnsInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sdns, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Sdns, + 1usize, + ), + ) + } + ///sdns r? d? + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SdseInstruction: IntegratedCircuit { + ///sdse r? d? + fn execute_sdse( + &mut self, + r: &crate::vm::instructions::operands::Operand, + d: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SdseInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sdse, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Sdse, + 1usize, + ), + ) + } + ///sdse r? d? + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + d: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SelectInstruction: IntegratedCircuit { + ///select r? a(r?|num) b(r?|num) c(r?|num) + fn execute_select( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SelectInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Select, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Select, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Select, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Select, + 3usize, + ), + ) + } + ///select r? a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SeqInstruction: IntegratedCircuit { + ///seq r? a(r?|num) b(r?|num) + fn execute_seq( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SeqInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Seq, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Seq, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Seq, + 2usize, + ), + ) + } + ///seq r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SeqzInstruction: IntegratedCircuit { + ///seqz r? a(r?|num) + fn execute_seqz( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SeqzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Seqz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Seqz, + 1usize, + ), + ) + } + ///seqz r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SgeInstruction: IntegratedCircuit { + ///sge r? a(r?|num) b(r?|num) + fn execute_sge( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SgeInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sge, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sge, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sge, + 2usize, + ), + ) + } + ///sge r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SgezInstruction: IntegratedCircuit { + ///sgez r? a(r?|num) + fn execute_sgez( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SgezInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sgez, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sgez, + 1usize, + ), + ) + } + ///sgez r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SgtInstruction: IntegratedCircuit { + ///sgt r? a(r?|num) b(r?|num) + fn execute_sgt( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SgtInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sgt, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sgt, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sgt, + 2usize, + ), + ) + } + ///sgt r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SgtzInstruction: IntegratedCircuit { + ///sgtz r? a(r?|num) + fn execute_sgtz( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SgtzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sgtz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sgtz, + 1usize, + ), + ) + } + ///sgtz r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SinInstruction: IntegratedCircuit { + ///sin r? a(r?|num) + fn execute_sin( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SinInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sin, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sin, + 1usize, + ), + ) + } + ///sin r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SlaInstruction: IntegratedCircuit { + ///sla r? a(r?|num) b(r?|num) + fn execute_sla( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SlaInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sla, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sla, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sla, + 2usize, + ), + ) + } + ///sla r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SleInstruction: IntegratedCircuit { + ///sle r? a(r?|num) b(r?|num) + fn execute_sle( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SleInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sle, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sle, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sle, + 2usize, + ), + ) + } + ///sle r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SleepInstruction: IntegratedCircuit { + ///sleep a(r?|num) + fn execute_sleep( + &mut self, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SleepInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sleep, + 0usize, + ), + ) + } + ///sleep a(r?|num) + fn execute_inner( + &mut self, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SlezInstruction: IntegratedCircuit { + ///slez r? a(r?|num) + fn execute_slez( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SlezInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Slez, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Slez, + 1usize, + ), + ) + } + ///slez r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SllInstruction: IntegratedCircuit { + ///sll r? a(r?|num) b(r?|num) + fn execute_sll( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SllInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sll, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sll, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sll, + 2usize, + ), + ) + } + ///sll r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SltInstruction: IntegratedCircuit { + ///slt r? a(r?|num) b(r?|num) + fn execute_slt( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SltInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Slt, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Slt, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Slt, + 2usize, + ), + ) + } + ///slt r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SltzInstruction: IntegratedCircuit { + ///sltz r? a(r?|num) + fn execute_sltz( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SltzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sltz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sltz, + 1usize, + ), + ) + } + ///sltz r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SnaInstruction: IntegratedCircuit { + ///sna r? a(r?|num) b(r?|num) c(r?|num) + fn execute_sna( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + c: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SnaInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sna, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sna, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sna, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + c, + InstructionOp::Sna, + 3usize, + ), + ) + } + ///sna r? a(r?|num) b(r?|num) c(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + c: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SnanInstruction: IntegratedCircuit { + ///snan r? a(r?|num) + fn execute_snan( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SnanInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Snan, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Snan, + 1usize, + ), + ) + } + ///snan r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SnanzInstruction: IntegratedCircuit { + ///snanz r? a(r?|num) + fn execute_snanz( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SnanzInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Snanz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Snanz, + 1usize, + ), + ) + } + ///snanz r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SnazInstruction: IntegratedCircuit { + ///snaz r? a(r?|num) b(r?|num) + fn execute_snaz( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SnazInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Snaz, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Snaz, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Snaz, + 2usize, + ), + ) + } + ///snaz r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SneInstruction: IntegratedCircuit { + ///sne r? a(r?|num) b(r?|num) + fn execute_sne( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SneInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sne, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sne, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sne, + 2usize, + ), + ) + } + ///sne r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SnezInstruction: IntegratedCircuit { + ///snez r? a(r?|num) + fn execute_snez( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SnezInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Snez, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Snez, + 1usize, + ), + ) + } + ///snez r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SqrtInstruction: IntegratedCircuit { + ///sqrt r? a(r?|num) + fn execute_sqrt( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SqrtInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sqrt, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sqrt, + 1usize, + ), + ) + } + ///sqrt r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SraInstruction: IntegratedCircuit { + ///sra r? a(r?|num) b(r?|num) + fn execute_sra( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SraInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sra, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sra, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sra, + 2usize, + ), + ) + } + ///sra r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SrlInstruction: IntegratedCircuit { + ///srl r? a(r?|num) b(r?|num) + fn execute_srl( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SrlInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Srl, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Srl, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Srl, + 2usize, + ), + ) + } + ///srl r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SsInstruction: IntegratedCircuit { + ///ss d? slotIndex logicSlotType r? + fn execute_ss( + &mut self, + d: &crate::vm::instructions::operands::Operand, + slot_index: &crate::vm::instructions::operands::Operand, + logic_slot_type: &crate::vm::instructions::operands::Operand, + r: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SsInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + d, + InstructionOp::Ss, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + slot_index, + InstructionOp::Ss, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + logic_slot_type, + InstructionOp::Ss, + 2usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Ss, + 3usize, + ), + ) + } + ///ss d? slotIndex logicSlotType r? + fn execute_inner( + &mut self, + d: &crate::vm::instructions::operands::InstOperand, + slot_index: &crate::vm::instructions::operands::InstOperand, + logic_slot_type: &crate::vm::instructions::operands::InstOperand, + r: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait SubInstruction: IntegratedCircuit { + ///sub r? a(r?|num) b(r?|num) + fn execute_sub( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + SubInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Sub, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Sub, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Sub, + 2usize, + ), + ) + } + ///sub r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait TanInstruction: IntegratedCircuit { + ///tan r? a(r?|num) + fn execute_tan( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + TanInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Tan, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Tan, + 1usize, + ), + ) + } + ///tan r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait TruncInstruction: IntegratedCircuit { + ///trunc r? a(r?|num) + fn execute_trunc( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + TruncInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Trunc, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Trunc, + 1usize, + ), + ) + } + ///trunc r? a(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait XorInstruction: IntegratedCircuit { + ///xor r? a(r?|num) b(r?|num) + fn execute_xor( + &mut self, + r: &crate::vm::instructions::operands::Operand, + a: &crate::vm::instructions::operands::Operand, + b: &crate::vm::instructions::operands::Operand, + ) -> Result<(), crate::errors::ICError> { + XorInstruction::execute_inner( + self, + &crate::vm::instructions::operands::InstOperand::new( + r, + InstructionOp::Xor, + 0usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + a, + InstructionOp::Xor, + 1usize, + ), + &crate::vm::instructions::operands::InstOperand::new( + b, + InstructionOp::Xor, + 2usize, + ), + ) + } + ///xor r? a(r?|num) b(r?|num) + fn execute_inner( + &mut self, + r: &crate::vm::instructions::operands::InstOperand, + a: &crate::vm::instructions::operands::InstOperand, + b: &crate::vm::instructions::operands::InstOperand, + ) -> Result<(), crate::errors::ICError>; +} +pub trait YieldInstruction: IntegratedCircuit { + ///yield + fn execute_yield(&mut self) -> Result<(), crate::errors::ICError> { + YieldInstruction::execute_inner(self) + } + ///yield + fn execute_inner(&mut self) -> Result<(), crate::errors::ICError>; +} +pub trait ICInstructable: AbsInstruction + AcosInstruction + AddInstruction + AliasInstruction + AndInstruction + AsinInstruction + AtanInstruction + Atan2Instruction + BapInstruction + BapalInstruction + BapzInstruction + BapzalInstruction + BdnsInstruction + BdnsalInstruction + BdseInstruction + BdsealInstruction + BeqInstruction + BeqalInstruction + BeqzInstruction + BeqzalInstruction + BgeInstruction + BgealInstruction + BgezInstruction + BgezalInstruction + BgtInstruction + BgtalInstruction + BgtzInstruction + BgtzalInstruction + BleInstruction + BlealInstruction + BlezInstruction + BlezalInstruction + BltInstruction + BltalInstruction + BltzInstruction + BltzalInstruction + BnaInstruction + BnaalInstruction + BnanInstruction + BnazInstruction + BnazalInstruction + BneInstruction + BnealInstruction + BnezInstruction + BnezalInstruction + BrapInstruction + BrapzInstruction + BrdnsInstruction + BrdseInstruction + BreqInstruction + BreqzInstruction + BrgeInstruction + BrgezInstruction + BrgtInstruction + BrgtzInstruction + BrleInstruction + BrlezInstruction + BrltInstruction + BrltzInstruction + BrnaInstruction + BrnanInstruction + BrnazInstruction + BrneInstruction + BrnezInstruction + CeilInstruction + ClrInstruction + ClrdInstruction + CosInstruction + DefineInstruction + DivInstruction + ExpInstruction + FloorInstruction + GetInstruction + GetdInstruction + HcfInstruction + JInstruction + JalInstruction + JrInstruction + LInstruction + LabelInstruction + LbInstruction + LbnInstruction + LbnsInstruction + LbsInstruction + LdInstruction + LogInstruction + LrInstruction + LsInstruction + MaxInstruction + MinInstruction + ModInstruction + MoveInstruction + MulInstruction + NorInstruction + NotInstruction + OrInstruction + PeekInstruction + PokeInstruction + PopInstruction + PushInstruction + PutInstruction + PutdInstruction + RandInstruction + RmapInstruction + RoundInstruction + SInstruction + SapInstruction + SapzInstruction + SbInstruction + SbnInstruction + SbsInstruction + SdInstruction + SdnsInstruction + SdseInstruction + SelectInstruction + SeqInstruction + SeqzInstruction + SgeInstruction + SgezInstruction + SgtInstruction + SgtzInstruction + SinInstruction + SlaInstruction + SleInstruction + SleepInstruction + SlezInstruction + SllInstruction + SltInstruction + SltzInstruction + SnaInstruction + SnanInstruction + SnanzInstruction + SnazInstruction + SneInstruction + SnezInstruction + SqrtInstruction + SraInstruction + SrlInstruction + SsInstruction + SubInstruction + TanInstruction + TruncInstruction + XorInstruction + YieldInstruction {} +impl ICInstructable for T +where + T: AbsInstruction + AcosInstruction + AddInstruction + AliasInstruction + + AndInstruction + AsinInstruction + AtanInstruction + Atan2Instruction + + BapInstruction + BapalInstruction + BapzInstruction + BapzalInstruction + + BdnsInstruction + BdnsalInstruction + BdseInstruction + BdsealInstruction + + BeqInstruction + BeqalInstruction + BeqzInstruction + BeqzalInstruction + + BgeInstruction + BgealInstruction + BgezInstruction + BgezalInstruction + + BgtInstruction + BgtalInstruction + BgtzInstruction + BgtzalInstruction + + BleInstruction + BlealInstruction + BlezInstruction + BlezalInstruction + + BltInstruction + BltalInstruction + BltzInstruction + BltzalInstruction + + BnaInstruction + BnaalInstruction + BnanInstruction + BnazInstruction + + BnazalInstruction + BneInstruction + BnealInstruction + BnezInstruction + + BnezalInstruction + BrapInstruction + BrapzInstruction + BrdnsInstruction + + BrdseInstruction + BreqInstruction + BreqzInstruction + BrgeInstruction + + BrgezInstruction + BrgtInstruction + BrgtzInstruction + BrleInstruction + + BrlezInstruction + BrltInstruction + BrltzInstruction + BrnaInstruction + + BrnanInstruction + BrnazInstruction + BrneInstruction + BrnezInstruction + + CeilInstruction + ClrInstruction + ClrdInstruction + CosInstruction + + DefineInstruction + DivInstruction + ExpInstruction + FloorInstruction + + GetInstruction + GetdInstruction + HcfInstruction + JInstruction + + JalInstruction + JrInstruction + LInstruction + LabelInstruction + + LbInstruction + LbnInstruction + LbnsInstruction + LbsInstruction + + LdInstruction + LogInstruction + LrInstruction + LsInstruction + MaxInstruction + + MinInstruction + ModInstruction + MoveInstruction + MulInstruction + + NorInstruction + NotInstruction + OrInstruction + PeekInstruction + + PokeInstruction + PopInstruction + PushInstruction + PutInstruction + + PutdInstruction + RandInstruction + RmapInstruction + RoundInstruction + + SInstruction + SapInstruction + SapzInstruction + SbInstruction + + SbnInstruction + SbsInstruction + SdInstruction + SdnsInstruction + + SdseInstruction + SelectInstruction + SeqInstruction + SeqzInstruction + + SgeInstruction + SgezInstruction + SgtInstruction + SgtzInstruction + + SinInstruction + SlaInstruction + SleInstruction + SleepInstruction + + SlezInstruction + SllInstruction + SltInstruction + SltzInstruction + + SnaInstruction + SnanInstruction + SnanzInstruction + SnazInstruction + + SneInstruction + SnezInstruction + SqrtInstruction + SraInstruction + + SrlInstruction + SsInstruction + SubInstruction + TanInstruction + + TruncInstruction + XorInstruction + YieldInstruction, +{} diff --git a/ic10emu/src/vm/instructions/operands.rs b/ic10emu/src/vm/instructions/operands.rs new file mode 100644 index 0000000..642d0e6 --- /dev/null +++ b/ic10emu/src/vm/instructions/operands.rs @@ -0,0 +1,336 @@ +use crate::errors::ICError; +use crate::interpreter; +use crate::vm::{instructions::enums::InstructionOp, object::traits::IntegratedCircuit}; +use serde_derive::{Deserialize, Serialize}; +use stationeers_data::enums::script::{ + LogicBatchMethod, LogicReagentMode, LogicSlotType, LogicType, +}; +use strum::EnumProperty; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; + +#[derive(PartialEq, Eq, Debug, Clone, Copy, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum Device { + Db, + Numbered(u32), + Indirect { indirection: u32, target: u32 }, +} + +#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct RegisterSpec { + pub indirection: u32, + pub target: u32, +} + +#[serde_with::skip_serializing_none] +#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct DeviceSpec { + pub device: Device, + pub connection: Option, +} + +#[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct Identifier { + pub name: String, +} + +#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum Number { + Float(f64), + Binary(i64), + Hexadecimal(i64), + Constant(f64), + String(String), + Enum(f64), +} + +#[serde_with::skip_serializing_none] +#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum Operand { + RegisterSpec(RegisterSpec), + DeviceSpec(DeviceSpec), + Number(Number), + Type { + logic_type: Option, + slot_logic_type: Option, + batch_mode: Option, + reagent_mode: Option, + identifier: Identifier, + }, + Identifier(Identifier), +} + +pub struct InstOperand { + pub operand: Operand, + pub inst: InstructionOp, + pub index: usize, +} + +impl InstOperand { + pub fn new(operand: &Operand, inst: InstructionOp, index: usize) -> Self { + InstOperand { + operand: operand.clone(), + inst, + index, + } + } + + pub fn as_ident(&self) -> Result { + let Operand::Identifier(ident) = &self.operand else { + return Err(ICError::IncorrectOperandType { + inst: self.inst, + index: self.index, + desired: "Name".to_owned(), + }); + }; + Ok(ident.clone()) + } + + pub fn as_number(&self) -> Result { + let Operand::Number(num) = &self.operand else { + return Err(ICError::IncorrectOperandType { + inst: self.inst, + index: self.index, + desired: "Number".to_owned(), + }); + }; + Ok(num.clone()) + } + + pub fn as_aliasable(&self) -> Result { + match &self.operand { + Operand::RegisterSpec { .. } | Operand::DeviceSpec { .. } => Ok(self.operand.clone()), + _ => Err(ICError::IncorrectOperandType { + inst: self.inst, + index: self.index, + desired: "Device Or Register".to_owned(), + }), + } + } + + pub fn as_value(&self, ic: &IC) -> Result { + match self.translate_alias(ic) { + Operand::RegisterSpec(RegisterSpec { + indirection, + target, + }) => ic.get_register(indirection, target), + Operand::Number(num) => Ok(num.value()), + Operand::Type { + logic_type, + slot_logic_type, + batch_mode, + reagent_mode, + identifier: _, + } => { + if let Some(lt) = logic_type { + Ok(lt + .get_str("value") + .ok_or_else(|| ICError::NoGeneratedValue(lt.to_string()))? + .parse::() + .map_err(|_| ICError::BadGeneratedValueParse { + enum_name: lt.to_string(), + parse_type: "u16".to_owned(), + })? as f64) + } else if let Some(slt) = slot_logic_type { + Ok(slt + .get_str("value") + .ok_or_else(|| ICError::NoGeneratedValue(slt.to_string()))? + .parse::() + .map_err(|_| ICError::BadGeneratedValueParse { + enum_name: slt.to_string(), + parse_type: "u8".to_owned(), + })? as f64) + } else if let Some(bm) = batch_mode { + Ok(bm + .get_str("value") + .ok_or_else(|| ICError::NoGeneratedValue(bm.to_string()))? + .parse::() + .map_err(|_| ICError::BadGeneratedValueParse { + enum_name: bm.to_string(), + parse_type: "u8".to_owned(), + })? as f64) + } else if let Some(rm) = reagent_mode { + Ok(rm + .get_str("value") + .ok_or_else(|| ICError::NoGeneratedValue(rm.to_string()))? + .parse::() + .map_err(|_| ICError::BadGeneratedValueParse { + enum_name: rm.to_string(), + parse_type: "u8".to_owned(), + })? as f64) + } else { + Err(ICError::TypeValueNotKnown) + } + } + Operand::Identifier(id) => Err(ICError::UnknownIdentifier(id.name.to_string())), + Operand::DeviceSpec { .. } => Err(ICError::IncorrectOperandType { + inst: self.inst, + index: self.index, + desired: "Value".to_owned(), + }), + } + } + + pub fn as_value_i64( + &self, + ic: &IC, + signed: bool, + ) -> Result { + match &self.operand { + Operand::Number(num) => Ok(num.value_i64(signed)), + _ => { + let val = self.as_value(ic)?; + if val < i64::MIN as f64 { + Err(ICError::ShiftUnderflowI64) + } else if val <= i64::MAX as f64 { + Ok(interpreter::f64_to_i64(val, signed)) + } else { + Err(ICError::ShiftOverflowI64) + } + } + } + } + pub fn as_value_i32( + &self, + ic: &IC, + signed: bool, + ) -> Result { + match &self.operand { + Operand::Number(num) => Ok(num.value_i64(signed) as i32), + _ => { + let val = self.as_value(ic)?; + if val < i32::MIN as f64 { + Err(ICError::ShiftUnderflowI32) + } else if val <= i32::MAX as f64 { + Ok(val as i32) + } else { + Err(ICError::ShiftOverflowI32) + } + } + } + } + + pub fn as_register(&self, ic: &IC) -> Result { + match self.translate_alias(ic) { + Operand::RegisterSpec(reg) => Ok(reg), + Operand::Identifier(id) => Err(ICError::UnknownIdentifier(id.name.to_string())), + _ => Err(ICError::IncorrectOperandType { + inst: self.inst, + index: self.index, + desired: "Register".to_owned(), + }), + } + } + + /// interpret the operand as a device index, i32::MAX is db + pub fn as_device( + &self, + ic: &IC, + ) -> Result<(i32, Option), ICError> { + match self.translate_alias(ic) { + Operand::DeviceSpec(DeviceSpec { device, connection }) => match device { + Device::Db => Ok((i32::MAX, connection)), + Device::Numbered(p) => Ok((p as i32, connection)), + Device::Indirect { + indirection, + target, + } => { + let val = ic.get_register(indirection, target)?; + Ok((val as i32, connection)) + } + }, + Operand::Identifier(id) => Err(ICError::UnknownIdentifier(id.name.to_string())), + _ => Err(ICError::IncorrectOperandType { + inst: self.inst, + index: self.index, + desired: "Value".to_owned(), + }), + } + } + + pub fn as_logic_type(&self, ic: &IC) -> Result { + match &self.operand { + Operand::Type { + logic_type: Some(lt), + .. + } => Ok(*lt), + _ => { + let val = self.as_value(ic)?; + LogicType::try_from(val).map_err(|_| ICError::UnknownLogicType(val)) + } + } + } + + pub fn as_slot_logic_type( + &self, + ic: &IC, + ) -> Result { + match &self.operand { + Operand::Type { + slot_logic_type: Some(slt), + .. + } => Ok(*slt), + _ => { + let val = self.as_value(ic)?; + LogicSlotType::try_from(val).map_err(|_| ICError::UnknownLogicSlotType(val)) + } + } + } + + pub fn as_batch_mode( + &self, + ic: &IC, + ) -> Result { + match &self.operand { + Operand::Type { + batch_mode: Some(bm), + .. + } => Ok(*bm), + _ => { + let val = self.as_value(ic)?; + LogicBatchMethod::try_from(val).map_err(|_| ICError::UnknownBatchMode(val)) + } + } + } + + pub fn as_reagent_mode( + &self, + ic: &IC, + ) -> Result { + match &self.operand { + Operand::Type { + reagent_mode: Some(rm), + .. + } => Ok(*rm), + _ => { + let val = self.as_value(ic)?; + LogicReagentMode::try_from(val).map_err(|_| ICError::UnknownReagentMode(val)) + } + } + } + + pub fn translate_alias(&self, ic: &IC) -> Operand { + match &self.operand { + Operand::Identifier(id) | Operand::Type { identifier: id, .. } => { + if let Some(alias) = ic.get_aliases().get(&id.name) { + alias.clone() + } else if let Some(define) = ic.get_defines().get(&id.name) { + Operand::Number(Number::Float(*define)) + } else if let Some(label) = ic.get_labels().get(&id.name) { + Operand::Number(Number::Float(*label as f64)) + } else { + self.operand.clone() + } + } + _ => self.operand.clone(), + } + } +} diff --git a/ic10emu/src/vm/object.rs b/ic10emu/src/vm/object.rs new file mode 100644 index 0000000..46a0341 --- /dev/null +++ b/ic10emu/src/vm/object.rs @@ -0,0 +1,164 @@ +use std::{ + cell::RefCell, + ops::{Deref, DerefMut}, + rc::Rc, +}; + +use macro_rules_attribute::derive; +use serde_derive::{Deserialize, Serialize}; + +pub mod errors; +pub mod generic; +pub mod humans; +pub mod macros; +pub mod stationpedia; +pub mod templates; +pub mod traits; + +use traits::Object; + +use crate::vm::VM; +#[cfg(feature = "tsify")] +use tsify::{declare, Tsify}; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; + +use stationeers_data::enums::{ + basic::Class, prefabs::StationpediaPrefab, script::LogicSlotType, MemoryAccess, +}; + +#[cfg_attr(feature = "tsify", declare)] +pub type ObjectID = u32; +pub type BoxedObject = Rc>; + +#[derive(Debug, Clone)] +#[cfg_attr(feature = "tsify", wasm_bindgen)] +pub struct VMObject(BoxedObject); + +impl Deref for VMObject { + type Target = BoxedObject; + + #[inline(always)] + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for VMObject { + #[inline(always)] + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl VMObject { + pub fn new(val: T) -> Self + where + T: Object + 'static, + { + VMObject(Rc::new(RefCell::new(val))) + } + + pub fn set_vm(&mut self, vm: Rc) { + self.borrow_mut().set_vm(vm); + } + + pub fn get_vm(&self) -> Rc { + self.borrow().get_vm().clone() + } + + pub fn get_id(&self) -> ObjectID { + *self.borrow().get_id() + } +} + +#[derive(Debug, Default, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct Name { + pub value: String, + pub hash: i32, +} + +#[allow(unused)] +impl Name { + pub fn new(name: &str) -> Self { + Name { + value: name.to_owned(), + hash: const_crc32::crc32(name.as_bytes()) as i32, + } + } + pub fn from_prefab_name(name: &str) -> Self { + Name { + value: name.to_string(), + hash: name + .parse::() + .map(|prefab| prefab as i32) + .unwrap_or_else(|_| const_crc32::crc32(name.as_bytes()) as i32), + } + } + pub fn from_prefab_hash(hash: i32) -> Option { + StationpediaPrefab::from_repr(hash).map(|prefab| Name { + value: prefab.to_string(), + hash, + }) + } + pub fn set(&mut self, name: &str) { + self.value = name.to_owned(); + self.hash = const_crc32::crc32(name.as_bytes()) as i32; + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct LogicField { + pub field_type: MemoryAccess, + pub value: f64, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct SlotOccupantInfo { + pub quantity: u32, + pub id: ObjectID, +} + +#[serde_with::skip_serializing_none] +#[derive(Debug, Default, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct Slot { + pub parent: ObjectID, + pub index: usize, + pub name: String, + pub class: Class, + pub readable_logic: Vec, + pub writeable_logic: Vec, + pub occupant: Option, + pub proxy: bool, +} + +impl Slot { + #[must_use] + pub fn new(parent: ObjectID, index: usize, name: String, class: Class) -> Self { + Slot { + parent, + index, + name, + class, + readable_logic: + vec![ + LogicSlotType::Class, + LogicSlotType::Damage, + LogicSlotType::MaxQuantity, + LogicSlotType::OccupantHash, + LogicSlotType::Occupied, + LogicSlotType::PrefabHash, + LogicSlotType::Quantity, + LogicSlotType::ReferenceId, + LogicSlotType::SortingClass, + ], + writeable_logic: vec![], + occupant: None, + proxy: false, + } + } +} diff --git a/ic10emu/src/vm/object/errors.rs b/ic10emu/src/vm/object/errors.rs new file mode 100644 index 0000000..76f3acb --- /dev/null +++ b/ic10emu/src/vm/object/errors.rs @@ -0,0 +1,36 @@ +use serde_derive::{Deserialize, Serialize}; +use thiserror::Error; + +use stationeers_data::enums::script::{LogicSlotType, LogicType}; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; + +#[derive(Error, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum LogicError { + #[error("can't read LogicType {0}")] + CantRead(LogicType), + #[error("can't read slot {1} LogicSlotType {0}")] + CantSlotRead(LogicSlotType, f64), + #[error("can't write LogicType {0}")] + CantWrite(LogicType), + #[error("can't write slot {1} LogicSlotType {0}")] + CantSlotWrite(LogicSlotType, f64), + #[error("slot id {0} is out of range 0..{1}")] + SlotIndexOutOfRange(f64, usize), +} + +#[derive(Error, Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum MemoryError { + #[error("stack underflow: {0} < range [0..{1})")] + StackUnderflow(i32, usize), + #[error("stack overflow: {0} > range [0..{1})")] + StackOverflow(i32, usize), + #[error("memory not readable")] + NotReadable, + #[error("memory not writeable")] + NotWriteable, +} diff --git a/ic10emu/src/vm/object/generic.rs b/ic10emu/src/vm/object/generic.rs new file mode 100644 index 0000000..c0a0bb8 --- /dev/null +++ b/ic10emu/src/vm/object/generic.rs @@ -0,0 +1,3 @@ +pub mod macros; +pub mod structs; +pub mod traits; diff --git a/ic10emu/src/vm/object/generic/macros.rs b/ic10emu/src/vm/object/generic/macros.rs new file mode 100644 index 0000000..7424be7 --- /dev/null +++ b/ic10emu/src/vm/object/generic/macros.rs @@ -0,0 +1,328 @@ +macro_rules! GWThermal { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWThermal for $struct { + fn is_thermal(&self) -> bool { + self.thermal_info.is_some() + } + fn thermal_info(&self) -> &ThermalInfo { + self.thermal_info + .as_ref() + .expect("GWThermal::thermal_info called on non thermal") + } + } + }; +} +pub(crate) use GWThermal; + +macro_rules! GWInternalAtmo { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWInternalAtmo for $struct { + fn is_internal_atmo(&self) -> bool { + self.internal_atmo_info.is_some() + } + fn internal_atmo_info(&self) -> &InternalAtmoInfo { + self.internal_atmo_info + .as_ref() + .expect("GWInternalAtmo::internal_atmo_info called on non internal atmo") + } + } + }; +} +pub(crate) use GWInternalAtmo; + +macro_rules! GWStructure { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWStructure for $struct { + fn small_grid(&self) -> bool { + self.small_grid + } + } + }; +} +pub(crate) use GWStructure; + +macro_rules! GWStorage { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWStorage for $struct { + fn slots(&self) -> &BTreeMap { + &self.slots + } + fn slots_mut(&mut self) -> &mut BTreeMap { + &mut self.slots + } + } + }; +} +pub(crate) use GWStorage; + +macro_rules! GWLogicable { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWLogicable for $struct { + fn fields(&self) -> &BTreeMap { + &self.fields + } + fn fields_mut(&mut self) -> &mut BTreeMap { + &mut self.fields + } + fn known_modes(&self) -> Option<&BTreeMap> { + self.modes.as_ref() + } + } + }; +} +pub(crate) use GWLogicable; + +macro_rules! GWMemoryReadable { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWMemoryReadable for $struct { + fn memory_size(&self) -> usize { + self.memory.len() + } + fn memory(&self) -> &Vec { + &self.memory + } + } + }; +} +pub(crate) use GWMemoryReadable; + +macro_rules! GWMemoryWritable { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWMemoryWritable for $struct { + fn memory_mut(&mut self) -> &mut Vec { + &mut self.memory + } + } + }; +} + +pub(crate) use GWMemoryWritable; + +macro_rules! GWDevice { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWDevice for $struct { + fn device_info(&self) -> &DeviceInfo { + &self.device_info + } + fn connections(&self) -> &[Connection] { + self.connections.as_slice() + } + fn connections_mut(&mut self) -> &mut [Connection] { + self.connections.as_mut_slice() + } + fn pins(&self) -> Option<&[Option]> { + self.pins.as_ref().map(|pins| pins.as_slice()) + } + fn pins_mut(&mut self) -> Option<&mut [Option]> { + self.pins.as_mut().map(|pins| pins.as_mut_slice()) + } + fn reagents(&self) -> Option<&BTreeMap> { + self.reagents.as_ref() + } + fn reagents_mut(&mut self) -> &mut Option> { + &mut self.reagents + } + } + }; +} +pub(crate) use GWDevice; + +macro_rules! GWItem { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWItem for $struct { + fn item_info(&self) -> &ItemInfo { + &self.item_info + } + fn parent_slot(&self) -> Option { + self.parent_slot + } + fn set_parent_slot(&mut self, info: Option) { + self.parent_slot = info; + } + fn damage(&self) -> &Option { + &self.damage + } + fn damage_mut(&mut self) -> &mut Option { + &mut self.damage + } + } + }; +} +pub(crate) use GWItem; + +macro_rules! GWSuit { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWSuit for $struct { + fn suit_info(&self) -> &SuitInfo { + &self.suit_info + } + } + }; +} +pub(crate) use GWSuit; + +macro_rules! GWCircuitHolderItem { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWCircuitHolder for $struct { + type Holder = ItemCircuitHolder; + fn gw_get_error(&self) -> i32 { + self.error + } + fn gw_set_error(&mut self, state: i32) { + self.error = state; + } + } + }; +} +pub(crate) use GWCircuitHolderItem; + +macro_rules! GWCircuitHolderSuit { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWCircuitHolder for $struct { + type Holder = SuitCircuitHolder; + fn gw_get_error(&self) -> i32 { + self.error + } + fn gw_set_error(&mut self, state: i32) { + self.error = state; + } + } + }; +} +pub(crate) use GWCircuitHolderSuit; + +macro_rules! GWCircuitHolderDevice { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWCircuitHolder for $struct { + type Holder = DeviceCircuitHolder; + fn gw_get_error(&self) -> i32 { + self.error + } + fn gw_set_error(&mut self, state: i32) { + self.error = state; + } + } + }; +} +pub(crate) use GWCircuitHolderDevice; + +macro_rules! GWReagentConsumer { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWReagentConsumer for $struct { + fn consumer_info(&self) -> &ConsumerInfo { + &self.consumer_info + } + } + }; +} +pub(crate) use GWReagentConsumer; + +macro_rules! GWReagentRequirer { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWReagentRequirer for $struct { + fn get_current_recipe_gw(&self) -> Option<(u32, u32)> { + self.current_recipe + } + fn get_fab_info_gw(&self) -> Option<&FabricatorInfo> { + self.fabricator_info.as_ref() + } + } + }; +} +pub(crate) use GWReagentRequirer; + +macro_rules! GWFabricator { + ( + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $($body:tt)* + } + ) => { + impl GWFabricator for $struct { + fn is_fabricator(&self) -> bool { + self.fabricator_info.is_some() + } + fn fabricator_info(&self) -> &FabricatorInfo { + self.fabricator_info + .as_ref() + .expect("GWFabricator::fabricator_info call on non Fabricator") + } + } + }; +} +pub(crate) use GWFabricator; diff --git a/ic10emu/src/vm/object/generic/structs.rs b/ic10emu/src/vm/object/generic/structs.rs new file mode 100644 index 0000000..5bf6cec --- /dev/null +++ b/ic10emu/src/vm/object/generic/structs.rs @@ -0,0 +1,621 @@ +use super::{macros::*, traits::*}; + +use crate::{ + network::Connection, + vm::{ + object::{macros::ObjectInterface, traits::*, LogicField, Name, ObjectID, Slot}, + VM, + }, +}; +use macro_rules_attribute::derive; +use stationeers_data::{ + enums::script::LogicType, + templates::{ + ConsumerInfo, DeviceInfo, FabricatorInfo, InternalAtmoInfo, ItemInfo, SuitInfo, ThermalInfo, + }, +}; +use std::{collections::BTreeMap, rc::Rc}; + +#[derive(ObjectInterface!, GWThermal!, GWInternalAtmo!, GWStructure!)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure +}))] +pub struct Generic { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, +} + +#[derive(ObjectInterface!, GWThermal!, GWInternalAtmo!, GWStructure!, GWStorage!)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure, Storage +}))] +pub struct GenericStorage { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, + pub slots: BTreeMap, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWStructure!, GWStorage!, GWLogicable! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure, Storage, Logicable +}))] +pub struct GenericLogicable { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWStructure!, GWStorage!, GWLogicable!, + GWDevice! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure, Storage, Logicable, Device +}))] +pub struct GenericLogicableDevice { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, + pub reagents: Option>, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWStructure!, GWStorage!, GWLogicable!, + GWDevice!, GWCircuitHolderDevice! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure, Storage, Logicable, Device, + CircuitHolder +}))] +pub struct GenericCircuitHolder { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, + pub reagents: Option>, + pub error: i32, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWStructure!, GWStorage!, GWLogicable!, + GWDevice!, GWReagentConsumer!, +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure, Storage, Logicable, Device, ReagentConsumer +}))] +pub struct GenericLogicableDeviceConsumer { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, + pub reagents: Option>, + pub consumer_info: ConsumerInfo, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWStructure!, GWStorage!, + GWLogicable!, GWDevice!, + GWMemoryReadable!, GWMemoryWritable! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure, Storage, Logicable, Device, MemoryReadable +}))] +pub struct GenericLogicableDeviceMemoryReadable { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, + pub reagents: Option>, + pub memory: Vec, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWStructure!, GWStorage!, GWLogicable!, + GWDevice!, GWMemoryReadable!, GWMemoryWritable!, + GWReagentConsumer!, GWReagentRequirer!, GWFabricator!, +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure, Storage, Logicable, Device, MemoryReadable, + ReagentConsumer, ReagentRequirer, + Fabricator[GWFabricator::is_fabricator] +}))] +pub struct GenericLogicableDeviceConsumerMemoryReadable { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, + pub reagents: Option>, + pub consumer_info: ConsumerInfo, + pub fabricator_info: Option, + /// (fabricator_info.recipes index, quantity) + pub current_recipe: Option<(u32, u32)>, + pub memory: Vec, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWStructure!, GWStorage!, + GWLogicable!, GWDevice!, GWMemoryReadable!, GWMemoryWritable! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure, Storage, Logicable, Device, MemoryReadable, MemoryWritable +}))] +pub struct GenericLogicableDeviceMemoryReadWriteable { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, + pub reagents: Option>, + pub memory: Vec, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWStructure!, GWStorage!, GWLogicable!, + GWDevice!, GWMemoryReadable!, GWMemoryWritable!, + GWReagentConsumer!, GWReagentRequirer!, GWFabricator!, +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Structure, Storage, Logicable, Device, MemoryReadable, MemoryWritable, + ReagentConsumer, ReagentRequirer, + Fabricator[GWFabricator::is_fabricator] +}))] +pub struct GenericLogicableDeviceConsumerMemoryReadWriteable { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub small_grid: bool, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub device_info: DeviceInfo, + pub connections: Vec, + pub pins: Option>>, + pub reagents: Option>, + pub consumer_info: ConsumerInfo, + pub fabricator_info: Option, + // index of target recipe in fabricator_info + pub current_recipe: Option<(u32, u32)>, + pub memory: Vec, +} + +#[derive(ObjectInterface!, GWThermal!, GWInternalAtmo!, GWItem!)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item +}))] +pub struct GenericItem { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, +} + +#[derive(ObjectInterface!, GWThermal!, GWInternalAtmo!, GWItem!, GWStorage! )] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage +}))] +pub struct GenericItemStorage { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, + pub slots: BTreeMap, +} + +#[derive( + ObjectInterface!, GWThermal!, + GWInternalAtmo!, GWItem!, GWStorage!, + GWReagentConsumer! + )] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, ReagentConsumer +}))] +pub struct GenericItemConsumer { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, + pub slots: BTreeMap, + pub consumer_info: ConsumerInfo, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWItem!, GWStorage!, GWLogicable! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, Logicable +}))] +pub struct GenericItemLogicable { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWItem!, GWStorage!, GWLogicable!, + GWMemoryReadable! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, Logicable, MemoryReadable +}))] +pub struct GenericItemLogicableMemoryReadable { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub memory: Vec, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWItem!, GWStorage!, GWLogicable!, + GWMemoryReadable!, GWMemoryWritable! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, Logicable, MemoryReadable, MemoryWritable +}))] +pub struct GenericItemLogicableMemoryReadWriteable { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub memory: Vec, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWItem!, GWStorage!, GWLogicable!, + GWCircuitHolderItem! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, Logicable, + CircuitHolder +}))] +pub struct GenericItemCircuitHolder { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, + pub slots: BTreeMap, + pub fields: BTreeMap, + pub modes: Option>, + pub error: i32, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWItem!, GWStorage!, GWLogicable!, + GWSuit! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, Suit, Logicable +}))] +pub struct GenericItemSuitLogic { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, + pub slots: BTreeMap, + pub suit_info: SuitInfo, + pub fields: BTreeMap, + pub modes: Option>, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWItem!, GWStorage!, GWLogicable!, + GWMemoryReadable!, GWMemoryWritable!, + GWSuit!, GWCircuitHolderSuit! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, Suit, Logicable, MemoryReadable, MemoryWritable, + CircuitHolder +}))] +pub struct GenericItemSuitCircuitHolder { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, + pub slots: BTreeMap, + pub suit_info: SuitInfo, + pub fields: BTreeMap, + pub modes: Option>, + pub memory: Vec, + pub error: i32, +} + +#[derive( + ObjectInterface!, + GWThermal!, GWInternalAtmo!, + GWItem!, GWStorage!, GWSuit! +)] +#[custom(implements(Object { + Thermal[GWThermal::is_thermal], + InternalAtmosphere[GWInternalAtmo::is_internal_atmo], + Item, Storage, Suit +}))] +pub struct GenericItemSuit { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub thermal_info: Option, + pub internal_atmo_info: Option, + pub item_info: ItemInfo, + pub parent_slot: Option, + pub damage: Option, + pub slots: BTreeMap, + pub suit_info: SuitInfo, +} diff --git a/ic10emu/src/vm/object/generic/traits.rs b/ic10emu/src/vm/object/generic/traits.rs new file mode 100644 index 0000000..0bd8aff --- /dev/null +++ b/ic10emu/src/vm/object/generic/traits.rs @@ -0,0 +1,1347 @@ +use crate::{ + network::Connection, + vm::object::{ + errors::{LogicError, MemoryError}, + traits::*, + LogicField, MemoryAccess, ObjectID, Slot, VMObject, + }, +}; + +use itertools::Itertools; +use stationeers_data::{ + enums::{ + basic::{Class, GasType, SortingClass}, + script::{LogicSlotType, LogicType}, + }, + templates::{ + ConsumerInfo, DeviceInfo, FabricatorInfo, InternalAtmoInfo, ItemInfo, RecipeOrder, + SuitInfo, ThermalInfo, + }, +}; +use std::collections::BTreeMap; +use strum::IntoEnumIterator; + +pub trait GWThermal { + fn is_thermal(&self) -> bool; + fn thermal_info(&self) -> &ThermalInfo; +} + +impl Thermal for T { + fn get_radiation_factor(&self) -> f32 { + self.thermal_info().radiation_factor + } + fn get_convection_factor(&self) -> f32 { + self.thermal_info().convection_factor + } + fn debug_thermal(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "thermal_info: {:?}", self.thermal_info()) + } +} + +pub trait GWInternalAtmo { + fn is_internal_atmo(&self) -> bool; + fn internal_atmo_info(&self) -> &InternalAtmoInfo; +} + +impl InternalAtmosphere for T { + fn get_volume(&self) -> f64 { + self.internal_atmo_info().volume as f64 + } + fn debug_internal_atmosphere(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "internal_atmo_info: {:?}", self.internal_atmo_info()) + } +} + +pub trait GWStructure { + fn small_grid(&self) -> bool; +} + +impl Structure for T { + fn is_small_grid(&self) -> bool { + self.small_grid() + } + fn debug_structure(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "small_grid: {}", self.small_grid()) + } +} + +pub trait GWStorage { + fn slots(&self) -> &BTreeMap; + fn slots_mut(&mut self) -> &mut BTreeMap; +} + +impl Storage for T { + fn slots_count(&self) -> usize { + self.slots().len() + } + fn get_slot(&self, index: usize) -> Option<&Slot> { + self.slots().get(&(index as u32)) + } + fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { + self.slots_mut().get_mut(&(index as u32)) + } + fn get_slots(&self) -> Vec<(usize, &Slot)> { + self.slots() + .iter() + .map(|(index, slot)| (*index as usize, slot)) + .collect() + } + fn get_slots_mut(&mut self) -> Vec<(usize, &mut Slot)> { + self.slots_mut() + .iter_mut() + .map(|(index, slot)| (*index as usize, slot)) + .collect() + } + fn debug_storage(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "slots: {:?}", self.slots()) + } +} + +pub trait GWLogicable: Storage { + fn fields(&self) -> &BTreeMap; + fn fields_mut(&mut self) -> &mut BTreeMap; + fn known_modes(&self) -> Option<&BTreeMap>; +} + +impl Logicable for T { + fn debug_logicable(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!( + f, + "fields: {:?}, modes: {:?}", + self.fields(), + self.known_modes() + ) + } + fn prefab_hash(&self) -> i32 { + self.get_prefab().hash + } + fn name_hash(&self) -> i32 { + self.get_name().hash + } + fn is_logic_readable(&self) -> bool { + true + } + fn is_logic_writeable(&self) -> bool { + LogicType::iter().any(|lt| self.can_logic_write(lt)) + } + fn can_logic_read(&self, lt: LogicType) -> bool { + match lt { + LogicType::PrefabHash | LogicType::NameHash | LogicType::ReferenceId => true, + _ => self + .fields() + .get(<) + .map(|field| { + matches!( + field.field_type, + MemoryAccess::Read | MemoryAccess::ReadWrite + ) + }) + .unwrap_or(false), + } + } + fn can_logic_write(&self, lt: LogicType) -> bool { + match lt { + LogicType::PrefabHash | LogicType::NameHash | LogicType::ReferenceId => false, + _ => self + .fields() + .get(<) + .map(|field| { + matches!( + field.field_type, + MemoryAccess::Write | MemoryAccess::ReadWrite + ) + }) + .unwrap_or(false), + } + } + fn get_logic(&self, lt: LogicType) -> Result { + match lt { + LogicType::PrefabHash => Ok(self.get_prefab().hash as f64), + LogicType::NameHash => Ok(self.get_name().hash as f64), + LogicType::ReferenceId => Ok(*self.get_id() as f64), + _ => self + .fields() + .get(<) + .and_then(|field| match field.field_type { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(field.value), + _ => None, + }) + .ok_or(LogicError::CantRead(lt)), + } + } + fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError> { + match lt { + LogicType::PrefabHash | LogicType::NameHash | LogicType::ReferenceId => { + Err(LogicError::CantWrite(lt)) + } + _ => self + .fields_mut() + .get_mut(<) + .ok_or(LogicError::CantWrite(lt)) + .and_then(|field| match field.field_type { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + field.value = value; + Ok(()) + } + _ if force => { + field.value = value; + Ok(()) + } + _ => Err(LogicError::CantWrite(lt)), + }), + } + } + fn can_slot_logic_read(&self, slt: LogicSlotType, index: f64) -> bool { + if index < 0.0 { + false + } else { + use LogicSlotType::*; + if matches!( + slt, + Occupied + | OccupantHash + | Quantity + | Class + | MaxQuantity + | PrefabHash + | SortingClass + | ReferenceId + ) { + return true; + } + self.get_slot(index as usize) + .map(|slot| slot.readable_logic.contains(&slt)) + .unwrap_or(false) + } + } + fn get_slot_logic(&self, slt: LogicSlotType, index: f64) -> Result { + if index < 0.0 { + return Err(LogicError::SlotIndexOutOfRange(index, self.slots_count())); + } + self.get_slot(index as usize) + .ok_or_else(|| LogicError::SlotIndexOutOfRange(index, self.slots_count())) + .and_then(|slot| { + use LogicSlotType::*; + let occupant = slot + .occupant + .as_ref() + .and_then(|info| self.get_vm().get_object(info.id)); + match slt { + Occupied => { + if slot.occupant.is_some() { + Ok(1.0) + } else { + Ok(0.0) + } + } + Quantity => { + if let Some(info) = &slot.occupant { + Ok(info.quantity as f64) + } else { + Ok(0.0) + } + } + Class => { + if slot.occupant.is_some() { + Ok(slot.class as i32 as f64) + } else { + Ok(0.0) + } + } + OccupantHash | PrefabHash => { + if let Some(occupant) = occupant { + Ok(occupant.borrow().get_prefab().hash as f64) + } else { + Ok(0.0) + } + } + MaxQuantity => { + if let Some(occupant) = occupant { + Ok(occupant + .borrow() + .as_item() + .map(|item| item.max_quantity() as f64) + .ok_or(LogicError::CantSlotRead(slt, index))?) + } else { + Ok(0.0) + } + } + SortingClass => { + if let Some(occupant) = occupant { + Ok(occupant + .borrow() + .as_item() + .map(|item| item.sorting_class() as i32 as f64) + .ok_or(LogicError::CantSlotRead(slt, index))?) + } else { + Ok(0.0) + } + } + ReferenceId => { + if let Some(occupant) = occupant { + Ok(*occupant.borrow().get_id() as f64) + } else { + Ok(0.0) + } + } + slt => { + if slot.readable_logic.contains(&slt) { + if let Some(occupant) = occupant { + let occupant_ref = occupant.borrow(); + let logicable = occupant_ref + .as_logicable() + .ok_or(LogicError::CantSlotRead(slt, index))?; + + match slt { + Occupied | Quantity | Class | OccupantHash | PrefabHash + | MaxQuantity | SortingClass | ReferenceId => Ok(0.0), // covered above + LineNumber => logicable.get_logic(LogicType::LineNumber), + + Charge => logicable.get_logic(LogicType::Charge), + ChargeRatio => logicable + .as_chargeable() + .map(|chargeable| chargeable.get_charge() as f64) + .ok_or(LogicError::CantSlotRead(slt, index)), + Open => logicable.get_logic(LogicType::Open), + On => logicable.get_logic(LogicType::Open), + Lock => logicable.get_logic(LogicType::Lock), + FilterType => Ok(logicable + .as_item() + .and_then(|item| item.filter_type()) + .ok_or(LogicError::CantSlotRead(slt, index))? + as i32 + as f64), + Damage => logicable + .as_item() + .map(|item| item.get_damage() as f64) + .ok_or(LogicError::CantSlotRead(slt, index)), + Volume => logicable.get_logic(LogicType::Volume), + Pressure => logicable.get_logic(LogicType::Pressure), + PressureAir => logicable + .as_suit() + .map(|suit| suit.pressure_air() as f64) + .ok_or(LogicError::CantSlotRead(slt, index)), + PressureWaste => logicable + .as_suit() + .map(|suit| suit.pressure_waste() as f64) + .ok_or(LogicError::CantSlotRead(slt, index)), + Temperature => logicable.get_logic(LogicType::Temperature), + Seeding => logicable + .as_plant() + .map(|plant| plant.is_seeding() as i32 as f64) + .ok_or(LogicError::CantSlotRead(slt, index)), + Mature => logicable + .as_plant() + .map(|plant| plant.is_mature() as i32 as f64) + .ok_or(LogicError::CantSlotRead(slt, index)), + Growth => logicable + .as_plant() + .map(|plant| plant.get_growth()) + .ok_or(LogicError::CantSlotRead(slt, index)), + Health => logicable + .as_plant() + .map(|plant| plant.get_health()) + .ok_or(LogicError::CantSlotRead(slt, index)), + Efficiency => logicable + .as_plant() + .map(|plant| plant.get_health()) + .ok_or(LogicError::CantSlotRead(slt, index)), + + // defaults + None => Ok(0.0), + } + } else { + Ok(0.0) + } + } else { + Err(LogicError::CantSlotRead(slt, index)) + } + } + } + }) + } + fn valid_logic_types(&self) -> Vec { + self.fields().keys().copied().collect() + } + fn known_modes(&self) -> Option> { + self.known_modes().map(|modes| { + modes + .iter() + .map(|(mode, name)| (*mode, name.clone())) + .collect() + }) + } +} + +pub trait GWMemoryReadable { + fn memory_size(&self) -> usize; + fn memory(&self) -> &Vec; +} + +impl MemoryReadable for T { + fn debug_memory_readable(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!( + f, + "size: {}, values: {:?}", + self.memory_size(), + self.memory() + ) + } + fn memory_size(&self) -> usize { + self.memory_size() + } + fn get_memory(&self, index: i32) -> Result { + if index < 0 { + Err(MemoryError::StackUnderflow(index, self.memory().len())) + } else if index as usize >= self.memory().len() { + Err(MemoryError::StackOverflow(index, self.memory().len())) + } else { + Ok(self.memory()[index as usize]) + } + } + fn get_memory_slice(&self) -> &[f64] { + self.memory() + } +} + +pub trait GWMemoryWritable: MemoryReadable { + fn memory_mut(&mut self) -> &mut Vec; +} + +impl MemoryWritable for T { + fn debug_memory_writable(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!( + f, + "size: {}, values: {:?}", + self.memory_size(), + self.get_memory_slice() + ) + } + fn set_memory(&mut self, index: i32, val: f64) -> Result<(), MemoryError> { + if index < 0 { + Err(MemoryError::StackUnderflow(index, self.memory_size())) + } else if index as usize >= self.memory_size() { + Err(MemoryError::StackOverflow(index, self.memory_size())) + } else { + self.memory_mut()[index as usize] = val; + Ok(()) + } + } + fn clear_memory(&mut self) { + self.memory_mut().fill(0.0); + } +} + +pub trait GWDevice: GWLogicable + Logicable { + fn device_info(&self) -> &DeviceInfo; + fn connections(&self) -> &[Connection]; + fn connections_mut(&mut self) -> &mut [Connection]; + fn pins(&self) -> Option<&[Option]>; + fn pins_mut(&mut self) -> Option<&mut [Option]>; + fn reagents(&self) -> Option<&BTreeMap>; + fn reagents_mut(&mut self) -> &mut Option>; +} + +impl Device for T { + fn debug_device(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!( + f, + "device_info: {:?}, connections: {:?}, pins: {:?}", + self.device_info(), + self.connections(), + self.pins() + ) + } + fn can_slot_logic_write(&self, slt: LogicSlotType, index: f64) -> bool { + if index < 0.0 { + false + } else { + self.get_slot(index as usize) + .map(|slot| slot.writeable_logic.contains(&slt)) + .unwrap_or(false) + } + } + fn set_slot_logic( + &mut self, + slt: LogicSlotType, + index: f64, + value: f64, + force: bool, + ) -> Result<(), LogicError> { + let slots_count = self.slots_count(); + if index < 0.0 { + return Err(LogicError::SlotIndexOutOfRange(index, slots_count)); + } + use LogicSlotType::*; + let vm = self.get_vm().clone(); + + self.get_slot_mut(index as usize) + .ok_or(LogicError::SlotIndexOutOfRange(index, slots_count)) + .and_then(|slot| { + // special case, update slot quantity if >= 1 + if slt == Quantity && force && value >= 1.0 { + if let Some(occupant) = slot.occupant.as_mut() { + occupant.quantity = value as u32; + } + return Ok(()); + } + if slot.writeable_logic.contains(&slt) { + let occupant = slot + .occupant + .as_ref() + .and_then(|info| vm.get_object(info.id)); + if let Some(occupant) = occupant { + let mut occupant_ref = occupant.borrow_mut(); + let logicable = occupant_ref + .as_mut_logicable() + .ok_or(LogicError::CantSlotWrite(slt, index))?; + match slt { + Open => logicable.set_logic(LogicType::Open, value, force), + On => logicable.set_logic(LogicType::On, value, force), + Lock => logicable.set_logic(LogicType::On, value, force), + // no other values are known to be writeable + Damage if force => { + logicable + .as_mut_item() + .map(|item| item.set_damage(value as f32)) + .ok_or(LogicError::CantSlotWrite(slt, index))?; + Ok(()) + } + + _ => Ok(()), + } + } else { + Ok(()) + } + } else { + Err(LogicError::CantSlotWrite(slt, index)) + } + }) + } + fn connection_list(&self) -> &[crate::network::Connection] { + self.connections() + } + fn connection_list_mut(&mut self) -> &mut [Connection] { + self.connections_mut() + } + fn device_pins(&self) -> Option<&[Option]> { + self.pins() + } + fn device_pins_mut(&mut self) -> Option<&mut [Option]> { + self.pins_mut() + } + fn has_reagents(&self) -> bool { + self.device_info().has_reagents + } + fn has_lock_state(&self) -> bool { + self.device_info().has_lock_state + } + fn has_mode_state(&self) -> bool { + self.device_info().has_mode_state + } + fn has_open_state(&self) -> bool { + self.device_info().has_open_state + } + fn has_on_off_state(&self) -> bool { + self.device_info().has_on_off_state + } + fn has_color_state(&self) -> bool { + self.device_info().has_color_state + } + fn has_activate_state(&self) -> bool { + self.device_info().has_activate_state + } + fn has_atmosphere(&self) -> bool { + self.device_info().has_atmosphere + } + fn get_reagents(&self) -> Vec<(u8, f64)> { + self.reagents() + .map(|reagents| { + reagents + .iter() + .map(|(hash, quant)| (*hash, *quant)) + .collect() + }) + .unwrap_or_default() + } + fn set_reagents(&mut self, reagents: &[(u8, f64)]) { + let reagents_ref = self.reagents_mut(); + *reagents_ref = Some(reagents.iter().copied().collect()); + } + fn add_reagents(&mut self, reagents: &[(u8, f64)]) { + let reagents_ref = self.reagents_mut(); + if let Some(ref mut reagents_ref) = reagents_ref { + reagents_ref.extend(reagents.iter().map(|(hash, quant)| (hash, quant))); + } else { + *reagents_ref = Some(reagents.iter().copied().collect()); + } + } +} + +pub trait GWItem { + fn item_info(&self) -> &ItemInfo; + fn parent_slot(&self) -> Option; + fn set_parent_slot(&mut self, info: Option); + fn damage(&self) -> &Option; + fn damage_mut(&mut self) -> &mut Option; +} + +impl Item for T { + fn debug_item(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!( + f, + "item_info: {:?}, parent_slot: {:?}, damage: {:?}", + self.item_info(), + self.parent_slot(), + self.damage() + ) + } + fn consumable(&self) -> bool { + self.item_info().consumable + } + fn filter_type(&self) -> Option { + self.item_info().filter_type + } + fn ingredient(&self) -> bool { + self.item_info().ingredient + } + fn max_quantity(&self) -> u32 { + self.item_info().max_quantity + } + fn reagents(&self) -> Option<&BTreeMap> { + self.item_info().reagents.as_ref() + } + fn slot_class(&self) -> Class { + self.item_info().slot_class + } + fn sorting_class(&self) -> SortingClass { + self.item_info().sorting_class + } + fn get_parent_slot(&self) -> Option { + self.parent_slot() + } + fn set_parent_slot(&mut self, info: Option) { + self.set_parent_slot(info); + } + fn get_damage(&self) -> f32 { + self.damage().unwrap_or(0.0) + } + fn set_damage(&mut self, damage: f32) { + self.damage_mut().replace(damage.clamp(0.0, 1.0)); + } +} + +pub trait GWSuit: Storage { + fn suit_info(&self) -> &SuitInfo; +} + +impl Suit for T { + fn debug_suit(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "suit_info: {:?}", self.suit_info()) + } + fn pressure_waste_max(&self) -> f32 { + self.suit_info().waste_max_pressure + } + fn pressure_air(&self) -> f32 { + // Game "hard" codes air tank to first slot of suits + let result = self.get_slot(0).and_then(|slot| { + let canister = slot + .occupant + .as_ref() + .and_then(|info| self.get_vm().get_object(info.id)); + let pressure = canister.and_then(|canister| { + canister + .borrow() + .as_logicable() + .and_then(|logicable| logicable.get_logic(LogicType::Pressure).ok()) + }); + + pressure + }); + result.unwrap_or(0.0) as f32 + } + fn pressure_waste(&self) -> f32 { + // game hard codes waste tank to second slot of suits + let result = self.get_slot(1).and_then(|slot| { + let canister = slot + .occupant + .as_ref() + .and_then(|info| self.get_vm().get_object(info.id)); + let pressure = canister.and_then(|canister| { + canister + .borrow() + .as_logicable() + .and_then(|logicable| logicable.get_logic(LogicType::Pressure).ok()) + }); + + pressure + }); + result.unwrap_or(0.0) as f32 + } +} + +pub trait CircuitHolderType {} + +pub struct ItemCircuitHolder; +pub struct SuitCircuitHolder; +pub struct DeviceCircuitHolder; +impl CircuitHolderType for ItemCircuitHolder {} +impl CircuitHolderType for SuitCircuitHolder {} +impl CircuitHolderType for DeviceCircuitHolder {} + +pub trait GWCircuitHolder: Logicable { + type Holder: CircuitHolderType; + fn gw_get_error(&self) -> i32; + fn gw_set_error(&mut self, state: i32); +} + +pub trait GWCircuitHolderWrapper::Holder> { + fn clear_error_gw(&mut self); + fn set_error_gw(&mut self, state: i32); + /// i32::MAX is db + fn get_logicable_from_index_gw( + &self, + device: i32, + connection: Option, + ) -> Option; + /// i32::MAX is db + fn get_logicable_from_index_mut_gw( + &mut self, + device: i32, + connection: Option, + ) -> Option; + fn get_logicable_from_id_gw( + &self, + device: ObjectID, + connection: Option, + ) -> Option; + fn get_logicable_from_id_mut_gw( + &mut self, + device: ObjectID, + connection: Option, + ) -> Option; + fn get_ic_gw(&self) -> Option; + fn halt_and_catch_fire_gw(&mut self); +} + +impl CircuitHolder for T +where + T: GWCircuitHolder, + Self: GWCircuitHolderWrapper, +{ + fn debug_circuit_holder(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "GenericCircuitHolder, Limited Info") + } + fn clear_error(&mut self) { + self.clear_error_gw() + } + fn set_error(&mut self, state: i32) { + self.set_error_gw(state) + } + /// i32::MAX is db + fn get_logicable_from_index( + &self, + device: i32, + connection: Option, + ) -> Option { + self.get_logicable_from_index_gw(device, connection) + } + /// i32::MAX is db + fn get_logicable_from_index_mut( + &mut self, + device: i32, + connection: Option, + ) -> Option { + self.get_logicable_from_index_mut_gw(device, connection) + } + fn get_logicable_from_id( + &self, + device: ObjectID, + connection: Option, + ) -> Option { + self.get_logicable_from_id_gw(device, connection) + } + fn get_logicable_from_id_mut( + &mut self, + device: ObjectID, + connection: Option, + ) -> Option { + self.get_logicable_from_id_mut_gw(device, connection) + } + fn get_ic(&self) -> Option { + self.get_ic_gw() + } + fn halt_and_catch_fire(&mut self) { + self.halt_and_catch_fire_gw() + } +} + +impl GWCircuitHolderWrapper for T +where + T: GWCircuitHolder + Device + Object, +{ + fn clear_error_gw(&mut self) { + self.gw_set_error(0); + } + fn set_error_gw(&mut self, state: i32) { + self.gw_set_error(state); + } + + /// i32::MAX is db + fn get_logicable_from_index_gw( + &self, + device: i32, + connection: Option, + ) -> Option { + if device == i32::MAX { + // self + if let Some(connection) = connection { + self.connection_list().get(connection).and_then(|conn| { + if let Connection::CableNetwork { net: Some(net), .. } = conn { + self.get_vm() + .get_network(*net) + .map(ObjectRef::from_vm_object) + } else { + None + } + }) + } else { + Some(ObjectRef::from_ref(self.as_object())) + } + } else { + if device < 0 { + return None; + } + self.device_pins().and_then(|pins| { + pins.get(device as usize).and_then(|pin| { + pin.and_then(|id| self.get_vm().get_object(id).map(ObjectRef::from_vm_object)) + }) + }) + } + } + + /// i32::MAX is db + fn get_logicable_from_index_mut_gw( + &mut self, + device: i32, + connection: Option, + ) -> Option { + if device == i32::MAX { + // self + if let Some(connection) = connection { + self.connection_list().get(connection).and_then(|conn| { + if let Connection::CableNetwork { net: Some(net), .. } = conn { + self.get_vm() + .get_network(*net) + .map(ObjectRefMut::from_vm_object) + } else { + None + } + }) + } else { + Some(ObjectRefMut::from_ref(self.as_mut_object())) + } + } else { + if device < 0 { + return None; + } + self.device_pins().and_then(|pins| { + pins.get(device as usize).and_then(|pin| { + pin.and_then(|id| { + self.get_vm() + .get_object(id) + .map(ObjectRefMut::from_vm_object) + }) + }) + }) + } + } + + fn get_logicable_from_id_gw( + &self, + device: ObjectID, + connection: Option, + ) -> Option { + if connection.is_some() { + return None; // this functionality is disabled in the game, no network access via ReferenceId + } + if device == *self.get_id() { + return Some(ObjectRef::from_ref(self.as_object())); + } + self.get_vm() + .get_object(device) + .map(ObjectRef::from_vm_object) + } + + fn get_logicable_from_id_mut_gw( + &mut self, + device: ObjectID, + connection: Option, + ) -> Option { + if connection.is_some() { + return None; // this functionality is disabled in the game, no network access via ReferenceId + } + if device == *self.get_id() { + return Some(ObjectRefMut::from_ref(self.as_mut_object())); + } + self.get_vm() + .get_object(device) + .map(ObjectRefMut::from_vm_object) + } + + fn get_ic_gw(&self) -> Option { + self.get_slots() + .into_iter() + .find(|(_, slot)| slot.class == Class::ProgrammableChip) + .and_then(|(_, slot)| { + slot.occupant + .as_ref() + .and_then(|info| self.get_vm().get_object(info.id)) + }) + } + + fn halt_and_catch_fire_gw(&mut self) { + // TODO: do something here?? + } +} + +impl GWCircuitHolderWrapper for T +where + T: GWCircuitHolder + Suit + Object, +{ + fn clear_error_gw(&mut self) { + self.gw_set_error(0); + } + fn set_error_gw(&mut self, state: i32) { + self.gw_set_error(state); + } + + /// 0 -> Helmet + /// 1 -> BackPack + /// 2 -> ToolBelt + fn get_logicable_from_index_gw( + &self, + device: i32, + _connection: Option, + ) -> Option { + match device { + i32::MAX => Some(ObjectRef::from_ref(self.as_object())), + 0 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.helmet_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRef::from_vm_object) + }) + }) + }), + 1 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.backpack_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRef::from_vm_object) + }) + }) + }), + 2 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.toolbelt_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRef::from_vm_object) + }) + }) + }), + _ => None, + } + } + + /// i32::MAX is db + fn get_logicable_from_index_mut_gw( + &mut self, + device: i32, + _connection: Option, + ) -> Option { + match device { + i32::MAX => Some(ObjectRefMut::from_ref(self.as_mut_object())), + 0 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.helmet_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRefMut::from_vm_object) + }) + }) + }), + 1 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.backpack_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRefMut::from_vm_object) + }) + }) + }), + 2 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.toolbelt_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRefMut::from_vm_object) + }) + }) + }), + _ => None, + } + } + + fn get_logicable_from_id_gw( + &self, + device: ObjectID, + _connection: Option, + ) -> Option { + if device == *self.get_id() { + return Some(ObjectRef::from_ref(self.as_object())); + } + let contained_ids: Vec = self + .get_slots() + .into_iter() + .filter_map(|(_, slot)| slot.occupant.as_ref().map(|info| info.id)) + .collect(); + if contained_ids.contains(&device) { + self.get_vm() + .get_object(device) + .map(ObjectRef::from_vm_object) + } else { + None + } + } + + fn get_logicable_from_id_mut_gw( + &mut self, + device: ObjectID, + _connection: Option, + ) -> Option { + if device == *self.get_id() { + return Some(ObjectRefMut::from_ref(self.as_mut_object())); + } + let contained_ids: Vec = self + .get_slots() + .into_iter() + .filter_map(|(_, slot)| slot.occupant.as_ref().map(|info| info.id)) + .collect(); + if contained_ids.contains(&device) { + self.get_vm() + .get_object(device) + .map(ObjectRefMut::from_vm_object) + } else { + None + } + } + + fn get_ic_gw(&self) -> Option { + self.get_slots() + .into_iter() + .find(|(_, slot)| slot.class == Class::ProgrammableChip) + .and_then(|(_, slot)| { + slot.occupant + .as_ref() + .and_then(|info| self.get_vm().get_object(info.id)) + }) + } + + fn halt_and_catch_fire_gw(&mut self) { + // TODO: do something here?? + } +} + +impl GWCircuitHolderWrapper for T +where + T: GWCircuitHolder + Item + Object, +{ + fn clear_error_gw(&mut self) { + self.gw_set_error(0); + } + fn set_error_gw(&mut self, state: i32) { + self.gw_set_error(state); + } + + /// i32::MAX is db + /// 0 -> Helmet + /// 1 -> Suit + /// 2 -> BackPack + /// 3 -> ToolBelt + fn get_logicable_from_index_gw( + &self, + device: i32, + _connection: Option, + ) -> Option { + match device { + i32::MAX => Some(ObjectRef::from_ref(self.as_object())), + 0 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.helmet_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRef::from_vm_object) + }) + }) + }), + 1 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.suit_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRef::from_vm_object) + }) + }) + }), + 2 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.backpack_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRef::from_vm_object) + }) + }) + }), + 3 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.toolbelt_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRef::from_vm_object) + }) + }) + }), + _ => None, + } + } + + /// i32::MAX is db + /// 0 -> Helmet + /// 1 -> Suit + /// 2 -> BackPack + /// 3 -> ToolBelt + fn get_logicable_from_index_mut_gw( + &mut self, + device: i32, + _connection: Option, + ) -> Option { + match device { + i32::MAX => Some(ObjectRefMut::from_ref(self.as_mut_object())), + 0 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.helmet_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRefMut::from_vm_object) + }) + }) + }), + 1 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.suit_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRefMut::from_vm_object) + }) + }) + }), + 2 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.backpack_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRefMut::from_vm_object) + }) + }) + }), + 3 => self.root_parent_human().and_then(|obj| { + obj.borrow().as_human().and_then(|human| { + human.toolbelt_slot().occupant.as_ref().and_then(|info| { + self.get_vm() + .get_object(info.id) + .map(ObjectRefMut::from_vm_object) + }) + }) + }), + _ => None, + } + } + + fn get_logicable_from_id_gw( + &self, + device: ObjectID, + _connection: Option, + ) -> Option { + if device == *self.get_id() { + return Some(ObjectRef::from_ref(self.as_object())); + } + let contained_ids: Vec = self + .get_slots() + .into_iter() + .filter_map(|(_, slot)| slot.occupant.as_ref().map(|info| info.id)) + .collect(); + if contained_ids.contains(&device) { + self.get_vm() + .get_object(device) + .map(ObjectRef::from_vm_object) + } else { + None + } + } + + fn get_logicable_from_id_mut_gw( + &mut self, + device: ObjectID, + _connection: Option, + ) -> Option { + if device == *self.get_id() { + return Some(ObjectRefMut::from_ref(self.as_mut_object())); + } + let contained_ids: Vec = self + .get_slots() + .into_iter() + .filter_map(|(_, slot)| slot.occupant.as_ref().map(|info| info.id)) + .collect(); + if contained_ids.contains(&device) { + self.get_vm() + .get_object(device) + .map(ObjectRefMut::from_vm_object) + } else { + None + } + } + + fn get_ic_gw(&self) -> Option { + self.get_slots() + .into_iter() + .find(|(_, slot)| slot.class == Class::ProgrammableChip) + .and_then(|(_, slot)| { + slot.occupant + .as_ref() + .and_then(|info| self.get_vm().get_object(info.id)) + }) + } + + fn halt_and_catch_fire_gw(&mut self) { + // TODO: do something here?? + } +} + +pub trait GWReagentConsumer { + fn consumer_info(&self) -> &ConsumerInfo; +} + +impl ReagentConsumer for T { + fn debug_reagent_consumer(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "") // TODO: implement + } + fn get_resources_used(&self) -> Vec { + let info = self.consumer_info(); + let vm = self.get_vm(); + info.consumed_resources + .iter() + .filter_map(|resource| { + let prefab = vm.lookup_template_by_name(resource); + prefab.map(|prefab| prefab.prefab().prefab_hash) + }) + .collect_vec() + } + fn can_process_reagent(&self, reagent_id: u8) -> bool { + let info = self.consumer_info(); + let vm = self.get_vm(); + let processed = info + .processed_reagents + .iter() + .filter_map(|reagent_hash| vm.lookup_reagent_by_hash(*reagent_hash)) + .collect_vec(); + processed + .iter() + .find(|reagent| reagent.id == reagent_id) + .is_some() + } +} + +pub trait GWReagentRequirer: Device { + fn get_current_recipe_gw(&self) -> Option<(u32, u32)>; + fn get_fab_info_gw(&self) -> Option<&FabricatorInfo>; +} + +impl ReagentRequirer for T { + fn debug_reagent_requirer(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!( + f, + "current: {:?}, required: {:?}", + self.get_current_recipe(), + self.get_current_required() + ) + } + fn get_current_recipe(&self) -> Option { + if let Some((current, quantity)) = self.get_current_recipe_gw() { + let info = self.get_fab_info_gw(); + let recipe = info.and_then(|info| info.recipes.get(current as usize)); + recipe.map(|recipe| RecipeOrder { + recipe: recipe.clone(), + quantity, + }) + } else { + return None; + } + } + fn get_current_required(&self) -> Vec<(u8, f64)> { + let current = self.get_current_recipe(); + let vm = self.get_vm(); + let have = self.get_reagents(); + let needed = current.map_or_else(std::default::Default::default, |current| { + current + .recipe + .reagents + .iter() + .filter_map(|(reagent_name, reagent_quantity)| { + if let Some(reagent) = vm.lookup_reagent_by_name(&reagent_name) { + if let Some((_id, have_quantity)) = have + .iter() + .find(|(id, quantity)| &reagent.id == id && quantity < reagent_quantity) + { + Some((reagent.id, reagent_quantity - have_quantity)) + } else { + None + } + } else { + None + } + }) + .collect_vec() + }); + needed + } + fn get_prefab_hash_from_reagent_hash(&self, reagent_hash: i32) -> Option { + let vm = self.get_vm(); + let reagent = vm.lookup_reagent_by_hash(reagent_hash); + reagent.and_then(|reagent| { + reagent + .sources + .iter() + .find(|(source_prefab, _quant)| source_prefab.contains("Ingot")) + .map(|(prefab, _quant)| { + vm.lookup_template_by_name(prefab) + .map(|template| template.prefab().prefab_hash) + }) + .flatten() + }) + } +} + +pub trait GWFabricator: ReagentRequirer { + fn is_fabricator(&self) -> bool; + fn fabricator_info(&self) -> &FabricatorInfo; +} + +impl Fabricator for T { + fn debug_fabricator(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") // TODO: implement + } +} diff --git a/ic10emu/src/vm/object/humans.rs b/ic10emu/src/vm/object/humans.rs new file mode 100644 index 0000000..e75e05a --- /dev/null +++ b/ic10emu/src/vm/object/humans.rs @@ -0,0 +1,423 @@ +use std::collections::BTreeMap; + +use macro_rules_attribute::derive; +use stationeers_data::enums::{basic::Class, Species}; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; + +use crate::vm::{ + object::{ + macros::ObjectInterface, + traits::{ + Human, HumanRef, HumanRefMut, Object, StatState, Storage, StorageRef, StorageRefMut, + Thermal, + }, + Name, ObjectID, Slot, SlotOccupantInfo, + }, + VM, +}; + +static MAX_NUTRITION: f32 = 50.0; +// static FULL_NUTRITION: f32 = 45.0; +static WARNING_NUTRITION: f32 = 15.0; +static CRITICAL_NUTRITION: f32 = 5.0; + +static MAX_HYDRATION: f32 = 8.75; +static WARNING_HYDRATION: f32 = 2.0; +static CRITICAL_HYDRATION: f32 = 1.0; + +static MAX_OXYGENATION: f32 = 0.024; + +static MAX_FOOD_QUALITY: f32 = 1.0; + +static MAX_MOOD: f32 = 1.0; +static WARNING_MOOD: f32 = 0.5; +static CRITICAL_MOOD: f32 = 0.0; + +static MAX_HYGIENE: f32 = 1.25; +static WARNING_HYGIENE: f32 = 0.25; +static CRITICAL_HYGIENE: f32 = 0.0; + +use serde_derive::{Deserialize, Serialize}; + +#[derive(ObjectInterface!)] +#[custom(implements(Object { + Human, Storage +}))] +pub struct HumanPlayer { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: std::rc::Rc, + + pub species: Species, + + pub damage: f32, + pub hydration: f32, + pub nutrition: f32, + pub oxygenation: f32, + pub food_quality: f32, + pub mood: f32, + pub hygiene: f32, + + left_hand_slot: Slot, + right_hand_slot: Slot, + suit_slot: Slot, + helmet_slot: Slot, + glasses_slot: Slot, + backpack_slot: Slot, + uniform_slot: Slot, + toolbelt_slot: Slot, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct EntityInfo { + pub hydration: f32, + pub nutrition: f32, + pub oxygenation: f32, + pub food_quality: f32, + pub mood: f32, + pub hygiene: f32, +} + +impl HumanPlayer { + pub fn new(id: ObjectID, vm: std::rc::Rc) -> Self { + HumanPlayer { + id, + prefab: Name::new(""), + name: Name::new(""), + vm, + species: Species::Human, + damage: 0.0, + hydration: 5.0, + nutrition: 50.0, + oxygenation: 0.024, + food_quality: 0.75, + mood: 1.0, + hygiene: 1.0, + left_hand_slot: Slot::new(id, 0, "LeftHand".to_string(), Class::None), + right_hand_slot: Slot::new(id, 1, "RightHand".to_string(), Class::None), + suit_slot: Slot::new(id, 2, "Suit".to_string(), Class::Suit), + helmet_slot: Slot::new(id, 3, "Helmet".to_string(), Class::Helmet), + glasses_slot: Slot::new(id, 4, "Glasses".to_string(), Class::Glasses), + backpack_slot: Slot::new(id, 5, "Back".to_string(), Class::Back), + uniform_slot: Slot::new(id, 6, "Uniform".to_string(), Class::Uniform), + toolbelt_slot: Slot::new(id, 7, "Belt".to_string(), Class::Belt), + } + } + pub fn with_species(id: ObjectID, vm: std::rc::Rc, species: Species) -> Self { + let uniform_slot = if species == Species::Robot { + Slot::new(id, 6, "Battery".to_string(), Class::Battery) + } else { + Slot::new(id, 6, "Uniform".to_string(), Class::Uniform) + }; + HumanPlayer { + id, + prefab: Name::new(""), + name: Name::new(""), + vm, + species, + damage: 0.0, + hydration: 5.0, + nutrition: 50.0, + oxygenation: 0.024, + food_quality: 0.75, + mood: 1.0, + hygiene: 1.0, + left_hand_slot: Slot::new(id, 0, "LeftHand".to_string(), Class::None), + right_hand_slot: Slot::new(id, 1, "RightHand".to_string(), Class::None), + suit_slot: Slot::new(id, 2, "Suit".to_string(), Class::Suit), + helmet_slot: Slot::new(id, 3, "Helmet".to_string(), Class::Helmet), + glasses_slot: Slot::new(id, 4, "Glasses".to_string(), Class::Glasses), + backpack_slot: Slot::new(id, 5, "Back".to_string(), Class::Back), + uniform_slot, + toolbelt_slot: Slot::new(id, 7, "Belt".to_string(), Class::Belt), + } + } + + pub fn update_entity_info(&mut self, info: &EntityInfo) { + self.hydration = info.hydration; + self.nutrition = info.nutrition; + self.oxygenation = info.oxygenation; + self.food_quality = info.food_quality; + self.mood = info.mood; + self.hygiene = info.hygiene; + } + + pub fn update_slots_from_info(&mut self, info: &BTreeMap) { + for (index, slot_info) in info { + match index { + 0 => { + self.left_hand_slot.occupant.replace(slot_info.clone()); + } + 1 => { + self.right_hand_slot.occupant.replace(slot_info.clone()); + } + 2 => { + self.helmet_slot.occupant.replace(slot_info.clone()); + } + 3 => { + self.suit_slot.occupant.replace(slot_info.clone()); + } + 4 => { + self.backpack_slot.occupant.replace(slot_info.clone()); + } + 5 => { + self.uniform_slot.occupant.replace(slot_info.clone()); + } + 6 => { + self.toolbelt_slot.occupant.replace(slot_info.clone()); + } + 7 => { + self.glasses_slot.occupant.replace(slot_info.clone()); + } + _ => {} + } + } + } +} + +impl Thermal for HumanPlayer { + fn get_radiation_factor(&self) -> f32 { + 0.1 + } + fn get_convection_factor(&self) -> f32 { + 0.1 + } + fn debug_thermal(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!( + f, + "radiation: {}, convection: {}", + self.get_radiation_factor(), + self.get_convection_factor() + ) + } +} + +impl Storage for HumanPlayer { + fn debug_storage(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "slots: {:?}", self.get_slots()) + } + fn get_slots(&self) -> Vec<(usize, &Slot)> { + vec![ + (0, &self.left_hand_slot), + (1, &self.right_hand_slot), + (2, &self.helmet_slot), + (3, &self.suit_slot), + (4, &self.backpack_slot), + (5, &self.uniform_slot), + (6, &self.toolbelt_slot), + (7, &self.glasses_slot), + ] + } + + fn get_slots_mut(&mut self) -> Vec<(usize, &mut Slot)> { + vec![ + (0, &mut self.left_hand_slot), + (1, &mut self.right_hand_slot), + (2, &mut self.helmet_slot), + (3, &mut self.suit_slot), + (4, &mut self.backpack_slot), + (5, &mut self.uniform_slot), + (6, &mut self.toolbelt_slot), + (7, &mut self.glasses_slot), + ] + } + + fn slots_count(&self) -> usize { + 8 + } + + fn get_slot(&self, index: usize) -> Option<&Slot> { + match index { + 0 => Some(&self.left_hand_slot), + 1 => Some(&self.right_hand_slot), + 2 => Some(&self.helmet_slot), + 3 => Some(&self.suit_slot), + 4 => Some(&self.backpack_slot), + 5 => Some(&self.uniform_slot), + 6 => Some(&self.toolbelt_slot), + 7 => Some(&self.glasses_slot), + _ => None, + } + } + fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { + match index { + 0 => Some(&mut self.left_hand_slot), + 1 => Some(&mut self.right_hand_slot), + 2 => Some(&mut self.helmet_slot), + 3 => Some(&mut self.suit_slot), + 4 => Some(&mut self.backpack_slot), + 5 => Some(&mut self.uniform_slot), + 6 => Some(&mut self.toolbelt_slot), + 7 => Some(&mut self.glasses_slot), + _ => None, + } + } +} + +impl Human for HumanPlayer { + fn debug_human(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "species: {:?}, damage: {}, hydration: {}, nutrition:, {}, oxygenation: {}, food_quality: {}, mood: {}, hygiene: {}, artificial: {}, battery: {:?}", + self.get_species(), + self.get_damage(), + self.get_hydration(), + self.get_nutrition(), + self.get_oxygenation(), + self.get_food_quality(), + self.get_mood(), + self.get_hygiene(), + self.is_artificial(), + self.robot_battery() + ) + } + fn get_species(&self) -> Species { + self.species + } + fn get_damage(&self) -> f32 { + self.damage + } + fn set_damage(&mut self, damage: f32) { + self.damage = damage; + } + fn get_hydration(&self) -> f32 { + self.hydration + } + fn set_hydration(&mut self, hydration: f32) { + self.hydration = hydration.clamp(0.0, MAX_HYDRATION); + } + fn hydration_state(&self) -> super::traits::StatState { + if self.hydration < CRITICAL_HYDRATION { + return StatState::Critical; + } + if self.hydration < WARNING_HYDRATION { + return StatState::Warning; + } + StatState::Normal + } + fn get_nutrition(&self) -> f32 { + self.nutrition + } + fn set_nutrition(&mut self, nutrition: f32) { + self.nutrition = nutrition.clamp(0.0, MAX_NUTRITION); + } + fn nutrition_state(&self) -> StatState { + if self.nutrition < CRITICAL_NUTRITION { + return StatState::Critical; + } + if self.nutrition < WARNING_NUTRITION { + return StatState::Warning; + } + StatState::Normal + } + fn get_oxygenation(&self) -> f32 { + self.oxygenation + } + fn set_oxygenation(&mut self, oxygenation: f32) { + self.oxygenation = oxygenation.clamp(0.0, MAX_OXYGENATION); + } + fn get_food_quality(&self) -> f32 { + self.food_quality + } + fn set_food_quality(&mut self, quality: f32) { + self.food_quality = quality.clamp(0.0, MAX_FOOD_QUALITY); + } + fn get_mood(&self) -> f32 { + self.mood + } + fn set_mood(&mut self, mood: f32) { + self.mood = mood.clamp(0.0, MAX_MOOD); + } + fn mood_state(&self) -> StatState { + if self.mood < CRITICAL_MOOD { + return StatState::Critical; + } + if self.mood < WARNING_MOOD { + return StatState::Warning; + } + StatState::Normal + } + fn get_hygiene(&self) -> f32 { + self.hygiene + } + fn set_hygiene(&mut self, hygiene: f32) { + self.hygiene = hygiene.clamp(0.0, MAX_HYGIENE); + } + fn hygiene_state(&self) -> StatState { + if self.hygiene < CRITICAL_HYGIENE { + return StatState::Critical; + } + if self.hygiene < WARNING_HYGIENE { + return StatState::Warning; + } + StatState::Normal + } + fn is_artificial(&self) -> bool { + self.species == Species::Robot + } + fn robot_battery(&self) -> Option { + if self.species != Species::Robot { + return None; + } + + self.uniform_slot() + .occupant + .as_ref() + .and_then(|info| self.vm.get_object(info.id)) + } + fn suit_slot(&self) -> &Slot { + &self.suit_slot + } + fn suit_slot_mut(&mut self) -> &mut Slot { + &mut self.suit_slot + } + fn helmet_slot(&self) -> &Slot { + &self.helmet_slot + } + fn helmet_slot_mut(&mut self) -> &mut Slot { + &mut self.helmet_slot + } + fn glasses_slot(&self) -> &Slot { + &self.glasses_slot + } + fn glasses_slot_mut(&mut self) -> &mut Slot { + &mut self.glasses_slot + } + fn backpack_slot(&self) -> &Slot { + &self.backpack_slot + } + fn backpack_slot_mut(&mut self) -> &mut Slot { + &mut self.backpack_slot + } + fn uniform_slot(&self) -> &Slot { + &self.uniform_slot + } + fn uniform_slot_mut(&mut self) -> &mut Slot { + &mut self.uniform_slot + } + fn toolbelt_slot(&self) -> &Slot { + &self.toolbelt_slot + } + fn toolbelt_slot_mut(&mut self) -> &mut Slot { + &mut self.toolbelt_slot + } + fn left_hand_slot(&self) -> &Slot { + &self.left_hand_slot + } + fn left_hand_slot_mut(&mut self) -> &mut Slot { + &mut self.left_hand_slot + } + fn right_hand_slot(&self) -> &Slot { + &self.right_hand_slot + } + fn right_hand_slot_mut(&mut self) -> &mut Slot { + &mut self.right_hand_slot + } +} diff --git a/ic10emu/src/vm/object/macros.rs b/ic10emu/src/vm/object/macros.rs new file mode 100644 index 0000000..83ed733 --- /dev/null +++ b/ic10emu/src/vm/object/macros.rs @@ -0,0 +1,594 @@ +macro_rules! object_trait { + (@intf {$trt:ident}) => { + paste::paste! { + #[allow(missing_docs, unused)] + pub type [<$trt Ref>]<'a> = &'a dyn $trt; + #[allow(missing_docs, unused)] + pub type [<$trt RefMut>]<'a> = &'a mut dyn $trt; + } + }; + (@body $trait_name:ident { $($trt:ident),* }; ) => { + fn get_id(&self) -> &crate::vm::object::ObjectID; + fn set_id(&mut self, id: crate::vm::object::ObjectID); + fn get_prefab(&self) -> &crate::vm::object::Name; + fn get_mut_prefab(&mut self) -> &mut crate::vm::object::Name; + fn get_name(&self) -> &crate::vm::object::Name; + fn get_mut_name(&mut self) -> &mut crate::vm::object::Name; + fn get_vm(&self) -> &std::rc::Rc; + fn set_vm(&mut self, vm: std::rc::Rc); + fn type_name(&self) -> &str; + fn as_object(&self) -> &dyn $trait_name; + fn as_mut_object(&mut self) -> &mut dyn $trait_name; + + paste::paste! { + $( + #[doc = "Return a `& dyn " $trt "` if implemented by the object"] + #[inline(always)] + fn [](&self) -> Option<[<$trt Ref>]> { + None + } + + #[doc = "Return a `&mut dyn " $trt "` if implemented by the object"] + #[inline(always)] + fn [](&mut self) -> Option<[<$trt RefMut>]> { + None + } + )* + } + }; + (@intf_struct $trait_name:ident { $($trt:ident),* };) => { + paste::paste! { + pub struct [<$trait_name Interfaces>]<'a> { + $( + pub [<$trt:snake>]: Option<[<$trt Ref>]<'a>>, + )* + } + + impl<'a> [<$trait_name Interfaces>]<'a> { + + pub fn [](obj: &'a dyn $trait_name) -> [<$trait_name Interfaces>]<'a> { + [<$trait_name Interfaces>] { + $( + [<$trt:snake>]: obj.[](), + )* + } + } + } + + impl<'a> Debug for [<$trait_name Interfaces>]<'a> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + $( + write!(f, "{}: {:?}, ", stringify!([<$trt:snake>]), &self.[<$trt:snake>])?; + )* + write!(f, "") + } + } + + pub enum [<$trait_name Ref>]<'a> { + DynRef(&'a dyn $trait_name), + VMObject(crate::vm::object::VMObject), + } + + impl<'a> [<$trait_name Ref>]<'a> { + pub fn from_ref(reference: &'a dyn $trait_name) -> Self { + Self::DynRef(reference) + } + pub fn from_vm_object(obj: crate::vm::object::VMObject) -> Self { + Self::VMObject(obj) + } + pub fn get_id(&self) -> u32 { + match self { + Self::DynRef(reference) => *reference.get_id(), + Self::VMObject(obj) => *obj.borrow().get_id(), + + } + } + /// call func on the dyn reference or a borrow of the vm object + pub fn map(&self, mut func: F ) -> R + where + F: std::ops::FnMut(& dyn $trait_name) -> R + { + match self { + Self::DynRef(reference) => func(*reference), + Self::VMObject(obj) => { + let obj_ref = obj.borrow(); + func(&*obj_ref) + } + } + } + } + + pub enum [<$trait_name RefMut>]<'a> { + DynRef(&'a mut dyn $trait_name), + VMObject(crate::vm::object::VMObject), + } + + impl<'a> [<$trait_name RefMut>]<'a> { + pub fn from_ref(reference: &'a mut dyn $trait_name) -> Self { + Self::DynRef(reference) + } + pub fn from_vm_object(obj: crate::vm::object::VMObject) -> Self { + Self::VMObject(obj) + } + pub fn get_id(&self) -> u32 { + match self { + Self::DynRef(reference) => *reference.get_id(), + Self::VMObject(obj) => *obj.borrow().get_id(), + + } + } + /// call func on the dyn reference or a borrow of the vm object + pub fn map(&mut self, mut func: F ) -> R + where + F: std::ops::FnMut(&mut dyn $trait_name) -> R + { + match self { + Self::DynRef(reference) => func(*reference), + Self::VMObject(obj) => { + let mut obj_ref = obj.borrow_mut(); + func(&mut *obj_ref) + } + } + } + } + + } + }; + ( $trait_name:ident $(: $($bound:tt)* )? {$($trt:ident),*}) => { + $( + $crate::vm::object::macros::object_trait!{@intf {$trt}} + )* + + + #[doc = concat!("Generated with: ", stringify!($($trt),*))] + pub trait $trait_name $(: $($bound)* )? { + + $crate::vm::object::macros::object_trait!{@body $trait_name {$($trt),*}; } + } + + $crate::vm::object::macros::object_trait!{@intf_struct $trait_name {$($trt),*}; } + }; +} + +pub(crate) use object_trait; + +/// use macro_rules_attribute::derive to apply this macro to a struct +/// +/// use `#[custom(object_id)]`, `#[custom(object_prefab)]`, `#[custom(object_name)]`, and `#[custom(object_vm_ref)]` +/// to tag struct fields appropriately +/// +/// the tags for `id`, `prefab`, and `name` may appear in any order but `vm_ref` must come last +/// +/// - `id` must be `crate::vm::object::ObjectID` +/// - `prefab` and `name` must be `crate::vm::object::Name` +/// - `vm_ref` must be `std::rc::Rc` +macro_rules! ObjectInterface { + { + @trt_cond_impl $trt:path => $trt_cond:path + } => { + paste::paste!{ + #[inline(always)] + fn [](&self) -> Option<[<$trt Ref>]> { + if $trt_cond(self) { + Some(self) + } else { + None + } + } + + #[inline(always)] + fn [](&mut self) -> Option<[<$trt RefMut>]> { + if $trt_cond(self) { + Some(self) + } else { + None + } + } + } + }; + { + @trt_cond_impl $trt:path + } => { + paste::paste!{ + #[inline(always)] + fn [](&self) -> Option<[<$trt Ref>]> { + Some(self) + } + + #[inline(always)] + fn [](&mut self) -> Option<[<$trt RefMut>]> { + Some(self) + } + } + + }; + { + @body_final + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @id $id_field:ident: $id_typ:ty; + @prefab $prefab_field:ident: $prefab_typ:ty; + @name $name_field:ident: $name_typ:ty; + @vm_ref $vm_ref_field:ident: $vm_ref_typ:ty; + } => { + impl $trait_name for $struct { + + fn get_id(&self) -> &crate::vm::object::ObjectID { + &self.$id_field + } + + fn set_id(&mut self, id: crate::vm::object::ObjectID) { + self.$id_field = id; + } + + fn get_prefab(&self) -> &$prefab_typ { + &self.$prefab_field + } + + fn get_mut_prefab(&mut self) -> &mut $prefab_typ { + &mut self.$prefab_field + } + + fn get_name(&self) -> &$name_typ { + &self.$name_field + } + + fn get_mut_name(&mut self) -> &mut $name_typ { + &mut self.$name_field + } + + fn get_vm(&self) -> &std::rc::Rc { + &self.$vm_ref_field + } + + fn set_vm(&mut self, vm: std::rc::Rc) { + self.$vm_ref_field = vm; + } + + fn type_name(&self) -> &str { + std::any::type_name::() + } + + #[inline(always)] + fn as_object(&self) -> &dyn $trait_name { + self + } + + #[inline(always)] + fn as_mut_object(&mut self) -> &mut dyn $trait_name { + self + } + + $( + $crate::vm::object::macros::ObjectInterface!{@trt_cond_impl $trt $( => $trt_cond)? } + )* + + } + }; + { + @body_final + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @id $id_field:ident: $id_typ:ty; + @name $name_field:ident: $name_typ:ty; + @prefab $prefab_field:ident: $prefab_typ:ty; + @vm_ref $vm_ref_field:ident: $vm_ref_typ:ty; + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_final + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + @vm_ref $vm_ref_field: $vm_ref_typ; + } + }; + { + @body_final + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @prefab $prefab_field:ident: $prefab_typ:ty; + @name $name_field:ident: $name_typ:ty; + @id $id_field:ident: $id_typ:ty; + @vm_ref $vm_ref_field:ident: $vm_ref_typ:ty; + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_final + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + @vm_ref $vm_ref_field: $vm_ref_typ; + } + }; + { + @body_final + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @prefab $prefab_field:ident: $prefab_typ:ty; + @id $id_field:ident: $id_typ:ty; + @name $name_field:ident: $name_typ:ty; + @vm_ref $vm_ref_field:ident: $vm_ref_typ:ty; + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_final + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + @vm_ref $vm_ref_field: $vm_ref_typ; + } + }; + { + @body_final + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @name $name_field:ident: $name_typ:ty; + @prefab $prefab_field:ident: $prefab_typ:ty; + @id $id_field:ident: $id_typ:ty; + @vm_ref $vm_ref_field:ident: $vm_ref_typ:ty; + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_final + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + @vm_ref $vm_ref_field: $vm_ref_typ; + } + }; + { + @body_final + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @name $name_field:ident: $name_typ:ty; + @id $id_field:ident: $id_typ:ty; + @prefab $prefab_field:ident: $prefab_typ:ty; + @vm_ref $vm_ref_field:ident: $vm_ref_typ:ty; + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_final + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @id $id_field: $id_typ; + @prefab $prefab_field: $prefab_typ; + @name $name_field: $name_typ; + @vm_ref $vm_ref_field: $vm_ref_typ; + } + };{ + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @tags { + $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* + }; + #[custom(object_vm_ref)] + $(#[$vm_ref_attr:meta])* + $vm_ref_viz:vis $vm_ref_field:ident: $vm_ref_typ:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @tags {$(@$tag $tag_field: $tag_typ;)* @vm_ref $vm_ref_field: $vm_ref_typ;}; + $( $rest )* + } + }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @tags { + $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* + }; + #[custom(object_name)] + $(#[$name_attr:meta])* + $name_viz:vis $name_field:ident: $name_typ:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @tags {$(@$tag $tag_field: $tag_typ;)* @name $name_field: $name_typ;}; + $( $rest )* + } + }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @tags { + $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* + }; + #[custom(object_prefab)] + $(#[$prefab_attr:meta])* + $prefab_viz:vis $prefab_field:ident: $prefab_typ:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @tags {$(@$tag $tag_field: $tag_typ;)* @prefab $prefab_field: $prefab_typ;}; + $( $rest )* + } + }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @tags { + $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* + }; + #[custom(object_id)] + $(#[$id_attr:meta])* + $id_viz:vis $id_field:ident: $id_typ:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @tags {$(@$tag $tag_field: $tag_typ;)* @id $id_field: $id_typ;}; + $( $rest )* + } + }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @tags { + $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* + }; + $(#[$field:meta])* + $field_viz:vis + $field_name:ident : $field_ty:ty, + $( $rest:tt )* + + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @tags {$(@$tag $tag_field: $tag_typ;)*}; + $( $rest )* + } + }; + { + @body + @trt $trait_name:ident; $struct:ident; + @impls $($trt:path $([ $trt_cond:path ])?),*; + @tags { + $(@$tag:tt $tag_field:ident: $tag_typ:ty;)* + }; + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body_final + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + $( + @$tag $tag_field: $tag_typ; + )* + } + }; + { + #[custom(implements($trait_name:ident {$($trt:path $([$trt_cond:path])?),*}))] + $( #[$attr:meta] )* + $viz:vis struct $struct:ident { + $( $body:tt )* + } + } => { + $crate::vm::object::macros::ObjectInterface!{ + @body + @trt $trait_name; $struct; + @impls $($trt $([ $trt_cond ])?),*; + @tags {}; + $( $body )* + } + }; +} +pub(crate) use ObjectInterface; + +#[allow(unused_macros)] +macro_rules! ObjectTrait { + { + #[custom(object_trait = $trait_name:ident)] + $(#[$attr:meta])* + $viz:vis trait $trt:ident $(: $($bound:tt)* )? { + $($tbody:tt)* + } + } => { + $(#[$attr])* + $viz trait $trt: $($($bound)* +)? $trait_name { + $($tbody)* + } + + }; +} +#[allow(unused_imports)] +pub(crate) use ObjectTrait; + +macro_rules! tag_object_traits { + { + @tag + tag=$trt_name:ident $(: $($obj_bound:tt)* )?; + acc={ $($tagged_trt:ident,)* }; + $(#[$attr:meta])* + $viz:vis trait $trt:ident $(: $trt_bound_first:tt $(+ $trt_bound_others:tt)* )? { + $($tbody:tt)* + } + $($used:tt)* + } => { + #[doc = concat!("Autotagged with ", stringify!($trt_name))] + $(#[$attr])* + $viz trait $trt : $( $trt_bound_first $(+ $trt_bound_others)* +)? $trt_name { + $($tbody)* + paste::paste! { + fn [](&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result; + } + } + + impl<'a> Debug for dyn $trt + 'a { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "{}{{", stringify!($trt))?; + + paste::paste! { + self.[](f)?; + } + write!(f, "}}") + } + } + + $crate::vm::object::macros::tag_object_traits!{ + @tag + tag=$trt_name $(: $($obj_bound)* )?; + acc={ $($tagged_trt,)* $trt, }; + $($used)* + } + }; + { + @tag + tag=$trt_name:ident $(: $($obj_bound:tt)* )?; + acc={ $($tagged_trt:ident,)* }; + impl $name:ident for $trt:path { + $($body:tt)* + } + $($used:tt)* + } => { + /// Untouched by tag macro + impl $name for $trt { + $($body)* + } + $crate::vm::object::macros::tag_object_traits!{ + @tag + tag=$trt_name $(: $($obj_bound)* )?; + acc={ $($tagged_trt,)* }; + $($used)* + } + }; + { + @tag + tag=$trt_name:ident $(: $($obj_bound:tt)* )?; + acc={ $($tagged_trt:ident,)* }; + } => { + + // end tagged traits {$trt_name} + + $crate::vm::object::macros::object_trait!($trt_name $(: $($obj_bound)* )? { $($tagged_trt),* }); + }; + { #![object_trait($trt_name:ident $(: $($bound:tt)* )? )] $($tree:tt)* } => { + $crate::vm::object::macros::tag_object_traits!{ @tag tag=$trt_name; acc={}; $($tree)* } + }; +} + +pub(crate) use tag_object_traits; diff --git a/ic10emu/src/vm/object/stationpedia.rs b/ic10emu/src/vm/object/stationpedia.rs new file mode 100644 index 0000000..38245ab --- /dev/null +++ b/ic10emu/src/vm/object/stationpedia.rs @@ -0,0 +1,152 @@ +use std::rc::Rc; + +use stationeers_data::{enums::prefabs::StationpediaPrefab, templates::ObjectTemplate}; + +use crate::{ + errors::TemplateError, + vm::object::{ + templates::{ObjectInfo, Prefab}, + Name, VMObject, + }, +}; +use crate::{ + interpreter::Program, + vm::{object::LogicField, VM}, +}; +use strum::EnumProperty; + +use super::ObjectID; + +pub mod structs; + +#[allow(unused)] +pub fn object_from_frozen( + obj: &ObjectInfo, + id: ObjectID, + vm: &Rc, +) -> Result, TemplateError> { + #[allow(clippy::cast_possible_wrap)] + let Some(hash) = obj + .prefab + .as_ref() + .map(|name| const_crc32::crc32(name.as_bytes()) as i32) + else { + return Ok(None); + }; + + let prefab = StationpediaPrefab::from_repr(hash); + #[allow(clippy::match_single_binding)] + match prefab { + Some(prefab @ StationpediaPrefab::ItemIntegratedCircuit10) => { + let template = vm + .get_template(Prefab::Hash(hash)) + .ok_or(TemplateError::NoTemplateForPrefab(Prefab::Hash(hash)))?; + let ObjectTemplate::ItemLogicMemory(template) = template else { + return Err(TemplateError::IncorrectTemplate( + "ItemIntegratedCircuit10".to_string(), + Prefab::Name("ItemIntegratedCircuit10".to_string()), + template, + )); + }; + + Ok(Some(VMObject::new(structs::ItemIntegratedCircuit10 { + id, + vm: vm.clone(), + name: Name::new( + &(obj + .name + .clone() + .unwrap_or_else(|| prefab.get_str("name").unwrap().to_string())), + ), + prefab: Name::from_prefab_name(prefab.as_ref()), + fields: template + .logic + .logic_types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: obj + .logic_values + .as_ref() + .and_then(|values| values.get(key)) + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect(), + memory: obj + .memory + .clone() + .map(TryInto::try_into) + .transpose() + .map_err(|vec: Vec| TemplateError::MemorySize(vec.len(), 512))? + .unwrap_or([0.0f64; 512]), + parent_slot: None, + registers: obj + .circuit + .as_ref() + .map(|circuit| circuit.registers.clone().try_into()) + .transpose() + .map_err(|vec: Vec| TemplateError::MemorySize(vec.len(), 18))? + .unwrap_or([0.0f64; 18]), + ip: obj + .circuit + .as_ref() + .map(|circuit| circuit.instruction_pointer as usize) + .unwrap_or(0), + next_ip: 0, + ic: obj + .circuit + .as_ref() + .map(|circuit| circuit.yield_instruction_count) + .unwrap_or(0), + aliases: obj + .circuit + .as_ref() + .map(|circuit| circuit.aliases.clone()) + .unwrap_or_default(), + defines: obj + .circuit + .as_ref() + .map(|circuit| circuit.defines.clone()) + .unwrap_or_default(), + pins: obj + .device_pins + .as_ref() + .map(|pins| { + (0..6) + .map(|index| pins.get(&index).copied()) + .collect::>() + .try_into() + .unwrap() // fixed sized iterator into array should not panic + }) + .unwrap_or_default(), + state: obj + .circuit + .as_ref() + .map(|circuit| circuit.state.clone()) + .unwrap_or(crate::interpreter::ICState::Start), + code: obj.source_code.clone().unwrap_or_default(), + damage: obj.damage.unwrap_or(0.0), + program: obj + .source_code + .as_ref() + .map(|code| { + if code.is_empty() { + Program::default() + } else { + Program::from_code_with_invalid(code) + } + }) + .unwrap_or_default(), + }))) + } + // Some(StationpediaPrefab::StructureCircuitHousing) => Some() + // Some(StationpediaPrefab::StructureRocketCircuitHousing) => Some() + _ => Ok(None), + } +} diff --git a/ic10emu/src/vm/object/stationpedia/structs.rs b/ic10emu/src/vm/object/stationpedia/structs.rs new file mode 100644 index 0000000..74f769d --- /dev/null +++ b/ic10emu/src/vm/object/stationpedia/structs.rs @@ -0,0 +1,4 @@ +mod circuit_holder; +mod integrated_circuit; + +pub use integrated_circuit::ItemIntegratedCircuit10; diff --git a/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs new file mode 100644 index 0000000..5ecb540 --- /dev/null +++ b/ic10emu/src/vm/object/stationpedia/structs/circuit_holder.rs @@ -0,0 +1,450 @@ +use crate::{ + network::{CableConnectionType, Connection}, + vm::{ + object::{ + errors::LogicError, macros::ObjectInterface, traits::*, Name, ObjectID, Slot, VMObject, + }, + VM, + }, +}; +use macro_rules_attribute::derive; +use stationeers_data::enums::{ + basic::Class, + prefabs::StationpediaPrefab, + script::{LogicSlotType, LogicType}, + ConnectionRole, +}; +use std::{collections::BTreeMap, rc::Rc}; +use strum::EnumProperty; + +#[derive(ObjectInterface!)] +#[custom(implements(Object { Structure, Device, Storage, Logicable, CircuitHolder }))] +pub struct StructureCircuitHousing { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub error: i32, + pub on: bool, + pub setting: f64, + pub slot: Slot, + pub pins: [Option; 6], + pub connections: [crate::network::Connection; 2], +} + +#[allow(dead_code)] +impl StructureCircuitHousing { + pub fn new(id: ObjectID, vm: Rc) -> Self { + StructureCircuitHousing { + id, + prefab: Name { + value: StationpediaPrefab::StructureCircuitHousing.to_string(), + hash: StationpediaPrefab::StructureCircuitHousing as i32, + }, + name: Name::new( + StationpediaPrefab::StructureCircuitHousing + .get_str("name") + .unwrap(), + ), + vm, + error: 0, + on: true, + setting: 0.0, + slot: Slot { + parent: id, + index: 0, + name: "Programmable Chip".to_string(), + class: Class::ProgrammableChip, + readable_logic: vec![ + LogicSlotType::Class, + LogicSlotType::Damage, + LogicSlotType::LineNumber, + LogicSlotType::MaxQuantity, + LogicSlotType::OccupantHash, + LogicSlotType::Occupied, + LogicSlotType::PrefabHash, + LogicSlotType::Quantity, + LogicSlotType::ReferenceId, + LogicSlotType::SortingClass, + ], + writeable_logic: vec![], + occupant: None, + proxy: false, + }, + pins: [None, None, None, None, None, None], + connections: [ + Connection::CableNetwork { + net: None, + typ: CableConnectionType::Data, + role: ConnectionRole::Input, + }, + Connection::CableNetwork { + net: None, + typ: CableConnectionType::Power, + role: ConnectionRole::None, + }, + ], + } + } +} + +impl Structure for StructureCircuitHousing { + fn is_small_grid(&self) -> bool { + true + } + fn debug_structure(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "small_grid: {}", self.is_small_grid()) + } +} + +impl Storage for StructureCircuitHousing { + fn debug_storage(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "slots: {:?}", self.get_slots()) + } + fn slots_count(&self) -> usize { + 1 + } + fn get_slot(&self, index: usize) -> Option<&Slot> { + if index != 0 { + None + } else { + Some(&self.slot) + } + } + fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot> { + if index != 0 { + None + } else { + Some(&mut self.slot) + } + } + fn get_slots(&self) -> Vec<(usize, &Slot)> { + vec![(0, &self.slot)] + } + fn get_slots_mut(&mut self) -> Vec<(usize, &mut Slot)> { + vec![(0, &mut self.slot)] + } +} + +impl Logicable for StructureCircuitHousing { + fn debug_logicable(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let values: BTreeMap> = self + .valid_logic_types() + .into_iter() + .map(|lt| (lt, self.get_logic(lt).ok())) + .collect(); + write!( + f, + "prefab_hash: {}, name_hash: {}, readable: {}, writable: {}, values{:?}", + self.prefab_hash(), + self.name_hash(), + self.is_logic_readable(), + self.is_logic_writeable(), + values + ) + } + fn prefab_hash(&self) -> i32 { + self.get_prefab().hash + } + fn name_hash(&self) -> i32 { + self.get_name().hash + } + fn is_logic_readable(&self) -> bool { + true + } + fn is_logic_writeable(&self) -> bool { + true + } + fn can_logic_read(&self, lt: LogicType) -> bool { + use LogicType::*; + matches!( + lt, + Error + | LineNumber + | NameHash + | On + | Power + | PrefabHash + | ReferenceId + | RequiredPower + | Setting + ) + } + fn can_logic_write(&self, lt: LogicType) -> bool { + use LogicType::*; + matches!(lt, LineNumber | On | Setting) + } + fn get_logic(&self, lt: LogicType) -> Result { + match lt { + LogicType::PrefabHash => Ok(self.get_prefab().hash as f64), + LogicType::NameHash => Ok(self.get_name().hash as f64), + LogicType::ReferenceId => Ok(*self.get_id() as f64), + LogicType::Error => Ok(self.error as f64), + LogicType::LineNumber => { + let result = self.slot.occupant.as_ref().and_then(|info| { + self.vm.get_object(info.id).and_then(|obj| { + obj.borrow() + .as_logicable() + .map(|logicable| logicable.get_logic(LogicType::LineNumber)) + }) + }); + result.unwrap_or(Ok(0.0)) + } + LogicType::On => Ok(self.on as i32 as f64), + LogicType::Power => { + if let Connection::CableNetwork { net, .. } = self.connections[1] { + if net.is_some() { + Ok(1.0) + } else { + Ok(0.0) + } + } else { + Ok(0.0) + } + } + LogicType::RequiredPower => { + if let Connection::CableNetwork { net, .. } = self.connections[1] { + if net.is_some() { + if self.on { + Ok(10.0) + } else { + Ok(0.0) + } + } else { + Ok(-1.0) + } + } else { + Ok(-1.0) + } + } // 10 if on + LogicType::Setting => Ok(self.setting), + _ => Err(LogicError::CantRead(lt)), + } + } + fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError> { + match lt { + LogicType::LineNumber => self + .slot + .occupant + .as_ref() + .and_then(|info| { + self.vm.get_object(info.id).and_then(|obj| { + obj.borrow_mut().as_mut_logicable().map(|logicable| { + logicable.set_logic(LogicType::LineNumber, value, force) + }) + }) + }) + .unwrap_or(Err(LogicError::CantWrite(lt))), + LogicType::On => { + self.on = value != 0.0; + Ok(()) + } + LogicType::Setting => { + self.setting = value; + Ok(()) + } + _ => Err(LogicError::CantWrite(lt)), + } + } + fn can_slot_logic_read(&self, _slt: LogicSlotType, _indexx: f64) -> bool { + false + } + fn get_slot_logic(&self, _slt: LogicSlotType, index: f64) -> Result { + Err(LogicError::SlotIndexOutOfRange(index, self.slots_count())) + } + fn valid_logic_types(&self) -> Vec { + use LogicType::*; + vec![ + Error, + LineNumber, + NameHash, + On, + Power, + PrefabHash, + ReferenceId, + RequiredPower, + Setting, + ] + } + fn known_modes(&self) -> Option> { + None + } +} + +impl Device for StructureCircuitHousing { + fn debug_device(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!( + f, + "pins: {:?}, connections: {:?}", + self.pins, self.connections + ) + } + fn has_reagents(&self) -> bool { + false + } + fn has_atmosphere(&self) -> bool { + false + } + fn has_lock_state(&self) -> bool { + false + } + fn has_mode_state(&self) -> bool { + false + } + fn has_open_state(&self) -> bool { + false + } + fn has_color_state(&self) -> bool { + false + } + fn has_activate_state(&self) -> bool { + false + } + fn has_on_off_state(&self) -> bool { + true + } + fn get_reagents(&self) -> Vec<(u8, f64)> { + vec![] + } + fn set_reagents(&mut self, _reagents: &[(u8, f64)]) { + // nope + } + fn add_reagents(&mut self, _reagents: &[(u8, f64)]) { + // nope + } + fn connection_list(&self) -> &[crate::network::Connection] { + &self.connections + } + fn connection_list_mut(&mut self) -> &mut [crate::network::Connection] { + &mut self.connections + } + fn device_pins(&self) -> Option<&[Option]> { + Some(&self.pins) + } + fn device_pins_mut(&mut self) -> Option<&mut [Option]> { + Some(&mut self.pins) + } + fn can_slot_logic_write(&self, _slt: LogicSlotType, _index: f64) -> bool { + false + } + fn set_slot_logic( + &mut self, + slt: LogicSlotType, + index: f64, + _value: f64, + _force: bool, + ) -> Result<(), LogicError> { + Err(LogicError::CantSlotWrite(slt, index)) + } +} + +impl CircuitHolder for StructureCircuitHousing { + fn debug_circuit_holder(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "error: {}, setting: {}", self.error, self.setting) + } + fn clear_error(&mut self) { + self.error = 0 + } + fn set_error(&mut self, state: i32) { + self.error = state; + } + /// i32::MAX is db + fn get_logicable_from_index( + &self, + device: i32, + connection: Option, + ) -> Option { + if device == i32::MAX { + // self + if let Some(connection) = connection { + self.connections.get(connection).and_then(|conn| { + if let Connection::CableNetwork { net: Some(net), .. } = conn { + self.vm.get_network(*net).map(ObjectRef::from_vm_object) + } else { + None + } + }) + } else { + Some(ObjectRef::from_ref(self.as_object())) + } + } else { + if device < 0 { + return None; + } + self.pins.get(device as usize).and_then(|pin| { + pin.and_then(|id| self.vm.get_object(id).map(ObjectRef::from_vm_object)) + }) + } + } + /// i32::MAX is db + fn get_logicable_from_index_mut( + &mut self, + device: i32, + connection: Option, + ) -> Option { + if device == i32::MAX { + // self + if let Some(connection) = connection { + self.connections.get(connection).and_then(|conn| { + if let Connection::CableNetwork { net: Some(net), .. } = conn { + self.vm.get_network(*net).map(ObjectRefMut::from_vm_object) + } else { + None + } + }) + } else { + Some(ObjectRefMut::from_ref(self.as_mut_object())) + } + } else { + if device < 0 { + return None; + } + self.pins.get(device as usize).and_then(|pin| { + pin.and_then(|id| self.vm.get_object(id).map(ObjectRefMut::from_vm_object)) + }) + } + } + + fn get_logicable_from_id( + &self, + device: ObjectID, + connection: Option, + ) -> Option { + if connection.is_some() { + return None; // this functionality is disabled in the game, no network access via ReferenceId + } + if device == self.id { + return Some(ObjectRef::from_ref(self.as_object())); + } + self.vm.get_object(device).map(ObjectRef::from_vm_object) + } + + fn get_logicable_from_id_mut( + &mut self, + device: ObjectID, + connection: Option, + ) -> Option { + if connection.is_some() { + return None; // this functionality is disabled in the game, no network access via ReferenceId + } + if device == self.id { + return Some(ObjectRefMut::from_ref(self.as_mut_object())); + } + self.vm.get_object(device).map(ObjectRefMut::from_vm_object) + } + + fn get_ic(&self) -> Option { + self.slot + .occupant + .as_ref() + .and_then(|info| self.vm.get_object(info.id)) + } + + fn halt_and_catch_fire(&mut self) { + // TODO: do something here?? + } +} diff --git a/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs new file mode 100644 index 0000000..da2eb47 --- /dev/null +++ b/ic10emu/src/vm/object/stationpedia/structs/integrated_circuit.rs @@ -0,0 +1,492 @@ +use crate::{ + errors::{ICError, LineError}, + interpreter::{instructions::IC10Marker, ICState, Program}, + vm::{ + instructions::{operands::Operand, Instruction}, + object::{ + errors::{LogicError, MemoryError}, + macros::ObjectInterface, + traits::*, + LogicField, MemoryAccess, Name, ObjectID, Slot, VMObject, + }, + VM, + }, +}; +use macro_rules_attribute::derive; +use stationeers_data::enums::{ + basic::{Class, GasType, SortingClass}, + script::{LogicSlotType, LogicType}, +}; +use std::{collections::BTreeMap, rc::Rc}; + +static RETURN_ADDRESS_INDEX: usize = 17; +static STACK_POINTER_INDEX: usize = 16; + +#[derive(ObjectInterface!, Debug)] +#[custom(implements(Object { + Item, Storage, Logicable, + MemoryReadable, MemoryWritable, + SourceCode, IntegratedCircuit, + Programmable +}))] +pub struct ItemIntegratedCircuit10 { + #[custom(object_id)] + pub id: ObjectID, + #[custom(object_prefab)] + pub prefab: Name, + #[custom(object_name)] + pub name: Name, + #[custom(object_vm_ref)] + pub vm: Rc, + pub fields: BTreeMap, + pub memory: [f64; 512], + pub parent_slot: Option, + pub registers: [f64; 18], + /// Instruction Pointer + pub ip: usize, + pub next_ip: usize, + /// Instruction Count since last yield + pub ic: u16, + pub aliases: BTreeMap, + pub defines: BTreeMap, + pub pins: [Option; 6], + pub state: ICState, + pub code: String, + pub program: Program, + pub damage: f32, +} + +impl Item for ItemIntegratedCircuit10 { + fn debug_item(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + fn consumable(&self) -> bool { + false + } + fn filter_type(&self) -> Option { + None + } + fn ingredient(&self) -> bool { + false + } + fn max_quantity(&self) -> u32 { + 1 + } + fn reagents(&self) -> Option<&BTreeMap> { + None + } + fn slot_class(&self) -> Class { + Class::ProgrammableChip + } + fn sorting_class(&self) -> SortingClass { + SortingClass::Default + } + fn get_parent_slot(&self) -> Option { + self.parent_slot + } + fn set_parent_slot(&mut self, info: Option) { + self.parent_slot = info; + } + fn get_damage(&self) -> f32 { + self.damage + } + fn set_damage(&mut self, damage: f32) { + self.damage = damage.clamp(0.0, 1.0); + } +} + +impl Storage for ItemIntegratedCircuit10 { + fn debug_storage(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + fn slots_count(&self) -> usize { + 0 + } + fn get_slot(&self, _index: usize) -> Option<&Slot> { + None + } + fn get_slot_mut(&mut self, _index: usize) -> Option<&mut Slot> { + None + } + fn get_slots(&self) -> Vec<(usize, &Slot)> { + vec![] + } + fn get_slots_mut(&mut self) -> Vec<(usize, &mut Slot)> { + vec![] + } +} + +impl Logicable for ItemIntegratedCircuit10 { + fn debug_logicable(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + fn prefab_hash(&self) -> i32 { + self.get_prefab().hash + } + fn name_hash(&self) -> i32 { + self.get_name().hash + } + fn is_logic_readable(&self) -> bool { + true + } + fn is_logic_writeable(&self) -> bool { + true + } + fn can_logic_read(&self, lt: LogicType) -> bool { + self.fields + .get(<) + .map(|field| { + matches!( + field.field_type, + MemoryAccess::Read | MemoryAccess::ReadWrite + ) + }) + .unwrap_or(false) + } + fn can_logic_write(&self, lt: LogicType) -> bool { + self.fields + .get(<) + .map(|field| { + matches!( + field.field_type, + MemoryAccess::Write | MemoryAccess::ReadWrite + ) + }) + .unwrap_or(false) + } + fn get_logic(&self, lt: LogicType) -> Result { + self.fields + .get(<) + .and_then(|field| match field.field_type { + MemoryAccess::Read | MemoryAccess::ReadWrite => Some(field.value), + _ => None, + }) + .ok_or(LogicError::CantRead(lt)) + } + fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError> { + self.fields + .get_mut(<) + .ok_or(LogicError::CantWrite(lt)) + .and_then(|field| match field.field_type { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + field.value = value; + Ok(()) + } + _ if force => { + field.value = value; + Ok(()) + } + _ => Err(LogicError::CantWrite(lt)), + }) + } + fn can_slot_logic_read(&self, _slt: LogicSlotType, _index: f64) -> bool { + false + } + fn get_slot_logic(&self, _slt: LogicSlotType, index: f64) -> Result { + Err(LogicError::SlotIndexOutOfRange(index, self.slots_count())) + } + fn valid_logic_types(&self) -> Vec { + self.fields.keys().copied().collect() + } + fn known_modes(&self) -> Option> { + None + } +} + +impl MemoryReadable for ItemIntegratedCircuit10 { + fn debug_memory_readable(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + fn memory_size(&self) -> usize { + self.memory.len() + } + fn get_memory(&self, index: i32) -> Result { + if index < 0 { + Err(MemoryError::StackUnderflow(index, self.memory.len())) + } else if index as usize >= self.memory.len() { + Err(MemoryError::StackOverflow(index, self.memory.len())) + } else { + Ok(self.memory[index as usize]) + } + } + fn get_memory_slice(&self) -> &[f64] { + &self.memory + } +} + +impl MemoryWritable for ItemIntegratedCircuit10 { + fn debug_memory_writable(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + fn set_memory(&mut self, index: i32, val: f64) -> Result<(), MemoryError> { + if index < 0 { + Err(MemoryError::StackUnderflow(index, self.memory.len())) + } else if index as usize >= self.memory.len() { + Err(MemoryError::StackOverflow(index, self.memory.len())) + } else { + self.memory[index as usize] = val; + Ok(()) + } + } + fn clear_memory(&mut self) { + self.memory.fill(0.0); + } +} + +impl SourceCode for ItemIntegratedCircuit10 { + fn debug_source_code(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + fn set_source_code(&mut self, code: &str) -> Result<(), ICError> { + self.program = Program::try_from_code(code)?; + self.code = code.to_string(); + Ok(()) + } + fn set_source_code_with_invalid(&mut self, code: &str) { + self.program = Program::from_code_with_invalid(code); + self.code = code.to_string(); + } + fn get_source_code(&self) -> String { + self.code.clone() + } + fn get_line(&self, line: usize) -> Result { + self.program.get_line(line) + } + fn get_compile_errors(&self) -> Vec { + self.program.errors.clone() + } +} + +impl IntegratedCircuit for ItemIntegratedCircuit10 { + fn debug_integrated_circuit(&self,f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + fn get_circuit_holder(&self) -> Option { + self.get_parent_slot() + .and_then(|parent_slot| self.get_vm().get_object(parent_slot.parent)) + } + fn get_instruction_pointer(&self) -> u32 { + self.ip as u32 + } + fn set_next_instruction(&mut self, next_instruction: f64) { + self.next_ip = next_instruction as usize; + } + fn set_next_instruction_relative(&mut self, offset: f64) { + self.next_ip = (self.ip as f64 + offset) as usize + } + fn reset(&mut self) { + self.ip = 0; + self.ic = 0; + self.registers.fill(0.0); + self.memory.fill(0.0); + self.aliases.clear(); + self.defines.clear(); + self.state = ICState::Start; + } + fn get_real_target(&self, indirection: u32, target: u32) -> Result { + let mut i = indirection; + let mut t = target as f64; + while i > 0 { + if let Some(new_t) = self.registers.get(t as usize) { + t = *new_t; + } else { + return Err(ICError::RegisterIndexOutOfRange(t)); + } + i -= 1; + } + Ok(t) + } + fn get_register(&self, indirection: u32, target: u32) -> Result { + let t = self.get_real_target(indirection, target)?; + self.registers + .get(t as usize) + .ok_or(ICError::RegisterIndexOutOfRange(t)) + .copied() + } + fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result { + let t = self.get_real_target(indirection, target)?; + let old_val = self + .registers + .get(t as usize) + .ok_or(ICError::RegisterIndexOutOfRange(t)) + .copied()?; + self.registers[t as usize] = val; + Ok(old_val) + } + fn get_registers(&self) -> &[f64] { + &self.registers + } + fn get_registers_mut(&mut self) -> &mut [f64] { + &mut self.registers + } + fn set_return_address(&mut self, addr: f64) { + self.registers[RETURN_ADDRESS_INDEX] = addr; + } + fn push_stack(&mut self, val: f64) -> Result { + let sp = (self.registers[STACK_POINTER_INDEX].round()) as i32; + if sp < 0 { + Err(MemoryError::StackUnderflow(sp, self.memory.len()).into()) + } else if sp as usize >= self.memory.len() { + Err(MemoryError::StackOverflow(sp, self.memory.len()).into()) + } else { + let last = self.memory[sp as usize]; + self.memory[sp as usize] = val; + self.registers[STACK_POINTER_INDEX] += 1.0; + Ok(last) + } + } + fn pop_stack(&mut self) -> Result { + self.registers[STACK_POINTER_INDEX] -= 1.0; + let sp = (self.registers[STACK_POINTER_INDEX].round()) as i32; + if sp < 0 { + Err(MemoryError::StackUnderflow(sp, self.memory.len()).into()) + } else if sp as usize >= self.memory.len() { + Err(MemoryError::StackOverflow(sp, self.memory.len()).into()) + } else { + let last = self.memory[sp as usize]; + Ok(last) + } + } + fn peek_stack(&self) -> Result { + let sp = (self.registers[STACK_POINTER_INDEX] - 1.0).round() as i32; + if sp < 0 { + Err(MemoryError::StackUnderflow(sp, self.memory.len()).into()) + } else if sp as usize >= self.memory.len() { + Err(MemoryError::StackOverflow(sp, self.memory.len()).into()) + } else { + let last = self.memory[sp as usize]; + Ok(last) + } + } + fn get_stack(&self, addr: f64) -> Result { + let sp = (addr) as i32; + if !(0..(self.memory.len() as i32)).contains(&sp) { + Err(ICError::StackIndexOutOfRange(addr)) + } else { + let val = self.memory[sp as usize]; + Ok(val) + } + } + fn put_stack(&mut self, addr: f64, val: f64) -> Result { + let sp = addr.round() as i32; + if !(0..(self.memory.len() as i32)).contains(&sp) { + Err(ICError::StackIndexOutOfRange(addr)) + } else { + let last = self.memory[sp as usize]; + self.memory[sp as usize] = val; + Ok(last) + } + } + fn get_aliases(&self) -> &BTreeMap { + &self.aliases + } + fn get_aliases_mut(&mut self) -> &mut BTreeMap { + &mut self.aliases + } + fn get_defines(&self) -> &BTreeMap { + &self.defines + } + fn get_defines_mut(&mut self) -> &mut BTreeMap { + &mut self.defines + } + fn get_labels(&self) -> &BTreeMap { + &self.program.labels + } + fn get_state(&self) -> crate::interpreter::ICState { + self.state.clone() + } + fn set_state(&mut self, state: crate::interpreter::ICState) { + self.state = state; + if matches!(self.state, ICState::Yield | ICState::Sleep(..)) { + self.ic = 0; + } + } + fn get_instructions_since_yield(&self) -> u16 { + self.ic + } +} + +impl IC10Marker for ItemIntegratedCircuit10 {} + +impl Programmable for ItemIntegratedCircuit10 { + fn debug_programmable(&self,f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "UNIMPLEMENTED") //TODO: Implement + } + #[tracing::instrument] + fn step(&mut self, advance_ip_on_err: bool) -> Result<(), crate::errors::ICError> { + tracing::trace!(ignore_error = advance_ip_on_err, "stepping IC"); + if matches!(&self.state, ICState::HasCaughtFire) { + tracing::debug!("IC on Fire!"); + return Ok(()); + } + if matches!(&self.state, ICState::Error(_)) && !advance_ip_on_err { + tracing::debug!("IC in an error state, not advancing"); + return Ok(()); + } + if let ICState::Sleep(then, sleep_for) = &self.state { + if let Some(duration) = time::Duration::checked_seconds_f64(*sleep_for) { + if let Some(sleep_till) = then.checked_add(duration) { + let now = time::OffsetDateTime::now_local() + .unwrap_or_else(|_| time::OffsetDateTime::now_utc()); + if sleep_till > now { + tracing::debug!("Sleeping: {sleep_till} > {now}"); + return Ok(()); + } + // else sleep duration ended, continue + } else { + return Err(ICError::SleepAdditionError { + duration, + time: *then, + }); + } + } else { + return Err(ICError::SleepDurationError(*sleep_for)); + } + } + if self.ip >= self.program.len() || self.program.is_empty() { + tracing::debug!("IC at end of program"); + self.state = ICState::Ended; + return Ok(()); + } + self.next_ip = self.ip + 1; + self.state = ICState::Running; + let line = self.program.get_line(self.ip)?.clone(); + let operands = &line.operands; + let instruction = line.instruction; + let result = instruction.execute(self, operands); + + let was_error = if let Err(err) = result { + let msg = err.to_string(); + self.state = ICState::Error(LineError { + error: err, + line: self.ip as u32, + msg, + }); + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.id))? + .borrow_mut() + .as_mut_circuit_holder() + .ok_or(ICError::CircuitHolderNotLogicable(self.id))? + .set_error(1); + true + } else { + false + }; + + if !was_error || advance_ip_on_err { + self.ip = self.next_ip; + if self.ip >= self.program.len() && !matches!(&self.state, ICState::Error(_)) { + self.state = ICState::Ended; + } + } + + self.get_circuit_holder() + .ok_or(ICError::NoCircuitHolder(self.id))? + .borrow_mut() + .as_mut_logicable() + .ok_or(ICError::CircuitHolderNotLogicable(self.id))? + .set_logic(LogicType::LineNumber, self.ip as f64, true)?; + + Ok(()) + } +} diff --git a/ic10emu/src/vm/object/templates.rs b/ic10emu/src/vm/object/templates.rs new file mode 100644 index 0000000..602a210 --- /dev/null +++ b/ic10emu/src/vm/object/templates.rs @@ -0,0 +1,1534 @@ +use std::{collections::BTreeMap, rc::Rc, str::FromStr}; + +use crate::{ + errors::{ICError, TemplateError}, + interpreter::ICInfo, + network::Connection, + vm::{ + object::{ + generic::structs::{ + Generic, GenericCircuitHolder, GenericItem, GenericItemCircuitHolder, + GenericItemConsumer, GenericItemLogicable, GenericItemLogicableMemoryReadWriteable, + GenericItemLogicableMemoryReadable, GenericItemStorage, GenericItemSuit, + GenericItemSuitCircuitHolder, GenericItemSuitLogic, GenericLogicable, + GenericLogicableDevice, GenericLogicableDeviceConsumer, + GenericLogicableDeviceConsumerMemoryReadWriteable, + GenericLogicableDeviceConsumerMemoryReadable, + GenericLogicableDeviceMemoryReadWriteable, GenericLogicableDeviceMemoryReadable, + GenericStorage, + }, + humans::{EntityInfo, HumanPlayer}, + traits::*, + LogicField, Name, Slot, SlotOccupantInfo, + }, + VM, + }, +}; +use serde_derive::{Deserialize, Serialize}; +use stationeers_data::{ + enums::{ + basic::Class, + prefabs::StationpediaPrefab, + script::{LogicSlotType, LogicType}, + }, + templates::*, +}; +use strum::{EnumProperty, IntoEnumIterator}; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; + +use super::{stationpedia, MemoryAccess, ObjectID, VMObject}; + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum Prefab { + Hash(i32), + Name(String), +} + +impl std::fmt::Display for Prefab { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let (known_prefab, unknown_str) = match self { + Self::Hash(hash) => ( + StationpediaPrefab::from_repr(*hash), + format!("Unknown({hash}))"), + ), + Self::Name(name) => (StationpediaPrefab::from_str(name).ok(), name.clone()), + }; + if let Some(known) = known_prefab { + write!(f, "{known}") + } else { + write!(f, "{unknown_str}") + } + } +} + +#[serde_with::skip_serializing_none] +#[derive(Clone, Debug, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ObjectInfo { + pub name: Option, + pub id: Option, + pub prefab: Option, + pub prefab_hash: Option, + pub slots: Option>, + pub parent_slot: Option<(ObjectID, u32)>, + pub root_parent_human: Option, + pub damage: Option, + pub device_pins: Option>, + pub connections: Option>, + pub reagents: Option>, pub memory: Option>, + pub logic_values: Option>, + pub slot_logic_values: Option>>, + pub entity: Option, + pub source_code: Option, + pub compile_errors: Option>, + pub circuit: Option, + pub socketed_ic: Option, + pub visible_devices: Option>, +} + +impl From<&VMObject> for ObjectInfo { + fn from(obj: &VMObject) -> Self { + let obj_ref = obj.borrow(); + ObjectInfo { + name: Some(obj_ref.get_name().value.clone()), + id: Some(*obj_ref.get_id()), + prefab: Some(obj_ref.get_prefab().value.clone()), + prefab_hash: Some(obj_ref.get_prefab().hash), + slots: None, + parent_slot: None, + root_parent_human: None, + damage: None, + device_pins: None, + connections: None, + reagents: None, + memory: None, + logic_values: None, + slot_logic_values: None, + entity: None, + source_code: None, + compile_errors: None, + circuit: None, + socketed_ic: None, + visible_devices: None, + } + } +} + +impl ObjectInfo { + /// Build empty info with a prefab name + pub fn with_prefab(prefab: Prefab) -> Self { + let prefab_hash = match &prefab { + Prefab::Name(name) => name + .parse::() + .ok() + .map(|p| p as i32) + .unwrap_or_else(|| const_crc32::crc32(name.as_bytes()) as i32), + Prefab::Hash(hash) => *hash, + }; + let prefab_name = match prefab { + Prefab::Name(name) => name, + Prefab::Hash(hash) => StationpediaPrefab::from_repr(hash) + .map(|sp| sp.to_string()) + .unwrap_or_default(), + }; + ObjectInfo { + name: None, + id: None, + prefab: Some(prefab_name), + prefab_hash: Some(prefab_hash), + slots: None, + parent_slot: None, + root_parent_human: None, + damage: None, + device_pins: None, + connections: None, + reagents: None, + memory: None, + logic_values: None, + slot_logic_values: None, + entity: None, + source_code: None, + compile_errors: None, + circuit: None, + socketed_ic: None, + visible_devices: None, + } + } + + /// update the object info from the relevant implemented interfaces of a dyn object + /// use `ObjectInterfaces::from_object` with a `&dyn Object` (`&*VMObject.borrow()`) + /// to obtain the interfaces + pub fn update_from_interfaces(&mut self, interfaces: &ObjectInterfaces<'_>) -> &mut Self { + if let Some(storage) = interfaces.storage { + self.update_from_storage(storage); + } + if let Some(logic) = interfaces.logicable { + self.update_from_logic(logic); + } + if let Some(device) = interfaces.device { + self.update_from_device(device); + } + if let Some(memory) = interfaces.memory_readable { + self.update_from_memory(memory); + } + if let Some(item) = interfaces.item { + self.update_from_item(item); + } + if let Some(human) = interfaces.human { + self.update_from_human(human); + } + if let Some(source) = interfaces.source_code { + self.update_from_source_code(source); + } + if let Some(circuit) = interfaces.integrated_circuit { + self.update_from_circuit(circuit); + } + if let Some(circuit_holder) = interfaces.circuit_holder { + self.update_from_circuit_holder(circuit_holder); + } + self + } + + /// set `slots` to Some if there is relevant storage + pub fn update_from_storage(&mut self, storage: StorageRef<'_>) -> &mut Self { + let slots = storage.get_slots(); + if slots.is_empty() { + self.slots = None; + } else { + self.slots.replace( + slots + .into_iter() + .filter_map(|(index, slot)| { + slot.occupant + .as_ref() + .map(|occupant| (index as u32, occupant.clone())) + }) + .collect(), + ); + } + self + } + + /// store `item` properties like `damage` + pub fn update_from_item(&mut self, item: ItemRef<'_>) -> &mut Self { + let damage = item.get_damage(); + if damage == 0.0 { + self.damage = None; + } else { + self.damage.replace(damage); + } + let parent_slot = item.get_parent_slot(); + if let Some(parent_slot) = parent_slot { + self.parent_slot = Some((parent_slot.parent, parent_slot.slot as u32)); + } + let root_parent_human = item.root_parent_human(); + if let Some(root_parent_human) = root_parent_human { + self.root_parent_human = Some(root_parent_human.get_id()); + } + self + } + + /// store `device_pins`, `reagents`, and `connections` + pub fn update_from_device(&mut self, device: DeviceRef<'_>) -> &mut Self { + let pins = device.device_pins(); + if pins.is_some_and(<[Option]>::is_empty) { + self.device_pins = None; + } else { + self.device_pins = pins.map(|pins| { + pins.iter() + .enumerate() + .filter_map(|(index, pin)| pin.as_ref().map(|pin| (index as u32, *pin))) + .collect() + }); + } + let reagents: BTreeMap = device.get_reagents().iter().copied().collect(); + if reagents.is_empty() { + self.reagents = None; + } else { + self.reagents.replace(reagents); + } + let connections = device.connection_list(); + if connections.is_empty() { + self.connections = None; + } else { + self.connections.replace( + connections + .iter() + .enumerate() + .filter_map(|(index, conn)| conn.get_network().map(|net| (index as u32, net))) + .collect(), + ); + } + let visible_devices = device.get_vm().visible_devices(*device.get_id()); + self.visible_devices.replace(visible_devices); + self + } + + /// store memory state + pub fn update_from_memory(&mut self, memory: MemoryReadableRef<'_>) -> &mut Self { + if memory.memory_size() != 0 { + self.memory.replace(memory.get_memory_slice().to_vec()); + } else { + self.memory = None; + } + self + } + + /// store logic field state + pub fn update_from_logic(&mut self, logic: LogicableRef<'_>) -> &mut Self { + self.logic_values.replace( + logic + .valid_logic_types() + .iter() + .filter_map(|lt| match logic.get_logic(*lt) { + Ok(val) => Some((*lt, val)), + _ => None, + }) + .collect(), + ); + let num_slots = logic.slots_count(); + if num_slots > 0 { + let slot_logic_values = (0..num_slots) + .map(|index| { + ( + index as u32, + LogicSlotType::iter() + .filter_map(|slt| { + if logic.can_slot_logic_read(slt, index as f64) { + Some(( + slt, + logic.get_slot_logic(slt, index as f64).unwrap_or(0.0), + )) + } else { + None + } + }) + .collect(), + ) + }) + .collect(); + self.slot_logic_values.replace(slot_logic_values); + } + self + } + + /// store entity state + pub fn update_from_human(&mut self, human: HumanRef<'_>) -> &mut Self { + let damage = human.get_damage(); + if damage == 0.0 { + self.damage = None; + } else { + self.damage.replace(damage); + } + self.entity.replace(EntityInfo { + hydration: human.get_hydration(), + nutrition: human.get_nutrition(), + oxygenation: human.get_oxygenation(), + food_quality: human.get_food_quality(), + mood: human.get_mood(), + hygiene: human.get_hygiene(), + }); + self + } + + /// store source code + pub fn update_from_source_code(&mut self, source: SourceCodeRef<'_>) -> &mut Self { + let code = source.get_source_code(); + if !code.is_empty() { + self.source_code.replace(code); + } + let errors = source.get_compile_errors(); + if !errors.is_empty() { + self.compile_errors.replace(errors); + } + self + } + + /// store circuit state; ie. `registers`, `aliases`, `defines` etc. + pub fn update_from_circuit(&mut self, circuit: IntegratedCircuitRef<'_>) -> &mut Self { + self.circuit.replace(ICInfo { + instruction_pointer: circuit.get_instruction_pointer(), + registers: circuit.get_registers().to_vec(), + aliases: circuit + .get_aliases() + .iter() + .map(|(key, val)| (key.clone(), val.clone())) + .collect(), + defines: circuit + .get_defines() + .iter() + .map(|(key, val)| (key.clone(), *val)) + .collect(), + labels: circuit + .get_labels() + .iter() + .map(|(key, val)| (key.clone(), *val)) + .collect(), + state: circuit.get_state(), + yield_instruction_count: circuit.get_instructions_since_yield(), + }); + self + } + + /// store socketed Ic Id + pub fn update_from_circuit_holder( + &mut self, + circuit_holder: CircuitHolderRef<'_>, + ) -> &mut Self { + if let Some(ic) = circuit_holder.get_ic() { + self.socketed_ic.replace(ic.get_id()); + } + self + } +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct FrozenObjectFull { + pub obj_info: ObjectInfo, + pub template: ObjectTemplate, +} + +#[serde_with::skip_serializing_none] +#[derive(Debug, Clone, Deserialize, Serialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct FrozenObject { + pub obj_info: ObjectInfo, + pub database_template: bool, + pub template: Option, +} + +impl FrozenObject { + pub fn new(obj_info: ObjectInfo) -> Self { + FrozenObject { + obj_info, + database_template: false, + template: None, + } + } + + pub fn with_template(obj_info: ObjectInfo, template: ObjectTemplate) -> Self { + FrozenObject { + obj_info, + database_template: false, + template: Some(template), + } + } + + pub fn build_vm_obj(&self, id: ObjectID, vm: &Rc) -> Result { + let template = self.template.as_ref().map_or_else( + || { + self.obj_info + .prefab + .as_ref() + .map(|prefab| { + vm.get_template(Prefab::Name(prefab.clone())).ok_or( + TemplateError::NoTemplateForPrefab(Prefab::Name(prefab.clone())), + ) + }) + .transpose()? + .map_or_else( + || { + self.obj_info.prefab_hash.as_ref().map(|hash| { + vm.get_template(Prefab::Hash(*hash)) + .ok_or(TemplateError::NoTemplateForPrefab(Prefab::Hash(*hash))) + }) + }, + |template| Some(Ok(template)), + ) + .transpose()? + .ok_or(TemplateError::MissingPrefab) + }, + |template| Ok(template.clone()), + )?; + if let Some(obj) = stationpedia::object_from_frozen(&self.obj_info, id, vm)? { + Ok(obj) + } else { + self.build_generic(id, &template, vm.clone()) + } + } + + pub fn connected_networks(&self) -> Vec { + self.obj_info + .connections + .as_ref() + .map(|connections| connections.values().copied().collect()) + .unwrap_or_default() + } + + pub fn contained_object_ids(&self) -> Vec { + self.obj_info + .slots + .as_ref() + .map(|slots| slots.values().map(|slot| slot.id).collect()) + .unwrap_or_default() + } + + pub fn contained_object_slots(&self) -> Vec<(u32, ObjectID)> { + self.obj_info + .slots + .as_ref() + .map(|slots| { + slots + .iter() + .map(|(index, slot)| (*index, slot.id)) + .collect() + }) + .unwrap_or_default() + } + + fn build_slots<'a>( + &self, + id: ObjectID, + slots_info: impl IntoIterator, + logic_info: Option<&LogicInfo>, + ) -> BTreeMap { + slots_info + .into_iter() + .map(|(index, info)| { + let (name, class, proxy) = match info { + SlotInfo::Direct { name, class, .. } => (name.clone(), *class, false), + SlotInfo::Proxy { name, .. } => (name.clone(), Class::None, true), + }; + ( + *index, + Slot { + parent: id, + index: *index as usize, + name, + class, + proxy, + readable_logic: logic_info + .and_then(|info| { + info.logic_slot_types.get(index).map(|s_info| { + s_info + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Read | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + }) + .unwrap_or_default(), + writeable_logic: logic_info + .and_then(|info| { + info.logic_slot_types.get(index).map(|s_info| { + s_info + .iter() + .filter_map(|(key, access)| match access { + MemoryAccess::Write | MemoryAccess::ReadWrite => { + Some(key) + } + _ => None, + }) + .copied() + .collect::>() + }) + }) + .unwrap_or_default(), + occupant: self + .obj_info + .slots + .as_ref() + .and_then(|slots| slots.get(index).cloned()), + }, + ) + }) + .collect() + } + + fn build_logic_fields(&self, logic_info: &LogicInfo) -> BTreeMap { + logic_info + .logic_types + .iter() + .map(|(key, access)| { + ( + *key, + LogicField { + field_type: *access, + value: self + .obj_info + .logic_values + .as_ref() + .and_then(|values| values.get(key)) + .copied() + .unwrap_or(0.0), + }, + ) + }) + .collect() + } + + fn build_connections(&self, device_info: &DeviceInfo) -> Vec { + device_info + .connection_list + .iter() + .enumerate() + .map(|(index, conn_info)| { + Connection::from_info( + conn_info.typ, + conn_info.role, + self.obj_info + .connections + .as_ref() + .and_then(|connections| connections.get(&(index as u32)).copied()), + ) + }) + .collect() + } + + fn build_pins(&self, device_info: &DeviceInfo) -> Option>> { + let num_pins = device_info.device_pins_length.unwrap_or(0); + if num_pins > 0 { + Some( + (0..num_pins) + .map(|index| { + self.obj_info + .device_pins + .as_ref() + .and_then(|pins| pins.get(&index).copied()) + }) + .collect(), + ) + } else { + None + } + } + + fn build_memory(&self, memory_info: &MemoryInfo) -> Vec { + self.obj_info + .memory + .clone() + .unwrap_or_else(|| vec![0.0; memory_info.memory_size as usize]) + } + + fn build_generic( + &self, + id: ObjectID, + template: &ObjectTemplate, + vm: Rc, + ) -> Result { + use ObjectTemplate::*; + match template { + Structure(s) => Ok(VMObject::new(Generic { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(s.prefab.name.clone())), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + })), + StructureSlots(s) => Ok(VMObject::new(GenericStorage { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(s.prefab.name.clone())), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + slots: self.build_slots(id, &s.slots, None), + })), + StructureLogic(s) => Ok(VMObject::new(GenericLogicable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(s.prefab.name.clone())), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), + modes: s.logic.modes.clone(), + })), + StructureLogicDevice(s) => Ok(VMObject::new(GenericLogicableDevice { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(s.prefab.name.clone())), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), + modes: s.logic.modes.clone(), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), + device_info: s.device.clone(), + reagents: self.obj_info.reagents.clone(), + })), + StructureLogicDeviceConsumer(s) => Ok(VMObject::new(GenericLogicableDeviceConsumer { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(s.prefab.name.clone())), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), + modes: s.logic.modes.clone(), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), + device_info: s.device.clone(), + reagents: self.obj_info.reagents.clone(), + consumer_info: s.consumer_info.clone(), + })), + StructureCircuitHolder(s) => Ok(VMObject::new(GenericCircuitHolder { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(s.prefab.name.clone())), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), + modes: s.logic.modes.clone(), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), + device_info: s.device.clone(), + reagents: self.obj_info.reagents.clone(), + error: 0, + })), + StructureLogicDeviceMemory(s) + if matches!(s.memory.memory_access, MemoryAccess::Read) => + { + Ok(VMObject::new(GenericLogicableDeviceMemoryReadable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(s.prefab.name.clone())), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), + modes: s.logic.modes.clone(), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), + device_info: s.device.clone(), + reagents: self.obj_info.reagents.clone(), + memory: self.build_memory(&s.memory), + })) + } + StructureLogicDeviceMemory(s) => { + Ok(VMObject::new(GenericLogicableDeviceMemoryReadWriteable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(s.prefab.name.clone())), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), + modes: s.logic.modes.clone(), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), + device_info: s.device.clone(), + reagents: self.obj_info.reagents.clone(), + memory: self.build_memory(&s.memory), + })) + } + StructureLogicDeviceConsumerMemory(s) + if matches!(s.memory.memory_access, MemoryAccess::Read) => + { + Ok(VMObject::new( + GenericLogicableDeviceConsumerMemoryReadable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new( + &self.obj_info.name.clone().unwrap_or(s.prefab.name.clone()), + ), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), + modes: s.logic.modes.clone(), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), + device_info: s.device.clone(), + reagents: self.obj_info.reagents.clone(), + consumer_info: s.consumer_info.clone(), + fabricator_info: s.fabricator_info.clone(), + current_recipe: None, + memory: self.build_memory(&s.memory), + }, + )) + } + StructureLogicDeviceConsumerMemory(s) => Ok(VMObject::new( + GenericLogicableDeviceConsumerMemoryReadWriteable { + id, + prefab: Name::from_prefab_name(&s.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(s.prefab.name.clone())), + vm, + internal_atmo_info: s.internal_atmo_info.clone(), + thermal_info: s.thermal_info.clone(), + small_grid: s.structure.small_grid, + slots: self.build_slots(id, &s.slots, Some(&s.logic)), + fields: self.build_logic_fields(&s.logic), + modes: s.logic.modes.clone(), + connections: self.build_connections(&s.device), + pins: self.build_pins(&s.device), + device_info: s.device.clone(), + reagents: self.obj_info.reagents.clone(), + consumer_info: s.consumer_info.clone(), + fabricator_info: s.fabricator_info.clone(), + memory: self.build_memory(&s.memory), + current_recipe: None, + }, + )), + Item(i) => Ok(VMObject::new(GenericItem { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + })), + ItemSlots(i) => Ok(VMObject::new(GenericItemStorage { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + slots: self.build_slots(id, &i.slots, None), + })), + ItemConsumer(i) => Ok(VMObject::new(GenericItemConsumer { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + slots: self.build_slots(id, &i.slots, None), + consumer_info: i.consumer_info.clone(), + })), + ItemLogic(i) => Ok(VMObject::new(GenericItemLogicable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + fields: self.build_logic_fields(&i.logic), + modes: i.logic.modes.clone(), + })), + ItemLogicMemory(i) if matches!(i.memory.memory_access, MemoryAccess::Read) => { + Ok(VMObject::new(GenericItemLogicableMemoryReadable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + fields: self.build_logic_fields(&i.logic), + modes: i.logic.modes.clone(), + memory: self.build_memory(&i.memory), + })) + } + ItemLogicMemory(i) => Ok(VMObject::new(GenericItemLogicableMemoryReadWriteable { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + fields: self.build_logic_fields(&i.logic), + modes: i.logic.modes.clone(), + memory: self.build_memory(&i.memory), + })), + ItemCircuitHolder(i) => Ok(VMObject::new(GenericItemCircuitHolder { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + fields: self.build_logic_fields(&i.logic), + modes: i.logic.modes.clone(), + error: 0, + })), + ItemSuit(i) => Ok(VMObject::new(GenericItemSuit { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + slots: self.build_slots(id, &i.slots, None), + suit_info: i.suit_info.clone(), + })), + ItemSuitLogic(i) => Ok(VMObject::new(GenericItemSuitLogic { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + suit_info: i.suit_info.clone(), + fields: self.build_logic_fields(&i.logic), + modes: i.logic.modes.clone(), + })), + ItemSuitCircuitHolder(i) => Ok(VMObject::new(GenericItemSuitCircuitHolder { + id, + prefab: Name::from_prefab_name(&i.prefab.prefab_name), + name: Name::new(&self.obj_info.name.clone().unwrap_or(i.prefab.name.clone())), + vm, + internal_atmo_info: i.internal_atmo_info.clone(), + thermal_info: i.thermal_info.clone(), + item_info: i.item.clone(), + parent_slot: None, + damage: self.obj_info.damage, + slots: self.build_slots(id, &i.slots, Some(&i.logic)), + suit_info: i.suit_info.clone(), + fields: self.build_logic_fields(&i.logic), + modes: i.logic.modes.clone(), + memory: self.build_memory(&i.memory), + error: 0, + })), + Human(h) => { + let mut human = HumanPlayer::with_species(id, vm, h.species); + if let Some(info) = &self.obj_info.entity { + human.update_entity_info(info); + } + if let Some(slot_info) = &self.obj_info.slots { + human.update_slots_from_info(slot_info); + } + if let Some(damage) = &self.obj_info.damage { + human.damage = *damage; + } + Ok(VMObject::new(human)) + } + } + } + + pub fn freeze_object(obj: &VMObject, vm: &Rc) -> Result { + let obj_ref = obj.borrow(); + let interfaces = ObjectInterfaces::from_object(&*obj_ref); + let mut obj_info: ObjectInfo = obj.into(); + obj_info.update_from_interfaces(&interfaces); + // if the template is known, omit it. else build it from interfaces + let template = vm + .get_template(Prefab::Hash(obj_ref.get_prefab().hash)) + .map_or_else( + || try_template_from_interfaces(&interfaces, obj), + |template| Ok(template), + )?; + + Ok(FrozenObjectFull { obj_info, template }) + } + + pub fn freeze_object_sparse(obj: &VMObject, vm: &Rc) -> Result { + let obj_ref = obj.borrow(); + let interfaces = ObjectInterfaces::from_object(&*obj_ref); + let mut obj_info: ObjectInfo = obj.into(); + obj_info.update_from_interfaces(&interfaces); + // if the template is known, omit it. else build it from interfaces + let mut database_template = false; + let template = vm + .get_template(Prefab::Hash(obj_ref.get_prefab().hash)) + .map_or_else( + || Some(try_template_from_interfaces(&interfaces, obj)), + |_| { + database_template = true; + None + }, + ) + .transpose()?; + + Ok(FrozenObject { + obj_info, + template, + database_template, + }) + } +} + +fn try_template_from_interfaces( + interfaces: &ObjectInterfaces, + obj: &VMObject, +) -> Result { + match *interfaces { + ObjectInterfaces { + structure: Some(structure), + storage: None, + memory_readable: None, + memory_writable: None, + logicable: None, + source_code: None, + circuit_holder: None, + item: None, + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: None, + wireless_transmit: None, + wireless_receive: None, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere, + thermal, + human: None, + } => { + // completely generic structure? not sure how this got created but it technically + // valid in the data model + Ok(ObjectTemplate::Structure(StructureTemplate { + prefab: obj.into(), + internal_atmo_info: internal_atmosphere.map(Into::into), + thermal_info: thermal.map(Into::into), + structure: structure.into(), + })) + } + ObjectInterfaces { + structure: Some(structure), + storage: Some(storage), + memory_readable: None, + memory_writable: None, + logicable: None, + source_code: None, + circuit_holder: None, + item: None, + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: None, + wireless_transmit: None, + wireless_receive: None, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere, + thermal, + human: None, + } => Ok(ObjectTemplate::StructureSlots(StructureSlotsTemplate { + prefab: obj.into(), + internal_atmo_info: internal_atmosphere.map(Into::into), + thermal_info: thermal.map(Into::into), + structure: structure.into(), + slots: storage.into(), + })), + ObjectInterfaces { + structure: Some(structure), + storage: Some(storage), + memory_readable: None, + memory_writable: None, + logicable: Some(logic), + source_code: _sc, + circuit_holder: _ch, + item: None, + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: None, + wireless_transmit: _wt, + wireless_receive: _wr, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere, + thermal, + human: None, + } => Ok(ObjectTemplate::StructureLogic(StructureLogicTemplate { + prefab: obj.into(), + internal_atmo_info: internal_atmosphere.map(Into::into), + thermal_info: thermal.map(Into::into), + structure: structure.into(), + slots: storage.into(), + logic: logic.into(), + })), + ObjectInterfaces { + structure: Some(structure), + storage: Some(storage), + memory_readable: None, + memory_writable: None, + logicable: Some(logic), + source_code: _sc, + circuit_holder: _ch, + item: None, + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: Some(device), + wireless_transmit: _wt, + wireless_receive: _wr, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere, + thermal, + human: None, + } => Ok(ObjectTemplate::StructureLogicDevice( + StructureLogicDeviceTemplate { + prefab: obj.into(), + internal_atmo_info: internal_atmosphere.map(Into::into), + thermal_info: thermal.map(Into::into), + structure: structure.into(), + slots: storage.into(), + logic: logic.into(), + device: device.into(), + }, + )), + ObjectInterfaces { + structure: Some(structure), + storage: Some(storage), + memory_readable: Some(mem_r), + memory_writable: _mem_w, + logicable: Some(logic), + source_code: _sc, + circuit_holder: _ch, + item: None, + integrated_circuit: None, + programmable: None, + instructable: _inst, + logic_stack: _logic_stack, + device: Some(device), + wireless_transmit: _wt, + wireless_receive: _wr, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere, + thermal, + human: None, + } => Ok(ObjectTemplate::StructureLogicDeviceMemory( + StructureLogicDeviceMemoryTemplate { + prefab: obj.into(), + internal_atmo_info: internal_atmosphere.map(Into::into), + thermal_info: thermal.map(Into::into), + structure: structure.into(), + slots: storage.into(), + logic: logic.into(), + device: device.into(), + memory: mem_r.into(), + }, + )), + + // Item Objects + ObjectInterfaces { + structure: None, + storage: None, + memory_readable: None, + memory_writable: None, + logicable: None, + source_code: None, + circuit_holder: None, + item: Some(item), + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: None, + wireless_transmit: None, + wireless_receive: None, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere, + thermal, + human: None, + } => Ok(ObjectTemplate::Item(ItemTemplate { + prefab: obj.into(), + internal_atmo_info: internal_atmosphere.map(Into::into), + thermal_info: thermal.map(Into::into), + item: item.into(), + })), + ObjectInterfaces { + structure: None, + storage: Some(storage), + memory_readable: None, + memory_writable: None, + logicable: None, + source_code: None, + circuit_holder: None, + item: Some(item), + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: None, + wireless_transmit: None, + wireless_receive: None, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere, + thermal, + human: None, + } => Ok(ObjectTemplate::ItemSlots(ItemSlotsTemplate { + prefab: obj.into(), + internal_atmo_info: internal_atmosphere.map(Into::into), + thermal_info: thermal.map(Into::into), + item: item.into(), + slots: storage.into(), + })), + ObjectInterfaces { + structure: None, + storage: Some(storage), + memory_readable: None, + memory_writable: None, + logicable: Some(logic), + source_code: _sc, + circuit_holder: _ch, + item: Some(item), + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: None, + wireless_transmit: _wt, + wireless_receive: _wr, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere, + thermal, + human: None, + } => Ok(ObjectTemplate::ItemLogic(ItemLogicTemplate { + prefab: obj.into(), + internal_atmo_info: internal_atmosphere.map(Into::into), + thermal_info: thermal.map(Into::into), + item: item.into(), + slots: storage.into(), + logic: logic.into(), + })), + ObjectInterfaces { + structure: None, + storage: Some(storage), + memory_readable: Some(mem_r), + memory_writable: _mem_w, + logicable: Some(logic), + source_code: _sc, + circuit_holder: _ch, + item: Some(item), + integrated_circuit: _ic, + programmable: None, + instructable: _inst, + logic_stack: _logic_stack, + device: None, + wireless_transmit: _wt, + wireless_receive: _wr, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere, + thermal, + human: None, + } => Ok(ObjectTemplate::ItemLogicMemory(ItemLogicMemoryTemplate { + prefab: obj.into(), + internal_atmo_info: internal_atmosphere.map(Into::into), + thermal_info: thermal.map(Into::into), + item: item.into(), + slots: storage.into(), + logic: logic.into(), + memory: mem_r.into(), + })), + ObjectInterfaces { + structure: None, + storage: Some(storage), + memory_readable: None, + memory_writable: None, + logicable: None, + source_code: None, + circuit_holder: None, + item: None, + integrated_circuit: None, + programmable: None, + instructable: None, + logic_stack: None, + device: None, + wireless_transmit: None, + wireless_receive: None, + network: None, + plant: None, + suit: None, + chargeable: None, + reagent_requirer: None, + reagent_consumer: None, + fabricator: None, + internal_atmosphere: None, + thermal: Some(_), + human: Some(human), + } => Ok(ObjectTemplate::Human(HumanTemplate { + prefab: PrefabInfo { + prefab_name: "Character".to_string(), + prefab_hash: 294335127, + desc: "Character".to_string(), + name: "Character".to_string(), + }, + species: human.get_species(), + slots: storage.into(), + })), + _ => { + tracing::error!("Object interface has a non conforming pattern: {:?}", obj); + Err(TemplateError::NonConformingObject(obj.get_id())) + } + } +} + +impl From<&VMObject> for PrefabInfo { + fn from(obj: &VMObject) -> Self { + let obj_ref = obj.borrow(); + let obj_prefab = obj_ref.get_prefab(); + let prefab_lookup = StationpediaPrefab::from_repr(obj_prefab.hash); + PrefabInfo { + prefab_name: obj_prefab.value.clone(), + prefab_hash: obj_prefab.hash, + name: prefab_lookup + .and_then(|prefab| prefab.get_str("name")) + .unwrap_or("") + .to_string(), + desc: prefab_lookup + .and_then(|prefab| prefab.get_str("desc")) + .unwrap_or("") + .to_string(), + } + } +} + +impl From> for LogicInfo { + fn from(logic: LogicableRef) -> Self { + // Logicable: Storage -> !None + let storage = logic.as_storage().unwrap(); + let wt = logic.as_wireless_transmit(); + let wr = logic.as_wireless_receive(); + let circuit_holder = logic.as_circuit_holder(); + LogicInfo { + logic_slot_types: storage + .get_slots() + .iter() + .map(|(index, slot)| { + ( + *index as u32, + LogicSlotType::iter() + .filter_map(|slt| { + let readable = slot.readable_logic.contains(&slt); + let writeable = slot.writeable_logic.contains(&slt); + if readable && writeable { + Some((slt, MemoryAccess::ReadWrite)) + } else if readable { + Some((slt, MemoryAccess::Read)) + } else if writeable { + Some((slt, MemoryAccess::Write)) + } else { + None + } + }) + .collect(), + ) + }) + .collect(), + logic_types: logic + .valid_logic_types() + .iter() + .filter_map(|lt| { + let readable = logic.can_logic_read(*lt); + let writeable = logic.can_logic_write(*lt); + if readable && writeable { + Some((*lt, MemoryAccess::ReadWrite)) + } else if readable { + Some((*lt, MemoryAccess::Read)) + } else if writeable { + Some((*lt, MemoryAccess::Write)) + } else { + None + } + }) + .collect(), + + modes: logic + .known_modes() + .map(|modes| modes.iter().cloned().collect()), + transmission_receiver: wr.is_some(), + wireless_logic: wt.is_some(), + circuit_holder: circuit_holder.is_some(), + } + } +} + +impl From> for ItemInfo { + fn from(item: ItemRef<'_>) -> Self { + ItemInfo { + consumable: item.consumable(), + filter_type: item.filter_type(), + ingredient: item.ingredient(), + max_quantity: item.max_quantity(), + reagents: item.reagents().cloned(), + slot_class: item.slot_class(), + sorting_class: item.sorting_class(), + } + } +} + +impl From> for DeviceInfo { + fn from(device: DeviceRef) -> Self { + let _reagents: BTreeMap = device.get_reagents().iter().copied().collect(); + DeviceInfo { + connection_list: device + .connection_list() + .iter() + .map(|conn| conn.to_info()) + .collect(), + device_pins_length: device.device_pins().map(|pins| pins.len() as u32), + has_reagents: device.has_reagents(), + has_lock_state: device.has_lock_state(), + has_mode_state: device.has_mode_state(), + has_open_state: device.has_mode_state(), + has_on_off_state: device.has_on_off_state(), + has_color_state: device.has_color_state(), + has_atmosphere: device.has_atmosphere(), + has_activate_state: device.has_activate_state(), + } + } +} + +impl From> for StructureInfo { + fn from(value: StructureRef) -> Self { + StructureInfo { + small_grid: value.is_small_grid(), + } + } +} + +impl From> for MemoryInfo { + fn from(mem_r: MemoryReadableRef<'_>) -> Self { + let mem_w = mem_r.as_memory_writable(); + MemoryInfo { + instructions: None, // TODO: map info from `Instructable` and LogicStack traits + memory_access: if mem_w.is_some() { + MemoryAccess::ReadWrite + } else { + MemoryAccess::Read + }, + memory_size: mem_r.memory_size() as u32, + } + } +} + +impl From> for InternalAtmoInfo { + fn from(internal_atmo: InternalAtmosphereRef<'_>) -> Self { + InternalAtmoInfo { + volume: internal_atmo.get_volume() as f32, + } + } +} + +impl From> for ThermalInfo { + fn from(thermal: ThermalRef<'_>) -> Self { + ThermalInfo { + convection_factor: thermal.get_convection_factor(), + radiation_factor: thermal.get_radiation_factor(), + } + } +} + +impl From> for BTreeMap { + fn from(storage: StorageRef<'_>) -> Self { + storage + .get_slots() + .iter() + .map(|(_index, slot)| { + ( + slot.index as u32, + if slot.proxy { + SlotInfo::Proxy { + name: slot.name.clone(), + index: slot.index as u32, + } + } else { + SlotInfo::Direct { + name: slot.name.clone(), + class: slot.class, + index: slot.index as u32, + } + }, + ) + }) + .collect() + } +} diff --git a/ic10emu/src/vm/object/traits.rs b/ic10emu/src/vm/object/traits.rs new file mode 100644 index 0000000..9e41ee5 --- /dev/null +++ b/ic10emu/src/vm/object/traits.rs @@ -0,0 +1,563 @@ +use serde_derive::{Deserialize, Serialize}; + +use crate::{ + errors::ICError, + interpreter::ICState, + network::Connection, + vm::{ + instructions::{traits::ICInstructable, Instruction}, + object::{ + errors::{LogicError, MemoryError}, + macros::tag_object_traits, + ObjectID, Slot, VMObject, + }, + }, +}; +use stationeers_data::{ + enums::{ + basic::{Class, GasType, SortingClass}, + script::{LogicSlotType, LogicType}, + Species, + }, + templates::RecipeOrder, +}; +use std::{collections::BTreeMap, fmt::Debug}; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; + +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ParentSlotInfo { + pub parent: ObjectID, + pub slot: usize, +} + +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize, +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum StatState { + #[default] + Normal, + Warning, + Critical, +} + +tag_object_traits! { + #![object_trait(Object: Debug)] + + pub trait Structure { + fn is_small_grid(&self) -> bool; + } + + pub trait Storage { + /// Number of storage slots this object has + fn slots_count(&self) -> usize; + /// Get a reference to a indexed slot + fn get_slot(&self, index: usize) -> Option<&Slot>; + /// Get a mutable reference to a indexed slot + fn get_slot_mut(&mut self, index: usize) -> Option<&mut Slot>; + /// Get a vector of references to all an object's slots + fn get_slots(&self) -> Vec<(usize, &Slot)>; + /// Get a vector a mutable references to all an object's slots + fn get_slots_mut(&mut self) -> Vec<(usize, &mut Slot)>; + } + + pub trait MemoryReadable { + /// Size of an object memory, the count of f64 elements stored + fn memory_size(&self) -> usize; + /// Get the value at the indexed memory. + /// Errors if the index over or under flows the memory + fn get_memory(&self, index: i32) -> Result; + /// get a slice of the objects' memory + fn get_memory_slice(&self) -> &[f64]; + } + + pub trait MemoryWritable: MemoryReadable { + /// Set the value at the indexed memory + /// Errors if the index over or under flows the memory + fn set_memory(&mut self, index: i32, val: f64) -> Result<(), MemoryError>; + /// Reset all an object's memory (typically to all zero values) + fn clear_memory(&mut self); + } + + pub trait Logicable: Storage { + /// The crc32 hash of the object's prefab name + fn prefab_hash(&self) -> i32; + /// The crc32 hash of an object's name + fn name_hash(&self) -> i32; + /// If the object has *any* readable logic fields + fn is_logic_readable(&self) -> bool; + /// If the object has *any* writable logic fields + fn is_logic_writeable(&self) -> bool; + /// Can the logic type be read form this object + fn can_logic_read(&self, lt: LogicType) -> bool; + /// Can the logic type be written to this object + fn can_logic_write(&self, lt: LogicType) -> bool; + /// Write the value of the logic type on this object. + /// Errors if the type can not be written to. + /// force will allow special cases for existing values that arn't + /// normally writable. + /// This is for use outside of ic10 code but does not guarantee the + /// value will write or that no error will result. + /// If a logic type is not present on an object the force write will still error. + fn set_logic(&mut self, lt: LogicType, value: f64, force: bool) -> Result<(), LogicError>; + /// Read the value of the logic type on this object. + /// Errors if a logic type is not readable + fn get_logic(&self, lt: LogicType) -> Result; + /// Can a slot logic type be read from the indexed slot + fn can_slot_logic_read(&self, slt: LogicSlotType, index: f64) -> bool; + /// Read a slot logic type value from an index slot + fn get_slot_logic(&self, slt: LogicSlotType, index: f64) -> Result; + /// Returns a vector of the `LogicType`'s that could be read or written to or form this + /// object + fn valid_logic_types(&self) -> Vec; + /// If this object has modes returns a vector of (value, name) pairs + fn known_modes(&self) -> Option>; + } + + pub trait SourceCode { + /// Set the source code for this object. + /// Errors if the source code has compilation errors. + fn set_source_code(&mut self, code: &str) -> Result<(), ICError>; + /// Set the source code for this object, lines that fail to compile are reduced to nops. + fn set_source_code_with_invalid(&mut self, code: &str); + /// Return the source code form this object + fn get_source_code(&self) -> String; + /// Return the compiled instruction and it's operands at the indexed line in the source + /// code. + fn get_line(&self, line: usize) -> Result; + /// Return a vector of any errors encountered while compiling the source with `set_source_code_with_invalid` + fn get_compile_errors(&self) -> Vec; + } + + pub trait CircuitHolder: Logicable + Storage { + /// Clear any error set on the circuit holder + fn clear_error(&mut self); + /// Set an int error value on the circuit holder + fn set_error(&mut self, state: i32); + /// Get a reference (which may be self) to a logicable object based on an index + /// (`db`, `d0`, `d1` etc.). + /// for a StructureCircuitHolder this would be the set pins + /// fpr a tablet or suit this would be the parent human's equipment + /// i32::MAX is db + fn get_logicable_from_index( + &self, + device: i32, + connection: Option, + ) -> Option; + /// Get a mutable reference (which may be self) to a logicable object based on an index + /// (`db`, `d0`, `d1` etc.). + /// for a StructureCircuitHolder this would be the set pins + /// fpr a tablet or suit this would be the parent human's equipment + /// i32::MAX is db + fn get_logicable_from_index_mut( + &mut self, + device: i32, + connection: Option, + ) -> Option; + /// Use an object id to get a reference to an object network visible object. + /// uses ObjectRef in case the object ID is it's own ID + fn get_logicable_from_id( + &self, + device: ObjectID, + connection: Option, + ) -> Option; + /// Use an object id to get a mutable reference to an object network visible object. + /// uses ObjectRefMut in case the object ID is it's own ID + fn get_logicable_from_id_mut( + &mut self, + device: ObjectID, + connection: Option, + ) -> Option; + /// Get the programmable circuit object slotted into this circuit holder + fn get_ic(&self) -> Option; + /// Execute a `hcf` instruction + fn halt_and_catch_fire(&mut self); + } + + pub trait Item { + /// Is an item consumable? + fn consumable(&self) -> bool; + /// If an item is a filter what gas is it for? + fn filter_type(&self) -> Option; + /// Is this item an ingredient ? + fn ingredient(&self) -> bool; + /// The max quantity this item stacks to + fn max_quantity(&self) -> u32; + /// Map of the reagents to the quantity produces by processing this item + fn reagents(&self) -> Option<&BTreeMap>; + /// The class of item this is for storage slots + fn slot_class(&self) -> Class; + /// The sorting class of the item + fn sorting_class(&self) -> SortingClass; + /// The parent object and slot index this item is stored in + fn get_parent_slot(&self) -> Option; + /// Set the parent object and slot index this object is stored in + fn set_parent_slot(&mut self, info: Option); + /// Get the damage 0.0 is no damage, 1.0 is full damage + fn get_damage(&self) -> f32; + /// Set the damage of the object, 0.0 is no damage, 1.0 is full damage + fn set_damage(&mut self, damage: f32); + /// If this object is stored in a human's inventory or in an inventory down the chain from + /// a human, return that human + fn root_parent_human(&self) -> Option { + self.get_parent_slot().and_then(|info| { + if let Some(obj) = self.get_vm().get_object(info.parent) { + if obj.borrow().as_human().is_some() { + return Some(obj); + } + let obj_ref = obj.borrow(); + if let Some(item) = obj_ref.as_item() { + return item.root_parent_human() + } + } + None + }) + } + } + + pub trait Plant { + fn get_efficiency(&self) -> f64; + fn get_health(&self) -> f64; + fn get_growth(&self) -> f64; + fn is_mature(&self) -> bool; + fn is_seeding(&self) -> bool; + } + + pub trait Suit: Item + Storage { + fn pressure_waste(&self) -> f32; + fn pressure_waste_max(&self) -> f32; + fn pressure_air(&self) -> f32; + } + + pub trait InternalAtmosphere { + fn get_volume(&self) -> f64; + } + + pub trait Thermal { + fn get_convection_factor(&self) -> f32; + fn get_radiation_factor(&self) -> f32; + } + + pub trait IntegratedCircuit: Logicable + MemoryWritable + SourceCode + Item { + /// Get the object that acts as the circuit holder for this object + fn get_circuit_holder(&self) -> Option; + /// Get the current instruction pointer + fn get_instruction_pointer(&self) -> u32; + /// Set the next instruction to execute. The instruction pointer is set to this value once + /// execution of the current instruction is complete. + fn set_next_instruction(&mut self, next_instruction: f64); + /// Set the next instruction to execute relative to the current instruction pointer. + /// The instruction pointer is set to this value once execution of the current + /// instruction is complete. + fn set_next_instruction_relative(&mut self, offset: f64) { + self.set_next_instruction(self.get_instruction_pointer() as f64 + offset); + } + /// Reset the circuit. The instruction pointer, instruction count since last yield, all + /// registers and memory are set to 0; aliases and defines are cleared; state is set back + /// to start. + fn reset(&mut self); + /// When given some indirection level and a first target read registers values as + /// targets while reducing indirection level by one until it reaches to 0 + /// to find the real target. + /// Errors if any index along the chain is out of range + fn get_real_target(&self, indirection: u32, target: u32) -> Result; + /// Return a register value through possible indirection + /// Errors if any index along the chain is out of range + fn get_register(&self, indirection: u32, target: u32) -> Result; + /// Get a slice of all registers + fn get_registers(&self) -> &[f64]; + /// Get a mutable slice of all registers + fn get_registers_mut(&mut self) -> &mut [f64]; + /// Set a register value through possible indirection + /// Errors if any index along the chain is out of range + fn set_register(&mut self, indirection: u32, target: u32, val: f64) -> Result; + /// Set the return address register's value + fn set_return_address(&mut self, addr: f64); + /// Set the return address to the instruction after the current instruction pointer + fn al(&mut self) { + self.set_return_address(self.get_instruction_pointer() as f64 + 1.0); + } + /// Write value to the stack memory at the current stack pointer and advance stack pointer + /// Errors for stack under or overflow of the stack pointer + fn push_stack(&mut self, val: f64) -> Result; + /// Read value from the stack memory at the current stack pointer and decrement the stack pointer + /// Errors for stack under or overflow of the stack pointer + fn pop_stack(&mut self) -> Result; + /// Read the value form the stack memory at the current stack pointer and leave the stack pointer + /// at the same location + /// Errors for stack under or overflow of the stack pointer + fn peek_stack(&self) -> Result; + /// Read the value from the stack memory at indexed address + /// Errors for stack under or overflow of the address + fn get_stack(&self, addr: f64) -> Result; + /// Write the value to the stack memory at the indexed address + /// Errors for stack under or overflow of the address + fn put_stack(&mut self, addr: f64, val: f64) -> Result; + /// Get a reference to the alias Map + fn get_aliases(&self) -> &BTreeMap; + /// Get a mutable reference to the alias Map + fn get_aliases_mut(&mut self) -> &mut BTreeMap; + /// Get a reference to the define Map + fn get_defines(&self) -> &BTreeMap; + /// Get a mutable reference to the define Map + fn get_defines_mut(&mut self) -> &mut BTreeMap; + /// Get a reference to the labels Map + fn get_labels(&self) -> &BTreeMap; + /// Get the current circuit state. (Start, Yield, Sleep, Error, etc.) + fn get_state(&self) -> ICState; + /// Set the current circuit state. (Start, Yield, Sleep, Error, etc.) + fn set_state(&mut self, state: ICState); + /// Get the count of instructions executed since the last yield + fn get_instructions_since_yield(&self) -> u16; + } + + pub trait Programmable: ICInstructable { + fn step(&mut self, advance_ip_on_err: bool) -> Result<(), crate::errors::ICError>; + } + + pub trait Chargeable { + fn get_charge(&self) -> f32; + fn set_charge(&mut self, charge: f32); + fn get_max_charge(&self) -> f32; + fn get_charge_ratio(&self) -> f32 { + self.get_charge() / self.get_max_charge() + } + fn get_charge_delta(&self) -> f32 { + self.get_charge() - self.get_max_charge() + } + fn is_empty(&self) -> bool { + self.get_charge() == 0.0 + } + } + + pub trait Instructable: MemoryWritable { + // fn get_instructions(&self) -> Vec + } + + pub trait LogicStack: MemoryWritable { + // fn logic_stack(&self) -> LogicStack; + } + + pub trait Device: Logicable { + /// Can the slot logic type be written to the object at the indexed slot + fn can_slot_logic_write(&self, slt: LogicSlotType, index: f64) -> bool; + /// Write to the slot logic type at the indexed slot + /// Errors if the index is out of range or the slot logic type is not writable + fn set_slot_logic( + &mut self, + slt: LogicSlotType, + index: f64, + value: f64, + force: bool, + ) -> Result<(), LogicError>; + /// Get a slice of the Device's network connections + fn connection_list(&self) -> &[Connection]; + /// Get a mutable slice of the Device's network connections + fn connection_list_mut(&mut self) -> &mut [Connection]; + /// Get a slice of the devices "pins" (connected object Ids) if the device has pins + fn device_pins(&self) -> Option<&[Option]>; + /// Get a mutable slice of the devices "pins" (connected object Ids) if the device has pins + fn device_pins_mut(&mut self) -> Option<&mut [Option]>; + /// Does the device respond to Activate + fn has_activate_state(&self) -> bool; + /// Does the device have an internal atmosphere + fn has_atmosphere(&self) -> bool; + /// Does the device have a Color state + fn has_color_state(&self) -> bool; + /// Does the device have a Lock state + fn has_lock_state(&self) -> bool; + /// Does the device have a mode state + fn has_mode_state(&self) -> bool; + /// Does the device have an On / off state + fn has_on_off_state(&self) -> bool; + /// Does the device have an Open state + fn has_open_state(&self) -> bool; + /// Does the device store reagents + fn has_reagents(&self) -> bool; + /// Return vector of (reagent_hash, quantity) pairs + fn get_reagents(&self) -> Vec<(u8, f64)>; + /// Overwrite present reagents + fn set_reagents(&mut self, reagents: &[(u8, f64)]); + /// Adds the reagents to contents + fn add_reagents(&mut self, reagents: &[(u8, f64)]); + } + + pub trait ReagentConsumer { + fn can_process_reagent(&self, reagent: u8) -> bool; + fn get_resources_used(&self) -> Vec; + } + + pub trait ReagentRequirer: Device { + /// the currently selected Recipe and Order + fn get_current_recipe(&self) -> Option; + /// Reagents required to complete current recipe + fn get_current_required(&self) -> Vec<(u8, f64)>; + /// Map Reagent hash to Prefab Hash + fn get_prefab_hash_from_reagent_hash(&self, reagent_hash: i32) -> Option; + } + + pub trait Fabricator: ReagentRequirer { + } + + pub trait WirelessTransmit: Logicable {} + + pub trait WirelessReceive: Logicable {} + + pub trait Network: Logicable { + /// Does the network contain the Object id + fn contains(&self, id: &ObjectID) -> bool; + /// Does the network contain all the object ids + fn contains_all(&self, ids: &[ObjectID]) -> bool; + /// Does the network contain the object id on a data connection + fn contains_data(&self, id: &ObjectID) -> bool; + /// Does the network contain all the object ids on a data connection + fn contains_all_data(&self, ids: &[ObjectID]) -> bool; + /// Does the network contain the object id on a power connection + fn contains_power(&self, id: &ObjectID) -> bool; + /// Does the network contain all the object ids on a power connection + fn contains_all_power(&self, ids: &[ObjectID]) -> bool; + /// Return a vector of all object ids visible to the data connection of the source ID object + fn data_visible(&self, source: &ObjectID) -> Vec; + /// Add the object to the network as a data connection + fn add_data(&mut self, id: ObjectID) -> bool; + /// Add the object id as a power connection + fn add_power(&mut self, id: ObjectID) -> bool; + /// remove the object id for both power and data connections if present in either + fn remove_all(&mut self, id: ObjectID) -> bool; + /// remove the object id from data network + fn remove_data(&mut self, id: ObjectID) -> bool; + /// remove object id from power network + fn remove_power(&mut self, id: ObjectID) -> bool; + /// get all data connected devices + fn get_devices(&self) -> Vec; + /// get all power connected devices + fn get_power_only(&self) -> Vec; + /// get a slice of the channel data values + fn get_channel_data(&self) -> &[f64; 8]; + } + + pub trait Human : Storage { + fn get_species(&self) -> Species; + fn get_damage(&self) -> f32; + fn set_damage(&mut self, damage: f32); + fn get_nutrition(&self) -> f32; + fn set_nutrition(&mut self, nutrition: f32); + fn nutrition_state(&self) -> StatState; + fn get_hydration(&self) -> f32; + fn set_hydration(&mut self, hydration: f32); + fn hydration_state(&self) -> StatState; + fn get_oxygenation(&self) -> f32; + fn set_oxygenation(&mut self, oxygenation: f32); + fn get_food_quality(&self) -> f32; + fn set_food_quality(&mut self, quality: f32); + fn get_mood(&self) -> f32; + fn set_mood(&mut self, mood: f32); + fn mood_state(&self) -> StatState; + fn get_hygiene(&self) -> f32; + fn set_hygiene(&mut self, hygiene: f32); + fn hygiene_state(&self) -> StatState; + fn is_artificial(&self) -> bool; + fn robot_battery(&self) -> Option; + fn suit_slot(&self) -> &Slot; + fn suit_slot_mut(&mut self) -> &mut Slot; + fn helmet_slot(&self) -> &Slot; + fn helmet_slot_mut(&mut self) -> &mut Slot; + fn glasses_slot(&self) -> &Slot; + fn glasses_slot_mut(&mut self) -> &mut Slot; + fn backpack_slot(&self) -> &Slot; + fn backpack_slot_mut(&mut self) -> &mut Slot; + fn left_hand_slot(&self) -> &Slot; + fn left_hand_slot_mut(&mut self) -> &mut Slot; + fn right_hand_slot(&self) -> &Slot; + fn right_hand_slot_mut(&mut self) -> &mut Slot; + fn uniform_slot(&self) -> &Slot; + fn uniform_slot_mut(&mut self) -> &mut Slot; + fn toolbelt_slot(&self) -> &Slot; + fn toolbelt_slot_mut(&mut self) -> &mut Slot; + } + +} + +impl Debug for dyn Object { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Object{{id: {:?}, type: {}, interfaces: {:?}}}", + self.get_id(), + self.type_name(), + ObjectInterfaces::from_object(self), + ) + } +} + +impl SourceCode for T { + fn debug_source_code(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "source_code: {:?}", self.get_source_code()) + } + fn get_line(&self, line: usize) -> Result { + let ic = self.get_ic().ok_or(ICError::DeviceHasNoIC)?; + let result = ic + .borrow() + .as_source_code() + .ok_or(ICError::DeviceHasNoIC)? + .get_line(line); + result.clone() + } + fn set_source_code(&mut self, code: &str) -> Result<(), ICError> { + self.get_ic() + .and_then(|obj| { + obj.borrow_mut() + .as_mut_source_code() + .map(|source| source.set_source_code(code)) + }) + .transpose()?; + Ok(()) + } + fn set_source_code_with_invalid(&mut self, code: &str) { + self.get_ic().and_then(|obj| { + obj.borrow_mut() + .as_mut_source_code() + .map(|source| source.set_source_code_with_invalid(code)) + }); + } + fn get_source_code(&self) -> String { + self.get_ic() + .and_then(|obj| { + obj.borrow() + .as_source_code() + .map(|source| source.get_source_code()) + }) + .unwrap_or_default() + } + fn get_compile_errors(&self) -> Vec { + self.get_ic() + .and_then(|obj| { + obj.borrow() + .as_source_code() + .map(|source| source.get_compile_errors()) + }) + .unwrap_or_default() + } +} diff --git a/ic10emu_wasm/Cargo.toml b/ic10emu_wasm/Cargo.toml index 05c907d..a871eac 100644 --- a/ic10emu_wasm/Cargo.toml +++ b/ic10emu_wasm/Cargo.toml @@ -5,30 +5,59 @@ version.workspace = true edition.workspace = true [dependencies] -ic10emu = { path = "../ic10emu" } -console_error_panic_hook = {version = "0.1.7", optional = true} +stationeers_data = { path = "../stationeers_data", features = ["tsify"] } +ic10emu = { path = "../ic10emu", features = ["tsify"] } +console_error_panic_hook = { version = "0.1.7", optional = true } js-sys = "0.3.69" web-sys = { version = "0.3.69", features = ["WritableStream", "console"] } -wasm-bindgen = "0.2.81" -wasm-bindgen-futures = { version = "0.4.30", features = [ +wasm-bindgen = "0.2.92" +wasm-bindgen-futures = { version = "0.4.42", features = [ "futures-core-03-stream", ] } wasm-streams = "0.4" serde-wasm-bindgen = "0.6.5" -itertools = "0.12.1" -serde = { version = "1.0.197", features = ["derive"] } -serde_with = "3.7.0" -tsify = { version = "0.4.5", default-features = false, features = ["js", "wasm-bindgen"] } -thiserror = "1.0.58" - -[build-dependencies] -ic10emu = { path = "../ic10emu" } -strum = { version = "0.26.2"} -itertools = "0.12.1" +serde_path_to_error = "0.1.16" +serde_ignored = "0.1.10" +color-eyre = "0.6.3" +itertools = "0.13.0" +serde = { version = "1.0.202", features = ["derive"] } +serde_with = "3.8.1" +tsify = { version = "0.4.5", features = ["js"] } +thiserror = "1.0.61" +serde_derive = "1.0.203" +serde_json = "1.0.117" +tracing-wasm = "0.2.1" +tracing = "0.1.40" [features] default = ["console_error_panic_hook"] console_error_panic_hook = ["dep:console_error_panic_hook"] +prefab_database = [ + "ic10emu/prefab_database", + "stationeers_data/prefab_database", +] [lib] crate-type = ["cdylib", "rlib"] + +[package.metadata.wasm-pack.profile.dev] +wasm-opt = ['-O'] + +[package.metadata.wasm-pack.profile.dev.wasm-bindgen] +# Should we enable wasm-bindgen's debug assertions in its generated JS glue? +debug-js-glue = true +# Should wasm-bindgen demangle the symbols in the "name" custom section? +demangle-name-section = true +# Should we emit the DWARF debug info custom sections? +dwarf-debug-info = false +# Should we omit the default import path? +omit-default-module-path = false + +[package.metadata.wasm-pack.profile.release] +wasm-opt = ['-Os'] + +[package.metadata.wasm-pack.profile.release.wasm-bindgen] +debug-js-glue = false +demangle-name-section = true +dwarf-debug-info = false +omit-default-module-path = false diff --git a/ic10emu_wasm/build.rs b/ic10emu_wasm/build.rs deleted file mode 100644 index a2dda24..0000000 --- a/ic10emu_wasm/build.rs +++ /dev/null @@ -1,96 +0,0 @@ -use std::{ - env, - fs::{self, File}, - io::{BufWriter, Write}, - path::Path, -}; - -use itertools::Itertools; -use strum::IntoEnumIterator; - -fn main() { - let out_dir = env::var_os("OUT_DIR").unwrap(); - let dest_path = Path::new(&out_dir).join("ts_types.rs"); - let output_file = File::create(dest_path).unwrap(); - let mut writer = BufWriter::new(&output_file); - - let mut ts_types: String = String::new(); - - let lt_tsunion: String = Itertools::intersperse( - ic10emu::grammar::generated::LogicType::iter().map(|lt| format!("\"{}\"", lt.as_ref())), - "\n | ".to_owned(), - ) - .collect(); - let lt_tstype = format!("\nexport type LogicType = {};", lt_tsunion); - ts_types.push_str(<_tstype); - - let slt_tsunion: String = Itertools::intersperse( - ic10emu::grammar::generated::SlotLogicType::iter().map(|slt| format!("\"{}\"", slt.as_ref())), - "\n | ".to_owned(), - ) - .collect(); - let slt_tstype = format!("\nexport type SlotLogicType = {};", slt_tsunion); - ts_types.push_str(&slt_tstype); - - let bm_tsunion: String = Itertools::intersperse( - ic10emu::grammar::generated::BatchMode::iter().map(|bm| format!("\"{}\"", bm.as_ref())), - "\n | ".to_owned(), - ) - .collect(); - let bm_tstype = format!("\nexport type BatchMode = {};", bm_tsunion); - ts_types.push_str(&bm_tstype); - - let rm_tsunion: String = Itertools::intersperse( - ic10emu::grammar::generated::ReagentMode::iter().map(|rm| format!("\"{}\"", rm.as_ref())), - "\n | ".to_owned(), - ) - .collect(); - let rm_tstype = format!("\nexport type ReagentMode = {};", rm_tsunion); - ts_types.push_str(&rm_tstype); - - let sc_tsunion: String = Itertools::intersperse( - ic10emu::device::SortingClass::iter().map(|rm| format!("\"{}\"", rm.as_ref())), - "\n | ".to_owned(), - ) - .collect(); - let sc_tstype = format!("\nexport type SortingClass = {};", sc_tsunion); - ts_types.push_str(&sc_tstype); - - let st_tsunion: String = Itertools::intersperse( - ic10emu::device::SlotType::iter().map(|rm| format!("\"{}\"", rm.as_ref())), - "\n | ".to_owned(), - ) - .collect(); - let st_tstype = format!("\nexport type SlotType = {};", st_tsunion); - ts_types.push_str(&st_tstype); - - let ct_tsunion: String = Itertools::intersperse( - ic10emu::network::ConnectionType::iter().map(|rm| format!("\"{}\"", rm.as_ref())), - "\n | ".to_owned(), - ) - .collect(); - let ct_tstype = format!("\nexport type ConnectionType = {};", ct_tsunion); - ts_types.push_str(&ct_tstype); - - let cr_tsunion: String = Itertools::intersperse( - ic10emu::network::ConnectionRole::iter().map(|rm| format!("\"{}\"", rm.as_ref())), - "\n | ".to_owned(), - ) - .collect(); - let cr_tstype = format!("\nexport type ConnectionRole = {};", cr_tsunion); - ts_types.push_str(&cr_tstype); - - let infile = Path::new("src/types.ts"); - let contents = fs::read_to_string(infile).unwrap(); - - ts_types.push('\n'); - ts_types.push_str(&contents); - - write!( - &mut writer, - "#[wasm_bindgen(typescript_custom_section)]\n\ - const TYPES: &'static str = r#\"{ts_types}\"#; - " - ) - .unwrap(); -} diff --git a/ic10emu_wasm/src/lib.rs b/ic10emu_wasm/src/lib.rs index 4204bb2..688580b 100644 --- a/ic10emu_wasm/src/lib.rs +++ b/ic10emu_wasm/src/lib.rs @@ -1,20 +1,28 @@ #[macro_use] mod utils; -mod types; +// mod types; use ic10emu::{ - device::{Device, DeviceTemplate, SlotOccupantTemplate}, - grammar::{LogicType, SlotLogicType}, - vm::{FrozenVM, VMError, VM}, + errors::{ICError, TemplateError, VMError}, + network::FrozenCableNetwork, + vm::{ + object::{ + templates::{FrozenObject, FrozenObjectFull}, + ObjectID, + }, + FrozenVM, VM, + }, }; -use serde::{Deserialize, Serialize}; -use types::{Registers, Stack}; - -use std::{cell::RefCell, rc::Rc, str::FromStr}; - use itertools::Itertools; -// use std::iter::FromIterator; -// use itertools::Itertools; +use serde_derive::{Deserialize, Serialize}; + +use stationeers_data::{ + enums::script::{LogicSlotType, LogicType}, + templates::{ObjectTemplate, Reagent}, +}; + +use std::{collections::BTreeMap, rc::Rc}; + use wasm_bindgen::prelude::*; #[wasm_bindgen] @@ -22,12 +30,6 @@ extern "C" { fn alert(s: &str); } -#[wasm_bindgen] -pub struct DeviceRef { - device: Rc>, - vm: Rc>, -} - use thiserror::Error; #[derive(Error, Debug, Serialize, Deserialize)] @@ -38,481 +40,451 @@ pub enum BindingError { OutOfBounds(usize, usize), } -#[wasm_bindgen] -impl DeviceRef { - fn from_device(device: Rc>, vm: Rc>) -> Self { - DeviceRef { device, vm } - } - - #[wasm_bindgen(getter)] - pub fn id(&self) -> u32 { - self.device.borrow().id - } - - #[wasm_bindgen(getter)] - pub fn ic(&self) -> Option { - self.device.borrow().ic - } - - #[wasm_bindgen(getter)] - pub fn name(&self) -> Option { - self.device.borrow().name.clone() - } - - #[wasm_bindgen(getter, js_name = "nameHash")] - pub fn name_hash(&self) -> Option { - self.device.borrow().name_hash - } - - #[wasm_bindgen(getter, js_name = "prefabName")] - pub fn prefab_name(&self) -> Option { - self.device - .borrow() - .prefab - .as_ref() - .map(|prefab| prefab.name.clone()) - } - - #[wasm_bindgen(getter, js_name = "prefabHash")] - pub fn prefab_hash(&self) -> Option { - self.device - .borrow() - .prefab - .as_ref() - .map(|prefab| prefab.hash) - } - - #[wasm_bindgen(getter, skip_typescript)] - pub fn fields(&self) -> JsValue { - serde_wasm_bindgen::to_value(&self.device.borrow().get_fields(&self.vm.borrow())).unwrap() - } - - #[wasm_bindgen(getter)] - pub fn slots(&self) -> types::Slots { - types::Slots::from_iter(self.device.borrow().slots.iter()) - } - - #[wasm_bindgen(getter, skip_typescript)] - pub fn reagents(&self) -> JsValue { - serde_wasm_bindgen::to_value(&self.device.borrow().reagents).unwrap() - } - - #[wasm_bindgen(getter, skip_typescript)] - pub fn connections(&self) -> JsValue { - serde_wasm_bindgen::to_value(&self.device.borrow().connections).unwrap() - } - - #[wasm_bindgen(getter, js_name = "ip")] - pub fn ic_ip(&self) -> Option { - self.device.borrow().ic.as_ref().and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.as_ref().borrow().ip()) - }) - } - - #[wasm_bindgen(getter, js_name = "instructionCount")] - pub fn ic_instruction_count(&self) -> Option { - self.device.borrow().ic.as_ref().and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.as_ref().borrow().ic.get()) - }) - } - - #[wasm_bindgen(getter, js_name = "stack")] - pub fn ic_stack(&self) -> Option { - self.device.borrow().ic.as_ref().and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| Stack(*ic.as_ref().borrow().stack.borrow())) - }) - } - - #[wasm_bindgen(getter, js_name = "registers")] - pub fn ic_registers(&self) -> Option { - self.device.borrow().ic.as_ref().and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| Registers(*ic.as_ref().borrow().registers.borrow())) - }) - } - - #[wasm_bindgen(getter, js_name = "aliases", skip_typescript)] - pub fn ic_aliases(&self) -> JsValue { - let aliases = &self.device.borrow().ic.as_ref().and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.as_ref().borrow().aliases.borrow().clone()) - }); - serde_wasm_bindgen::to_value(aliases).unwrap() - } - - #[wasm_bindgen(getter, js_name = "defines", skip_typescript)] - pub fn ic_defines(&self) -> JsValue { - let defines = &self.device.borrow().ic.as_ref().and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.as_ref().borrow().defines.borrow().clone()) - }); - serde_wasm_bindgen::to_value(defines).unwrap() - } - - #[wasm_bindgen(getter, js_name = "pins", skip_typescript)] - pub fn ic_pins(&self) -> JsValue { - let pins = &self.device.borrow().ic.as_ref().and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| *ic.as_ref().borrow().pins.borrow()) - }); - serde_wasm_bindgen::to_value(pins).unwrap() - } - - #[wasm_bindgen(getter, js_name = "state")] - pub fn ic_state(&self) -> Option { - self.device - .borrow() - .ic - .as_ref() - .and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.borrow().state.clone()) - }) - .map(|state| state.borrow().to_string()) - } - - #[wasm_bindgen(getter, js_name = "program", skip_typescript)] - pub fn ic_program(&self) -> JsValue { - let prog = &self.device.borrow().ic.as_ref().and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.borrow().program.borrow().clone()) - }); - serde_wasm_bindgen::to_value(prog).unwrap() - } - - #[wasm_bindgen(getter, js_name = "code")] - pub fn get_code(&self) -> Option { - self.device.borrow().ic.as_ref().and_then(|ic| { - self.vm - .borrow() - .ics - .get(ic) - .map(|ic| ic.borrow().code.borrow().clone()) - }) - } - - #[wasm_bindgen(js_name = "step")] - pub fn step_ic(&self, advance_ip_on_err: bool) -> Result { - let id = self.device.borrow().id; - Ok(self.vm.borrow().step_ic(id, advance_ip_on_err)?) - } - - #[wasm_bindgen(js_name = "run")] - pub fn run_ic(&self, ignore_errors: bool) -> Result { - let id = self.device.borrow().id; - Ok(self.vm.borrow().run_ic(id, ignore_errors)?) - } - - #[wasm_bindgen(js_name = "reset")] - pub fn reset_ic(&self) -> Result { - let id = self.device.borrow().id; - Ok(self.vm.borrow().reset_ic(id)?) - } - - #[wasm_bindgen(js_name = "setCode")] - /// Set program code if it's valid - pub fn set_code(&self, code: &str) -> Result { - let id = self.device.borrow().id; - Ok(self.vm.borrow().set_code(id, code)?) - } - - #[wasm_bindgen(js_name = "setCodeInvalid")] - /// Set program code and translate invalid lines to Nop, collecting errors - pub fn set_code_invlaid(&self, code: &str) -> Result { - let id = self.device.borrow().id; - Ok(self.vm.borrow().set_code_invalid(id, code)?) - } - - #[wasm_bindgen(js_name = "setRegister")] - pub fn ic_set_register(&self, index: u32, val: f64) -> Result { - let ic_id = *self - .device - .borrow() - .ic - .as_ref() - .ok_or(VMError::NoIC(self.device.borrow().id))?; - let vm_borrow = self.vm.borrow(); - let ic = vm_borrow - .ics - .get(&ic_id) - .ok_or(VMError::NoIC(self.device.borrow().id))?; - let result = ic.borrow_mut().set_register(0, index, val)?; - Ok(result) - } - - #[wasm_bindgen(js_name = "setStack")] - pub fn ic_set_stack(&self, address: f64, val: f64) -> Result { - let ic_id = *self - .device - .borrow() - .ic - .as_ref() - .ok_or(VMError::NoIC(self.device.borrow().id))?; - let vm_borrow = self.vm.borrow(); - let ic = vm_borrow - .ics - .get(&ic_id) - .ok_or(VMError::NoIC(self.device.borrow().id))?; - let result = ic.borrow_mut().poke(address, val)?; - Ok(result) - } - - #[wasm_bindgen(js_name = "setName")] - pub fn set_name(&self, name: &str) { - self.device.borrow_mut().set_name(name) - } - - #[wasm_bindgen(js_name = "setField", skip_typescript)] - pub fn set_field(&self, field: &str, value: f64, force: bool) -> Result<(), JsError> { - let logic_typ = LogicType::from_str(field)?; - let mut device_ref = self.device.borrow_mut(); - device_ref.set_field(logic_typ, value, &self.vm.borrow(), force)?; - Ok(()) - } - - #[wasm_bindgen(js_name = "setSlotField", skip_typescript)] - pub fn set_slot_field( - &self, - slot: f64, - field: &str, - value: f64, - force: bool, - ) -> Result<(), JsError> { - let logic_typ = SlotLogicType::from_str(field)?; - let mut device_ref = self.device.borrow_mut(); - device_ref.set_slot_field(slot, logic_typ, value, &self.vm.borrow(), force)?; - Ok(()) - } - - #[wasm_bindgen(js_name = "getSlotField", skip_typescript)] - pub fn get_slot_field(&self, slot: f64, field: &str) -> Result { - let logic_typ = SlotLogicType::from_str(field)?; - let device_ref = self.device.borrow_mut(); - Ok(device_ref.get_slot_field(slot, logic_typ, &self.vm.borrow())?) - } - - #[wasm_bindgen(js_name = "getSlotFields", skip_typescript)] - pub fn get_slot_fields(&self, slot: f64) -> Result { - let device_ref = self.device.borrow_mut(); - let fields = device_ref.get_slot_fields(slot, &self.vm.borrow())?; - Ok(serde_wasm_bindgen::to_value(&fields).unwrap()) - } - - #[wasm_bindgen(js_name = "setConnection")] - pub fn set_connection(&self, conn: usize, net: Option) -> Result<(), JsError> { - let device_id = self.device.borrow().id; - self.vm - .borrow() - .set_device_connection(device_id, conn, net)?; - Ok(()) - } - - #[wasm_bindgen(js_name = "removeDeviceFromNetwork")] - pub fn remove_device_from_network(&self, network_id: u32) -> Result { - let id = self.device.borrow().id; - Ok(self - .vm - .borrow() - .remove_device_from_network(id, network_id)?) - } - - #[wasm_bindgen(js_name = "setPin")] - pub fn set_pin(&self, pin: usize, val: Option) -> Result { - let id = self.device.borrow().id; - Ok(self.vm.borrow().set_pin(id, pin, val)?) - } -} - #[wasm_bindgen] #[derive(Debug)] pub struct VMRef { - vm: Rc>, + vm: Rc, } +use tsify::Tsify; + +#[derive(Clone, Debug, Serialize, Deserialize, Tsify)] +#[tsify(into_wasm_abi, from_wasm_abi)] +pub struct TemplateDatabase(BTreeMap); + +impl IntoIterator for TemplateDatabase { + type Item = (i32, ObjectTemplate); + type IntoIter = std::collections::btree_map::IntoIter; + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +#[derive(Clone, Debug, Serialize, Deserialize, Tsify)] +#[tsify(into_wasm_abi, from_wasm_abi)] +pub struct ReagentDatabase(BTreeMap); + +impl IntoIterator for ReagentDatabase { + type Item = (u8, Reagent); + type IntoIter = std::collections::btree_map::IntoIter; + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +#[derive(Clone, Debug, Serialize, Deserialize, Tsify)] +#[tsify(into_wasm_abi, from_wasm_abi)] +pub struct FrozenObjects(Vec); + +impl IntoIterator for FrozenObjects { + type Item = FrozenObjectFull; + type IntoIter = std::vec::IntoIter; + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +#[derive(Clone, Debug, Serialize, Deserialize, Tsify)] +#[tsify(into_wasm_abi, from_wasm_abi)] +pub struct FrozenObjectsSparse(Vec); + +impl IntoIterator for FrozenObjectsSparse { + type Item = FrozenObject; + type IntoIter = std::vec::IntoIter; + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +#[derive(Clone, Debug, Serialize, Deserialize, Tsify)] +#[tsify(into_wasm_abi, from_wasm_abi)] +pub struct FrozenNetworks(Vec); + +impl IntoIterator for FrozenNetworks { + type Item = FrozenCableNetwork; + type IntoIter = std::vec::IntoIter; + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +#[derive(Clone, Debug, Serialize, Deserialize, Tsify)] +#[tsify(into_wasm_abi, from_wasm_abi)] +pub struct CompileErrors(Vec); + +impl IntoIterator for CompileErrors { + type Item = ICError; + type IntoIter = std::vec::IntoIter; + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +use color_eyre::eyre; +pub fn parse_value<'a, T: serde::Deserialize<'a>>( + jd: impl serde::Deserializer<'a>, +) -> Result { + let mut track = serde_path_to_error::Track::new(); + let path = serde_path_to_error::Deserializer::new(jd, &mut track); + let mut fun = |path: serde_ignored::Path| { + tracing::warn!("Found ignored key: {path}"); + }; + serde_ignored::deserialize(path, &mut fun).map_err(|e| { + eyre::eyre!( + "path: {track} | error = {e}", + track = track.path().to_string(), + ) + }) +} + +#[allow(non_snake_case)] #[wasm_bindgen] impl VMRef { #[wasm_bindgen(constructor)] pub fn new() -> Self { - VMRef { - vm: Rc::new(RefCell::new(VM::new())), - } + VMRef { vm: VM::new() } } - #[wasm_bindgen(js_name = "addDevice")] - pub fn add_device(&self, network: Option) -> Result { - Ok(self.vm.borrow_mut().add_device(network)?) + #[wasm_bindgen(js_name = "importTemplateDatabase")] + pub fn import_template_database(&self, db: TemplateDatabase) { + self.vm.import_template_database(db); } - #[wasm_bindgen(js_name = "addDeviceFromTemplate", skip_typescript)] - pub fn add_device_from_template(&self, template: JsValue) -> Result { - let template: DeviceTemplate = serde_wasm_bindgen::from_value(template)?; + #[wasm_bindgen(js_name = "importReagentDatabase")] + pub fn import_reagent_database(&self, db: ReagentDatabase) { + self.vm.import_reagent_database(db); + } + + #[wasm_bindgen(js_name = "importTemplateDatabaseSerdeWasm")] + pub fn import_template_database_serde_wasm(&self, db: JsValue) -> Result<(), JsError> { + let parsed_db: BTreeMap = + parse_value(serde_wasm_bindgen::Deserializer::from(db)).map_err(|err| { + <&dyn std::error::Error as std::convert::Into>::into( + std::convert::AsRef::::as_ref(&err), + ) + })?; + self.vm.import_template_database(parsed_db); + Ok(()) + } + #[wasm_bindgen(js_name = "importTemplateDatabaseSerdeJson")] + pub fn import_template_database_serde_json(&self, db: String) -> Result<(), JsError> { + let parsed_db: BTreeMap = + parse_value(&mut serde_json::Deserializer::from_str(&db)).map_err(|err| { + <&dyn std::error::Error as std::convert::Into>::into( + std::convert::AsRef::::as_ref(&err), + ) + })?; + self.vm.import_template_database(parsed_db); + Ok(()) + } + + #[wasm_bindgen(js_name = "getTemplateDatabase")] + pub fn get_template_database(&self) -> TemplateDatabase { + TemplateDatabase(self.vm.get_template_database()) + } + + #[wasm_bindgen(js_name = "addObjectFrozen")] + pub fn add_object_frozen(&self, frozen: FrozenObject) -> Result { web_sys::console::log_2( &"(wasm) adding device".into(), - &serde_wasm_bindgen::to_value(&template).unwrap(), + &serde_wasm_bindgen::to_value(&frozen).unwrap(), ); - Ok(self.vm.borrow_mut().add_device_from_template(template)?) + Ok(self.vm.add_object_frozen(frozen)?) } - #[wasm_bindgen(js_name = "getDevice")] - pub fn get_device(&self, id: u32) -> Option { - let device = self.vm.borrow().get_device(id); - device.map(|d| DeviceRef::from_device(d.clone(), self.vm.clone())) + #[wasm_bindgen(js_name = "addObjectsFrozen")] + pub fn add_objects_frozen( + &self, + frozen_objects: FrozenObjectsSparse, + ) -> Result, JsError> { + web_sys::console::log_2( + &"(wasm) adding device".into(), + &serde_wasm_bindgen::to_value(&frozen_objects).unwrap(), + ); + + Ok(self.vm.add_objects_frozen(frozen_objects)?) + } + + // #[wasm_bindgen(js_name = "getDevice")] + // pub fn get_object(&self, id: ObjectID) -> Option { + // self.vm.get_object(id) + // } + + #[wasm_bindgen(js_name = "freezeObject")] + pub fn freeze_object(&self, id: ObjectID) -> Result { + Ok(self.vm.freeze_object(id)?) + } + + #[wasm_bindgen(js_name = "freezeObjects")] + pub fn freeze_objects(&self, ids: Vec) -> Result { + Ok(FrozenObjects(self.vm.freeze_objects(ids)?)) + } + + #[wasm_bindgen(js_name = "freezeNetwork")] + pub fn freeze_network(&self, id: ObjectID) -> Result { + Ok(self.vm.freeze_network(id)?) + } + + #[wasm_bindgen(js_name = "freezeNetworks")] + pub fn freeze_networks(&self, ids: Vec) -> Result { + Ok(FrozenNetworks(self.vm.freeze_networks(ids)?)) } #[wasm_bindgen(js_name = "setCode")] /// Set program code if it's valid - pub fn set_code(&self, id: u32, code: &str) -> Result { - Ok(self.vm.borrow().set_code(id, code)?) + pub fn set_code(&self, id: ObjectID, code: &str) -> Result { + Ok(self.vm.set_code(id, code)?) } #[wasm_bindgen(js_name = "setCodeInvalid")] /// Set program code and translate invalid lines to Nop, collecting errors - pub fn set_code_invalid(&self, id: u32, code: &str) -> Result { - Ok(self.vm.borrow().set_code_invalid(id, code)?) + pub fn set_code_invalid(&self, id: ObjectID, code: &str) -> Result { + Ok(self.vm.set_code_invalid(id, code)?) } - #[wasm_bindgen(js_name = "stepIC")] - pub fn step_ic(&self, id: u32, advance_ip_on_err: bool) -> Result { - Ok(self.vm.borrow().step_ic(id, advance_ip_on_err)?) + #[wasm_bindgen(js_name = "getCode")] + /// Set program code if it's valid + pub fn get_code(&self, id: ObjectID) -> Result { + Ok(self.vm.get_code(id)?) } - #[wasm_bindgen(js_name = "runIC")] - pub fn run_ic(&self, id: u32, ignore_errors: bool) -> Result { - Ok(self.vm.borrow().run_ic(id, ignore_errors)?) + #[wasm_bindgen(js_name = "getCompileErrors")] + /// Set program code if it's valid + pub fn get_compiler_errors(&self, id: ObjectID) -> Result { + Ok(CompileErrors(self.vm.get_compile_errors(id)?)) } - #[wasm_bindgen(js_name = "resetIC")] - pub fn reset_ic(&self, id: u32) -> Result { - Ok(self.vm.borrow().reset_ic(id)?) + #[wasm_bindgen(js_name = "stepProgrammable")] + pub fn step_programmable(&self, id: ObjectID, advance_ip_on_err: bool) -> Result<(), JsError> { + Ok(self.vm.step_programmable(id, advance_ip_on_err)?) } - #[wasm_bindgen(getter, js_name = "defaultNetwork")] - pub fn default_network(&self) -> u32 { - self.vm.borrow().default_network + #[wasm_bindgen(js_name = "runProgrammable")] + pub fn run_programmable(&self, id: ObjectID, ignore_errors: bool) -> Result { + Ok(self.vm.run_programmable(id, ignore_errors)?) } - #[wasm_bindgen(getter)] - pub fn devices(&self) -> Vec { - self.vm.borrow().devices.keys().copied().collect_vec() + #[wasm_bindgen(js_name = "resetProgrammable")] + pub fn reset_ic(&self, id: ObjectID) -> Result { + Ok(self.vm.reset_programmable(id)?) } - #[wasm_bindgen(getter)] - pub fn networks(&self) -> Vec { - self.vm.borrow().networks.keys().copied().collect_vec() + #[wasm_bindgen(js_name = "getDefaultNetwork")] + pub fn get_default_network(&self) -> ObjectID { + *self.vm.default_network_key.borrow() } - #[wasm_bindgen(getter)] - pub fn ics(&self) -> Vec { - self.vm.borrow().ics.keys().copied().collect_vec() + #[wasm_bindgen(js_name = "getObjects")] + pub fn get_objects(&self) -> Vec { + self.vm.objects.borrow().keys().copied().collect_vec() } - #[wasm_bindgen(getter, js_name = "lastOperationModified")] - pub fn last_operation_modified(&self) -> Vec { - self.vm.borrow().last_operation_modified() + #[wasm_bindgen(js_name = "getNetworks")] + pub fn get_networks(&self) -> Vec { + self.vm.networks.borrow().keys().copied().collect_vec() + } + + #[wasm_bindgen(js_name = "getCircuitHolders")] + pub fn get_circuit_holders(&self) -> Vec { + self.vm.circuit_holders.borrow().clone() + } + + #[wasm_bindgen(js_name = "getProgramHolders")] + pub fn get_program_holders(&self) -> Vec { + self.vm.program_holders.borrow().clone() + } + + #[wasm_bindgen(js_name = "getLastOperationModified")] + pub fn get_last_operation_modified(&self) -> Vec { + self.vm.last_operation_modified() } #[wasm_bindgen(js_name = "visibleDevices")] - pub fn visible_devices(&self, source: u32) -> Vec { - self.vm.borrow().visible_devices(source) + pub fn visible_devices(&self, source: ObjectID) -> Vec { + self.vm.visible_devices(source) } #[wasm_bindgen(js_name = "setDeviceConnection")] pub fn set_device_connection( &self, - id: u32, + id: ObjectID, connection: usize, - network_id: Option, + network_id: Option, ) -> Result { - Ok(self - .vm - .borrow() - .set_device_connection(id, connection, network_id)?) + Ok(self.vm.set_device_connection(id, connection, network_id)?) } #[wasm_bindgen(js_name = "removeDeviceFromNetwork")] - pub fn remove_device_from_network(&self, id: u32, network_id: u32) -> Result { - Ok(self - .vm - .borrow() - .remove_device_from_network(id, network_id)?) + pub fn remove_device_from_network( + &self, + id: ObjectID, + network_id: u32, + ) -> Result { + Ok(self.vm.remove_device_from_network(id, network_id)?) } #[wasm_bindgen(js_name = "setPin")] - pub fn set_pin(&self, id: u32, pin: usize, val: Option) -> Result { - Ok(self.vm.borrow().set_pin(id, pin, val)?) + pub fn set_pin(&self, id: ObjectID, pin: usize, val: Option) -> Result { + Ok(self.vm.set_pin(id, pin, val)?) } #[wasm_bindgen(js_name = "changeDeviceId")] - pub fn change_device_id(&self, old_id: u32, new_id: u32) -> Result<(), JsError> { - Ok(self.vm.borrow_mut().change_device_id(old_id, new_id)?) + pub fn change_device_id(&self, old_id: ObjectID, new_id: u32) -> Result<(), JsError> { + Ok(self.vm.change_device_id(old_id, new_id)?) } #[wasm_bindgen(js_name = "removeDevice")] - pub fn remove_device(&self, id: u32) -> Result<(), JsError> { - Ok(self.vm.borrow_mut().remove_device(id)?) + pub fn remove_device(&self, id: ObjectID) -> Result<(), JsError> { + Ok(self.vm.remove_object(id)?) } - #[wasm_bindgen(js_name = "setSlotOccupant", skip_typescript)] + #[wasm_bindgen(js_name = "setSlotOccupant")] pub fn set_slot_occupant( &self, - id: u32, + id: ObjectID, index: usize, - template: JsValue, - ) -> Result<(), JsError> { - let template: SlotOccupantTemplate = serde_wasm_bindgen::from_value(template)?; + frozen: FrozenObject, + quantity: u32, + ) -> Result, JsError> { + let Some(prefab) = frozen.obj_info.prefab.as_ref() else { + return Err(TemplateError::MissingPrefab.into()); + }; + let obj_id = if let Some(obj) = frozen.obj_info.id.and_then(|id| self.vm.get_object(id)) { + // TODO: we just assume if the ID is found that the frozen object passed is the same object.. + obj.get_id() + } else { + // check to see if frozen is using the same prefab as current occupant + let obj_id = if let Some(occupant_id) = { + let obj = self.vm.get_object(id).ok_or(VMError::UnknownId(id))?; + let obj_ref = obj.borrow(); + let storage = obj_ref.as_storage().ok_or(VMError::NotStorage(id))?; + let slot = storage + .get_slot(index) + .ok_or(ICError::SlotIndexOutOfRange(index as f64))?; + slot.occupant.as_ref().map(|info| info.id) + } { + let occupant = self + .vm + .get_object(id) + .ok_or(VMError::UnknownId(occupant_id))?; + let occupant_ref = occupant.borrow(); + let occupant_prefab = occupant_ref.get_prefab(); + if prefab.as_str() == occupant_prefab.value.as_str() { + Some(*occupant_ref.get_id()) + } else { + None + } + } else { + None + }; + if let Some(obj_id) = obj_id { + obj_id + } else { + self.vm.add_object_frozen(frozen)? + } + }; Ok(self .vm - .borrow_mut() - .set_slot_occupant(id, index, template)?) + .set_slot_occupant(id, index, Some(obj_id), quantity)?) } #[wasm_bindgen(js_name = "removeSlotOccupant")] - pub fn remove_slot_occupant(&self, id: u32, index: usize) -> Result<(), JsError> { - Ok(self.vm.borrow_mut().remove_slot_occupant(id, index)?) + pub fn remove_slot_occupant( + &self, + id: ObjectID, + index: usize, + ) -> Result, JsError> { + Ok(self.vm.remove_slot_occupant(id, index)?) } - #[wasm_bindgen(js_name = "saveVMState", skip_typescript)] - pub fn save_vm_state(&self) -> JsValue { - let state = self.vm.borrow().save_vm_state(); - serde_wasm_bindgen::to_value(&state).unwrap() + #[wasm_bindgen(js_name = "saveVMState")] + pub fn save_vm_state(&self) -> Result { + Ok(self.vm.save_vm_state()?) } - #[wasm_bindgen(js_name = "restoreVMState", skip_typescript)] - pub fn restore_vm_state(&self, state: JsValue) -> Result<(), JsError> { - let state: FrozenVM = serde_wasm_bindgen::from_value(state)?; - self.vm.borrow_mut().restore_vm_state(state)?; + #[wasm_bindgen(js_name = "restoreVMState")] + pub fn restore_vm_state(&self, state: FrozenVM) -> Result<(), JsError> { + self.vm.restore_vm_state(state)?; Ok(()) } + + #[wasm_bindgen(js_name = "getObjectName")] + pub fn get_object_name(&self, id: ObjectID) -> Result { + let obj = self.vm.get_object(id).ok_or(VMError::UnknownId(id))?; + let name = obj.borrow().get_name().value.clone(); + Ok(name) + } + + #[wasm_bindgen(js_name = "setObjectName")] + pub fn set_object_name(&self, id: ObjectID, name: &str) -> Result<(), JsError> { + let obj = self.vm.get_object(id).ok_or(VMError::UnknownId(id))?; + obj.borrow_mut().get_mut_name().value = name.to_string(); + Ok(()) + } + + #[wasm_bindgen(js_name = "getObjectHash")] + pub fn get_object_hash(&self, id: ObjectID) -> Result { + let obj = self.vm.get_object(id).ok_or(VMError::UnknownId(id))?; + let hash = obj.borrow().get_name().hash; + Ok(hash) + } + + #[wasm_bindgen(js_name = "getObjectPrefabName")] + pub fn get_object_prefab_name(&self, id: ObjectID) -> Result { + let obj = self.vm.get_object(id).ok_or(VMError::UnknownId(id))?; + let name = obj.borrow().get_prefab().value.clone(); + Ok(name) + } + + #[wasm_bindgen(js_name = "getObjectPrefabHash")] + pub fn get_object_prefab_hash(&self, id: ObjectID) -> Result { + let obj = self.vm.get_object(id).ok_or(VMError::UnknownId(id))?; + let hash = obj.borrow().get_prefab().hash; + Ok(hash) + } + + #[wasm_bindgen(js_name = "getObjectSourceCode")] + pub fn get_object_source_code(&self, id: ObjectID) -> Result, JsError> { + let obj = self.vm.get_object(id).ok_or(VMError::UnknownId(id))?; + let code = obj + .borrow() + .as_source_code() + .map(|source| source.get_source_code()); + Ok(code) + } + + #[wasm_bindgen(js_name = "setRegister")] + pub fn set_register(&self, id: ObjectID, index: u32, val: f64) -> Result { + Ok(self.vm.set_register(id, index, val)?) + } + + #[wasm_bindgen(js_name = "setMemory")] + pub fn set_memory(&self, id: ObjectID, address: u32, val: f64) -> Result { + Ok(self.vm.set_memory(id, address, val)?) + } + + #[wasm_bindgen(js_name = "setLogicField")] + pub fn set_logic_field( + &self, + id: ObjectID, + lt: LogicType, + val: f64, + force: bool, + ) -> Result<(), JsError> { + Ok(self.vm.set_logic_field(id, lt, val, force)?) + } + + #[wasm_bindgen(js_name = "setSlotLogicField")] + pub fn set_slot_logic_field( + &self, + id: ObjectID, + slt: LogicSlotType, + index: u32, + val: f64, + force: bool, + ) -> Result<(), JsError> { + Ok(self.vm.set_slot_logic_field(id, slt, index, val, force)?) + } } impl Default for VMRef { @@ -524,7 +496,8 @@ impl Default for VMRef { #[wasm_bindgen] pub fn init() -> VMRef { utils::set_panic_hook(); + tracing_wasm::set_as_global_default(); let vm = VMRef::new(); - log!("Hello from ic10emu!"); + tracing::info!("Hello from ic10emu!"); vm } diff --git a/ic10emu_wasm/src/types.rs b/ic10emu_wasm/src/types.rs deleted file mode 100644 index 20a406f..0000000 --- a/ic10emu_wasm/src/types.rs +++ /dev/null @@ -1,76 +0,0 @@ -#![allow(non_snake_case)] - -use std::collections::BTreeMap; - -use itertools::Itertools; -use serde::{Deserialize, Serialize}; -use serde_with::serde_as; -use tsify::Tsify; -use wasm_bindgen::prelude::*; - -#[serde_as] -#[derive(Tsify, Serialize, Deserialize)] -#[tsify(into_wasm_abi, from_wasm_abi)] -pub struct Stack(#[serde_as(as = "[_; 512]")] pub [f64; 512]); - -#[serde_as] -#[derive(Tsify, Serialize, Deserialize)] -#[tsify(into_wasm_abi, from_wasm_abi)] -pub struct Registers(#[serde_as(as = "[_; 18]")] pub [f64; 18]); - -#[serde_as] -#[derive(Tsify, Debug, Clone, Serialize, Deserialize)] -#[tsify(into_wasm_abi, from_wasm_abi)] -pub struct SlotOccupant { - pub id: u32, - pub prefab_hash: i32, - pub quantity: u32, - pub max_quantity: u32, - pub damage: f64, - pub fields: BTreeMap, -} - -impl From<&ic10emu::device::SlotOccupant> for SlotOccupant { - fn from(value: &ic10emu::device::SlotOccupant) -> Self { - SlotOccupant { - id: value.id, - prefab_hash: value.prefab_hash, - quantity: value.quantity, - max_quantity: value.max_quantity, - damage: value.damage, - fields: value.get_fields(), - } - } -} - -#[serde_as] -#[derive(Tsify, Debug, Clone, Default, Serialize, Deserialize)] -#[tsify(into_wasm_abi, from_wasm_abi)] -pub struct Slot { - pub typ: ic10emu::device::SlotType, - pub occupant: Option, - pub fields: BTreeMap, -} - -impl From<&ic10emu::device::Slot> for Slot { - fn from(value: &ic10emu::device::Slot) -> Self { - Slot { - typ: value.typ, - occupant: value.occupant.as_ref().map(|occupant| occupant.into()), - fields: value.get_fields(), - } - } -} - -#[serde_as] -#[derive(Tsify, Debug, Clone, Serialize, Deserialize)] -#[tsify(into_wasm_abi, from_wasm_abi)] -pub struct Slots(pub Vec); - -impl<'a> FromIterator<&'a ic10emu::device::Slot> for Slots { - fn from_iter>(iter: T) -> Self { - Slots(iter.into_iter().map(|slot| slot.into()).collect_vec()) - } -} - -include!(concat!(env!("OUT_DIR"), "/ts_types.rs")); diff --git a/ic10emu_wasm/src/types.ts b/ic10emu_wasm/src/types.ts deleted file mode 100644 index 5455bb9..0000000 --- a/ic10emu_wasm/src/types.ts +++ /dev/null @@ -1,169 +0,0 @@ -export type FieldType = "Read" | "Write" | "ReadWrite"; - -export interface LogicField { - field_type: FieldType; - value: number; -} -export type LogicFields = Map; -export type SlotLogicFields = Map; - -export type Reagents = Map>; - -export interface ConnectionCableNetwork { - CableNetwork: { - net: number | undefined; - typ: string; - }; -} - -export type Connection = ConnectionCableNetwork | "Other"; - -export type RegisterSpec = { - readonly RegisterSpec: { - readonly indirection: number; - readonly target: number; - }; -}; -export type DeviceSpec = { - readonly DeviceSpec: { - readonly device: - | "Db" - | { readonly Numbered: number } - | { - readonly Indirect: { - readonly indirection: number; - readonly target: number; - }; - }; - }; - readonly connection: number | undefined; -}; -export type OperandLogicType = { readonly LogicType: string }; -export type OperandSlotLogicType = { readonly SlotLogicType: string }; -export type OperandBatchMode = { readonly BatchMode: string }; -export type OperandReagentMode = { readonly ReagentMode: string }; -export type Identifier = { readonly Identifier: { name: string } }; - -export type NumberFloat = { readonly Float: number }; -export type NumberBinary = { readonly Binary: BigInt }; -export type NumberHexadecimal = { readonly Hexadecimal: BigInt }; -export type NumberConstant = { readonly Constant: number }; -export type NumberString = { readonly String: string }; -export type NumberEnum = { readonly Enum: number }; - -export type NumberOperand = { - Number: - | NumberFloat - | NumberBinary - | NumberHexadecimal - | NumberConstant - | NumberString - | NumberEnum; -}; -export type Operand = - | RegisterSpec - | DeviceSpec - | NumberOperand - | OperandLogicType - | OperandSlotLogicType - | OperandBatchMode - | OperandReagentMode - | Identifier; - -export type Alias = RegisterSpec | DeviceSpec; - -export type Aliases = Map; - -export type Defines = Map; - -export type Pins = (number | undefined)[]; - -export interface Instruction { - readonly instruction: string; - readonly operands: Operand[]; -} - -export type ICError = { - readonly ParseError: { - readonly line: number; - readonly start: number; - readonly end: number; - readonly msg: string; - }; -}; - -export interface Program { - readonly instructions: Instruction[]; - readonly errors: ICError[]; - readonly labels: Map; -} - -export interface DeviceRef { - readonly fields: LogicFields; - readonly slots: Slot[]; - readonly reagents: Reagents; - readonly connections: Connection[]; - readonly aliases?: Aliases | undefined; - readonly defines?: Defines | undefined; - readonly pins?: Pins; - readonly program?: Program; - getSlotFields(slot: number): SlotLogicFields; - setField(field: LogicType, value: number, force: boolean): void; - setSlotField(slot: number, field: SlotLogicType, value: number, force: boolean): void; - getSlotField(slot: number, field: SlotLogicType): number; -} - -export interface SlotOccupantTemplate { - id?: number; - fields: { [key in SlotLogicType]?: LogicField }; -} - -export interface SlotTemplate { - typ: SlotType; - occupant?: SlotOccupantTemplate; -} - -export interface DeviceTemplate { - id?: number; - name?: string; - prefab_name?: string; - slots: SlotTemplate[]; - // reagents: { [key: string]: float} - connections: Connection[]; - fields: { [key in LogicType]?: LogicField }; -} - -export interface FrozenIC { - device: number; - id: number; - registers: number[]; - ip: number; - ic: number; - stack: number[]; - aliases: Aliases; - defines: Defines; - pins: Pins; - state: string; - code: string; -} - -export interface FrozenNetwork { - id: number; - devices: number[]; - power_only: number[]; - channels: number[]; -} - -export interface FrozenVM { - ics: FrozenIC[]; - devices: DeviceTemplate[]; - networks: FrozenNetwork[]; - default_network: number; -} - -export interface VMRef { - addDeviceFromTemplate(template: DeviceTemplate): number; - setSlotOccupant(id: number, index: number, template: SlotOccupantTemplate); - saveVMState(): FrozenVM; - restoreVMState(state: FrozenVM): void; -} diff --git a/ic10emu_wasm/src/utils.rs b/ic10emu_wasm/src/utils.rs index 745f704..55e764b 100644 --- a/ic10emu_wasm/src/utils.rs +++ b/ic10emu_wasm/src/utils.rs @@ -8,17 +8,6 @@ pub fn set_panic_hook() { #[cfg(feature = "console_error_panic_hook")] { console_error_panic_hook::set_once(); - web_sys::console::log_1(&format!("Panic hook set...").into()); - } - -} - - -extern crate web_sys; - -// A macro to provide `println!(..)`-style syntax for `console.log` logging. -macro_rules! log { - ( $( $t:tt )* ) => { - web_sys::console::log_1(&format!( $( $t )* ).into()); + web_sys::console::log_1(&"Panic hook set...".into()); } } diff --git a/ic10lsp_wasm/Cargo.toml b/ic10lsp_wasm/Cargo.toml index 9ebc0d7..6cc34c8 100644 --- a/ic10lsp_wasm/Cargo.toml +++ b/ic10lsp_wasm/Cargo.toml @@ -11,19 +11,43 @@ crate-type = ["cdylib", "rlib"] [dependencies] console_error_panic_hook = "0.1.7" -futures = "0.3.21" +futures = "0.3.30" js-sys = "0.3.69" web-sys = { version = "0.3.69", features = ["WritableStream", "console"] } -tokio = { version = "1.26.0", features = ["sync"] } +tokio = { version = "1.37.0", features = ["sync"] } tower-lsp = { version = "0.20.0", default-features = false, features = [ "runtime-agnostic", ] } # tree-sitter = { version = "0.9.0", package = "tree-sitter-facade" } -wasm-bindgen = "0.2.81" -wasm-bindgen-futures = { version = "0.4.30", features = [ +wasm-bindgen = "0.2.92" +wasm-bindgen-futures = { version = "0.4.42", features = [ "futures-core-03-stream", ] } wasm-streams = "0.4" # web-tree-sitter-sys = "1.3" ic10lsp = { git = "https://github.com/Ryex/ic10lsp.git", branch = "wasm" } +tracing-wasm = "0.2.1" +tracing = "0.1.40" # ic10lsp = { path = "../../ic10lsp" } + +[package.metadata.wasm-pack.profile.dev] +wasm-opt = ['-O'] + +[package.metadata.wasm-pack.profile.dev.wasm-bindgen] +# Should we enable wasm-bindgen's debug assertions in its generated JS glue? +debug-js-glue = true +# Should wasm-bindgen demangle the symbols in the "name" custom section? +demangle-name-section = true +# Should we emit the DWARF debug info custom sections? +dwarf-debug-info = false +# Should we omit the default import path? +omit-default-module-path = false + +[package.metadata.wasm-pack.profile.release] +wasm-opt = ['-Oz'] + +[package.metadata.wasm-pack.profile.release.wasm-bindgen] +debug-js-glue = false +demangle-name-section = true +dwarf-debug-info = false +omit-default-module-path = false diff --git a/ic10lsp_wasm/src/lib.rs b/ic10lsp_wasm/src/lib.rs index c0f224b..2034a14 100644 --- a/ic10lsp_wasm/src/lib.rs +++ b/ic10lsp_wasm/src/lib.rs @@ -1,6 +1,6 @@ +use futures::stream::TryStreamExt; use std::{collections::HashMap, sync::Arc}; use tokio::sync::RwLock; -use futures::stream::TryStreamExt; use tower_lsp::{LspService, Server}; use wasm_bindgen::{prelude::*, JsCast}; use wasm_bindgen_futures::stream::JsStream; @@ -30,8 +30,9 @@ impl ServerConfig { #[wasm_bindgen] pub async fn serve(config: ServerConfig) -> Result<(), JsValue> { console_error_panic_hook::set_once(); + tracing_wasm::set_as_global_default(); - web_sys::console::log_1(&"server::serve".into()); + tracing::trace!("server::serv error:"); let ServerConfig { into_server, @@ -51,6 +52,7 @@ pub async fn serve(config: ServerConfig) -> Result<(), JsValue> { }) .map_err(|err| { web_sys::console::log_2(&"server::input Error: ".into(), &err); + tracing::error!("server::input error: {:?}", &err); std::io::Error::from(std::io::ErrorKind::Other) }) @@ -60,14 +62,14 @@ pub async fn serve(config: ServerConfig) -> Result<(), JsValue> { let output = wasm_streams::WritableStream::from_raw(output); let output = output.try_into_async_write().map_err(|err| err.0)?; - let (service, messages) = LspService::new(|client| ic10lsp_lib::server::Backend{ + let (service, messages) = LspService::new(|client| ic10lsp_lib::server::Backend { client, files: Arc::new(RwLock::new(HashMap::new())), config: Arc::new(RwLock::new(ic10lsp_lib::server::Configuration::default())), }); Server::new(input, output, messages).serve(service).await; - web_sys::console::log_1(&"server::serve ic10lsp started".into()); + tracing::info!("server::serve ic10lsp started"); Ok(()) } diff --git a/rust-analyzer.json b/rust-analyzer.json new file mode 100644 index 0000000..7fb0194 --- /dev/null +++ b/rust-analyzer.json @@ -0,0 +1,6 @@ +{ + "rust-analyzer.cargo.features": [ + "tsify", + "prefab_database" + ] +} diff --git a/rust-testing.ipynb b/rust-testing.ipynb new file mode 100644 index 0000000..7aa9b3a --- /dev/null +++ b/rust-testing.ipynb @@ -0,0 +1,223 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + ":dep stationeers_data = { path = \"./stationeers_data\" }\n", + ":dep const-crc32 = \"1.3.0\"\n", + ":dep color-eyre\n", + ":dep serde_path_to_error\n", + ":dep serde_ignored\n", + ":dep serde\n", + ":dep serde_json\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "use color_eyre::eyre;\n", + "pub fn parse_value<'a, T: serde::Deserialize<'a>>(\n", + " jd: impl serde::Deserializer<'a>,\n", + ") -> Result {\n", + " let mut track = serde_path_to_error::Track::new();\n", + " let path = serde_path_to_error::Deserializer::new(jd, &mut track);\n", + " let mut fun = |path: serde_ignored::Path| {\n", + " eprintln!(\"Found ignored key: {path}\");\n", + " };\n", + " serde_ignored::deserialize(path, &mut fun).map_err(|e| {\n", + " eyre::eyre!(\n", + " \"path: {track} | error = {e}\",\n", + " track = track.path().to_string(),\n", + " )\n", + " })\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{7274344: StructureLogicDevice(StructureLogicDeviceTemplate { prefab: PrefabInfo { prefab_name: \"StructureAutoMinerSmall\", prefab_hash: 7274344, desc: \"The Recurso SquareDig autominer is a structure that when built will mine a vertical 2x2 shaft until it hits bedrock. The autominer can be connected to a chute system, and is controllable by a logic network. Note that the autominer outputs more ore than a conventional Mining Drill over the same area.\", name: \"Autominer (Small)\" }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: {0: {}, 1: {}}, logic_types: {Power: Read, Open: ReadWrite, Error: Read, Activate: ReadWrite, On: ReadWrite, RequiredPower: Read, ClearMemory: Write, ExportCount: Read, ImportCount: Read, PrefabHash: Read, ReferenceId: Read, NameHash: Read}, modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false }, slots: [SlotInfo { name: \"Import\", typ: None }, SlotInfo { name: \"Export\", typ: None }], device: DeviceInfo { connection_list: [ConnectionInfo { typ: Chute, role: Input }, ConnectionInfo { typ: Chute, role: Output }, ConnectionInfo { typ: Data, role: None }, ConnectionInfo { typ: Power, role: None }], device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false } }), 111280987: ItemLogic(ItemLogicTemplate { prefab: PrefabInfo { prefab_name: \"ItemTerrainManipulator\", prefab_hash: 111280987, desc: \"0.Mode0\\n1.Mode1\", name: \"Terrain Manipulator\" }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1, reagents: None, slot_class: Tool, sorting_class: Default }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: {0: {Occupied: Read, OccupantHash: Read, Quantity: Read, Damage: Read, Charge: Read, ChargeRatio: Read, Class: Read, MaxQuantity: Read, ReferenceId: Read}, 1: {Occupied: Read, OccupantHash: Read, Quantity: Read, Damage: Read, Class: Read, MaxQuantity: Read, ReferenceId: Read}}, logic_types: {Power: Read, Mode: ReadWrite, Error: Read, Activate: ReadWrite, On: ReadWrite, ReferenceId: Read}, modes: Some({0: \"Mode0\", 1: \"Mode1\"}), transmission_receiver: false, wireless_logic: false, circuit_holder: false }, slots: [SlotInfo { name: \"Battery\", typ: Battery }, SlotInfo { name: \"Dirt Canister\", typ: Ore }] })}\n" + ] + } + ], + "source": [ + "let entries = r#\"\n", + "{\n", + "\"7274344\": {\n", + " \"templateType\": \"StructureLogicDevice\",\n", + " \"prefab\": {\n", + " \"prefab_name\": \"StructureAutoMinerSmall\",\n", + " \"prefab_hash\": 7274344,\n", + " \"desc\": \"The Recurso SquareDig autominer is a structure that when built will mine a vertical 2x2 shaft until it hits bedrock. The autominer can be connected to a chute system, and is controllable by a logic network. Note that the autominer outputs more ore than a conventional Mining Drill over the same area.\",\n", + " \"name\": \"Autominer (Small)\"\n", + " },\n", + " \"structure\": {\n", + " \"small_grid\": true\n", + " },\n", + " \"logic\": {\n", + " \"logic_slot_types\": {\n", + " \"0\": {},\n", + " \"1\": {}\n", + " },\n", + " \"logic_types\": {\n", + " \"Power\": \"Read\",\n", + " \"Open\": \"ReadWrite\",\n", + " \"Error\": \"Read\",\n", + " \"Activate\": \"ReadWrite\",\n", + " \"On\": \"ReadWrite\",\n", + " \"RequiredPower\": \"Read\",\n", + " \"ClearMemory\": \"Write\",\n", + " \"ExportCount\": \"Read\",\n", + " \"ImportCount\": \"Read\",\n", + " \"PrefabHash\": \"Read\",\n", + " \"ReferenceId\": \"Read\",\n", + " \"NameHash\": \"Read\"\n", + " },\n", + " \"transmission_receiver\": false,\n", + " \"wireless_logic\": false,\n", + " \"circuit_holder\": false\n", + " },\n", + " \"slots\": [\n", + " {\n", + " \"name\": \"Import\",\n", + " \"typ\": \"None\"\n", + " },\n", + " {\n", + " \"name\": \"Export\",\n", + " \"typ\": \"None\"\n", + " }\n", + " ],\n", + " \"device\": {\n", + " \"connection_list\": [\n", + " {\n", + " \"typ\": \"Chute\",\n", + " \"role\": \"Input\"\n", + " },\n", + " {\n", + " \"typ\": \"Chute\",\n", + " \"role\": \"Output\"\n", + " },\n", + " {\n", + " \"typ\": \"Data\",\n", + " \"role\": \"None\"\n", + " },\n", + " {\n", + " \"typ\": \"Power\",\n", + " \"role\": \"None\"\n", + " }\n", + " ],\n", + " \"has_activate_state\": true,\n", + " \"has_atmosphere\": false,\n", + " \"has_color_state\": false,\n", + " \"has_lock_state\": false,\n", + " \"has_mode_state\": false,\n", + " \"has_on_off_state\": true,\n", + " \"has_open_state\": true,\n", + " \"has_reagents\": false\n", + " }\n", + " },\n", + " \"111280987\": {\n", + " \"templateType\": \"ItemLogic\",\n", + " \"prefab\": {\n", + " \"prefab_name\": \"ItemTerrainManipulator\",\n", + " \"prefab_hash\": 111280987,\n", + " \"desc\": \"0.Mode0\\n1.Mode1\",\n", + " \"name\": \"Terrain Manipulator\"\n", + " },\n", + " \"item\": {\n", + " \"consumable\": false,\n", + " \"ingredient\": false,\n", + " \"max_quantity\": 1,\n", + " \"slot_class\": \"Tool\",\n", + " \"sorting_class\": \"Default\"\n", + " },\n", + " \"logic\": {\n", + " \"logic_slot_types\": {\n", + " \"0\": {\n", + " \"Occupied\": \"Read\",\n", + " \"OccupantHash\": \"Read\",\n", + " \"Quantity\": \"Read\",\n", + " \"Damage\": \"Read\",\n", + " \"Charge\": \"Read\",\n", + " \"ChargeRatio\": \"Read\",\n", + " \"Class\": \"Read\",\n", + " \"MaxQuantity\": \"Read\",\n", + " \"ReferenceId\": \"Read\"\n", + " },\n", + " \"1\": {\n", + " \"Occupied\": \"Read\",\n", + " \"OccupantHash\": \"Read\",\n", + " \"Quantity\": \"Read\",\n", + " \"Damage\": \"Read\",\n", + " \"Class\": \"Read\",\n", + " \"MaxQuantity\": \"Read\",\n", + " \"ReferenceId\": \"Read\"\n", + " }\n", + " },\n", + " \"logic_types\": {\n", + " \"Power\": \"Read\",\n", + " \"Mode\": \"ReadWrite\",\n", + " \"Error\": \"Read\",\n", + " \"Activate\": \"ReadWrite\",\n", + " \"On\": \"ReadWrite\",\n", + " \"ReferenceId\": \"Read\"\n", + " },\n", + " \"modes\": {\n", + " \"0\": \"Mode0\",\n", + " \"1\": \"Mode1\"\n", + " },\n", + " \"transmission_receiver\": false,\n", + " \"wireless_logic\": false,\n", + " \"circuit_holder\": false\n", + " },\n", + " \"slots\": [\n", + " {\n", + " \"name\": \"Battery\",\n", + " \"typ\": \"Battery\"\n", + " },\n", + " {\n", + " \"name\": \"Dirt Canister\",\n", + " \"typ\": \"Ore\"\n", + " }\n", + " ]\n", + " }\n", + "}\n", + "\"#;\n", + "use std::collections::BTreeMap;\n", + "use stationeers_data::templates::ObjectTemplate;\n", + "let parsed_db: BTreeMap =\n", + " parse_value(&mut serde_json::Deserializer::from_str(entries))?;\n", + "println!(\"{parsed_db:?}\");" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Rust", + "language": "rust", + "name": "rust" + }, + "language_info": { + "codemirror_mode": "rust", + "file_extension": ".rs", + "mimetype": "text/rust", + "name": "rust", + "pygment_lexer": "rust", + "version": "" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/stationeers_data/Cargo.toml b/stationeers_data/Cargo.toml new file mode 100644 index 0000000..b963261 --- /dev/null +++ b/stationeers_data/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "stationeers_data" +version.workspace = true +edition.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[features] +prefab_database = [] # compile with the prefab database enabled +reagent_database = [] # compile with the reagent_database enabled +tsify = ["dep:tsify", "dep:wasm-bindgen"] +wasm-bindgen = ["dep:wasm-bindgen"] + +[dependencies] +const-crc32 = "1.3.0" +num-integer = "0.1.46" +phf = "0.11.2" +serde = "1.0.202" +serde_derive = "1.0.202" +serde_with = "3.8.1" +strum = { version = "0.26.2", features = ["derive", "phf", "strum_macros"] } +tsify = { version = "0.4.5", optional = true, features = ["json"] } +wasm-bindgen = { version = "0.2.92", optional = true } diff --git a/stationeers_data/src/database/prefab_map.rs b/stationeers_data/src/database/prefab_map.rs new file mode 100644 index 0000000..ced64a7 --- /dev/null +++ b/stationeers_data/src/database/prefab_map.rs @@ -0,0 +1,54801 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run +// +// `cargo xtask generate -m database` +// +// from the workspace to regenerate +// +// ================================================= + +use crate::enums::script::*; +use crate::enums::basic::*; +use crate::enums::{MemoryAccess, ConnectionType, ConnectionRole, MachineTier}; +use crate::templates::*; +pub fn build_prefab_database() -> std::collections::BTreeMap< + i32, + crate::templates::ObjectTemplate, +> { + #[allow(clippy::unreadable_literal)] + let mut map: std::collections::BTreeMap = std::collections::BTreeMap::new(); + map.insert( + -1330388999i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardBlack".into(), + prefab_hash: -1330388999i32, + desc: "".into(), + name: "Access Card (Black)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1411327657i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardBlue".into(), + prefab_hash: -1411327657i32, + desc: "".into(), + name: "Access Card (Blue)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1412428165i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardBrown".into(), + prefab_hash: 1412428165i32, + desc: "".into(), + name: "Access Card (Brown)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1339479035i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardGray".into(), + prefab_hash: -1339479035i32, + desc: "".into(), + name: "Access Card (Gray)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -374567952i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardGreen".into(), + prefab_hash: -374567952i32, + desc: "".into(), + name: "Access Card (Green)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 337035771i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardKhaki".into(), + prefab_hash: 337035771i32, + desc: "".into(), + name: "Access Card (Khaki)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -332896929i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardOrange".into(), + prefab_hash: -332896929i32, + desc: "".into(), + name: "Access Card (Orange)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 431317557i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardPink".into(), + prefab_hash: 431317557i32, + desc: "".into(), + name: "Access Card (Pink)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 459843265i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardPurple".into(), + prefab_hash: 459843265i32, + desc: "".into(), + name: "Access Card (Purple)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1713748313i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardRed".into(), + prefab_hash: -1713748313i32, + desc: "".into(), + name: "Access Card (Red)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2079959157i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardWhite".into(), + prefab_hash: 2079959157i32, + desc: "".into(), + name: "Access Card (White)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 568932536i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AccessCardYellow".into(), + prefab_hash: 568932536i32, + desc: "".into(), + name: "Access Card (Yellow)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::AccessCard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1365789392i32, + ItemConsumerTemplate { + prefab: PrefabInfo { + prefab_name: "ApplianceChemistryStation".into(), + prefab_hash: 1365789392i32, + desc: "".into(), + name: "Chemistry Station".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Output".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemCharcoal".into(), "ItemCobaltOre".into(), "ItemFern".into(), + "ItemSilverIngot".into(), "ItemSilverOre".into(), "ItemSoyOil".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + } + .into(), + ); + map.insert( + -1683849799i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ApplianceDeskLampLeft".into(), + prefab_hash: -1683849799i32, + desc: "".into(), + name: "Appliance Desk Lamp Left".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1174360780i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ApplianceDeskLampRight".into(), + prefab_hash: 1174360780i32, + desc: "".into(), + name: "Appliance Desk Lamp Right".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1136173965i32, + ItemConsumerTemplate { + prefab: PrefabInfo { + prefab_name: "ApplianceMicrowave".into(), + prefab_hash: -1136173965i32, + desc: "While countless \'better\' ways of cooking Food have been invented in the last few hundred years, few are as durable or easy to fabricate as the OK-Zoomer microwave. Licensed from Xigo, the plans are based on a classic model from the mid-21st century, giving it a charmingly retro feel. But don\'t worry, it oscillates Water molecules more than adequately. \nJust bolt it to a Powered Bench using a Wrench to power it, follow the recipe, and you\'re cooking." + .into(), + name: "Microwave".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Output".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemCorn".into(), "ItemEgg".into(), "ItemFertilizedEgg".into(), + "ItemFlour".into(), "ItemMilk".into(), "ItemMushroom".into(), + "ItemPotato".into(), "ItemPumpkin".into(), "ItemRice".into(), + "ItemSoybean".into(), "ItemSoyOil".into(), "ItemTomato".into(), + "ItemSugarCane".into(), "ItemCocoaTree".into(), "ItemCocoaPowder" + .into(), "ItemSugar".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + } + .into(), + ); + map.insert( + -749191906i32, + ItemConsumerTemplate { + prefab: PrefabInfo { + prefab_name: "AppliancePackagingMachine".into(), + prefab_hash: -749191906i32, + desc: "The Xigo Cannifier requires Empty Can and cooked food to create long-lasting, easily stored sustenance. Note that the Cannifier must be bolted to a Powered Bench for power, and only accepts cooked food and tin cans.\n\nOPERATION\n\n1. Add the correct ingredients to the device via the hopper in the TOP.\n\n2. Close the device using the dropdown handle.\n\n3. Activate the device.\n\n4. Remove canned goods from the outlet in the FRONT.\n\nNote: the Cannifier will flash an error on its activation switch if you attempt to activate it before closing it.\n\n\n " + .into(), + name: "Basic Packaging Machine".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Export".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemCookedCondensedMilk".into(), "ItemCookedCorn".into(), + "ItemCookedMushroom".into(), "ItemCookedPowderedEggs".into(), + "ItemCookedPumpkin".into(), "ItemCookedRice".into(), + "ItemCookedSoybean".into(), "ItemCookedTomato".into(), "ItemEmptyCan" + .into(), "ItemMilk".into(), "ItemPotatoBaked".into(), "ItemSoyOil" + .into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + } + .into(), + ); + map.insert( + -1339716113i32, + ItemConsumerTemplate { + prefab: PrefabInfo { + prefab_name: "AppliancePaintMixer".into(), + prefab_hash: -1339716113i32, + desc: "".into(), + name: "Paint Mixer".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Output".into(), class : Class::Bottle, + index : 0u32 }) + ] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemSoyOil".into(), "ReagentColorBlue".into(), "ReagentColorGreen" + .into(), "ReagentColorOrange".into(), "ReagentColorRed".into(), + "ReagentColorYellow".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + } + .into(), + ); + map.insert( + -1303038067i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "AppliancePlantGeneticAnalyzer".into(), + prefab_hash: -1303038067i32, + desc: "The Genetic Analyzer can be used to process samples from the Plant Sampler. Once processed, the genetic information of the sampled plant can be viewed by clicking on the search button.\n\nIndividual Gene Value Widgets: \nMost gene values will appear as a sliding bar between a minimum value on the left and a maximum value on the right. The actual value of the gene is in the middle of the bar, in orange.\n\nMultiple Gene Value Widgets: \nFor temperature and pressure ranges, four genes appear on the same widget. The orange values underneath the bar are the minimum and maximum thresholds for growth. Outside of this range, the plant will stop growing and eventually die. The blue values underneath the bar are the minimum and maximum thresholds for ideal growth. Inside of this range, the plant will grow at maximum speed. The white values above the bar are the minimum and maximum achievable values for the growth threshold." + .into(), + name: "Plant Genetic Analyzer".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Input".into(), class : Class::Tool, + index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1094868323i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "AppliancePlantGeneticSplicer".into(), + prefab_hash: -1094868323i32, + desc: "The Genetic Splicer can be used to copy a single gene from one \'source\' plant to another \'target\' plant of the same type. After copying, the source plant will be destroyed.\n \nTo begin splicing, place a plant or seed bag in the left slot (source) and place another plant or seed bag of the same type in the right slot (target). You can select a gene using the arrow buttons. Close the sliding door and press the green activate button. Once splicing has begun, the device will be locked until the process has finished (which will take approximately twenty minutes). If you want to cancel splicing you can power off the bench or detach the appliance as a last resort." + .into(), + name: "Plant Genetic Splicer".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Source Plant".into(), class : + Class::Plant, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Target Plant".into(), class : Class::Plant, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 871432335i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "AppliancePlantGeneticStabilizer".into(), + prefab_hash: 871432335i32, + desc: "The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize.\nStabilize: Increases all genes stability by 50%.\nDestabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%.\n " + .into(), + name: "Plant Genetic Stabilizer".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, + index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1260918085i32, + ItemConsumerTemplate { + prefab: PrefabInfo { + prefab_name: "ApplianceReagentProcessor".into(), + prefab_hash: 1260918085i32, + desc: "Sitting somewhere between a high powered juicer and an alchemist\'s alembic, the Xigo reagent processor turns certain raw materials and food items into cooking and crafting ingredients. Indispensible in any space kitchen, just bolt it to the bench, and you\'re ready to go." + .into(), + name: "Reagent Processor".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Input".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Output".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemWheat".into(), "ItemSugarCane".into(), "ItemCocoaTree".into(), + "ItemSoybean".into(), "ItemFlowerBlue".into(), "ItemFlowerGreen" + .into(), "ItemFlowerOrange".into(), "ItemFlowerRed".into(), + "ItemFlowerYellow".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + } + .into(), + ); + map.insert( + 142831994i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ApplianceSeedTray".into(), + prefab_hash: 142831994i32, + desc: "The seed tray can hold up to twelve plants or seeds and can be used to facilitate fast experimentation and testing of plant genetics." + .into(), + name: "Appliance Seed Tray".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Plant".into(), class : + Class::Plant, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Plant" + .into(), class : Class::Plant, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Plant".into(), class : Class::Plant, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, index : + 4u32 }), (5u32, SlotInfo::Direct { name : "Plant".into(), class : + Class::Plant, index : 5u32 }), (6u32, SlotInfo::Direct { name : "Plant" + .into(), class : Class::Plant, index : 6u32 }), (7u32, SlotInfo::Direct { + name : "Plant".into(), class : Class::Plant, index : 7u32 }), (8u32, + SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, index : + 8u32 }), (9u32, SlotInfo::Direct { name : "Plant".into(), class : + Class::Plant, index : 9u32 }), (10u32, SlotInfo::Direct { name : "Plant" + .into(), class : Class::Plant, index : 10u32 }), (11u32, SlotInfo::Direct + { name : "Plant".into(), class : Class::Plant, index : 11u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1853941363i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ApplianceTabletDock".into(), + prefab_hash: 1853941363i32, + desc: "".into(), + name: "Tablet Dock".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Appliance, + sorting_class: SortingClass::Appliances, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : + Class::Tool, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 221058307i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "AutolathePrinterMod".into(), + prefab_hash: 221058307i32, + desc: "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options." + .into(), + name: "Autolathe Printer Mod".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -462415758i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "Battery_Wireless_cell".into(), + prefab_hash: -462415758i32, + desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" + .into(), + name: "Battery Wireless Cell".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Battery, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + -41519077i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "Battery_Wireless_cell_Big".into(), + prefab_hash: -41519077i32, + desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" + .into(), + name: "Battery Wireless Cell (Big)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Battery, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + -1976947556i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "CardboardBox".into(), + prefab_hash: -1976947556i32, + desc: "".into(), + name: "Cardboard Box".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1634532552i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeAccessController".into(), + prefab_hash: -1634532552i32, + desc: "".into(), + name: "Cartridge (Access Controller)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1550278665i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeAtmosAnalyser".into(), + prefab_hash: -1550278665i32, + desc: "The Lorenz atmos analyzer is a multi-functional mass-spectrometer designed by ExMin for use with the OreCore Handheld Tablet. It displays the pressure, concentration and molar quantity of gas in rooms, tanks, or pipe networks." + .into(), + name: "Cartridge (Atmos Analyzer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -932136011i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeConfiguration".into(), + prefab_hash: -932136011i32, + desc: "".into(), + name: "Cartridge (Configuration)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1462180176i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeElectronicReader".into(), + prefab_hash: -1462180176i32, + desc: "".into(), + name: "Cartridge (eReader)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1957063345i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeGPS".into(), + prefab_hash: -1957063345i32, + desc: "".into(), + name: "Cartridge (GPS)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 872720793i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeGuide".into(), + prefab_hash: 872720793i32, + desc: "".into(), + name: "Cartridge (Guide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1116110181i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeMedicalAnalyser".into(), + prefab_hash: -1116110181i32, + desc: "When added to the OreCore Handheld Tablet, Asura\'s\'s ReadyMed medical analyzer reveals the health, or otherwise, of users various organs. Due to a design flaw, older models were notorious for producing quasar-like levels of x-ray radiation. Recent advances in shielding have more than halved the risk to users." + .into(), + name: "Cartridge (Medical Analyzer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1606989119i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeNetworkAnalyser".into(), + prefab_hash: 1606989119i32, + desc: "A minor masterpiece of micro-electronic engineering, the network analyzer displays the current, voltage and wattage of a cable network, as well as any devices connected to it. Based on a widely-copied Sinotai design, it\'s used in conjunction with the OreCore Handheld Tablet." + .into(), + name: "Cartridge (Network Analyzer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1768732546i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeOreScanner".into(), + prefab_hash: -1768732546i32, + desc: "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet." + .into(), + name: "Cartridge (Ore Scanner)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1738236580i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeOreScannerColor".into(), + prefab_hash: 1738236580i32, + desc: "When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet." + .into(), + name: "Cartridge (Ore Scanner Color)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1101328282i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgePlantAnalyser".into(), + prefab_hash: 1101328282i32, + desc: "".into(), + name: "Cartridge (Plant Analyser)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 81488783i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CartridgeTracker".into(), + prefab_hash: 81488783i32, + desc: "".into(), + name: "Cartridge (Tracker)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Cartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1633663176i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardAdvAirlockControl".into(), + prefab_hash: 1633663176i32, + desc: "".into(), + name: "Advanced Airlock".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1618019559i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardAirControl".into(), + prefab_hash: 1618019559i32, + desc: "When added to a Console, air control circuit boards allow you to program an Active Vent. As with small dogs and 83% of people, air control circuits have only three modes: Pressure, Draft and Offline. Pressure mode maintains a 100kPa atmosphere, switching the active vent between inward and outward flow until target pressure is achieved. Draft mode allows you to pair active vents to circulate air. Offline mode deactivates the vent. " + .into(), + name: "Air Control".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 912176135i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardAirlockControl".into(), + prefab_hash: 912176135i32, + desc: "Rumored to have been first sketched on a Norsec toilet wall by a disgruntled engineer, the Exgress airlock control circuit board\u{2019}s versatility and ease of fabrication has made it the Stationeers control system of choice for Airlock cycling protocols. \n\nTo enter setup mode, insert the board into a Console along with a data disk. In this mode, you can see all data-accessible objects currently connected to the Console. Doors, lights, gas sensors and slave consoles can be selected (highlighted green), and will be controlled once the data disk is removed." + .into(), + name: "Airlock".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -412104504i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardCameraDisplay".into(), + prefab_hash: -412104504i32, + desc: "Surveillance is sometimes necessary when building bases in highly hostile environments. The camera display circuit board allows wary Stationeers to turn a Console into a security display when connected to a Camera." + .into(), + name: "Camera Display".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 855694771i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardDoorControl".into(), + prefab_hash: 855694771i32, + desc: "A basic tool of Stationeer base construction, this circuit board provides a way to open and close a Composite Door, Blast Door or Glass Door remotely, when connected to a Console. This system can be further linked to Motion Sensor to create automatic doors." + .into(), + name: "Door Control".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -82343730i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardGasDisplay".into(), + prefab_hash: -82343730i32, + desc: "Information is power. Place this circuitboard into a Console to create a display that shows gas pressure or temperature of any connected tank, storage cannister, Kit (Pipe Analyzer) or Kit (Gas Sensor)." + .into(), + name: "Gas Display".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1344368806i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardGraphDisplay".into(), + prefab_hash: 1344368806i32, + desc: "".into(), + name: "Graph Display".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1633074601i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardHashDisplay".into(), + prefab_hash: 1633074601i32, + desc: "".into(), + name: "Hash Display".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1134148135i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardModeControl".into(), + prefab_hash: -1134148135i32, + desc: "Can\'t decide which mode you love most? This circuit board allows you to switch any connected device between operation modes." + .into(), + name: "Mode Control".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1923778429i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardPowerControl".into(), + prefab_hash: -1923778429i32, + desc: "Under distant suns and demanding environments, Stationeer systems need to balance reliability, resilience and versatility. The power control board allows remote enabling and disabling of selected devices, disconnecting manual operation. \n \nThe circuit board has two modes: \'Link\' switches all devices on or off; \'Toggle\' switches each device to their alternate state. " + .into(), + name: "Power Control".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2044446819i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardShipDisplay".into(), + prefab_hash: -2044446819i32, + desc: "When the original Stationeer Handbook collapsed under its own weight into a singularity, certain information was irretrievably lost. Amongst this mysterious corpus of knowledge is the exact purpose of the ship display board." + .into(), + name: "Ship Display".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2020180320i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "CircuitboardSolarControl".into(), + prefab_hash: 2020180320i32, + desc: "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel." + .into(), + name: "Solar Control".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1228794916i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "CompositeRollCover".into(), + prefab_hash: 1228794916i32, + desc: "0.Operate\n1.Logic".into(), + name: "Composite Roll Cover".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::Idle, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 8709219i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "CrateMkII".into(), + prefab_hash: 8709219i32, + desc: "A more heavily reinforced version of the iconic Dynamic Crate, the Crate Mk II is resistant to incredibly high pressures and temperatures. Short of disposing of it in a black hole, the Mk II is about as safe as luggage gets." + .into(), + name: "Crate Mk II".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Crate, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 6u32 + }), (7u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 9u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1531087544i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "DecayedFood".into(), + prefab_hash: 1531087544i32, + desc: "When your food decays, it turns into this. ODA scientists have attempted to determine the exact constituents of this substance, but it remains evasive and mysterious. Suffice to say, eating it is a bad idea. Research has determined, however, that The exact speed of decay varies individually by:\n\n- TEMPERATURE - Refrigeration will slow decay, but many foods will be damaged by exposure to extreme low pressure, as well as extreme heat. The optimum temperature is 0 kelvin (-272 C).\n\n- FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance.\n\n- PRESSURE - Food decays faster when the pressure drops below 1 atmosphere (101kPa). Decay happens exponentially more quickly as the atmosphere approaches a perfect vacuum. There is no effect from higher pressures. \n\n- ATMOSPHERE - Different gases can slow and accelerate the decay process. The process will take account of respective gas ratios in mixed atmospheres in calculating the decay modifier. The following rates apply across all foods:\n\n> Oxygen x 1.3\n> Nitrogen x 0.6\n> Carbon Dioxide x 0.8\n> Volatiles x 1\n> Pollutant x 3\n> Nitrous Oxide x 1.5\n> Steam x 2\n> Vacuum (see PRESSURE above)\n\n" + .into(), + name: "Decayed Food".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 25u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1844430312i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "DeviceLfoVolume".into(), + prefab_hash: -1844430312i32, + desc: "The low frequency oscillator (or LFO) makes everything sound dark, twisted and crunchy by altering the shape of the waves output by a Logic Step Sequencer.\n \nTo set up an LFO:\n\n1. Place the LFO unit\n2. Set the LFO output to a Passive Speaker\n2. Set a sequencers\' output to LFO - so the sequencer\'s signal runs through the LFO to a speaker.\n3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO.\n4. Use another logic writer to write the BPM to the LFO.\n5. You are ready. This is the future. You\'re in space. Make it sound cool.\n\nFor more info, check out the music page." + .into(), + name: "Low frequency oscillator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Time, MemoryAccess::ReadWrite), (LogicType::Bpm, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Whole Note".into()), (1, "Half Note".into()), (2, + "Quarter Note".into()), (3, "Eighth Note".into()), (4, + "Sixteenth Note".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1762696475i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "DeviceStepUnit".into(), + prefab_hash: 1762696475i32, + desc: "0.C-2\n1.C#-2\n2.D-2\n3.D#-2\n4.E-2\n5.F-2\n6.F#-2\n7.G-2\n8.G#-2\n9.A-2\n10.A#-2\n11.B-2\n12.C-1\n13.C#-1\n14.D-1\n15.D#-1\n16.E-1\n17.F-1\n18.F#-1\n19.G-1\n20.G#-1\n21.A-1\n22.A#-1\n23.B-1\n24.C0\n25.C#0\n26.D0\n27.D#0\n28.E0\n29.F0\n30.F#0\n31.G0\n32.G#0\n33.A0\n34.A#0\n35.B0\n36.C1\n37.C#1\n38.D1\n39.D#1\n40.E1\n41.F1\n42.F#1\n43.G1\n44.G#1\n45.A1\n46.A#1\n47.B1\n48.C2\n49.C#2\n50.D2\n51.D#2\n52.E2\n53.F2\n54.F#2\n55.G2\n56.G#2\n57.A2\n58.A#2\n59.B2\n60.C3\n61.C#3\n62.D3\n63.D#3\n64.E3\n65.F3\n66.F#3\n67.G3\n68.G#3\n69.A3\n70.A#3\n71.B3\n72.C4\n73.C#4\n74.D4\n75.D#4\n76.E4\n77.F4\n78.F#4\n79.G4\n80.G#4\n81.A4\n82.A#4\n83.B4\n84.C5\n85.C#5\n86.D5\n87.D#5\n88.E5\n89.F5\n90.F#5\n91.G5 \n92.G#5\n93.A5\n94.A#5\n95.B5\n96.C6\n97.C#6\n98.D6\n99.D#6\n100.E6\n101.F6\n102.F#6\n103.G6\n104.G#6\n105.A6\n106.A#6\n107.B6\n108.C7\n109.C#7\n110.D7\n111.D#7\n112.E7\n113.F7\n114.F#7\n115.G7\n116.G#7\n117.A7\n118.A#7\n119.B7\n120.C8\n121.C#8\n122.D8\n123.D#8\n124.E8\n125.F8\n126.F#8\n127.G8" + .into(), + name: "Device Step Unit".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "C-2".into()), (1, "C#-2".into()), (2, "D-2".into()), (3, + "D#-2".into()), (4, "E-2".into()), (5, "F-2".into()), (6, "F#-2" + .into()), (7, "G-2".into()), (8, "G#-2".into()), (9, "A-2" + .into()), (10, "A#-2".into()), (11, "B-2".into()), (12, "C-1" + .into()), (13, "C#-1".into()), (14, "D-1".into()), (15, "D#-1" + .into()), (16, "E-1".into()), (17, "F-1".into()), (18, "F#-1" + .into()), (19, "G-1".into()), (20, "G#-1".into()), (21, "A-1" + .into()), (22, "A#-1".into()), (23, "B-1".into()), (24, "C0" + .into()), (25, "C#0".into()), (26, "D0".into()), (27, "D#0" + .into()), (28, "E0".into()), (29, "F0".into()), (30, "F#0" + .into()), (31, "G0".into()), (32, "G#0".into()), (33, "A0" + .into()), (34, "A#0".into()), (35, "B0".into()), (36, "C1" + .into()), (37, "C#1".into()), (38, "D1".into()), (39, "D#1" + .into()), (40, "E1".into()), (41, "F1".into()), (42, "F#1" + .into()), (43, "G1".into()), (44, "G#1".into()), (45, "A1" + .into()), (46, "A#1".into()), (47, "B1".into()), (48, "C2" + .into()), (49, "C#2".into()), (50, "D2".into()), (51, "D#2" + .into()), (52, "E2".into()), (53, "F2".into()), (54, "F#2" + .into()), (55, "G2".into()), (56, "G#2".into()), (57, "A2" + .into()), (58, "A#2".into()), (59, "B2".into()), (60, "C3" + .into()), (61, "C#3".into()), (62, "D3".into()), (63, "D#3" + .into()), (64, "E3".into()), (65, "F3".into()), (66, "F#3" + .into()), (67, "G3".into()), (68, "G#3".into()), (69, "A3" + .into()), (70, "A#3".into()), (71, "B3".into()), (72, "C4" + .into()), (73, "C#4".into()), (74, "D4".into()), (75, "D#4" + .into()), (76, "E4".into()), (77, "F4".into()), (78, "F#4" + .into()), (79, "G4".into()), (80, "G#4".into()), (81, "A4" + .into()), (82, "A#4".into()), (83, "B4".into()), (84, "C5" + .into()), (85, "C#5".into()), (86, "D5".into()), (87, "D#5" + .into()), (88, "E5".into()), (89, "F5".into()), (90, "F#5" + .into()), (91, "G5 ".into()), (92, "G#5".into()), (93, "A5" + .into()), (94, "A#5".into()), (95, "B5".into()), (96, "C6" + .into()), (97, "C#6".into()), (98, "D6".into()), (99, "D#6" + .into()), (100, "E6".into()), (101, "F6".into()), (102, "F#6" + .into()), (103, "G6".into()), (104, "G#6".into()), (105, "A6" + .into()), (106, "A#6".into()), (107, "B6".into()), (108, "C7" + .into()), (109, "C#7".into()), (110, "D7".into()), (111, "D#7" + .into()), (112, "E7".into()), (113, "F7".into()), (114, "F#7" + .into()), (115, "G7".into()), (116, "G#7".into()), (117, "A7" + .into()), (118, "A#7".into()), (119, "B7".into()), (120, "C8" + .into()), (121, "C#8".into()), (122, "D8".into()), (123, "D#8" + .into()), (124, "E8".into()), (125, "F8".into()), (126, "F#8" + .into()), (127, "G8".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 519913639i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicAirConditioner".into(), + prefab_hash: 519913639i32, + desc: "The Sinotai-designed Huxi portable air conditioner cools by drawing heat from the atmosphere and storing it, or adding heat to the atmosphere from its internal tank. With a max internal pressure of 8106kPa, its capacity is relatively limited, physics being clear on this subject. To extend its temperature storage ability, bolt the Huxi to a Tank Connector, then connect it to a pipe network supplying hot or cold gases." + .into(), + name: "Portable Air Conditioner".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Liquid Canister".into(), class : Class::LiquidCanister, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1941079206i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicCrate".into(), + prefab_hash: 1941079206i32, + desc: "The humble dynamic crate has become a symbol of Stationeer invention and independence. With twelve slots and handles at either end for ease of carriage, it\'s both standard issue and critical kit for cadets and Commanders alike." + .into(), + name: "Dynamic Crate".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Crate, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 6u32 + }), (7u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 9u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -2085885850i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGPR".into(), + prefab_hash: -2085885850i32, + desc: "".into(), + name: "".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1713611165i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterAir".into(), + prefab_hash: -1713611165i32, + desc: "Portable gas tanks do one thing: store gas. But there\'s lots you can do with them. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it\'s full, you can refill a Canister (Oxygen) by attaching it to the tank\'s striped section. Or you could vent the tank\'s variable flow rate valve into a room and create an atmosphere. They also attach to rovers and rockets. Alternatively, kick it over and practice barrel rolling. The possibilities are endless." + .into(), + name: "Portable Gas Tank (Air)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -322413931i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterCarbonDioxide".into(), + prefab_hash: -322413931i32, + desc: "Portable gas tanks do one thing: store gas. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or... boom. Once it\'s full, you can refill a Canister (CO2) by attaching it to the tank\'s striped section. Or you could vent the tank\'s variable flow rate valve into a room and create an atmosphere... of sorts." + .into(), + name: "Portable Gas Tank (CO2)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1741267161i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterEmpty".into(), + prefab_hash: -1741267161i32, + desc: "Portable gas tanks store gas. To refill one, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it\'s full, you can refill a Canister by attaching it to the tank\'s striped section. Or you could vent the tank\'s variable flow rate valve into a room and create an atmosphere." + .into(), + name: "Portable Gas Tank".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -817051527i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterFuel".into(), + prefab_hash: -817051527i32, + desc: "Portable tanks store gas. They\'re good at it. If you need to refill a tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or things get messy. You can refill a Canister (Fuel) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach it to a rover or rocket for later. It\'s really up to you." + .into(), + name: "Portable Gas Tank (Fuel)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 121951301i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterNitrogen".into(), + prefab_hash: 121951301i32, + desc: "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you\'ll end up with Nitrogen in places you weren\'t expecting. You can refill a Canister (Nitrogen) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach it to a rover or rocket for later." + .into(), + name: "Portable Gas Tank (Nitrogen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 30727200i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterNitrousOxide".into(), + prefab_hash: 30727200i32, + desc: "".into(), + name: "Portable Gas Tank (Nitrous Oxide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1360925836i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterOxygen".into(), + prefab_hash: 1360925836i32, + desc: "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you\'ll be picking tank shards out of your face. You can refill a Canister (Oxygen) by attaching it to the tank\'s striped section. Or you could vent it into a sealed room to create an atmosphere. Or even paint it pink, call it Steve and fill that sad space in your heart." + .into(), + name: "Portable Gas Tank (Oxygen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 396065382i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterPollutants".into(), + prefab_hash: 396065382i32, + desc: "".into(), + name: "Portable Gas Tank (Pollutants)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -8883951i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterRocketFuel".into(), + prefab_hash: -8883951i32, + desc: "".into(), + name: "Dynamic Gas Canister Rocket Fuel".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 108086870i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterVolatiles".into(), + prefab_hash: 108086870i32, + desc: "Portable tanks store gas. To refill one, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Don\'t fill it above 10 MPa, unless you\'re the sort who loves complicated, flammable emergencies. You can refill a Canister (Volatiles) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach to a rocket and show it around the Solar System." + .into(), + name: "Portable Gas Tank (Volatiles)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 197293625i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasCanisterWater".into(), + prefab_hash: 197293625i32, + desc: "This portable tank stores liquid, and liquid only. You just have to fill it up. To do this, bolt one to a Kit (Tank Connector) using a Wrench, then connect it to Liquid Pipe (Straight) to supply liquid to a network. \nTry to keep pressure under 10 MPa, or you\'ll end up wet, hurt and sorry, without any of the fun.\nYou can refill a Liquid Canister (Water) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself." + .into(), + name: "Portable Liquid Tank (Water)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -386375420i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasTankAdvanced".into(), + prefab_hash: -386375420i32, + desc: "0.Mode0\n1.Mode1".into(), + name: "Gas Tank Mk II".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1264455519i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGasTankAdvancedOxygen".into(), + prefab_hash: -1264455519i32, + desc: "0.Mode0\n1.Mode1".into(), + name: "Portable Gas Tank Mk II (Oxygen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -82087220i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicGenerator".into(), + prefab_hash: -82087220i32, + desc: "Every Stationeer\'s best friend, the portable generator gets you up and running, fast. Fill it with a Canister (Fuel) to power up and charge a Battery Cell (Small), or attach it to a Power Connector to link it into your electrical network. It\'s pressure driven, so functions more efficiently at lower temperatures, and REALLY efficiently if supercooled. Perfecting your fuel mix also makes a big difference." + .into(), + name: "Portable Generator".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Battery".into(), class : Class::Battery, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 587726607i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicHydroponics".into(), + prefab_hash: 587726607i32, + desc: "".into(), + name: "Portable Hydroponics".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Plant".into(), class : + Class::Plant, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Plant" + .into(), class : Class::Plant, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Plant".into(), class : Class::Plant, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 4u32 }), (5u32, SlotInfo::Direct { name : + "Liquid Canister".into(), class : Class::Plant, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "Liquid Canister".into(), class : Class::Plant, + index : 6u32 }), (7u32, SlotInfo::Direct { name : "Liquid Canister" + .into(), class : Class::Plant, index : 7u32 }), (8u32, SlotInfo::Direct { + name : "Liquid Canister".into(), class : Class::Plant, index : 8u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -21970188i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicLight".into(), + prefab_hash: -21970188i32, + desc: "Philippe Starck might not applaud, but this battery-powered light source undarkens the corners when illumination\'s lacking. Powered by any battery, it\'s a \'no-frills\' Xigo design that can be cheaply fabricated with the minimum of fuss. Unless you like fuss. In which case, fuss all you like." + .into(), + name: "Portable Light".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1939209112i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicLiquidCanisterEmpty".into(), + prefab_hash: -1939209112i32, + desc: "This portable tank stores liquid, and liquid only. You can bolt one to a Kit (Liquid Tank Connector) using a Wrench, then connect it to a pipe network to refill it. You can refill a Liquid Canister (Water) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself." + .into(), + name: "Portable Liquid Tank".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.025f32, + radiation_factor: 0.025f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 2130739600i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicMKIILiquidCanisterEmpty".into(), + prefab_hash: 2130739600i32, + desc: "An empty, insulated liquid Gas Canister." + .into(), + name: "Portable Liquid Tank Mk II".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -319510386i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicMKIILiquidCanisterWater".into(), + prefab_hash: -319510386i32, + desc: "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature." + .into(), + name: "Portable Liquid Tank Mk II (Water)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Portables, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 755048589i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicScrubber".into(), + prefab_hash: 755048589i32, + desc: "A portable scrubber does just what it sounds like: removes specific substances from the air. For instance, attaching a Filter (Carbon Dioxide) will pull Carbon Dioxide from the surrounding atmosphere. Note that the scrubber has room for one battery and two filters, which will double its operating speed. Neat. When it reaches an internal pressure of 8106kPA, an error signal will flash on the switch, indicating it needs to be emptied. Either vent it directly, or attach it to a pipe network via a Kit (Tank Connector) and a Wrench." + .into(), + name: "Portable Air Scrubber".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Gas Filter".into(), class : Class::GasFilter, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Gas Filter".into(), class : Class::GasFilter, + index : 2u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 106953348i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "DynamicSkeleton".into(), + prefab_hash: 106953348i32, + desc: "".into(), + name: "Skeleton".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -311170652i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ElectronicPrinterMod".into(), + prefab_hash: -311170652i32, + desc: "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options." + .into(), + name: "Electronic Printer Mod".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -110788403i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ElevatorCarrage".into(), + prefab_hash: -110788403i32, + desc: "".into(), + name: "Elevator".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1730165908i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "EntityChick".into(), + prefab_hash: 1730165908i32, + desc: "Once a chick is hatched, it gets hungry. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not." + .into(), + name: "Entity Chick".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 334097180i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "EntityChickenBrown".into(), + prefab_hash: 334097180i32, + desc: "Like so many of its brethren, this is a chicken. A brown one. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not." + .into(), + name: "Entity Chicken Brown".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1010807532i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "EntityChickenWhite".into(), + prefab_hash: 1010807532i32, + desc: "It\'s a chicken, as white as moondust. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not." + .into(), + name: "Entity Chicken White".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 966959649i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "EntityRoosterBlack".into(), + prefab_hash: 966959649i32, + desc: "This is a rooster. It is black. There is dignity in this.".into(), + name: "Entity Rooster Black".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -583103395i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "EntityRoosterBrown".into(), + prefab_hash: -583103395i32, + desc: "The common brown rooster. Don\'t let it hear you say that." + .into(), + name: "Entity Rooster Brown".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1517856652i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "Fertilizer".into(), + prefab_hash: 1517856652i32, + desc: "Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter.\nFertilizer\'s affects depend on its ingredients:\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for\n\nThe effect of these ingredients depends on their respective proportions in the composter when processing is activated. " + .into(), + name: "Fertilizer".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -86315541i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "FireArmSMG".into(), + prefab_hash: -86315541i32, + desc: "0.Single\n1.Auto".into(), + name: "Fire Arm SMG".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::Magazine, + index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1845441951i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Flag_ODA_10m".into(), + prefab_hash: 1845441951i32, + desc: "".into(), + name: "Flag (ODA 10m)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1159126354i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Flag_ODA_4m".into(), + prefab_hash: 1159126354i32, + desc: "".into(), + name: "Flag (ODA 4m)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1998634960i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Flag_ODA_6m".into(), + prefab_hash: 1998634960i32, + desc: "".into(), + name: "Flag (ODA 6m)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -375156130i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Flag_ODA_8m".into(), + prefab_hash: -375156130i32, + desc: "".into(), + name: "Flag (ODA 8m)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 118685786i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "FlareGun".into(), + prefab_hash: 118685786i32, + desc: "".into(), + name: "Flare Gun".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Magazine".into(), class : Class::Flare, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "" + .into(), class : Class::Blocked, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1840108251i32, + StructureCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "H2Combustor".into(), + prefab_hash: 1840108251i32, + desc: "Adapted slightly from its original Recurso design, the Volatiles Combustor does exactly what its name suggests - it burns a mixture of volatiles and Oxygen to create water. Extremely useful in hot or arid environments, users need to be aware that the combustor outputs considerable waste heat. The device is also less than perfectly efficient, resulting in the autoignition of volatiles in the chamber, and the production of waste gases which must be dealt with." + .into(), + name: "H2 Combustor".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::PressureInput, MemoryAccess::Read), + (LogicType::TemperatureInput, MemoryAccess::Read), + (LogicType::RatioOxygenInput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioNitrogenInput, MemoryAccess::Read), + (LogicType::RatioPollutantInput, MemoryAccess::Read), + (LogicType::RatioVolatilesInput, MemoryAccess::Read), + (LogicType::RatioWaterInput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), + (LogicType::TotalMolesInput, MemoryAccess::Read), + (LogicType::PressureOutput, MemoryAccess::Read), + (LogicType::TemperatureOutput, MemoryAccess::Read), + (LogicType::RatioOxygenOutput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioPollutantOutput, MemoryAccess::Read), + (LogicType::RatioVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioWaterOutput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), + (LogicType::TotalMolesOutput, MemoryAccess::Read), + (LogicType::CombustionInput, MemoryAccess::Read), + (LogicType::CombustionOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioSteamInput, MemoryAccess::Read), + (LogicType::RatioSteamOutput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: Some(2u32), + has_activate_state: true, + has_atmosphere: true, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 247238062i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "Handgun".into(), + prefab_hash: 247238062i32, + desc: "".into(), + name: "Handgun".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Magazine".into(), class : + Class::Magazine, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1254383185i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "HandgunMagazine".into(), + prefab_hash: 1254383185i32, + desc: "".into(), + name: "Handgun Magazine".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Magazine, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -857713709i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "HumanSkull".into(), + prefab_hash: -857713709i32, + desc: "".into(), + name: "Human Skull".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -73796547i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ImGuiCircuitboardAirlockControl".into(), + prefab_hash: -73796547i32, + desc: "".into(), + name: "Airlock (Experimental)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Circuitboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -842048328i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemActiveVent".into(), + prefab_hash: -842048328i32, + desc: "When constructed, this kit places an Active Vent on any support structure." + .into(), + name: "Kit (Active Vent)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1871048978i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAdhesiveInsulation".into(), + prefab_hash: 1871048978i32, + desc: "".into(), + name: "Adhesive Insulation".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 20u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1722785341i32, + ItemCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAdvancedTablet".into(), + prefab_hash: 1722785341i32, + desc: "The advanced Xigo Padi 2 tablet is an improved version of the basic Handheld Tablet, boasting two cartridge slots. The Padi 2 accepts Cartridge (Atmos Analyzer), Cartridge (Tracker), Cartridge (Medical Analyzer), Cartridge (Ore Scanner), Cartridge (eReader), and various other cartridges.\n\t \n\t With a Integrated Circuit (IC10) in the Programmable Chip, you can access variable slots on the carrying human using the device numbers (d0, d1, etc...), so long as the item can be access via logic, such as the Hardsuit.Connects to Logic Transmitter" + .into(), + name: "Advanced Tablet".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (3, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::Volume, + MemoryAccess::ReadWrite), (LogicType::SoundAlert, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: true, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Cartridge".into(), class : Class::Cartridge, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Cartridge1".into(), class : Class::Cartridge, + index : 2u32 }), (3u32, SlotInfo::Direct { name : "Programmable Chip" + .into(), class : Class::ProgrammableChip, index : 3u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 176446172i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAlienMushroom".into(), + prefab_hash: 176446172i32, + desc: "".into(), + name: "Alien Mushroom".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -9559091i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAmmoBox".into(), + prefab_hash: -9559091i32, + desc: "".into(), + name: "Ammo Box".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 201215010i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAngleGrinder".into(), + prefab_hash: 201215010i32, + desc: "Angles-be-gone with the trusty angle grinder.".into(), + name: "Angle Grinder".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1385062886i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemArcWelder".into(), + prefab_hash: 1385062886i32, + desc: "".into(), + name: "Arc Welder".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1757673317i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAreaPowerControl".into(), + prefab_hash: 1757673317i32, + desc: "This kit places a Area Power Control (APC) on any support structure. The APC kit has two options, selecting which direction you would like the APC power to flow." + .into(), + name: "Kit (Area Power Controller)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 412924554i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAstroloyIngot".into(), + prefab_hash: 412924554i32, + desc: "Due to the original Stationeer manual collapsing into a singularity, Astroloy recipes have been warped by spacetime contortions. The correct Astroloy recipe, as memorialized for all time in a series of charming plastic icons, is 1.0 Copper, 1.0 Cobalt, and 2.0 Steel." + .into(), + name: "Ingot (Astroloy)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Astroloy".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1662476145i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAstroloySheets".into(), + prefab_hash: -1662476145i32, + desc: "".into(), + name: "Astroloy Sheets".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 789015045i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAuthoringTool".into(), + prefab_hash: 789015045i32, + desc: "".into(), + name: "Authoring Tool".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1731627004i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemAuthoringToolRocketNetwork".into(), + prefab_hash: -1731627004i32, + desc: "".into(), + name: "".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1262580790i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemBasketBall".into(), + prefab_hash: -1262580790i32, + desc: "".into(), + name: "Basket Ball".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 700133157i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemBatteryCell".into(), + prefab_hash: 700133157i32, + desc: "Harnessing a design pioneered in the early 21st century, the small battery cell is the Stationeer\'s basic unit of portable electrical power. While it lacks the charge of a Battery Cell (Large) or Battery Cell (Nuclear), it has the humble advantage of being fabricated from basic resources.\n\nPOWER OUTPUT\nThe small cell stores up to 36000 watts of power." + .into(), + name: "Battery Cell (Small)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Battery, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + -459827268i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemBatteryCellLarge".into(), + prefab_hash: -459827268i32, + desc: "First mass-produced by Xigo in 2155 on the basis of a unattributed prototype, the classic silicon anode solid-state design extends its optimum temperature range.\n\nPOWER OUTPUT\nThe large power cell can discharge 288kW of power. \n" + .into(), + name: "Battery Cell (Large)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Battery, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + 544617306i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemBatteryCellNuclear".into(), + prefab_hash: 544617306i32, + desc: "Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld.\n\nPOWER OUTPUT\nPushing the power-weight balance to its limits, the \'nuke\' has a 2.3 megawatt charge (2304000W), reflecting its reliance on exotic superalloys." + .into(), + name: "Battery Cell (Nuclear)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Battery, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + -1866880307i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemBatteryCharger".into(), + prefab_hash: -1866880307i32, + desc: "This kit produces a 5-slot Kit (Battery Charger)." + .into(), + name: "Kit (Battery Charger)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1008295833i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemBatteryChargerSmall".into(), + prefab_hash: 1008295833i32, + desc: "".into(), + name: "Battery Charger Small".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -869869491i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemBeacon".into(), + prefab_hash: -869869491i32, + desc: "".into(), + name: "Tracking Beacon".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -831480639i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemBiomass".into(), + prefab_hash: -831480639i32, + desc: "Diced organic material that is returned when food and organic matter is passed through the Recycler and Centrifuge. Can be burned in a Furnace into Charcoal for use in the Generator (Solid Fuel)." + .into(), + name: "Biomass".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("Biomass".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 893514943i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemBreadLoaf".into(), + prefab_hash: 893514943i32, + desc: "".into(), + name: "Bread Loaf".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1792787349i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCableAnalyser".into(), + prefab_hash: -1792787349i32, + desc: "".into(), + name: "Kit (Cable Analyzer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -466050668i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCableCoil".into(), + prefab_hash: -466050668i32, + desc: "Bodily metaphors are tired and anthropocentric, but it was Frida Stuppen, the first ODA Administrator, who said, \'Let the cabling be as the nerve and the vessel, transmitting power and data alike through systems we forge among the stars.\' Later commentators suggested that she was simply putting a romantic gloss on a piece of dubious economy. Whatever the case, standard cabling is where any Stationeer\'s network begins. \nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." + .into(), + name: "Cable Coil".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2060134443i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCableCoilHeavy".into(), + prefab_hash: 2060134443i32, + desc: "Use heavy cable coil for power systems with large draws. Unlike Cable Coil, which can only safely conduct 5kW, heavy cables can transmit up to 100kW." + .into(), + name: "Cable Coil (Heavy)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 195442047i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCableFuse".into(), + prefab_hash: 195442047i32, + desc: "".into(), + name: "Kit (Cable Fuses)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2104175091i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCannedCondensedMilk".into(), + prefab_hash: -2104175091i32, + desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Condensed Milk and an Empty Can, canned condensed milk is fairly high in nutrition, and does not decay." + .into(), + name: "Canned Condensed Milk".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -999714082i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCannedEdamame".into(), + prefab_hash: -999714082i32, + desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Soybean and an Empty Can, canned edamame beans are fairly high in nutrition, and do not decay." + .into(), + name: "Canned Edamame".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1344601965i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCannedMushroom".into(), + prefab_hash: -1344601965i32, + desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Mushroom and a Empty Can, delicious mushroom soup is fairly high in nutrition, and does not decay." + .into(), + name: "Canned Mushroom".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1161510063i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCannedPowderedEggs".into(), + prefab_hash: 1161510063i32, + desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Powdered Eggs and an Empty Can, canned powdered eggs are an exciting, dynamic food that\'s fairly high in nutrition, and does not decay." + .into(), + name: "Canned Powdered Eggs".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1185552595i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCannedRicePudding".into(), + prefab_hash: -1185552595i32, + desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Rice and an Empty Can, canned rice pudding is a sweet treat, fairly high in nutrition, and does not decay." + .into(), + name: "Canned Rice Pudding".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 791746840i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCerealBar".into(), + prefab_hash: 791746840i32, + desc: "Sustains, without decay. If only all our relationships were so well balanced." + .into(), + name: "Cereal Bar".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -75205276i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCerealBarBag".into(), + prefab_hash: -75205276i32, + desc: "".into(), + name: "Cereal Bar Bag".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -401648353i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCerealBarBox".into(), + prefab_hash: -401648353i32, + desc: "".into(), + name: "Cereal Bar Box".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 252561409i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCharcoal".into(), + prefab_hash: 252561409i32, + desc: "Charcoal is a lightweight, black carbon residue produced by heating Biomass in a Arc Furnace. It contains less energy potential than Ore (Coal), but can be used as a basic fuel source. Charcoal can also be substituted for coal in alloy recipes." + .into(), + name: "Charcoal".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 200u32, + reagents: Some(vec![("Carbon".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -772542081i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemChemLightBlue".into(), + prefab_hash: -772542081i32, + desc: "A safe and slightly rave-some source of blue light. Snap to activate." + .into(), + name: "Chem Light (Blue)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -597479390i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemChemLightGreen".into(), + prefab_hash: -597479390i32, + desc: "Enliven the dreariest, airless rock with this glowy green light. Snap to activate." + .into(), + name: "Chem Light (Green)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -525810132i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemChemLightRed".into(), + prefab_hash: -525810132i32, + desc: "A red glowstick. Snap to activate. Then reach for the lasers." + .into(), + name: "Chem Light (Red)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1312166823i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemChemLightWhite".into(), + prefab_hash: 1312166823i32, + desc: "Snap the glowstick to activate a pale radiance that keeps the darkness at bay." + .into(), + name: "Chem Light (White)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1224819963i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemChemLightYellow".into(), + prefab_hash: 1224819963i32, + desc: "Dispel the darkness with this yellow glowstick.".into(), + name: "Chem Light (Yellow)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 234601764i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemChocolateBar".into(), + prefab_hash: 234601764i32, + desc: "".into(), + name: "Chocolate Bar".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -261575861i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemChocolateCake".into(), + prefab_hash: -261575861i32, + desc: "".into(), + name: "Chocolate Cake".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 860793245i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemChocolateCerealBar".into(), + prefab_hash: 860793245i32, + desc: "".into(), + name: "Chocolate Cereal Bar".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1724793494i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCoalOre".into(), + prefab_hash: 1724793494i32, + desc: "Humanity wouldn\'t have got to space without humble, combustible coal. Burn it in a , smelt it in the Furnace to create alloys, or use it in the Reagent Processor to make Spray Paint (Black)." + .into(), + name: "Ore (Coal)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Hydrocarbon".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -983091249i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCobaltOre".into(), + prefab_hash: -983091249i32, + desc: "Cobalt is a chemical element with the symbol \"Co\" and is typically found in only small deposits. Cobalt is a rare substance, but used create the Heal Pill and several alloys." + .into(), + name: "Ore (Cobalt)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Cobalt".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 457286516i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCocoaPowder".into(), + prefab_hash: 457286516i32, + desc: "".into(), + name: "Cocoa Powder".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 20u32, + reagents: Some(vec![("Cocoa".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 680051921i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCocoaTree".into(), + prefab_hash: 680051921i32, + desc: "".into(), + name: "Cocoa".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 20u32, + reagents: Some(vec![("Cocoa".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1800622698i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCoffeeMug".into(), + prefab_hash: 1800622698i32, + desc: "".into(), + name: "Coffee Mug".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1058547521i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemConstantanIngot".into(), + prefab_hash: 1058547521i32, + desc: "".into(), + name: "Ingot (Constantan)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Constantan".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1715917521i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCookedCondensedMilk".into(), + prefab_hash: 1715917521i32, + desc: "A high-nutrient cooked food, which can be canned.".into(), + name: "Condensed Milk".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 10u32, + reagents: Some(vec![("Milk".into(), 100f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1344773148i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCookedCorn".into(), + prefab_hash: 1344773148i32, + desc: "A high-nutrient cooked food, which can be canned.".into(), + name: "Cooked Corn".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 10u32, + reagents: Some(vec![("Corn".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1076892658i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCookedMushroom".into(), + prefab_hash: -1076892658i32, + desc: "A high-nutrient cooked food, which can be canned.".into(), + name: "Cooked Mushroom".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 10u32, + reagents: Some(vec![("Mushroom".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1712264413i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCookedPowderedEggs".into(), + prefab_hash: -1712264413i32, + desc: "A high-nutrient cooked food, which can be canned.".into(), + name: "Powdered Eggs".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 10u32, + reagents: Some(vec![("Egg".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1849281546i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCookedPumpkin".into(), + prefab_hash: 1849281546i32, + desc: "A high-nutrient cooked food, which can be canned.".into(), + name: "Cooked Pumpkin".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 10u32, + reagents: Some(vec![("Pumpkin".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2013539020i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCookedRice".into(), + prefab_hash: 2013539020i32, + desc: "A high-nutrient cooked food, which can be canned.".into(), + name: "Cooked Rice".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 10u32, + reagents: Some(vec![("Rice".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1353449022i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCookedSoybean".into(), + prefab_hash: 1353449022i32, + desc: "A high-nutrient cooked food, which can be canned.".into(), + name: "Cooked Soybean".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 10u32, + reagents: Some(vec![("Soy".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -709086714i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCookedTomato".into(), + prefab_hash: -709086714i32, + desc: "A high-nutrient cooked food, which can be canned.".into(), + name: "Cooked Tomato".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 10u32, + reagents: Some(vec![("Tomato".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -404336834i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCopperIngot".into(), + prefab_hash: -404336834i32, + desc: "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items." + .into(), + name: "Ingot (Copper)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Copper".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -707307845i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCopperOre".into(), + prefab_hash: -707307845i32, + desc: "Copper is a chemical element with the symbol \"Cu\". This common and highly conductive material is found on most astronomical bodies and is used in a variety of manufacturing processes including electronic components, alloys, and wires." + .into(), + name: "Ore (Copper)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Copper".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 258339687i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCorn".into(), + prefab_hash: 258339687i32, + desc: "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light." + .into(), + name: "Corn".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 20u32, + reagents: Some(vec![("Corn".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 545034114i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCornSoup".into(), + prefab_hash: 545034114i32, + desc: "Made using Cooked Corn and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Faily high in nutrition, canned food does not decay." + .into(), + name: "Corn Soup".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1756772618i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCreditCard".into(), + prefab_hash: -1756772618i32, + desc: "".into(), + name: "Credit Card".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100000u32, + reagents: None, + slot_class: Class::CreditCard, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 215486157i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCropHay".into(), + prefab_hash: 215486157i32, + desc: "".into(), + name: "Hay".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 856108234i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemCrowbar".into(), + prefab_hash: 856108234i32, + desc: "Recurso\'s entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise." + .into(), + name: "Crowbar".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1005843700i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemDataDisk".into(), + prefab_hash: 1005843700i32, + desc: "".into(), + name: "Data Disk".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::DataDisk, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 902565329i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemDirtCanister".into(), + prefab_hash: 902565329i32, + desc: "A container the will fill with Dirt when using a Mining Drill when placed inside a Mining Belt. You can then use this Dirt Canister with the Terrain Manipulator to adjust the terrain to suit your needs." + .into(), + name: "Dirt Canister".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1234745580i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemDirtyOre".into(), + prefab_hash: -1234745580i32, + desc: "Ore mined from bedrock via the Deep Miner which then can be used in the Centrifuge, or Combustion Centrifuge. Once processed, it produces ore in a ratio similar to the average found on the planet\'s surface. " + .into(), + name: "Dirty Ore".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2124435700i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemDisposableBatteryCharger".into(), + prefab_hash: -2124435700i32, + desc: "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery." + .into(), + name: "Disposable Battery Charger".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2009673399i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemDrill".into(), + prefab_hash: 2009673399i32, + desc: "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature." + .into(), + name: "Hand Drill".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1943134693i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemDuctTape".into(), + prefab_hash: -1943134693i32, + desc: "In the distant past, one of Earth\'s great champions taught a generation of \'Fix-It People\' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage." + .into(), + name: "Duct Tape".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1072914031i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemDynamicAirCon".into(), + prefab_hash: 1072914031i32, + desc: "".into(), + name: "Kit (Portable Air Conditioner)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -971920158i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemDynamicScrubber".into(), + prefab_hash: -971920158i32, + desc: "".into(), + name: "Kit (Portable Scrubber)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -524289310i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEggCarton".into(), + prefab_hash: -524289310i32, + desc: "Within, eggs reside in mysterious, marmoreal silence.".into(), + name: "Egg Carton".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::Egg, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::Egg, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::Egg, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::Egg, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::Egg, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::Egg, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 731250882i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemElectronicParts".into(), + prefab_hash: 731250882i32, + desc: "".into(), + name: "Electronic Parts".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 20u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 502280180i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemElectrumIngot".into(), + prefab_hash: 502280180i32, + desc: "".into(), + name: "Ingot (Electrum)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Electrum".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -351438780i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyAngleGrinder".into(), + prefab_hash: -351438780i32, + desc: "".into(), + name: "Emergency Angle Grinder".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1056029600i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyArcWelder".into(), + prefab_hash: -1056029600i32, + desc: "".into(), + name: "Emergency Arc Welder".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 976699731i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyCrowbar".into(), + prefab_hash: 976699731i32, + desc: "".into(), + name: "Emergency Crowbar".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2052458905i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyDrill".into(), + prefab_hash: -2052458905i32, + desc: "".into(), + name: "Emergency Drill".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1791306431i32, + ItemSuitTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyEvaSuit".into(), + prefab_hash: 1791306431i32, + desc: "".into(), + name: "Emergency Eva Suit".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Suit, + sorting_class: SortingClass::Clothing, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.2f32, + radiation_factor: 0.2f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), + slots: vec![ + (0u32, SlotInfo::Direct { name : "Air Tank".into(), class : + Class::GasCanister, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Waste Tank".into(), class : Class::GasCanister, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Life Support".into(), class : Class::Battery, + index : 2u32 }), (3u32, SlotInfo::Direct { name : "Filter".into(), class + : Class::GasFilter, index : 3u32 }), (4u32, SlotInfo::Direct { name : + "Filter".into(), class : Class::GasFilter, index : 4u32 }), (5u32, + SlotInfo::Direct { name : "Filter".into(), class : Class::GasFilter, + index : 5u32 }) + ] + .into_iter() + .collect(), + suit_info: SuitInfo { + hygiene_reduction_multiplier: 1f32, + waste_max_pressure: 4053f32, + }, + } + .into(), + ); + map.insert( + -1061510408i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyPickaxe".into(), + prefab_hash: -1061510408i32, + desc: "".into(), + name: "Emergency Pickaxe".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 266099983i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyScrewdriver".into(), + prefab_hash: 266099983i32, + desc: "".into(), + name: "Emergency Screwdriver".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 205916793i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencySpaceHelmet".into(), + prefab_hash: 205916793i32, + desc: "".into(), + name: "Emergency Space Helmet".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Helmet, + sorting_class: SortingClass::Clothing, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 3f32 }), + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), (LogicType::Flush, + MemoryAccess::Write), (LogicType::SoundAlert, + MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + 851103794i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencySuppliesBox".into(), + prefab_hash: 851103794i32, + desc: "".into(), + name: "Emergency Supplies".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1661941301i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyToolBelt".into(), + prefab_hash: 1661941301i32, + desc: "".into(), + name: "Emergency Tool Belt".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Belt, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Tool" + .into(), class : Class::Tool, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Tool".into(), class : Class::Tool, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, index : + 4u32 }), (5u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 5u32 }), (6u32, SlotInfo::Direct { name : "Tool" + .into(), class : Class::Tool, index : 6u32 }), (7u32, SlotInfo::Direct { + name : "Tool".into(), class : Class::Tool, index : 7u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 2102803952i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyWireCutters".into(), + prefab_hash: 2102803952i32, + desc: "".into(), + name: "Emergency Wire Cutters".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 162553030i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmergencyWrench".into(), + prefab_hash: 162553030i32, + desc: "".into(), + name: "Emergency Wrench".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1013818348i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEmptyCan".into(), + prefab_hash: 1013818348i32, + desc: "Used for making soups when combined with food in the Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay." + .into(), + name: "Empty Can".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 10u32, + reagents: Some(vec![("Steel".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1677018918i32, + ItemSuitTemplate { + prefab: PrefabInfo { + prefab_name: "ItemEvaSuit".into(), + prefab_hash: 1677018918i32, + desc: "The EVA suit is the basic suit Stationeers need to survive in the inhospitable environment of space. For more information on EVA suits, consult the EVA suit guide." + .into(), + name: "Eva Suit".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Suit, + sorting_class: SortingClass::Clothing, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.2f32, + radiation_factor: 0.2f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), + slots: vec![ + (0u32, SlotInfo::Direct { name : "Air Tank".into(), class : + Class::GasCanister, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Waste Tank".into(), class : Class::GasCanister, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Life Support".into(), class : Class::Battery, + index : 2u32 }), (3u32, SlotInfo::Direct { name : "Filter".into(), class + : Class::GasFilter, index : 3u32 }), (4u32, SlotInfo::Direct { name : + "Filter".into(), class : Class::GasFilter, index : 4u32 }), (5u32, + SlotInfo::Direct { name : "Filter".into(), class : Class::GasFilter, + index : 5u32 }) + ] + .into_iter() + .collect(), + suit_info: SuitInfo { + hygiene_reduction_multiplier: 1f32, + waste_max_pressure: 4053f32, + }, + } + .into(), + ); + map.insert( + 235361649i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemExplosive".into(), + prefab_hash: 235361649i32, + desc: "".into(), + name: "Demolition Charge".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 3u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 892110467i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFern".into(), + prefab_hash: 892110467i32, + desc: "There was a time, when Stationeers had to make Fenoxitone Powder using the Reagent Processor. Recent advances in technology allow you to use equivalent quantities of fern directly in recipes." + .into(), + name: "Fern".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("Fenoxitone".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -383972371i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFertilizedEgg".into(), + prefab_hash: -383972371i32, + desc: "To hatch it requires an incubation temperature of between 35 and 45 degrees Celsius and will hatch into a Chick. If the egg is exposed to tepratures below 10 degrees it will no longer be viable." + .into(), + name: "Egg".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 1u32, + reagents: Some(vec![("Egg".into(), 1f64)].into_iter().collect()), + slot_class: Class::Egg, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 266654416i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFilterFern".into(), + prefab_hash: 266654416i32, + desc: "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant." + .into(), + name: "Darga Fern".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2011191088i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFlagSmall".into(), + prefab_hash: 2011191088i32, + desc: "".into(), + name: "Kit (Small Flag)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2107840748i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFlashingLight".into(), + prefab_hash: -2107840748i32, + desc: "".into(), + name: "Kit (Flashing Light)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -838472102i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFlashlight".into(), + prefab_hash: -838472102i32, + desc: "A flashlight with a narrow and wide beam options.".into(), + name: "Flashlight".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Low Power".into()), (1, "High Power".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -665995854i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFlour".into(), + prefab_hash: -665995854i32, + desc: "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven)." + .into(), + name: "Flour".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Flour".into(), 50f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1573623434i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFlowerBlue".into(), + prefab_hash: -1573623434i32, + desc: "".into(), + name: "Flower (Blue)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1513337058i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFlowerGreen".into(), + prefab_hash: -1513337058i32, + desc: "".into(), + name: "Flower (Green)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1411986716i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFlowerOrange".into(), + prefab_hash: -1411986716i32, + desc: "".into(), + name: "Flower (Orange)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -81376085i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFlowerRed".into(), + prefab_hash: -81376085i32, + desc: "".into(), + name: "Flower (Red)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1712822019i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFlowerYellow".into(), + prefab_hash: 1712822019i32, + desc: "".into(), + name: "Flower (Yellow)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -57608687i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFrenchFries".into(), + prefab_hash: -57608687i32, + desc: "Because space would suck without \'em.".into(), + name: "Canned French Fries".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1371786091i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemFries".into(), + prefab_hash: 1371786091i32, + desc: "".into(), + name: "French Fries".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -767685874i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterCarbonDioxide".into(), + prefab_hash: -767685874i32, + desc: "".into(), + name: "Canister (CO2)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), + } + .into(), + ); + map.insert( + 42280099i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterEmpty".into(), + prefab_hash: 42280099i32, + desc: "".into(), + name: "Canister".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), + } + .into(), + ); + map.insert( + -1014695176i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterFuel".into(), + prefab_hash: -1014695176i32, + desc: "".into(), + name: "Canister (Fuel)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), + } + .into(), + ); + map.insert( + 2145068424i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterNitrogen".into(), + prefab_hash: 2145068424i32, + desc: "".into(), + name: "Canister (Nitrogen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), + } + .into(), + ); + map.insert( + -1712153401i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterNitrousOxide".into(), + prefab_hash: -1712153401i32, + desc: "".into(), + name: "Gas Canister (Sleeping)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), + } + .into(), + ); + map.insert( + -1152261938i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterOxygen".into(), + prefab_hash: -1152261938i32, + desc: "".into(), + name: "Canister (Oxygen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), + } + .into(), + ); + map.insert( + -1552586384i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterPollutants".into(), + prefab_hash: -1552586384i32, + desc: "".into(), + name: "Canister (Pollutants)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), + } + .into(), + ); + map.insert( + -668314371i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterSmart".into(), + prefab_hash: -668314371i32, + desc: "0.Mode0\n1.Mode1".into(), + name: "Gas Canister (Smart)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), + } + .into(), + ); + map.insert( + -472094806i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterVolatiles".into(), + prefab_hash: -472094806i32, + desc: "".into(), + name: "Canister (Volatiles)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), + } + .into(), + ); + map.insert( + -1854861891i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasCanisterWater".into(), + prefab_hash: -1854861891i32, + desc: "".into(), + name: "Liquid Canister (Water)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::LiquidCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { + volume: 12.1f32, + }), + } + .into(), + ); + map.insert( + 1635000764i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterCarbonDioxide".into(), + prefab_hash: 1635000764i32, + desc: "Given humanity\'s obsession with exhaling Carbon Dioxide, all Stationeers are issued two basic Sinotai Carbon Dioxide Gas Filter as part of their standard deployment kit (SDK). These filters allow passage of Carbon Dioxide into the suit\'s waste Canister, but are also critical components of the Portable Air Scrubber and the Filtration. The Medium Filter (Carbon Dioxide) and Heavy Filter (Carbon Dioxide) are also available." + .into(), + name: "Filter (Carbon Dioxide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::CarbonDioxide), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -185568964i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterCarbonDioxideInfinite".into(), + prefab_hash: -185568964i32, + desc: "A filter that selectively targets Carbon Dioxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." + .into(), + name: "Catalytic Filter (Carbon Dioxide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::CarbonDioxide), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1876847024i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterCarbonDioxideL".into(), + prefab_hash: 1876847024i32, + desc: "".into(), + name: "Heavy Filter (Carbon Dioxide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::CarbonDioxide), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 416897318i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterCarbonDioxideM".into(), + prefab_hash: 416897318i32, + desc: "".into(), + name: "Medium Filter (Carbon Dioxide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::CarbonDioxide), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 632853248i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterNitrogen".into(), + prefab_hash: 632853248i32, + desc: "Filters are used to capture various gases, which can be disposed of or used elsewhere. Nitrogen is a byproduct of smelting various ores, notably Ice (Nitrice), which may be combined with Oxygen to make a breathable - and considerably less flammable - atmosphere." + .into(), + name: "Filter (Nitrogen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Nitrogen), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 152751131i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterNitrogenInfinite".into(), + prefab_hash: 152751131i32, + desc: "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." + .into(), + name: "Catalytic Filter (Nitrogen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Nitrogen), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1387439451i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterNitrogenL".into(), + prefab_hash: -1387439451i32, + desc: "".into(), + name: "Heavy Filter (Nitrogen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Nitrogen), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -632657357i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterNitrogenM".into(), + prefab_hash: -632657357i32, + desc: "".into(), + name: "Medium Filter (Nitrogen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Nitrogen), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1247674305i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterNitrousOxide".into(), + prefab_hash: -1247674305i32, + desc: "".into(), + name: "Filter (Nitrous Oxide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::NitrousOxide), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -123934842i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterNitrousOxideInfinite".into(), + prefab_hash: -123934842i32, + desc: "A filter that selectively targets Nitrous Oxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." + .into(), + name: "Catalytic Filter (Nitrous Oxide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::NitrousOxide), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 465267979i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterNitrousOxideL".into(), + prefab_hash: 465267979i32, + desc: "".into(), + name: "Heavy Filter (Nitrous Oxide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::NitrousOxide), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1824284061i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterNitrousOxideM".into(), + prefab_hash: 1824284061i32, + desc: "".into(), + name: "Medium Filter (Nitrous Oxide)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::NitrousOxide), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -721824748i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterOxygen".into(), + prefab_hash: -721824748i32, + desc: "Sinotai have cornered the market in filter design. Their trademarked templates are simple to print and highly efficient at capturing various gases, which can be disposed of or used elsewhere. Oxygen is a common byproduct of smelting various ores, but must be filtered of such impurities as Nitrogen using this filter and various devices, such as the Kit (Portable Scrubber)." + .into(), + name: "Filter (Oxygen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Oxygen), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1055451111i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterOxygenInfinite".into(), + prefab_hash: -1055451111i32, + desc: "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." + .into(), + name: "Catalytic Filter (Oxygen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Oxygen), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1217998945i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterOxygenL".into(), + prefab_hash: -1217998945i32, + desc: "".into(), + name: "Heavy Filter (Oxygen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Oxygen), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1067319543i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterOxygenM".into(), + prefab_hash: -1067319543i32, + desc: "".into(), + name: "Medium Filter (Oxygen)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Oxygen), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1915566057i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterPollutants".into(), + prefab_hash: 1915566057i32, + desc: "Filters are used to capture various gases, such as waste emissions from a Furnace or Arc Furnace. Adding Sinotai-designed Pollutant filters to a Kit (Portable Scrubber) allows you to isolate this gas, then add it to a pipe network and employ its excellent coolant properties in a Wall Cooler. Try not to inhale." + .into(), + name: "Filter (Pollutant)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Pollutant), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -503738105i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterPollutantsInfinite".into(), + prefab_hash: -503738105i32, + desc: "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." + .into(), + name: "Catalytic Filter (Pollutants)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Pollutant), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1959564765i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterPollutantsL".into(), + prefab_hash: 1959564765i32, + desc: "".into(), + name: "Heavy Filter (Pollutants)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Pollutant), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 63677771i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterPollutantsM".into(), + prefab_hash: 63677771i32, + desc: "".into(), + name: "Medium Filter (Pollutants)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Pollutant), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 15011598i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterVolatiles".into(), + prefab_hash: 15011598i32, + desc: "Filters are used to capture various gases, which can be disposed of or used elsewhere. Volatiles are created by exposing Ice (Volatiles) to heat. The product can then be collected and combined with Oxygen to create fuel, or used within a Furnace to smelt ores and create alloys." + .into(), + name: "Filter (Volatiles)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Volatiles), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1916176068i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterVolatilesInfinite".into(), + prefab_hash: -1916176068i32, + desc: "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." + .into(), + name: "Catalytic Filter (Volatiles)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Volatiles), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1255156286i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterVolatilesL".into(), + prefab_hash: 1255156286i32, + desc: "".into(), + name: "Heavy Filter (Volatiles)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Volatiles), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1037507240i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterVolatilesM".into(), + prefab_hash: 1037507240i32, + desc: "".into(), + name: "Medium Filter (Volatiles)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Volatiles), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1993197973i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterWater".into(), + prefab_hash: -1993197973i32, + desc: "Sinotai filters are used to capture various gases, which can be disposed of, or used elsewhere. Water can be collected by filtering smelted Ice (Water)" + .into(), + name: "Filter (Water)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Steam), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1678456554i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterWaterInfinite".into(), + prefab_hash: -1678456554i32, + desc: "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." + .into(), + name: "Catalytic Filter (Water)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Steam), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2004969680i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterWaterL".into(), + prefab_hash: 2004969680i32, + desc: "".into(), + name: "Heavy Filter (Water)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Steam), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 8804422i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasFilterWaterM".into(), + prefab_hash: 8804422i32, + desc: "".into(), + name: "Medium Filter (Water)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: Some(GasType::Steam), + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::GasFilter, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1717593480i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasSensor".into(), + prefab_hash: 1717593480i32, + desc: "".into(), + name: "Kit (Gas Sensor)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2113012215i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGasTankStorage".into(), + prefab_hash: -2113012215i32, + desc: "This kit produces a Kit (Canister Storage) for refilling a Canister." + .into(), + name: "Kit (Canister Storage)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1588896491i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGlassSheets".into(), + prefab_hash: 1588896491i32, + desc: "A fundamental construction component, glass sheets are created from Silicon. Fabricated on the Autolathe, they are used to make {THING:StructureSolarPanel;Solar Panels}, and many other structures." + .into(), + name: "Glass Sheets".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1068925231i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGlasses".into(), + prefab_hash: -1068925231i32, + desc: "".into(), + name: "Glasses".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Glasses, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 226410516i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGoldIngot".into(), + prefab_hash: 226410516i32, + desc: "There is an enduring paradox at the heart of the Stationeers project: An initiative conceived as \'cut-price space exploration\' uses Gold as a fundamental ingredient in fabricating so much of its equipment and materiel. " + .into(), + name: "Ingot (Gold)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Gold".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1348105509i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGoldOre".into(), + prefab_hash: -1348105509i32, + desc: "Surprisingly common throughout the Solar System, Gold is thought to originate in the heart of supernovas, gathering as dust in the early stages of solar formation, then incorporating into the slowly accreting planetary bodies. Now a prized element in Stationeer construction, Gold is valued not for its beauty, but its reliability: inert, durable, conductive and highly stable, gold\'s strength is that it does nothing." + .into(), + name: "Ore (Gold)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Gold".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1544275894i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemGrenade".into(), + prefab_hash: 1544275894i32, + desc: "Invented by the Romans, who threw Greek Fire at their enemies in ceramic jars, the word \'grenade\' is derived from the Old French word for \'pomegranate\', as many modern grenades resemble this round, many-seeded fruit. Also like many grenades before it, this one goes boom and breaks stuff." + .into(), + name: "Hand Grenade".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 470636008i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHEMDroidRepairKit".into(), + prefab_hash: 470636008i32, + desc: "Repairs damaged HEM-Droids to full health.".into(), + name: "HEMDroid Repair Kit".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 374891127i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHardBackpack".into(), + prefab_hash: 374891127i32, + desc: "This backpack can be useful when you are working inside and don\'t need to fly around." + .into(), + name: "Hardsuit Backpack".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Back, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (3, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (4, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (5, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (6, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (7, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (8, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (9, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (10, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (11, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![(LogicType::ReferenceId, MemoryAccess::Read)] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 6u32 + }), (7u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 9u32 }), (10u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 10u32 }), (11u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 11u32 + }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -412551656i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHardJetpack".into(), + prefab_hash: -412551656i32, + desc: "The Norsec jetpack isn\'t \'technically\' a jetpack at all, it\'s a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nThe hardsuit jetpack is capable of much higher speeds than the Jetpack Basic - up to 15m/s. Indispensable for building, mining and general movement, it has fourteen storage slots.\nUSE: \'J\' to activate; \'space\' to fly up; \'left ctrl\' to descend; and \'WASD\' to move." + .into(), + name: "Hardsuit Jetpack".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Back, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (3, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (4, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (5, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (6, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (7, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (8, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (9, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (10, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (11, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (12, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (13, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (14, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Propellant".into(), class : + Class::GasCanister, index : 0u32 }), (1u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 3u32 + }), (4u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 4u32 }), (5u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 5u32 }), (6u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 6u32 }), (7u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 7u32 }), (8u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 8u32 }), (9u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 9u32 + }), (10u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 10u32 }), (11u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 11u32 }), (12u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 12u32 }), (13u32, SlotInfo::Direct + { name : "".into(), class : Class::None, index : 13u32 }), (14u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 14u32 + }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 900366130i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHardMiningBackPack".into(), + prefab_hash: 900366130i32, + desc: "".into(), + name: "Hard Mining Backpack".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Back, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index + : 0u32 }), (1u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 4u32 + }), (5u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 5u32 }), (6u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 6u32 }), (7u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 7u32 }), (8u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 8u32 }), (9u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 9u32 + }), (10u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 10u32 }), (11u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 11u32 }), (12u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 12u32 }), (13u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 13u32 }), (14u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 14u32 + }), (15u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 15u32 }), (16u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 16u32 }), (17u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 17u32 }), (18u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 18u32 }), (19u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 19u32 + }), (20u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 20u32 }), (21u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 21u32 }), (22u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 22u32 }), (23u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 23u32 }), (24u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 24u32 + }), (25u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 25u32 }), (26u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 26u32 }), (27u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 27u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1758310454i32, + ItemSuitCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHardSuit".into(), + prefab_hash: -1758310454i32, + desc: "Connects to Logic Transmitter" + .into(), + name: "Hardsuit".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Suit, + sorting_class: SortingClass::Clothing, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (4, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (6, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (7, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), + (LogicType::PressureExternal, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), + (LogicType::PressureSetting, MemoryAccess::ReadWrite), + (LogicType::TemperatureSetting, MemoryAccess::ReadWrite), + (LogicType::TemperatureExternal, MemoryAccess::Read), + (LogicType::Filtration, MemoryAccess::ReadWrite), + (LogicType::AirRelease, MemoryAccess::ReadWrite), + (LogicType::PositionX, MemoryAccess::Read), (LogicType::PositionY, + MemoryAccess::Read), (LogicType::PositionZ, MemoryAccess::Read), + (LogicType::VelocityMagnitude, MemoryAccess::Read), + (LogicType::VelocityRelativeX, MemoryAccess::Read), + (LogicType::VelocityRelativeY, MemoryAccess::Read), + (LogicType::VelocityRelativeZ, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), (LogicType::SoundAlert, + MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::ForwardX, + MemoryAccess::Read), (LogicType::ForwardY, MemoryAccess::Read), + (LogicType::ForwardZ, MemoryAccess::Read), (LogicType::Orientation, + MemoryAccess::Read), (LogicType::VelocityX, MemoryAccess::Read), + (LogicType::VelocityY, MemoryAccess::Read), (LogicType::VelocityZ, + MemoryAccess::Read), (LogicType::EntityState, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: true, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Air Tank".into(), class : + Class::GasCanister, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Waste Tank".into(), class : Class::GasCanister, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Life Support".into(), class : Class::Battery, + index : 2u32 }), (3u32, SlotInfo::Direct { name : "Programmable Chip" + .into(), class : Class::ProgrammableChip, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Filter".into(), class : Class::GasFilter, + index : 4u32 }), (5u32, SlotInfo::Direct { name : "Filter".into(), class + : Class::GasFilter, index : 5u32 }), (6u32, SlotInfo::Direct { name : + "Filter".into(), class : Class::GasFilter, index : 6u32 }), (7u32, + SlotInfo::Direct { name : "Filter".into(), class : Class::GasFilter, + index : 7u32 }) + ] + .into_iter() + .collect(), + suit_info: SuitInfo { + hygiene_reduction_multiplier: 1.5f32, + waste_max_pressure: 4053f32, + }, + memory: MemoryInfo { + instructions: None, + memory_access: MemoryAccess::ReadWrite, + memory_size: 0u32, + }, + } + .into(), + ); + map.insert( + -84573099i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHardsuitHelmet".into(), + prefab_hash: -84573099i32, + desc: "The Hardsuit Helmet is similar to the Space Helmet, but can withstand higher temperatures and pressures. It\'s perfect for enduring harsh environments like Venus and Vulcan." + .into(), + name: "Hardsuit Helmet".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Helmet, + sorting_class: SortingClass::Clothing, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 3f32 }), + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), (LogicType::Flush, + MemoryAccess::Write), (LogicType::SoundAlert, + MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + 1579842814i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHastelloyIngot".into(), + prefab_hash: 1579842814i32, + desc: "".into(), + name: "Ingot (Hastelloy)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Hastelloy".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 299189339i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHat".into(), + prefab_hash: 299189339i32, + desc: "As the name suggests, this is a hat.".into(), + name: "Hat".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Helmet, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 998653377i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHighVolumeGasCanisterEmpty".into(), + prefab_hash: 998653377i32, + desc: "".into(), + name: "High Volume Gas Canister".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::GasCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 83f32 }), + } + .into(), + ); + map.insert( + -1117581553i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHorticultureBelt".into(), + prefab_hash: -1117581553i32, + desc: "".into(), + name: "Horticulture Belt".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Belt, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Plant" + .into(), class : Class::Plant, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Plant".into(), class : Class::Plant, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, index : + 4u32 }), (5u32, SlotInfo::Direct { name : "Plant".into(), class : + Class::Plant, index : 5u32 }), (6u32, SlotInfo::Direct { name : "Plant" + .into(), class : Class::Plant, index : 6u32 }), (7u32, SlotInfo::Direct { + name : "Plant".into(), class : Class::Plant, index : 7u32 }), (8u32, + SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, index : + 8u32 }), (9u32, SlotInfo::Direct { name : "Plant".into(), class : + Class::Plant, index : 9u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1193543727i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemHydroponicTray".into(), + prefab_hash: -1193543727i32, + desc: "This kits creates a Hydroponics Tray for growing various plants." + .into(), + name: "Kit (Hydroponic Tray)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1217489948i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemIce".into(), + prefab_hash: 1217489948i32, + desc: "Water ice can be found on most planets in the Solar System, though not all worlds visited by Stationeers possess this resource. Highly sensitive to temperature, ice will begin to melt as soon as it is mined, unless kept in the Mining Belt. When melting, ice produces a mixture of Steam and Nitrogen gas." + .into(), + name: "Ice (Water)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 890106742i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemIgniter".into(), + prefab_hash: 890106742i32, + desc: "This kit creates an Kit (Igniter) unit." + .into(), + name: "Kit (Igniter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -787796599i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemInconelIngot".into(), + prefab_hash: -787796599i32, + desc: "".into(), + name: "Ingot (Inconel)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Inconel".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1485675617i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemInsulatedCanisterPackage".into(), + prefab_hash: 1485675617i32, + desc: "".into(), + name: "Insulated Canister Package".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 897176943i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemInsulation".into(), + prefab_hash: 897176943i32, + desc: "Mysterious in the extreme, the function of this item is lost to the ages." + .into(), + name: "Insulation".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -744098481i32, + ItemLogicMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "ItemIntegratedCircuit10".into(), + prefab_hash: -744098481i32, + desc: "".into(), + name: "Integrated Circuit (IC10)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::ProgrammableChip, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::LineNumber, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + memory: MemoryInfo { + instructions: None, + memory_access: MemoryAccess::ReadWrite, + memory_size: 512u32, + }, + } + .into(), + ); + map.insert( + -297990285i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemInvarIngot".into(), + prefab_hash: -297990285i32, + desc: "".into(), + name: "Ingot (Invar)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Invar".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1225836666i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemIronFrames".into(), + prefab_hash: 1225836666i32, + desc: "".into(), + name: "Iron Frames".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 30u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1301215609i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemIronIngot".into(), + prefab_hash: -1301215609i32, + desc: "The most basic unit of construction available to Stationeer-kind, iron ingots are created by smelting Ore (Iron) in the Furnace and Arc Furnace, and used to create a variety of items." + .into(), + name: "Ingot (Iron)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Iron".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1758427767i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemIronOre".into(), + prefab_hash: 1758427767i32, + desc: "Abundant throughout the Solar System, iron is the ore most commonly used by Stationeers constructing offworld bases. It can be smelted into both Ingot (Iron)s and Ingot (Steel)s." + .into(), + name: "Ore (Iron)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Iron".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -487378546i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemIronSheets".into(), + prefab_hash: -487378546i32, + desc: "".into(), + name: "Iron Sheets".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1969189000i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemJetpackBasic".into(), + prefab_hash: 1969189000i32, + desc: "The basic CHAC jetpack isn\'t \'technically\' a jetpack, it\'s a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stabilizer causes the spacepack to hover when a given height is reached.\nUSE: \'J\' to activate; \'space\' to fly up; \'left ctrl\' to descend; and \'WASD\' to move." + .into(), + name: "Jetpack Basic".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Back, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (3, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (4, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (5, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (6, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (7, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (8, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (9, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Propellant".into(), class : + Class::GasCanister, index : 0u32 }), (1u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 3u32 + }), (4u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 4u32 }), (5u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 5u32 }), (6u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 6u32 }), (7u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 7u32 }), (8u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 8u32 }), (9u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 9u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 496830914i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAIMeE".into(), + prefab_hash: 496830914i32, + desc: "".into(), + name: "Kit (AIMeE)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 513258369i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAccessBridge".into(), + prefab_hash: 513258369i32, + desc: "".into(), + name: "Kit (Access Bridge)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1431998347i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAdvancedComposter".into(), + prefab_hash: -1431998347i32, + desc: "".into(), + name: "Kit (Advanced Composter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -616758353i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAdvancedFurnace".into(), + prefab_hash: -616758353i32, + desc: "".into(), + name: "Kit (Advanced Furnace)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -598545233i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAdvancedPackagingMachine".into(), + prefab_hash: -598545233i32, + desc: "".into(), + name: "Kit (Advanced Packaging Machine)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 964043875i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAirlock".into(), + prefab_hash: 964043875i32, + desc: "".into(), + name: "Kit (Airlock)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 682546947i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAirlockGate".into(), + prefab_hash: 682546947i32, + desc: "".into(), + name: "Kit (Hangar Door)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -98995857i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitArcFurnace".into(), + prefab_hash: -98995857i32, + desc: "".into(), + name: "Kit (Arc Furnace)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1222286371i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAtmospherics".into(), + prefab_hash: 1222286371i32, + desc: "".into(), + name: "Kit (Atmospherics)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1668815415i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAutoMinerSmall".into(), + prefab_hash: 1668815415i32, + desc: "".into(), + name: "Kit (Autominer Small)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1753893214i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAutolathe".into(), + prefab_hash: -1753893214i32, + desc: "".into(), + name: "Kit (Autolathe)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1931958659i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitAutomatedOven".into(), + prefab_hash: -1931958659i32, + desc: "".into(), + name: "Kit (Automated Oven)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 148305004i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitBasket".into(), + prefab_hash: 148305004i32, + desc: "".into(), + name: "Kit (Basket)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1406656973i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitBattery".into(), + prefab_hash: 1406656973i32, + desc: "".into(), + name: "Kit (Battery)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -21225041i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitBatteryLarge".into(), + prefab_hash: -21225041i32, + desc: "".into(), + name: "Kit (Battery Large)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 249073136i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitBeacon".into(), + prefab_hash: 249073136i32, + desc: "".into(), + name: "Kit (Beacon)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1241256797i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitBeds".into(), + prefab_hash: -1241256797i32, + desc: "".into(), + name: "Kit (Beds)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1755116240i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitBlastDoor".into(), + prefab_hash: -1755116240i32, + desc: "".into(), + name: "Kit (Blast Door)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 578182956i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitCentrifuge".into(), + prefab_hash: 578182956i32, + desc: "".into(), + name: "Kit (Centrifuge)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1394008073i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitChairs".into(), + prefab_hash: -1394008073i32, + desc: "".into(), + name: "Kit (Chairs)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1025254665i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitChute".into(), + prefab_hash: 1025254665i32, + desc: "".into(), + name: "Kit (Basic Chutes)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -876560854i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitChuteUmbilical".into(), + prefab_hash: -876560854i32, + desc: "".into(), + name: "Kit (Chute Umbilical)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1470820996i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitCompositeCladding".into(), + prefab_hash: -1470820996i32, + desc: "".into(), + name: "Kit (Cladding)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1182412869i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitCompositeFloorGrating".into(), + prefab_hash: 1182412869i32, + desc: "".into(), + name: "Kit (Floor Grating)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1990225489i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitComputer".into(), + prefab_hash: 1990225489i32, + desc: "".into(), + name: "Kit (Computer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1241851179i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitConsole".into(), + prefab_hash: -1241851179i32, + desc: "".into(), + name: "Kit (Consoles)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 429365598i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitCrate".into(), + prefab_hash: 429365598i32, + desc: "".into(), + name: "Kit (Crate)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1585956426i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitCrateMkII".into(), + prefab_hash: -1585956426i32, + desc: "".into(), + name: "Kit (Crate Mk II)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -551612946i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitCrateMount".into(), + prefab_hash: -551612946i32, + desc: "".into(), + name: "Kit (Container Mount)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -545234195i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitCryoTube".into(), + prefab_hash: -545234195i32, + desc: "".into(), + name: "Kit (Cryo Tube)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1935075707i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDeepMiner".into(), + prefab_hash: -1935075707i32, + desc: "".into(), + name: "Kit (Deep Miner)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 77421200i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDockingPort".into(), + prefab_hash: 77421200i32, + desc: "".into(), + name: "Kit (Docking Port)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 168615924i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDoor".into(), + prefab_hash: 168615924i32, + desc: "".into(), + name: "Kit (Door)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1743663875i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDrinkingFountain".into(), + prefab_hash: -1743663875i32, + desc: "".into(), + name: "Kit (Drinking Fountain)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1061945368i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDynamicCanister".into(), + prefab_hash: -1061945368i32, + desc: "".into(), + name: "Kit (Portable Gas Tank)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1533501495i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDynamicGasTankAdvanced".into(), + prefab_hash: 1533501495i32, + desc: "".into(), + name: "Kit (Portable Gas Tank Mk II)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -732720413i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDynamicGenerator".into(), + prefab_hash: -732720413i32, + desc: "".into(), + name: "Kit (Portable Generator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1861154222i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDynamicHydroponics".into(), + prefab_hash: -1861154222i32, + desc: "".into(), + name: "Kit (Portable Hydroponics)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 375541286i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDynamicLiquidCanister".into(), + prefab_hash: 375541286i32, + desc: "".into(), + name: "Kit (Portable Liquid Tank)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -638019974i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitDynamicMKIILiquidCanister".into(), + prefab_hash: -638019974i32, + desc: "".into(), + name: "Kit (Portable Liquid Tank Mk II)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1603046970i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitElectricUmbilical".into(), + prefab_hash: 1603046970i32, + desc: "".into(), + name: "Kit (Power Umbilical)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1181922382i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitElectronicsPrinter".into(), + prefab_hash: -1181922382i32, + desc: "".into(), + name: "Kit (Electronics Printer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -945806652i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitElevator".into(), + prefab_hash: -945806652i32, + desc: "".into(), + name: "Kit (Elevator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 755302726i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitEngineLarge".into(), + prefab_hash: 755302726i32, + desc: "".into(), + name: "Kit (Engine Large)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1969312177i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitEngineMedium".into(), + prefab_hash: 1969312177i32, + desc: "".into(), + name: "Kit (Engine Medium)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 19645163i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitEngineSmall".into(), + prefab_hash: 19645163i32, + desc: "".into(), + name: "Kit (Engine Small)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1587787610i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitEvaporationChamber".into(), + prefab_hash: 1587787610i32, + desc: "".into(), + name: "Kit (Phase Change Device)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1701764190i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitFlagODA".into(), + prefab_hash: 1701764190i32, + desc: "".into(), + name: "Kit (ODA Flag)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1168199498i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitFridgeBig".into(), + prefab_hash: -1168199498i32, + desc: "".into(), + name: "Kit (Fridge Large)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1661226524i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitFridgeSmall".into(), + prefab_hash: 1661226524i32, + desc: "".into(), + name: "Kit (Fridge Small)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -806743925i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitFurnace".into(), + prefab_hash: -806743925i32, + desc: "".into(), + name: "Kit (Furnace)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1162905029i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitFurniture".into(), + prefab_hash: 1162905029i32, + desc: "".into(), + name: "Kit (Furniture)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -366262681i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitFuselage".into(), + prefab_hash: -366262681i32, + desc: "".into(), + name: "Kit (Fuselage)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 377745425i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitGasGenerator".into(), + prefab_hash: 377745425i32, + desc: "".into(), + name: "Kit (Gas Fuel Generator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1867280568i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitGasUmbilical".into(), + prefab_hash: -1867280568i32, + desc: "".into(), + name: "Kit (Gas Umbilical)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 206848766i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitGovernedGasRocketEngine".into(), + prefab_hash: 206848766i32, + desc: "".into(), + name: "Kit (Pumped Gas Rocket Engine)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2140672772i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitGroundTelescope".into(), + prefab_hash: -2140672772i32, + desc: "".into(), + name: "Kit (Telescope)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 341030083i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitGrowLight".into(), + prefab_hash: 341030083i32, + desc: "".into(), + name: "Kit (Grow Light)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1022693454i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitHarvie".into(), + prefab_hash: -1022693454i32, + desc: "".into(), + name: "Kit (Harvie)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1710540039i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitHeatExchanger".into(), + prefab_hash: -1710540039i32, + desc: "".into(), + name: "Kit Heat Exchanger".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 844391171i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitHorizontalAutoMiner".into(), + prefab_hash: 844391171i32, + desc: "".into(), + name: "Kit (OGRE)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2098556089i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitHydraulicPipeBender".into(), + prefab_hash: -2098556089i32, + desc: "".into(), + name: "Kit (Hydraulic Pipe Bender)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -927931558i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitHydroponicAutomated".into(), + prefab_hash: -927931558i32, + desc: "".into(), + name: "Kit (Automated Hydroponics)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2057179799i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitHydroponicStation".into(), + prefab_hash: 2057179799i32, + desc: "".into(), + name: "Kit (Hydroponic Station)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 288111533i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitIceCrusher".into(), + prefab_hash: 288111533i32, + desc: "".into(), + name: "Kit (Ice Crusher)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2067655311i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitInsulatedLiquidPipe".into(), + prefab_hash: 2067655311i32, + desc: "".into(), + name: "Kit (Insulated Liquid Pipe)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 20u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 452636699i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitInsulatedPipe".into(), + prefab_hash: 452636699i32, + desc: "".into(), + name: "Kit (Insulated Pipe)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 20u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -27284803i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitInsulatedPipeUtility".into(), + prefab_hash: -27284803i32, + desc: "".into(), + name: "Kit (Insulated Pipe Utility Gas)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1831558953i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitInsulatedPipeUtilityLiquid".into(), + prefab_hash: -1831558953i32, + desc: "".into(), + name: "Kit (Insulated Pipe Utility Liquid)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1935945891i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitInteriorDoors".into(), + prefab_hash: 1935945891i32, + desc: "".into(), + name: "Kit (Interior Doors)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 489494578i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLadder".into(), + prefab_hash: 489494578i32, + desc: "".into(), + name: "Kit (Ladder)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1817007843i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLandingPadAtmos".into(), + prefab_hash: 1817007843i32, + desc: "".into(), + name: "Kit (Landing Pad Atmospherics)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 293581318i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLandingPadBasic".into(), + prefab_hash: 293581318i32, + desc: "".into(), + name: "Kit (Landing Pad Basic)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1267511065i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLandingPadWaypoint".into(), + prefab_hash: -1267511065i32, + desc: "".into(), + name: "Kit (Landing Pad Runway)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 450164077i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLargeDirectHeatExchanger".into(), + prefab_hash: 450164077i32, + desc: "".into(), + name: "Kit (Large Direct Heat Exchanger)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 847430620i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLargeExtendableRadiator".into(), + prefab_hash: 847430620i32, + desc: "".into(), + name: "Kit (Large Extendable Radiator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2039971217i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLargeSatelliteDish".into(), + prefab_hash: -2039971217i32, + desc: "".into(), + name: "Kit (Large Satellite Dish)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 385528206i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLarreDockAtmos".into(), + prefab_hash: 385528206i32, + desc: "".into(), + name: "Kit (LArRE Dock Atmos)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -940470326i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLarreDockBypass".into(), + prefab_hash: -940470326i32, + desc: "".into(), + name: "Kit (LArRE Dock Bypass)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1067485367i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLarreDockCargo".into(), + prefab_hash: -1067485367i32, + desc: "".into(), + name: "Kit (LArRE Dock Cargo)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 347658127i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLarreDockCollector".into(), + prefab_hash: 347658127i32, + desc: "".into(), + name: "Kit (LArRE Dock Collector)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 656181408i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLarreDockHydroponics".into(), + prefab_hash: 656181408i32, + desc: "".into(), + name: "Kit (LArRE Dock Hydroponics)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1854167549i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLaunchMount".into(), + prefab_hash: -1854167549i32, + desc: "".into(), + name: "Kit (Launch Mount)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -174523552i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLaunchTower".into(), + prefab_hash: -174523552i32, + desc: "".into(), + name: "Kit (Rocket Launch Tower)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -441759975i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLinearRail".into(), + prefab_hash: -441759975i32, + desc: "".into(), + name: "Kit (Linear Rail)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1951126161i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLiquidRegulator".into(), + prefab_hash: 1951126161i32, + desc: "".into(), + name: "Kit (Liquid Regulator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -799849305i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLiquidTank".into(), + prefab_hash: -799849305i32, + desc: "".into(), + name: "Kit (Liquid Tank)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 617773453i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLiquidTankInsulated".into(), + prefab_hash: 617773453i32, + desc: "".into(), + name: "Kit (Insulated Liquid Tank)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1805020897i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLiquidTurboVolumePump".into(), + prefab_hash: -1805020897i32, + desc: "".into(), + name: "Kit (Turbo Volume Pump - Liquid)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1571996765i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLiquidUmbilical".into(), + prefab_hash: 1571996765i32, + desc: "".into(), + name: "Kit (Liquid Umbilical)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 882301399i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLocker".into(), + prefab_hash: 882301399i32, + desc: "".into(), + name: "Kit (Locker)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1512322581i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLogicCircuit".into(), + prefab_hash: 1512322581i32, + desc: "".into(), + name: "Kit (IC Housing)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1997293610i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLogicInputOutput".into(), + prefab_hash: 1997293610i32, + desc: "".into(), + name: "Kit (Logic I/O)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2098214189i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLogicMemory".into(), + prefab_hash: -2098214189i32, + desc: "".into(), + name: "Kit (Logic Memory)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 220644373i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLogicProcessor".into(), + prefab_hash: 220644373i32, + desc: "".into(), + name: "Kit (Logic Processor)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 124499454i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLogicSwitch".into(), + prefab_hash: 124499454i32, + desc: "".into(), + name: "Kit (Logic Switch)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1005397063i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitLogicTransmitter".into(), + prefab_hash: 1005397063i32, + desc: "".into(), + name: "Kit (Logic Transmitter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -344968335i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitMotherShipCore".into(), + prefab_hash: -344968335i32, + desc: "".into(), + name: "Kit (Mothership)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2038889137i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitMusicMachines".into(), + prefab_hash: -2038889137i32, + desc: "".into(), + name: "Kit (Music Machines)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1752768283i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPassiveLargeRadiatorGas".into(), + prefab_hash: -1752768283i32, + desc: "".into(), + name: "Kit (Medium Radiator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1453961898i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPassiveLargeRadiatorLiquid".into(), + prefab_hash: 1453961898i32, + desc: "".into(), + name: "Kit (Medium Radiator Liquid)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 636112787i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPassthroughHeatExchanger".into(), + prefab_hash: 636112787i32, + desc: "".into(), + name: "Kit (CounterFlow Heat Exchanger)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2062364768i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPictureFrame".into(), + prefab_hash: -2062364768i32, + desc: "".into(), + name: "Kit Picture Frame".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1619793705i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPipe".into(), + prefab_hash: -1619793705i32, + desc: "".into(), + name: "Kit (Pipe)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 20u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1166461357i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPipeLiquid".into(), + prefab_hash: -1166461357i32, + desc: "".into(), + name: "Kit (Liquid Pipe)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 20u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -827125300i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPipeOrgan".into(), + prefab_hash: -827125300i32, + desc: "".into(), + name: "Kit (Pipe Organ)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 920411066i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPipeRadiator".into(), + prefab_hash: 920411066i32, + desc: "".into(), + name: "Kit (Pipe Radiator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1697302609i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPipeRadiatorLiquid".into(), + prefab_hash: -1697302609i32, + desc: "".into(), + name: "Kit (Pipe Radiator Liquid)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1934508338i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPipeUtility".into(), + prefab_hash: 1934508338i32, + desc: "".into(), + name: "Kit (Pipe Utility Gas)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 595478589i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPipeUtilityLiquid".into(), + prefab_hash: 595478589i32, + desc: "".into(), + name: "Kit (Pipe Utility Liquid)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 119096484i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPlanter".into(), + prefab_hash: 119096484i32, + desc: "".into(), + name: "Kit (Planter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1041148999i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPortablesConnector".into(), + prefab_hash: 1041148999i32, + desc: "".into(), + name: "Kit (Portables Connector)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 291368213i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPowerTransmitter".into(), + prefab_hash: 291368213i32, + desc: "".into(), + name: "Kit (Power Transmitter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -831211676i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPowerTransmitterOmni".into(), + prefab_hash: -831211676i32, + desc: "".into(), + name: "Kit (Power Transmitter Omni)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2015439334i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPoweredVent".into(), + prefab_hash: 2015439334i32, + desc: "".into(), + name: "Kit (Powered Vent)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -121514007i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPressureFedGasEngine".into(), + prefab_hash: -121514007i32, + desc: "".into(), + name: "Kit (Pressure Fed Gas Engine)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -99091572i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPressureFedLiquidEngine".into(), + prefab_hash: -99091572i32, + desc: "".into(), + name: "Kit (Pressure Fed Liquid Engine)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 123504691i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPressurePlate".into(), + prefab_hash: 123504691i32, + desc: "".into(), + name: "Kit (Trigger Plate)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1921918951i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitPumpedLiquidEngine".into(), + prefab_hash: 1921918951i32, + desc: "".into(), + name: "Kit (Pumped Liquid Engine)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 750176282i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRailing".into(), + prefab_hash: 750176282i32, + desc: "".into(), + name: "Kit (Railing)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 849148192i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRecycler".into(), + prefab_hash: 849148192i32, + desc: "".into(), + name: "Kit (Recycler)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1181371795i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRegulator".into(), + prefab_hash: 1181371795i32, + desc: "".into(), + name: "Kit (Pressure Regulator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1459985302i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitReinforcedWindows".into(), + prefab_hash: 1459985302i32, + desc: "".into(), + name: "Kit (Reinforced Walls)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 724776762i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitResearchMachine".into(), + prefab_hash: 724776762i32, + desc: "".into(), + name: "Kit Research Machine".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1574688481i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRespawnPointWallMounted".into(), + prefab_hash: 1574688481i32, + desc: "".into(), + name: "Kit (Respawn)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -753675589i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRobotArmDoor".into(), + prefab_hash: -753675589i32, + desc: "".into(), + name: "Kit (Linear Rail Door)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1228287398i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRoboticArm".into(), + prefab_hash: -1228287398i32, + desc: "".into(), + name: "Kit (LArRE)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1396305045i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketAvionics".into(), + prefab_hash: 1396305045i32, + desc: "".into(), + name: "Kit (Avionics)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -314072139i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketBattery".into(), + prefab_hash: -314072139i32, + desc: "".into(), + name: "Kit (Rocket Battery)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 479850239i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketCargoStorage".into(), + prefab_hash: 479850239i32, + desc: "".into(), + name: "Kit (Rocket Cargo Storage)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -303008602i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketCelestialTracker".into(), + prefab_hash: -303008602i32, + desc: "".into(), + name: "Kit (Rocket Celestial Tracker)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 721251202i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketCircuitHousing".into(), + prefab_hash: 721251202i32, + desc: "".into(), + name: "Kit (Rocket Circuit Housing)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1256996603i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketDatalink".into(), + prefab_hash: -1256996603i32, + desc: "".into(), + name: "Kit (Rocket Datalink)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1629347579i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketGasFuelTank".into(), + prefab_hash: -1629347579i32, + desc: "".into(), + name: "Kit (Rocket Gas Fuel Tank)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2032027950i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketLiquidFuelTank".into(), + prefab_hash: 2032027950i32, + desc: "".into(), + name: "Kit (Rocket Liquid Fuel Tank)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -636127860i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketManufactory".into(), + prefab_hash: -636127860i32, + desc: "".into(), + name: "Kit (Rocket Manufactory)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -867969909i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketMiner".into(), + prefab_hash: -867969909i32, + desc: "".into(), + name: "Kit (Rocket Miner)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1753647154i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketScanner".into(), + prefab_hash: 1753647154i32, + desc: "".into(), + name: "Kit (Rocket Scanner)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -932335800i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRocketTransformerSmall".into(), + prefab_hash: -932335800i32, + desc: "".into(), + name: "Kit (Transformer Small (Rocket))".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1827215803i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRoverFrame".into(), + prefab_hash: 1827215803i32, + desc: "".into(), + name: "Kit (Rover Frame)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 197243872i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitRoverMKI".into(), + prefab_hash: 197243872i32, + desc: "".into(), + name: "Kit (Rover Mk I)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 323957548i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSDBHopper".into(), + prefab_hash: 323957548i32, + desc: "".into(), + name: "Kit (SDB Hopper)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 178422810i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSatelliteDish".into(), + prefab_hash: 178422810i32, + desc: "".into(), + name: "Kit (Medium Satellite Dish)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 578078533i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSecurityPrinter".into(), + prefab_hash: 578078533i32, + desc: "".into(), + name: "Kit (Security Printer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1776897113i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSensor".into(), + prefab_hash: -1776897113i32, + desc: "".into(), + name: "Kit (Sensors)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 735858725i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitShower".into(), + prefab_hash: 735858725i32, + desc: "".into(), + name: "Kit (Shower)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 529996327i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSign".into(), + prefab_hash: 529996327i32, + desc: "".into(), + name: "Kit (Sign)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 326752036i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSleeper".into(), + prefab_hash: 326752036i32, + desc: "".into(), + name: "Kit (Sleeper)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1332682164i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSmallDirectHeatExchanger".into(), + prefab_hash: -1332682164i32, + desc: "".into(), + name: "Kit (Small Direct Heat Exchanger)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1960952220i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSmallSatelliteDish".into(), + prefab_hash: 1960952220i32, + desc: "".into(), + name: "Kit (Small Satellite Dish)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1924492105i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSolarPanel".into(), + prefab_hash: -1924492105i32, + desc: "".into(), + name: "Kit (Solar Panel)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 844961456i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSolarPanelBasic".into(), + prefab_hash: 844961456i32, + desc: "".into(), + name: "Kit (Solar Panel Basic)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -528695432i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSolarPanelBasicReinforced".into(), + prefab_hash: -528695432i32, + desc: "".into(), + name: "Kit (Solar Panel Basic Heavy)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -364868685i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSolarPanelReinforced".into(), + prefab_hash: -364868685i32, + desc: "".into(), + name: "Kit (Solar Panel Heavy)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1293995736i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSolidGenerator".into(), + prefab_hash: 1293995736i32, + desc: "".into(), + name: "Kit (Solid Generator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 969522478i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSorter".into(), + prefab_hash: 969522478i32, + desc: "".into(), + name: "Kit (Sorter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -126038526i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSpeaker".into(), + prefab_hash: -126038526i32, + desc: "".into(), + name: "Kit (Speaker)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1013244511i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitStacker".into(), + prefab_hash: 1013244511i32, + desc: "".into(), + name: "Kit (Stacker)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 170878959i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitStairs".into(), + prefab_hash: 170878959i32, + desc: "".into(), + name: "Kit (Stairs)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1868555784i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitStairwell".into(), + prefab_hash: -1868555784i32, + desc: "".into(), + name: "Kit (Stairwell)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2133035682i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitStandardChute".into(), + prefab_hash: 2133035682i32, + desc: "".into(), + name: "Kit (Powered Chutes)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1821571150i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitStirlingEngine".into(), + prefab_hash: -1821571150i32, + desc: "".into(), + name: "Kit (Stirling Engine)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1088892825i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitSuitStorage".into(), + prefab_hash: 1088892825i32, + desc: "".into(), + name: "Kit (Suit Storage)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1361598922i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitTables".into(), + prefab_hash: -1361598922i32, + desc: "".into(), + name: "Kit (Tables)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 771439840i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitTank".into(), + prefab_hash: 771439840i32, + desc: "".into(), + name: "Kit (Tank)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1021053608i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitTankInsulated".into(), + prefab_hash: 1021053608i32, + desc: "".into(), + name: "Kit (Tank Insulated)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 529137748i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitToolManufactory".into(), + prefab_hash: 529137748i32, + desc: "".into(), + name: "Kit (Tool Manufactory)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -453039435i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitTransformer".into(), + prefab_hash: -453039435i32, + desc: "".into(), + name: "Kit (Transformer Large)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 665194284i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitTransformerSmall".into(), + prefab_hash: 665194284i32, + desc: "".into(), + name: "Kit (Transformer Small)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1590715731i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitTurbineGenerator".into(), + prefab_hash: -1590715731i32, + desc: "".into(), + name: "Kit (Turbine Generator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1248429712i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitTurboVolumePump".into(), + prefab_hash: -1248429712i32, + desc: "".into(), + name: "Kit (Turbo Volume Pump - Gas)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1798044015i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitUprightWindTurbine".into(), + prefab_hash: -1798044015i32, + desc: "".into(), + name: "Kit (Upright Wind Turbine)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2038384332i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitVendingMachine".into(), + prefab_hash: -2038384332i32, + desc: "".into(), + name: "Kit (Vending Machine)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1867508561i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitVendingMachineRefrigerated".into(), + prefab_hash: -1867508561i32, + desc: "".into(), + name: "Kit (Vending Machine Refrigerated)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1826855889i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWall".into(), + prefab_hash: -1826855889i32, + desc: "".into(), + name: "Kit (Wall)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 30u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1625214531i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWallArch".into(), + prefab_hash: 1625214531i32, + desc: "".into(), + name: "Kit (Arched Wall)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 30u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -846838195i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWallFlat".into(), + prefab_hash: -846838195i32, + desc: "".into(), + name: "Kit (Flat Wall)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 30u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -784733231i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWallGeometry".into(), + prefab_hash: -784733231i32, + desc: "".into(), + name: "Kit (Geometric Wall)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 30u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -524546923i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWallIron".into(), + prefab_hash: -524546923i32, + desc: "".into(), + name: "Kit (Iron Wall)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 30u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -821868990i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWallPadded".into(), + prefab_hash: -821868990i32, + desc: "".into(), + name: "Kit (Padded Wall)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 30u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 159886536i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWaterBottleFiller".into(), + prefab_hash: 159886536i32, + desc: "".into(), + name: "Kit (Water Bottle Filler)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 611181283i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWaterPurifier".into(), + prefab_hash: 611181283i32, + desc: "".into(), + name: "Kit (Water Purifier)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 337505889i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWeatherStation".into(), + prefab_hash: 337505889i32, + desc: "".into(), + name: "Kit (Weather Station)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -868916503i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWindTurbine".into(), + prefab_hash: -868916503i32, + desc: "".into(), + name: "Kit (Wind Turbine)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1779979754i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemKitWindowShutter".into(), + prefab_hash: 1779979754i32, + desc: "".into(), + name: "Kit (Composite Window Shutter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -743968726i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLabeller".into(), + prefab_hash: -743968726i32, + desc: "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic." + .into(), + name: "Labeller".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 141535121i32, + ItemCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLaptop".into(), + prefab_hash: 141535121i32, + desc: "The Laptop functions as a portable IC editor. To operate the Laptop it must be powered with a battery, have a IC Editor Motherboard in the motherboard slot, and an Integrated Circuit (IC10) in the Programmable Chip Slot.\n\nYou must place the laptop down to interact with the onsreen UI.\n \nConnects to Logic Transmitter" + .into(), + name: "Laptop".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::PressureExternal, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::TemperatureExternal, MemoryAccess::Read), + (LogicType::PositionX, MemoryAccess::Read), (LogicType::PositionY, + MemoryAccess::Read), (LogicType::PositionZ, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: true, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }), (1u32, SlotInfo::Direct { name + : "Battery".into(), class : Class::Battery, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Motherboard".into(), class : + Class::Motherboard, index : 2u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 2134647745i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLeadIngot".into(), + prefab_hash: 2134647745i32, + desc: "".into(), + name: "Ingot (Lead)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Lead".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -190236170i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLeadOre".into(), + prefab_hash: -190236170i32, + desc: "Lead is a chemical element with the symbol \"Pb\". It is a dense, heavy metal with a low melting point. Lead is a used to make a variety of things such as alloys like Ingot (Solder) and munitions." + .into(), + name: "Ore (Lead)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Lead".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1949076595i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLightSword".into(), + prefab_hash: 1949076595i32, + desc: "A charming, if useless, pseudo-weapon. (Creative only.)".into(), + name: "Light Sword".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -185207387i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLiquidCanisterEmpty".into(), + prefab_hash: -185207387i32, + desc: "".into(), + name: "Liquid Canister".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::LiquidCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.05f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { + volume: 12.1f32, + }), + } + .into(), + ); + map.insert( + 777684475i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLiquidCanisterSmart".into(), + prefab_hash: 777684475i32, + desc: "0.Mode0\n1.Mode1".into(), + name: "Liquid Canister (Smart)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::LiquidCanister, + sorting_class: SortingClass::Atmospherics, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { + volume: 18.1f32, + }), + } + .into(), + ); + map.insert( + 2036225202i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLiquidDrain".into(), + prefab_hash: 2036225202i32, + desc: "".into(), + name: "Kit (Liquid Drain)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 226055671i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLiquidPipeAnalyzer".into(), + prefab_hash: 226055671i32, + desc: "".into(), + name: "Kit (Liquid Pipe Analyzer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -248475032i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLiquidPipeHeater".into(), + prefab_hash: -248475032i32, + desc: "Creates a Pipe Heater (Liquid)." + .into(), + name: "Pipe Heater Kit (Liquid)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2126113312i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLiquidPipeValve".into(), + prefab_hash: -2126113312i32, + desc: "This kit creates a Valve (Liquid)." + .into(), + name: "Kit (Liquid Pipe Valve)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2106280569i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLiquidPipeVolumePump".into(), + prefab_hash: -2106280569i32, + desc: "".into(), + name: "Kit (Liquid Volume Pump)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2037427578i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemLiquidTankStorage".into(), + prefab_hash: 2037427578i32, + desc: "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister." + .into(), + name: "Kit (Liquid Canister Storage)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 240174650i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMKIIAngleGrinder".into(), + prefab_hash: 240174650i32, + desc: "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure." + .into(), + name: "Mk II Angle Grinder".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -2061979347i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMKIIArcWelder".into(), + prefab_hash: -2061979347i32, + desc: "".into(), + name: "Mk II Arc Welder".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1440775434i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMKIICrowbar".into(), + prefab_hash: 1440775434i32, + desc: "Recurso\'s entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise. The MK II is more resistant to temperature and pressure." + .into(), + name: "Mk II Crowbar".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 324791548i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMKIIDrill".into(), + prefab_hash: 324791548i32, + desc: "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature." + .into(), + name: "Mk II Drill".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 388774906i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMKIIDuctTape".into(), + prefab_hash: 388774906i32, + desc: "In the distant past, one of Earth\'s great champions taught a generation of \'Fix-It People\' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage." + .into(), + name: "Mk II Duct Tape".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1875271296i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMKIIMiningDrill".into(), + prefab_hash: -1875271296i32, + desc: "The handheld \'Topo\' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, \'The Topo don\'t stopo.\' The MK II is more resistant to temperature and pressure." + .into(), + name: "Mk II Mining Drill".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Default".into()), (1, "Flatten".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -2015613246i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMKIIScrewdriver".into(), + prefab_hash: -2015613246i32, + desc: "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It\'s definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units. The MK II is more resistant to temperature and pressure." + .into(), + name: "Mk II Screwdriver".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -178893251i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMKIIWireCutters".into(), + prefab_hash: -178893251i32, + desc: "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools." + .into(), + name: "Mk II Wire Cutters".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1862001680i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMKIIWrench".into(), + prefab_hash: 1862001680i32, + desc: "One of humanity\'s enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures The MK II is more resistant to temperature and pressure." + .into(), + name: "Mk II Wrench".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1399098998i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMarineBodyArmor".into(), + prefab_hash: 1399098998i32, + desc: "".into(), + name: "Marine Armor".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Suit, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1073631646i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMarineHelmet".into(), + prefab_hash: 1073631646i32, + desc: "".into(), + name: "Marine Helmet".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Helmet, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1327248310i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMilk".into(), + prefab_hash: 1327248310i32, + desc: "Full disclosure, it\'s not actually \'milk\', but an Agrizero-invented synthesis of 5ml Soy Oil and 5g Fern, delicately blended in the Chemistry Station. Surprisingly filling, it can be used as an ingredient to cook other food in the Microwave or Automated Oven. Think, Muffin." + .into(), + name: "Milk".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("Milk".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1650383245i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMiningBackPack".into(), + prefab_hash: -1650383245i32, + desc: "".into(), + name: "Mining Backpack".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Back, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index + : 0u32 }), (1u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 4u32 + }), (5u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 5u32 }), (6u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 6u32 }), (7u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 7u32 }), (8u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 8u32 }), (9u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 9u32 + }), (10u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 10u32 }), (11u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 11u32 }), (12u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 12u32 }), (13u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 13u32 }), (14u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 14u32 + }), (15u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 15u32 }), (16u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 16u32 }), (17u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 17u32 }), (18u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 18u32 }), (19u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 19u32 + }), (20u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 20u32 }), (21u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 21u32 }), (22u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 22u32 }), (23u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 23u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -676435305i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMiningBelt".into(), + prefab_hash: -676435305i32, + desc: "Originally developed by Recurso Espaciais for asteroid mining, the Stationeer\'s mining belt has room for two tools and eight ore stacks. While wearing the belt, ore is automatically stored there when mined. Volatile and temperature-dependent remain stable in the environmentally controlled unit." + .into(), + name: "Mining Belt".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Belt, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 4u32 + }), (5u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 5u32 }), (6u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 6u32 }), (7u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 7u32 }), (8u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 8u32 }), (9u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 9u32 + }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1470787934i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMiningBeltMKII".into(), + prefab_hash: 1470787934i32, + desc: "A larger and more capacious mining belt, the Mk II is similar to the Mining Belt, but has 13 slots instead of the basic 8, to increase the length of your mining trips. It also has space for two tools. " + .into(), + name: "Mining Belt MK II".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Belt, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (3, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (4, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (5, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (6, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (7, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (8, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (9, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (10, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (11, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (12, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (13, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (14, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![(LogicType::ReferenceId, MemoryAccess::Read)] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 4u32 + }), (5u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 5u32 }), (6u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 6u32 }), (7u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 7u32 }), (8u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 8u32 }), (9u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 9u32 + }), (10u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 10u32 }), (11u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 11u32 }), (12u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 12u32 }), (13u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 13u32 }), (14u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 14u32 + }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 15829510i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMiningCharge".into(), + prefab_hash: 15829510i32, + desc: "A low cost, high yield explosive with a 10 second timer.".into(), + name: "Mining Charge".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 3u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1055173191i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMiningDrill".into(), + prefab_hash: 1055173191i32, + desc: "The handheld \'Topo\' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, \'The Topo don\'t stopo.\'" + .into(), + name: "Mining Drill".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Default".into()), (1, "Flatten".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1663349918i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMiningDrillHeavy".into(), + prefab_hash: -1663349918i32, + desc: "Sometimes mining trips require something a little bigger to bring home the goods. This scaled up version of the Recurso \'Topo\' design Mining Drill can literally move mountains. The heavy mining drill will remove more ground and mine ore more quickly than the standard mining drill. The heavy mining drill is also resilient to temperature and pressure. So no matter what planet or extreme weather conditions may be present, the Recurso heavy mining drill will get the job done." + .into(), + name: "Mining Drill (Heavy)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Default".into()), (1, "Flatten".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1258187304i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMiningDrillPneumatic".into(), + prefab_hash: 1258187304i32, + desc: "0.Default\n1.Flatten".into(), + name: "Pneumatic Mining Drill".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 384478267i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMiningPackage".into(), + prefab_hash: 384478267i32, + desc: "".into(), + name: "Mining Supplies Package".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1467558064i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMkIIToolbelt".into(), + prefab_hash: 1467558064i32, + desc: "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy." + .into(), + name: "Tool Belt MK II".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Belt, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (3, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (4, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (5, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (6, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (7, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (8, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (9, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (10, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (11, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![(LogicType::ReferenceId, MemoryAccess::Read)] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Tool" + .into(), class : Class::Tool, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Tool".into(), class : Class::Tool, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, index : + 4u32 }), (5u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 5u32 }), (6u32, SlotInfo::Direct { name : "Tool" + .into(), class : Class::Tool, index : 6u32 }), (7u32, SlotInfo::Direct { + name : "Tool".into(), class : Class::Tool, index : 7u32 }), (8u32, + SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, index : + 8u32 }), (9u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 9u32 }), (10u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 10u32 }), (11u32, SlotInfo::Direct + { name : "".into(), class : Class::None, index : 11u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1864982322i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMuffin".into(), + prefab_hash: -1864982322i32, + desc: "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin." + .into(), + name: "Muffin".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2044798572i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemMushroom".into(), + prefab_hash: 2044798572i32, + desc: "A tasty food item. Unlike normal plants, it consumes Oxygen and outputs Carbon Dioxide. Mushrooms will only mature at a moderate rate in darkness, and prolonged light will kill it." + .into(), + name: "Mushroom".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 20u32, + reagents: Some(vec![("Mushroom".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 982514123i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemNVG".into(), + prefab_hash: 982514123i32, + desc: "".into(), + name: "Night Vision Goggles".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Glasses, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1406385572i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemNickelIngot".into(), + prefab_hash: -1406385572i32, + desc: "".into(), + name: "Ingot (Nickel)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Nickel".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1830218956i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemNickelOre".into(), + prefab_hash: 1830218956i32, + desc: "Nickel is a chemical element with the symbol \"Ni\" and is a rare metal commonly used as a plating to prevent corrosion. Sought after by many Stationeers, Nickel is also commonly used to create several alloys." + .into(), + name: "Ore (Nickel)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Nickel".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1499471529i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemNitrice".into(), + prefab_hash: -1499471529i32, + desc: "Nitrice is the nickname given to solid Nitrogen Ice, and found on many planets and moons in the Solar System. Given the inert nature of the Nitrogen it produces, the ice is useful when making breathable atmospheres with low flammability.\n\nHighly sensitive to temperature, nitrice will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small." + .into(), + name: "Ice (Nitrice)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1805394113i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemOxite".into(), + prefab_hash: -1805394113i32, + desc: "Oxite ice is largely composed of frozen Oxygen, and found on many planets in the Solar System. Highly valuable and sought after, not all planets a Stationeer visits will have some. \n\nHighly sensitive to temperature, oxite will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small. When melting, oxite produces a mixture of Oxygen and Nitrogen." + .into(), + name: "Ice (Oxite)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 238631271i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPassiveVent".into(), + prefab_hash: 238631271i32, + desc: "This kit creates a Kit (Passive Vent) among other variants." + .into(), + name: "Kit (Passive Vent)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1397583760i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPassiveVentInsulated".into(), + prefab_hash: -1397583760i32, + desc: "".into(), + name: "Kit (Insulated Passive Vent)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2042955224i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPeaceLily".into(), + prefab_hash: 2042955224i32, + desc: "A fetching lily with greater resistance to cold temperatures." + .into(), + name: "Peace Lily".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -913649823i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPickaxe".into(), + prefab_hash: -913649823i32, + desc: "When the sun sets and the Mining Drill runs dead, its batteries drained and your Solar Panel cold and lifeless, the Autolathe empty, the way forward unclear, one thing holds back the endless night of defeat: the trusty pickaxe." + .into(), + name: "Pickaxe".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1118069417i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPillHeal".into(), + prefab_hash: 1118069417i32, + desc: "Three centuries of pharmaceutical technology compressed into one small, easy to ingest pill: the Heal Pill, aka the Proton Pill, aka Mr Happy contains active enzymes, therapeutic proteins, modified microbial strains, and mammalian cell line analogues in a single-dose boost of high purity, efficacy, and potency that potentiates a swift parasympathetic immune response." + .into(), + name: "Pill (Medical)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 418958601i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPillStun".into(), + prefab_hash: 418958601i32, + desc: "Through rarely publicized, the existence of this pill is an open secret. For use when all else has failed, the Sayonara Suppository immobilizes and rapidly ends the average Stationeer. The delivery mode ensures that if a Stationeer chooses to take this pill, they really have to want it." + .into(), + name: "Pill (Paralysis)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -767597887i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeAnalyizer".into(), + prefab_hash: -767597887i32, + desc: "This kit creates a Pipe Analyzer." + .into(), + name: "Kit (Pipe Analyzer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -38898376i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeCowl".into(), + prefab_hash: -38898376i32, + desc: "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres." + .into(), + name: "Pipe Cowl".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 20u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1532448832i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeDigitalValve".into(), + prefab_hash: -1532448832i32, + desc: "This kit creates a Digital Valve." + .into(), + name: "Kit (Digital Valve)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1134459463i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeGasMixer".into(), + prefab_hash: -1134459463i32, + desc: "This kit creates a Gas Mixer." + .into(), + name: "Kit (Gas Mixer)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1751627006i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeHeater".into(), + prefab_hash: -1751627006i32, + desc: "Creates a Pipe Heater (Gas)." + .into(), + name: "Pipe Heater Kit (Gas)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1366030599i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeIgniter".into(), + prefab_hash: 1366030599i32, + desc: "".into(), + name: "Kit (Pipe Igniter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 391769637i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeLabel".into(), + prefab_hash: 391769637i32, + desc: "This kit creates a Pipe Label." + .into(), + name: "Kit (Pipe Label)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 20u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -906521320i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeLiquidRadiator".into(), + prefab_hash: -906521320i32, + desc: "This kit creates a Liquid Pipe Convection Radiator." + .into(), + name: "Kit (Liquid Radiator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1207939683i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeMeter".into(), + prefab_hash: 1207939683i32, + desc: "This kit creates a Pipe Meter." + .into(), + name: "Kit (Pipe Meter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1796655088i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeRadiator".into(), + prefab_hash: -1796655088i32, + desc: "This kit creates a Pipe Convection Radiator." + .into(), + name: "Kit (Radiator)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 799323450i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeValve".into(), + prefab_hash: 799323450i32, + desc: "This kit creates a Valve (Gas)." + .into(), + name: "Kit (Pipe Valve)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1766301997i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPipeVolumePump".into(), + prefab_hash: -1766301997i32, + desc: "This kit creates a Volume Pump." + .into(), + name: "Kit (Volume Pump)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1108244510i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlainCake".into(), + prefab_hash: -1108244510i32, + desc: "".into(), + name: "Cake".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1159179557i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlantEndothermic_Creative".into(), + prefab_hash: -1159179557i32, + desc: "".into(), + name: "Endothermic Plant Creative".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 851290561i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlantEndothermic_Genepool1".into(), + prefab_hash: 851290561i32, + desc: "Agrizero\'s Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings, when supplied with sufficient Nitrogen. The alpha variant has a peak cooling and electrolysis capacity of 90Watts and is most efficient operating in air temperatures of 0 to 40 Degrees Celsius." + .into(), + name: "Winterspawn (Alpha variant)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1414203269i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlantEndothermic_Genepool2".into(), + prefab_hash: -1414203269i32, + desc: "Agrizero\'s Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings when supplied with sufficient Nitrogen. The beta variant has a peak cooling and electrolysis capacity of 150Watts and is most efficient operating in air temperatures of 14 to 24 Degrees Celsius." + .into(), + name: "Winterspawn (Beta variant)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 173023800i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlantSampler".into(), + prefab_hash: 173023800i32, + desc: "The Plant Sampler allows you to take a gene sample of a growing plant. The sampler can then be placed in the Plant Genetic Analyzer to attain and interpret the results." + .into(), + name: "Plant Sampler".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -532672323i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlantSwitchGrass".into(), + prefab_hash: -532672323i32, + desc: "".into(), + name: "Switch Grass".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1208890208i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlantThermogenic_Creative".into(), + prefab_hash: -1208890208i32, + desc: "".into(), + name: "Thermogenic Plant Creative".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -177792789i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlantThermogenic_Genepool1".into(), + prefab_hash: -177792789i32, + desc: "The Agrizero\'s-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant." + .into(), + name: "Hades Flower (Alpha strain)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1819167057i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlantThermogenic_Genepool2".into(), + prefab_hash: 1819167057i32, + desc: "The Agrizero\'s-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant. The beta strain is notably more efficient than the earlier, more experimental alpha variant." + .into(), + name: "Hades Flower (Beta strain)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 662053345i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPlasticSheets".into(), + prefab_hash: 662053345i32, + desc: "".into(), + name: "Plastic Sheets".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1459105919i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPortablesPackage".into(), + prefab_hash: 1459105919i32, + desc: "".into(), + name: "Portables Package".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1929046963i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPotato".into(), + prefab_hash: 1929046963i32, + desc: " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies." + .into(), + name: "Potato".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 20u32, + reagents: Some(vec![("Potato".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2111886401i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPotatoBaked".into(), + prefab_hash: -2111886401i32, + desc: "".into(), + name: "Baked Potato".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 1u32, + reagents: Some(vec![("Potato".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 839924019i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPowerConnector".into(), + prefab_hash: 839924019i32, + desc: "This kit creates a Power Connector." + .into(), + name: "Kit (Power Connector)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1277828144i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPumpkin".into(), + prefab_hash: 1277828144i32, + desc: "Pumpkins are a perennial plant, with both a long growth time, and a long time between harvests. Its low requirement for darkness allows for accelerated growing if provided with extra light." + .into(), + name: "Pumpkin".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 20u32, + reagents: Some(vec![("Pumpkin".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 62768076i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPumpkinPie".into(), + prefab_hash: 62768076i32, + desc: "".into(), + name: "Pumpkin Pie".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1277979876i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPumpkinSoup".into(), + prefab_hash: 1277979876i32, + desc: "Made using Cooked Pumpkin and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay" + .into(), + name: "Pumpkin Soup".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1616308158i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIce".into(), + prefab_hash: -1616308158i32, + desc: "A frozen chunk of pure Water" + .into(), + name: "Pure Ice Water".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1251009404i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceCarbonDioxide".into(), + prefab_hash: -1251009404i32, + desc: "A frozen chunk of pure Carbon Dioxide" + .into(), + name: "Pure Ice Carbon Dioxide".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 944530361i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceHydrogen".into(), + prefab_hash: 944530361i32, + desc: "A frozen chunk of pure Hydrogen" + .into(), + name: "Pure Ice Hydrogen".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1715945725i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceLiquidCarbonDioxide".into(), + prefab_hash: -1715945725i32, + desc: "A frozen chunk of pure Liquid Carbon Dioxide" + .into(), + name: "Pure Ice Liquid Carbon Dioxide".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1044933269i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceLiquidHydrogen".into(), + prefab_hash: -1044933269i32, + desc: "A frozen chunk of pure Liquid Hydrogen" + .into(), + name: "Pure Ice Liquid Hydrogen".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1674576569i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceLiquidNitrogen".into(), + prefab_hash: 1674576569i32, + desc: "A frozen chunk of pure Liquid Nitrogen" + .into(), + name: "Pure Ice Liquid Nitrogen".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1428477399i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceLiquidNitrous".into(), + prefab_hash: 1428477399i32, + desc: "A frozen chunk of pure Liquid Nitrous Oxide" + .into(), + name: "Pure Ice Liquid Nitrous".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 541621589i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceLiquidOxygen".into(), + prefab_hash: 541621589i32, + desc: "A frozen chunk of pure Liquid Oxygen" + .into(), + name: "Pure Ice Liquid Oxygen".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1748926678i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceLiquidPollutant".into(), + prefab_hash: -1748926678i32, + desc: "A frozen chunk of pure Liquid Pollutant" + .into(), + name: "Pure Ice Liquid Pollutant".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1306628937i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceLiquidVolatiles".into(), + prefab_hash: -1306628937i32, + desc: "A frozen chunk of pure Liquid Volatiles" + .into(), + name: "Pure Ice Liquid Volatiles".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1708395413i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceNitrogen".into(), + prefab_hash: -1708395413i32, + desc: "A frozen chunk of pure Nitrogen" + .into(), + name: "Pure Ice Nitrogen".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 386754635i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceNitrous".into(), + prefab_hash: 386754635i32, + desc: "A frozen chunk of pure Nitrous Oxide" + .into(), + name: "Pure Ice NitrousOxide".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1150448260i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceOxygen".into(), + prefab_hash: -1150448260i32, + desc: "A frozen chunk of pure Oxygen" + .into(), + name: "Pure Ice Oxygen".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1755356i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIcePollutant".into(), + prefab_hash: -1755356i32, + desc: "A frozen chunk of pure Pollutant" + .into(), + name: "Pure Ice Pollutant".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2073202179i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIcePollutedWater".into(), + prefab_hash: -2073202179i32, + desc: "A frozen chunk of Polluted Water" + .into(), + name: "Pure Ice Polluted Water".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -874791066i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceSteam".into(), + prefab_hash: -874791066i32, + desc: "A frozen chunk of pure Steam" + .into(), + name: "Pure Ice Steam".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -633723719i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemPureIceVolatiles".into(), + prefab_hash: -633723719i32, + desc: "A frozen chunk of pure Volatiles" + .into(), + name: "Pure Ice Volatiles".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 495305053i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRTG".into(), + prefab_hash: 495305053i32, + desc: "This kit creates that miracle of modern science, a Kit (Creative RTG)." + .into(), + name: "Kit (Creative RTG)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1817645803i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRTGSurvival".into(), + prefab_hash: 1817645803i32, + desc: "This kit creates a Kit (RTG)." + .into(), + name: "Kit (RTG)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1641500434i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemReagentMix".into(), + prefab_hash: -1641500434i32, + desc: "Reagent mix is pure potential. A slurry of undifferentiated ores, it is output by the Recycler and can be fed into the Centrifuge to separate and recover the individual materials. Reagent mix is also output by the Furnace when the current contents are ejected without smelting a specific ingot." + .into(), + name: "Reagent Mix".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 678483886i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRemoteDetonator".into(), + prefab_hash: 678483886i32, + desc: "0.Mode0\n1.Mode1".into(), + name: "Remote Detonator".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 509629504i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemResidentialPackage".into(), + prefab_hash: 509629504i32, + desc: "".into(), + name: "Residential Supplies Package".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1773192190i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemReusableFireExtinguisher".into(), + prefab_hash: -1773192190i32, + desc: "Requires a canister filled with any inert liquid to opperate." + .into(), + name: "Fire Extinguisher (Reusable)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 658916791i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRice".into(), + prefab_hash: 658916791i32, + desc: "Rice grows at a moderate rate as long as its supplied with plenty of water. Being more dependant on water, rice plants can easily die during periods of drought." + .into(), + name: "Rice".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Rice".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 871811564i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRoadFlare".into(), + prefab_hash: 871811564i32, + desc: "Designed to burn anywhere in the Solar System, the EZC magnesium fusee supplies its own oxygen to fuel combustion, and dispel the eternal night of space." + .into(), + name: "Road Flare".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 20u32, + reagents: None, + slot_class: Class::Flare, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2109945337i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRocketMiningDrillHead".into(), + prefab_hash: 2109945337i32, + desc: "Replaceable drill head for Rocket Miner" + .into(), + name: "Mining-Drill Head (Basic)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::DrillHead, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1530764483i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRocketMiningDrillHeadDurable".into(), + prefab_hash: 1530764483i32, + desc: "".into(), + name: "Mining-Drill Head (Durable)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::DrillHead, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 653461728i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRocketMiningDrillHeadHighSpeedIce".into(), + prefab_hash: 653461728i32, + desc: "".into(), + name: "Mining-Drill Head (High Speed Ice)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::DrillHead, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1440678625i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRocketMiningDrillHeadHighSpeedMineral".into(), + prefab_hash: 1440678625i32, + desc: "".into(), + name: "Mining-Drill Head (High Speed Mineral)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::DrillHead, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -380904592i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRocketMiningDrillHeadIce".into(), + prefab_hash: -380904592i32, + desc: "".into(), + name: "Mining-Drill Head (Ice)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::DrillHead, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -684020753i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRocketMiningDrillHeadLongTerm".into(), + prefab_hash: -684020753i32, + desc: "".into(), + name: "Mining-Drill Head (Long Term)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::DrillHead, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1083675581i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRocketMiningDrillHeadMineral".into(), + prefab_hash: 1083675581i32, + desc: "".into(), + name: "Mining-Drill Head (Mineral)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::DrillHead, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1198702771i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemRocketScanningHead".into(), + prefab_hash: -1198702771i32, + desc: "".into(), + name: "Rocket Scanner Head".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::ScanningHead, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1661270830i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemScanner".into(), + prefab_hash: 1661270830i32, + desc: "A mysterious piece of technology, rumored to have Zrillian origins." + .into(), + name: "Handheld Scanner".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 687940869i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemScrewdriver".into(), + prefab_hash: 687940869i32, + desc: "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It\'s definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units." + .into(), + name: "Screwdriver".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1981101032i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSecurityCamera".into(), + prefab_hash: -1981101032i32, + desc: "Security cameras can be paired with a Motion Sensor, then connected to a Console fitted with a Camera Display for that \'always watched\' feeling." + .into(), + name: "Security Camera".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1176140051i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSensorLenses".into(), + prefab_hash: -1176140051i32, + desc: "These Norsec glasses might not be the most fashionable thing, but when a Sensor Processing Unit (Ore Scanner) is inserted, Stationeers can use these handy glasses to x-ray the ground and find ores that are hidden beneath the surface." + .into(), + name: "Sensor Lenses".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Glasses, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Sensor Processing Unit".into(), class : Class::SensorProcessingUnit, + index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1154200014i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSensorProcessingUnitCelestialScanner".into(), + prefab_hash: -1154200014i32, + desc: "".into(), + name: "Sensor Processing Unit (Celestial Scanner)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::SensorProcessingUnit, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1730464583i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSensorProcessingUnitMesonScanner".into(), + prefab_hash: -1730464583i32, + desc: "The T-Ray Scanner Sensor Processing Unit can be inserted into the Sensor Lenses to show an overlay of pipes and cables. This can be useful when building behind walls or other structures." + .into(), + name: "Sensor Processing Unit (T-Ray Scanner)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::SensorProcessingUnit, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1219128491i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSensorProcessingUnitOreScanner".into(), + prefab_hash: -1219128491i32, + desc: "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD." + .into(), + name: "Sensor Processing Unit (Ore Scanner)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::SensorProcessingUnit, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -290196476i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSiliconIngot".into(), + prefab_hash: -290196476i32, + desc: "".into(), + name: "Ingot (Silicon)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Silicon".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1103972403i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSiliconOre".into(), + prefab_hash: 1103972403i32, + desc: "Silicon is a chemical element with the symbol \"Si\" and is one of the most useful elements to Stationeers. Readily available throughout the universe, silicon is used in a range of alloys, glass, plastics and various electronic components a Stationeer may need to complete their mission." + .into(), + name: "Ore (Silicon)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Silicon".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -929742000i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSilverIngot".into(), + prefab_hash: -929742000i32, + desc: "".into(), + name: "Ingot (Silver)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Silver".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -916518678i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSilverOre".into(), + prefab_hash: -916518678i32, + desc: "Silver is a chemical element with the symbol \"Ag\". Valued by many Stationeers for its attractive luster and sheen, it is also used in a variety of electronics components and alloys." + .into(), + name: "Ore (Silver)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Silver".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -82508479i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSolderIngot".into(), + prefab_hash: -82508479i32, + desc: "".into(), + name: "Ingot (Solder)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Solder".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -365253871i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSolidFuel".into(), + prefab_hash: -365253871i32, + desc: "".into(), + name: "Solid Fuel (Hydrocarbon)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Hydrocarbon".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1883441704i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSoundCartridgeBass".into(), + prefab_hash: -1883441704i32, + desc: "".into(), + name: "Sound Cartridge Bass".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::SoundCartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1901500508i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSoundCartridgeDrums".into(), + prefab_hash: -1901500508i32, + desc: "".into(), + name: "Sound Cartridge Drums".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::SoundCartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1174735962i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSoundCartridgeLeads".into(), + prefab_hash: -1174735962i32, + desc: "".into(), + name: "Sound Cartridge Leads".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::SoundCartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1971419310i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSoundCartridgeSynth".into(), + prefab_hash: -1971419310i32, + desc: "".into(), + name: "Sound Cartridge Synth".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::SoundCartridge, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1387403148i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSoyOil".into(), + prefab_hash: 1387403148i32, + desc: "".into(), + name: "Soy Oil".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("Oil".into(), 1f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1924673028i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSoybean".into(), + prefab_hash: 1924673028i32, + desc: " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil" + .into(), + name: "Soybean".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("Soy".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1737666461i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSpaceCleaner".into(), + prefab_hash: -1737666461i32, + desc: "There was a time when humanity really wanted to keep space clean. That time has passed." + .into(), + name: "Space Cleaner".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 714830451i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSpaceHelmet".into(), + prefab_hash: 714830451i32, + desc: "The basic space helmet insulates Stationeers against everything from hard vacuum to weird cooking smells. Providing a pressure-controlled, breathable atmosphere, it comes with a built-in light powered by your Eva Suit Battery Cell (Small).\nIt also incorporates a lock/unlock feature to avoid accidental opening, as well as a flush function to expel and replace the internal atmosphere. If damaged, use Duct Tape to fix it, or paint it any color you like using the Paint Mixer." + .into(), + name: "Space Helmet".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Helmet, + sorting_class: SortingClass::Clothing, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: Some(InternalAtmoInfo { volume: 3f32 }), + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), (LogicType::Flush, + MemoryAccess::Write), (LogicType::SoundAlert, + MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + 675686937i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSpaceIce".into(), + prefab_hash: 675686937i32, + desc: "".into(), + name: "Space Ice".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2131916219i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSpaceOre".into(), + prefab_hash: 2131916219i32, + desc: "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores." + .into(), + name: "Dirty Ore".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 100u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1260618380i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSpacepack".into(), + prefab_hash: -1260618380i32, + desc: "The basic CHAC spacepack isn\'t \'technically\' a jetpack, it\'s a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Jetpack Basic or Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nUSE: \'J\' to activate; \'space\' to fly up; \'left ctrl\' to descend; and \'WASD\' to move." + .into(), + name: "Spacepack".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Back, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (3, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (4, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (5, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (6, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (7, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (8, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (9, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Propellant".into(), class : + Class::GasCanister, index : 0u32 }), (1u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 3u32 + }), (4u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 4u32 }), (5u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 5u32 }), (6u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 6u32 }), (7u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 7u32 }), (8u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 8u32 }), (9u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 9u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -688107795i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanBlack".into(), + prefab_hash: -688107795i32, + desc: "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses." + .into(), + name: "Spray Paint (Black)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -498464883i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanBlue".into(), + prefab_hash: -498464883i32, + desc: "What kind of a color is blue? The kind of of color that says, \'Hey, what about me?\'" + .into(), + name: "Spray Paint (Blue)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 845176977i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanBrown".into(), + prefab_hash: 845176977i32, + desc: "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed." + .into(), + name: "Spray Paint (Brown)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1880941852i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanGreen".into(), + prefab_hash: -1880941852i32, + desc: "Green is the color of life, and longing. Paradoxically, it\'s also the color of envy, and tolerance. It denotes sickness, youth, and wealth. But really, it\'s just what light does at around 500 billionths of a meter." + .into(), + name: "Spray Paint (Green)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1645266981i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanGrey".into(), + prefab_hash: -1645266981i32, + desc: "Arguably the most popular color in the universe, grey was invented so designers had something to do." + .into(), + name: "Spray Paint (Grey)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1918456047i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanKhaki".into(), + prefab_hash: 1918456047i32, + desc: "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode." + .into(), + name: "Spray Paint (Khaki)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -158007629i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanOrange".into(), + prefab_hash: -158007629i32, + desc: "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove." + .into(), + name: "Spray Paint (Orange)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1344257263i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanPink".into(), + prefab_hash: 1344257263i32, + desc: "With the invention of enduring chemical dyes, the 20th century bestowed associations with innocence and tenderness upon this pale tint of red. Yet classically, it was the color of seduction and eroticism. Things change." + .into(), + name: "Spray Paint (Pink)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 30686509i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanPurple".into(), + prefab_hash: 30686509i32, + desc: "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong." + .into(), + name: "Spray Paint (Purple)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1514393921i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanRed".into(), + prefab_hash: 1514393921i32, + desc: "The king of colors, red is perhaps the defining tone of the universe. Linked to blood, royalty, fire and damnation, it is the chromatic expression of power." + .into(), + name: "Spray Paint (Red)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 498481505i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanWhite".into(), + prefab_hash: 498481505i32, + desc: "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff." + .into(), + name: "Spray Paint (White)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 995468116i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayCanYellow".into(), + prefab_hash: 995468116i32, + desc: "A caricature of light itself, yellow lacks the self-confidence of red, or the swagger of purple. It\'s less fun than orange, but less emotionally limp than khaki. It\'s hard to know when yellow is appropriate, but it persists as a primary color regardless. Suggesting that yellow gonna yellow, no matter what anyone thinks." + .into(), + name: "Spray Paint (Yellow)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Bottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1289723966i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSprayGun".into(), + prefab_hash: 1289723966i32, + desc: "Use with Spray cans in the Spray Can to paint structures, cables and pipes. Much more efficient and faster than doing it with individual spray cans." + .into(), + name: "Spray Gun".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Spray Can".into(), class : + Class::Bottle, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1448105779i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSteelFrames".into(), + prefab_hash: -1448105779i32, + desc: "An advanced and stronger version of Iron Frames, steel frames are placed by right-clicking. To complete construction, use Steel Sheets and a Welding Torch in your active hand." + .into(), + name: "Steel Frames".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 30u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -654790771i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSteelIngot".into(), + prefab_hash: -654790771i32, + desc: "Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1.\nIt may not be elegant, but Ice (Oxite) and Ice (Volatiles) can be combined at a ratio of 1:2 in a furnace to create the necessary gas mixture for smelting." + .into(), + name: "Ingot (Steel)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Steel".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 38555961i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSteelSheets".into(), + prefab_hash: 38555961i32, + desc: "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types." + .into(), + name: "Steel Sheets".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2038663432i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemStelliteGlassSheets".into(), + prefab_hash: -2038663432i32, + desc: "A stronger glass substitute.".into(), + name: "Stellite Glass Sheets".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1897868623i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemStelliteIngot".into(), + prefab_hash: -1897868623i32, + desc: "".into(), + name: "Ingot (Stellite)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Stellite".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2111910840i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSugar".into(), + prefab_hash: 2111910840i32, + desc: "".into(), + name: "Sugar".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Sugar".into(), 10f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1335056202i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSugarCane".into(), + prefab_hash: -1335056202i32, + desc: "".into(), + name: "Sugarcane".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("Sugar".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1274308304i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemSuitModCryogenicUpgrade".into(), + prefab_hash: -1274308304i32, + desc: "Enables suits with basic cooling functionality to work with cryogenic liquid." + .into(), + name: "Cryogenic Suit Upgrade".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::SuitMod, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -229808600i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemTablet".into(), + prefab_hash: -229808600i32, + desc: "The Xigo handheld \'Padi\' tablet is an all-purpose data platform, provided as standard issue to all Stationeers. A dynamic multi-tool that accepts a range of cartridges, the Padi becomes an Cartridge (Atmos Analyzer) or Cartridge (Tracker), Cartridge (Medical Analyzer), Cartridge (Ore Scanner), Cartridge (eReader), and various other functions." + .into(), + name: "Handheld Tablet".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Cartridge".into(), class : Class::Cartridge, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 111280987i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemTerrainManipulator".into(), + prefab_hash: 111280987i32, + desc: "0.Mode0\n1.Mode1".into(), + name: "Terrain Manipulator".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Dirt Canister".into(), class : Class::Ore, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -998592080i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemTomato".into(), + prefab_hash: -998592080i32, + desc: "Tomato plants are perennial, and will produce multiple harvests without needing to be replanted. Once the plant is mature, it will fruit at a moderate pace." + .into(), + name: "Tomato".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 20u32, + reagents: Some(vec![("Tomato".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 688734890i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemTomatoSoup".into(), + prefab_hash: 688734890i32, + desc: "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine." + .into(), + name: "Tomato Soup".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -355127880i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemToolBelt".into(), + prefab_hash: -355127880i32, + desc: "If there\'s one piece of equipment that embodies Stationeer life above all else, it\'s the humble toolbelt (Editor\'s note: a recent ODA survey of iconic Stationeer equipment also rated the smoking, toxic ruins of an over-pressurized Furnace lying amid the charred remains of your latest base very highly).\nDesigned to meet the most strict-ish ODA safety standards, the toolbelt\'s eight slots hold one thing: tools, and Cable Coil. Not to be confused with the Mining Belt." + .into(), + name: "Tool Belt".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Belt, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Tool" + .into(), class : Class::Tool, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Tool".into(), class : Class::Tool, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Tool".into(), class : Class::Tool, index : + 4u32 }), (5u32, SlotInfo::Direct { name : "Tool".into(), class : + Class::Tool, index : 5u32 }), (6u32, SlotInfo::Direct { name : "Tool" + .into(), class : Class::Tool, index : 6u32 }), (7u32, SlotInfo::Direct { + name : "Tool".into(), class : Class::Tool, index : 7u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -800947386i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemTropicalPlant".into(), + prefab_hash: -800947386i32, + desc: "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants." + .into(), + name: "Tropical Lily".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1516581844i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemUraniumOre".into(), + prefab_hash: -1516581844i32, + desc: "In 1934, Enrico Fermi noticed that bombarding uranium with neutrons produced a burst of beta rays, and a new material. This process was named \'nuclear fission\', and resulted in cheap energy, the Cold War, and countless thousand deaths. While reasonably common throughout the Solar System, Stationeers are wary of the material." + .into(), + name: "Ore (Uranium)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 50u32, + reagents: Some(vec![("Uranium".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ore, + sorting_class: SortingClass::Ores, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1253102035i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemVolatiles".into(), + prefab_hash: 1253102035i32, + desc: "An extremely reactive ice with numerous hydrocarbons trapped inside. For simplicity\'s sake, these are often displayed as H2 by devices like the Cartridge (Atmos Analyzer).\n \nVolatiles combust in a 2:1 ratio with Oxygen, creating Carbon Dioxide and pollutants. However when catalysed via devices such as the H2 Combustor in the presence of Oxygen, they produce\n Steam and heat with a modicum of Carbon Dioxide and Pollutant due to the autoignition of the volatiles in the chamber. Along with Oxygen, volatiles gas is also the major component of fuel for such devices as the Welding Torch.\n" + .into(), + name: "Ice (Volatiles)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 50u32, + reagents: None, + slot_class: Class::Ore, + sorting_class: SortingClass::Ices, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1567752627i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWallCooler".into(), + prefab_hash: -1567752627i32, + desc: "This kit creates a Wall Cooler." + .into(), + name: "Kit (Wall Cooler)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1880134612i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWallHeater".into(), + prefab_hash: 1880134612i32, + desc: "This kit creates a Kit (Wall Heater)." + .into(), + name: "Kit (Wall Heater)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1108423476i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWallLight".into(), + prefab_hash: 1108423476i32, + desc: "This kit creates any one of ten Kit (Lights) variants." + .into(), + name: "Kit (Lights)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 156348098i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWaspaloyIngot".into(), + prefab_hash: 156348098i32, + desc: "".into(), + name: "Ingot (Waspaloy)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 500u32, + reagents: Some(vec![("Waspaloy".into(), 1f64)].into_iter().collect()), + slot_class: Class::Ingot, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 107741229i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWaterBottle".into(), + prefab_hash: 107741229i32, + desc: "Delicious and pure H20, refined from local sources as varied as Venusian ice and trans-Solar comets. Empty bottles can be refilled using the Water Bottle Filler." + .into(), + name: "Water Bottle".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::LiquidBottle, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1476318823i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWaterBottleBag".into(), + prefab_hash: 1476318823i32, + desc: "".into(), + name: "Water Bottle Bag".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -971586619i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWaterBottlePackage".into(), + prefab_hash: -971586619i32, + desc: "".into(), + name: "Water Bottle Package".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Storage, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 309693520i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWaterPipeDigitalValve".into(), + prefab_hash: 309693520i32, + desc: "".into(), + name: "Kit (Liquid Digital Valve)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -90898877i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWaterPipeMeter".into(), + prefab_hash: -90898877i32, + desc: "".into(), + name: "Kit (Liquid Pipe Meter)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1721846327i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWaterWallCooler".into(), + prefab_hash: -1721846327i32, + desc: "".into(), + name: "Kit (Liquid Wall Cooler)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 5u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -598730959i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWearLamp".into(), + prefab_hash: -598730959i32, + desc: "".into(), + name: "Headlamp".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Helmet, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -2066892079i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWeldingTorch".into(), + prefab_hash: -2066892079i32, + desc: "Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures.\nAn upgraded version of the classic \'Zairo\' model first manufactured by ExMin for modular space habitat assembly, the Arlite is powered by a single Canister (Fuel) and designed to function equally well in deep space and deep gravity wells." + .into(), + name: "Welding Torch".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.5f32, + radiation_factor: 0.5f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1057658015i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWheat".into(), + prefab_hash: -1057658015i32, + desc: "A classical symbol of growth and new life, wheat takes a moderate time to grow. Its main use is to create flour using the Reagent Processor." + .into(), + name: "Wheat".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("Carbon".into(), 1f64)].into_iter().collect()), + slot_class: Class::Plant, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1535854074i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWireCutters".into(), + prefab_hash: 1535854074i32, + desc: "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools." + .into(), + name: "Wire Cutters".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -504717121i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWirelessBatteryCellExtraLarge".into(), + prefab_hash: -504717121i32, + desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" + .into(), + name: "Wireless Battery Cell Extra Large".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Battery, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + -1826023284i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageAirConditioner1".into(), + prefab_hash: -1826023284i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 169888054i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageAirConditioner2".into(), + prefab_hash: 169888054i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -310178617i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageHydroponicsTray1".into(), + prefab_hash: -310178617i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -997763i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageLargeExtendableRadiator01".into(), + prefab_hash: -997763i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 391453348i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureRTG1".into(), + prefab_hash: 391453348i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -834664349i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation001".into(), + prefab_hash: -834664349i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1464424921i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation002".into(), + prefab_hash: 1464424921i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 542009679i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation003".into(), + prefab_hash: 542009679i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1104478996i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation004".into(), + prefab_hash: -1104478996i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -919745414i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation005".into(), + prefab_hash: -919745414i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1344576960i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation006".into(), + prefab_hash: 1344576960i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 656649558i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation007".into(), + prefab_hash: 656649558i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1214467897i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageStructureWeatherStation008".into(), + prefab_hash: -1214467897i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1662394403i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageTurbineGenerator1".into(), + prefab_hash: -1662394403i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 98602599i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageTurbineGenerator2".into(), + prefab_hash: 98602599i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1927790321i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageTurbineGenerator3".into(), + prefab_hash: 1927790321i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1682930158i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageWallCooler1".into(), + prefab_hash: -1682930158i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 45733800i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWreckageWallCooler2".into(), + prefab_hash: 45733800i32, + desc: "".into(), + name: "Wreckage".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Wreckage, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1886261558i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ItemWrench".into(), + prefab_hash: -1886261558i32, + desc: "One of humanity\'s enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures" + .into(), + name: "Wrench".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Tool, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1932952652i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "KitSDBSilo".into(), + prefab_hash: 1932952652i32, + desc: "This kit creates a SDB Silo." + .into(), + name: "Kit (SDB Silo)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 231903234i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "KitStructureCombustionCentrifuge".into(), + prefab_hash: 231903234i32, + desc: "".into(), + name: "Kit (Combustion Centrifuge)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Kits, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1427415566i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "KitchenTableShort".into(), + prefab_hash: -1427415566i32, + desc: "".into(), + name: "Kitchen Table (Short)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -78099334i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "KitchenTableSimpleShort".into(), + prefab_hash: -78099334i32, + desc: "".into(), + name: "Kitchen Table (Simple Short)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1068629349i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "KitchenTableSimpleTall".into(), + prefab_hash: -1068629349i32, + desc: "".into(), + name: "Kitchen Table (Simple Tall)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1386237782i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "KitchenTableTall".into(), + prefab_hash: -1386237782i32, + desc: "".into(), + name: "Kitchen Table (Tall)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1605130615i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "Lander".into(), + prefab_hash: 1605130615i32, + desc: "".into(), + name: "Lander".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::Crate, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : + Class::Crate, index : 1u32 }), (2u32, SlotInfo::Direct { name : "" + .into(), class : Class::Crate, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "".into(), class : Class::Crate, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "".into(), class : Class::Crate, index : 4u32 + }), (5u32, SlotInfo::Direct { name : "".into(), class : Class::Crate, + index : 5u32 }), (6u32, SlotInfo::Direct { name : "".into(), class : + Class::Portables, index : 6u32 }), (7u32, SlotInfo::Direct { name : "" + .into(), class : Class::Portables, index : 7u32 }), (8u32, + SlotInfo::Direct { name : "".into(), class : Class::Crate, index : 8u32 + }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1295222317i32, + StructureLogicTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_2x2CenterPiece01".into(), + prefab_hash: -1295222317i32, + desc: "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors" + .into(), + name: "Landingpad 2x2 Center Piece".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![].into_iter().collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + 912453390i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_BlankPiece".into(), + prefab_hash: 912453390i32, + desc: "".into(), + name: "Landingpad".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1070143159i32, + StructureLogicTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_CenterPiece01".into(), + prefab_hash: 1070143159i32, + desc: "The target point where the trader shuttle will land. Requires a clear view of the sky." + .into(), + name: "Landingpad Center".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![].into_iter().collect(), + modes: Some( + vec![ + (0, "None".into()), (1, "NoContact".into()), (2, "Moving" + .into()), (3, "Holding".into()), (4, "Landed".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + } + .into(), + ); + map.insert( + 1101296153i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_CrossPiece".into(), + prefab_hash: 1101296153i32, + desc: "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area." + .into(), + name: "Landingpad Cross".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2066405918i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_DataConnectionPiece".into(), + prefab_hash: -2066405918i32, + desc: "Provides power to the landing pad. The data port must be connected to the data port of a computer with a communications motherboard for a trader to be called in to land." + .into(), + name: "Landingpad Data And Power".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::ContactTypeId, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "None".into()), (1, "NoContact".into()), (2, "Moving" + .into()), (3, "Holding".into()), (4, "Landed".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::LandingPad, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::LandingPad, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 977899131i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_DiagonalPiece01".into(), + prefab_hash: 977899131i32, + desc: "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area." + .into(), + name: "Landingpad Diagonal".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 817945707i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_GasConnectorInwardPiece".into(), + prefab_hash: 817945707i32, + desc: "".into(), + name: "Landingpad Gas Input".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::LandingPad, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1100218307i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_GasConnectorOutwardPiece".into(), + prefab_hash: -1100218307i32, + desc: "Pumps gas purchased from a trader out of the landing pad. You can increase the landing pad\'s gas storage capacity by adding more Landingpad Gas Storage to the landing pad." + .into(), + name: "Landingpad Gas Output".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::LandingPad, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 170818567i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_GasCylinderTankPiece".into(), + prefab_hash: 170818567i32, + desc: "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders." + .into(), + name: "Landingpad Gas Storage".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1216167727i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_LiquidConnectorInwardPiece".into(), + prefab_hash: -1216167727i32, + desc: "".into(), + name: "Landingpad Liquid Input".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::LandingPad, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1788929869i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_LiquidConnectorOutwardPiece".into(), + prefab_hash: -1788929869i32, + desc: "Pumps liquid purchased from a trader out of the landing pad. You can increase the landing pad\'s liquid storage capacity by adding more Landingpad Gas Storage to the landing pad." + .into(), + name: "Landingpad Liquid Output".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::LandingPad, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -976273247i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_StraightPiece01".into(), + prefab_hash: -976273247i32, + desc: "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area." + .into(), + name: "Landingpad Straight".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1872345847i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_TaxiPieceCorner".into(), + prefab_hash: -1872345847i32, + desc: "".into(), + name: "Landingpad Taxi Corner".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 146051619i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_TaxiPieceHold".into(), + prefab_hash: 146051619i32, + desc: "".into(), + name: "Landingpad Taxi Hold".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1477941080i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_TaxiPieceStraight".into(), + prefab_hash: -1477941080i32, + desc: "".into(), + name: "Landingpad Taxi Straight".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1514298582i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "Landingpad_ThreshholdPiece".into(), + prefab_hash: -1514298582i32, + desc: "".into(), + name: "Landingpad Threshhold".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::LandingPad, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::LandingPad, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1531272458i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "LogicStepSequencer8".into(), + prefab_hash: 1531272458i32, + desc: "The ODA does not approve of soundtracks or other distractions.\nAs such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure.\nCentral to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. \n\nDIY MUSIC - GETTING STARTED\n\n1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side.\n\n2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver.\n\n3: Select the output speaker (eg Passive Speaker) where the sequencer will play the sounds. This needs to be connected to the logic network on the right hand side of the sequencer.\n\n4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer.\n\n5: Set the BPM on the sequencer using a Dial and a Logic Writer to write to the sequencer\'s BPM variable. A higher bpm will play the sequence faster. \n\n6: Insert a sound cartridge of your choosing and select which variant of sound you wish to play by pushing the arrow buttons located above and below the sound cartridge slot.\n\n7: Choose the pitch of the sounds to play by setting the dial on each of your 8 step units to the desired note. With drums, each note is a different drum sounds. You can trial your sounds by pushing the activate button on each step unit (with the sequencer inactive).\n\n8: Get freaky with the Low frequency oscillator.\n\n9: Finally, activate the sequencer, Vibeoneer." + .into(), + name: "Logic Step Sequencer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Time, MemoryAccess::ReadWrite), (LogicType::Bpm, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Whole Note".into()), (1, "Half Note".into()), (2, + "Quarter Note".into()), (3, "Eighth Note".into()), (4, + "Sixteenth Note".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Sound Cartridge".into(), class : + Class::SoundCartridge, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -99064335i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "Meteorite".into(), + prefab_hash: -99064335i32, + desc: "".into(), + name: "Meteorite".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1667675295i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MonsterEgg".into(), + prefab_hash: -1667675295i32, + desc: "".into(), + name: "".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -337075633i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardComms".into(), + prefab_hash: -337075633i32, + desc: "When placed in a Computer (Modern) and connected to a Landingpad Data And Power, a Medium Satellite Dish, and a Vending Machine allows Stationeers to trade with suppliers. Adjust the horizontal and vertical attributes of the Medium Satellite Dish either directly or through logic. You need a communications signal of 95% or above to establish reliable communications with a trader. A minimum of a 3x3 clear pad area with a Landingpad Center at the center is required for a trader to land." + .into(), + name: "Communications Motherboard".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Motherboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 502555944i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardLogic".into(), + prefab_hash: 502555944i32, + desc: "Motherboards are connected to Computer (Modern)s to perform various technical functions.\nThe Norsec-designed K-cops logic motherboard allows Stationeers to set variables and actions on specific logic-controlled items." + .into(), + name: "Logic Motherboard".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Motherboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -127121474i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardMissionControl".into(), + prefab_hash: -127121474i32, + desc: "".into(), + name: "".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Motherboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -161107071i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardProgrammableChip".into(), + prefab_hash: -161107071i32, + desc: "When placed in a Computer (Modern), the IC Editor allows players to write and edit IC code, which can then be uploaded to a Integrated Circuit (IC10) if housed in an IC Housing." + .into(), + name: "IC Editor Motherboard".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Motherboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -806986392i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardRockets".into(), + prefab_hash: -806986392i32, + desc: "".into(), + name: "Rocket Control Motherboard".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Motherboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1908268220i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MotherboardSorter".into(), + prefab_hash: -1908268220i32, + desc: "Motherboards are connected to Computer (Modern)s to perform various technical functions.\nThe Norsec-designed K-cops 10-10 sorter motherboard permits Stationeers to control which items a Sorter does, and does not, permit to pass." + .into(), + name: "Sorter Motherboard".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Motherboard, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1930442922i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "MothershipCore".into(), + prefab_hash: -1930442922i32, + desc: "A relic of from an earlier era of space ambition, Sinotai\'s mothership cores formed the central element of a generation\'s space-going creations. While Sinotai\'s pivot to smaller, modular craft upset some purists, motherships continue to be built and maintained by dedicated enthusiasts." + .into(), + name: "Mothership Core".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 155856647i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "NpcChick".into(), + prefab_hash: 155856647i32, + desc: "".into(), + name: "Chick".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Lungs".into(), class : + Class::Organ, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 399074198i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "NpcChicken".into(), + prefab_hash: 399074198i32, + desc: "".into(), + name: "Chicken".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Brain".into(), class : Class::Organ, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Lungs".into(), class : + Class::Organ, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 248893646i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "PassiveSpeaker".into(), + prefab_hash: 248893646i32, + desc: "".into(), + name: "Passive Speaker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Volume, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::ReadWrite), (LogicType::SoundAlert, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::ReadWrite), (LogicType::NameHash, + MemoryAccess::ReadWrite) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 443947415i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "PipeBenderMod".into(), + prefab_hash: 443947415i32, + desc: "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options." + .into(), + name: "Pipe Bender Mod".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1958705204i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "PortableComposter".into(), + prefab_hash: -1958705204i32, + desc: "A simple composting device, the basic composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires a full Liquid Canister and a battery to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat.\n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer\'s effects on plants will vary depending on the respective proportions of its ingredients.\n\n- food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for" + .into(), + name: "Portable Composter".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::Battery, index : 2u32 }), (3u32, SlotInfo::Direct { name : + "Liquid Canister".into(), class : Class::LiquidCanister, index : 3u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 2043318949i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "PortableSolarPanel".into(), + prefab_hash: 2043318949i32, + desc: "".into(), + name: "Portable Solar Panel".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 399661231i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "RailingElegant01".into(), + prefab_hash: 399661231i32, + desc: "".into(), + name: "Railing Elegant (Type 1)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1898247915i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "RailingElegant02".into(), + prefab_hash: -1898247915i32, + desc: "".into(), + name: "Railing Elegant (Type 2)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2072792175i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "RailingIndustrial02".into(), + prefab_hash: -2072792175i32, + desc: "".into(), + name: "Railing Industrial (Type 2)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 980054869i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ReagentColorBlue".into(), + prefab_hash: 980054869i32, + desc: "".into(), + name: "Color Dye (Blue)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("ColorBlue".into(), 10f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 120807542i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ReagentColorGreen".into(), + prefab_hash: 120807542i32, + desc: "".into(), + name: "Color Dye (Green)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("ColorGreen".into(), 10f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -400696159i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ReagentColorOrange".into(), + prefab_hash: -400696159i32, + desc: "".into(), + name: "Color Dye (Orange)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some( + vec![("ColorOrange".into(), 10f64)].into_iter().collect(), + ), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1998377961i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ReagentColorRed".into(), + prefab_hash: 1998377961i32, + desc: "".into(), + name: "Color Dye (Red)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some(vec![("ColorRed".into(), 10f64)].into_iter().collect()), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 635208006i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ReagentColorYellow".into(), + prefab_hash: 635208006i32, + desc: "".into(), + name: "Color Dye (Yellow)".into(), + }, + item: ItemInfo { + consumable: true, + filter_type: None, + ingredient: true, + max_quantity: 100u32, + reagents: Some( + vec![("ColorYellow".into(), 10f64)].into_iter().collect(), + ), + slot_class: Class::None, + sorting_class: SortingClass::Resources, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -788672929i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "RespawnPoint".into(), + prefab_hash: -788672929i32, + desc: "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead." + .into(), + name: "Respawn Point".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -491247370i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "RespawnPointWallMounted".into(), + prefab_hash: -491247370i32, + desc: "".into(), + name: "Respawn Point (Mounted)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 434786784i32, + ItemCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "Robot".into(), + prefab_hash: 434786784i32, + desc: "Designed by - presumably drunk - Norsec roboticists, AIMeE (or Automated Independent Mechanical Entity) can be a Stationeer\'s best friend, or tiresome nemesis, or both several times in the same day. \n \nIntended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard.\n\nAIMEe has 7 modes:\n\nRobotMode.None = 0 = Do nothing\nRobotMode.None = 1 = Follow nearest player\nRobotMode.None = 2 = Move to target in straight line\nRobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius\nRobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids\nRobotMode.None = 5 = Path(find) to target\nRobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter" + .into(), + name: "AIMeE Bot".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (3, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (4, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (5, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (6, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (7, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (8, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (9, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::PressureExternal, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::TemperatureExternal, + MemoryAccess::Read), (LogicType::PositionX, MemoryAccess::Read), + (LogicType::PositionY, MemoryAccess::Read), (LogicType::PositionZ, + MemoryAccess::Read), (LogicType::VelocityMagnitude, + MemoryAccess::Read), (LogicType::VelocityRelativeX, + MemoryAccess::Read), (LogicType::VelocityRelativeY, + MemoryAccess::Read), (LogicType::VelocityRelativeZ, + MemoryAccess::Read), (LogicType::TargetX, MemoryAccess::Write), + (LogicType::TargetY, MemoryAccess::Write), (LogicType::TargetZ, + MemoryAccess::Write), (LogicType::MineablesInVicinity, + MemoryAccess::Read), (LogicType::MineablesInQueue, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::ForwardX, MemoryAccess::Read), (LogicType::ForwardY, + MemoryAccess::Read), (LogicType::ForwardZ, MemoryAccess::Read), + (LogicType::Orientation, MemoryAccess::Read), (LogicType::VelocityX, + MemoryAccess::Read), (LogicType::VelocityY, MemoryAccess::Read), + (LogicType::VelocityZ, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "None".into()), (1, "Follow".into()), (2, "MoveToTarget" + .into()), (3, "Roam".into()), (4, "Unload".into()), (5, + "PathToTarget".into()), (6, "StorageFull".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: true, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Programmable Chip".into(), class : Class::ProgrammableChip, index : 1u32 + }), (2u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 2u32 }), (3u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 3u32 }), (4u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "Ore".into(), class : Class::Ore, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, index : 6u32 + }), (7u32, SlotInfo::Direct { name : "Ore".into(), class : Class::Ore, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "Ore".into(), class : + Class::Ore, index : 8u32 }), (9u32, SlotInfo::Direct { name : "Ore" + .into(), class : Class::Ore, index : 9u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 350726273i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "RoverCargo".into(), + prefab_hash: 350726273i32, + desc: "Connects to Logic Transmitter" + .into(), + name: "Rover (Cargo)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.01f32, + radiation_factor: 0.01f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (6, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (7, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (8, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (10, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (11, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (12, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (13, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (14, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (15, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: true, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Entity".into(), class : Class::Entity, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Entity".into(), class + : Class::Entity, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Gas Filter".into(), class : Class::GasFilter, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "Gas Filter".into(), class : Class::GasFilter, + index : 3u32 }), (4u32, SlotInfo::Direct { name : "Gas Filter".into(), + class : Class::GasFilter, index : 4u32 }), (5u32, SlotInfo::Direct { name + : "Gas Canister".into(), class : Class::GasCanister, index : 5u32 }), + (6u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 6u32 }), (7u32, SlotInfo::Direct { name : + "Gas Canister".into(), class : Class::GasCanister, index : 7u32 }), + (8u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 8u32 }), (9u32, SlotInfo::Direct { name : + "Battery".into(), class : Class::Battery, index : 9u32 }), (10u32, + SlotInfo::Direct { name : "Battery".into(), class : Class::Battery, index + : 10u32 }), (11u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 11u32 }), (12u32, SlotInfo::Direct { name : + "Container Slot".into(), class : Class::None, index : 12u32 }), (13u32, + SlotInfo::Direct { name : "Container Slot".into(), class : Class::None, + index : 13u32 }), (14u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 14u32 }), (15u32, SlotInfo::Direct + { name : "".into(), class : Class::None, index : 15u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -2049946335i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "Rover_MkI".into(), + prefab_hash: -2049946335i32, + desc: "A distant cousin of the jeep, the Mk I {Sinotai electric rover is one of the most simple and durable light vehicles in the known universe. Able to carry two passengers and cargo such as the Portable Gas Tank (Air) or , it is powered by up to three batteries, accepting everything including Battery Cell (Nuclear).\nA quad-array of hub-mounted electric engines propels the reinforced aluminium frame over most terrain and modest obstacles. While the Mk I is designed for stability in low-horizontality circumstances, if it rolls, try using your Crowbar to put it right way up.Connects to Logic Transmitter" + .into(), + name: "Rover MkI".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (2, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (6, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (7, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (8, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (9, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (10, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: true, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Entity".into(), class : Class::Entity, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Entity".into(), class + : Class::Entity, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Battery".into(), class : Class::Battery, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "Battery".into(), class : Class::Battery, index + : 3u32 }), (4u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 4u32 }), (5u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 5u32 + }), (6u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 6u32 }), (7u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 7u32 }), + (8u32, SlotInfo::Direct { name : "".into(), class + : Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 9u32 }), + (10u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 10u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 861674123i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "Rover_MkI_build_states".into(), + prefab_hash: 861674123i32, + desc: "".into(), + name: "Rover MKI".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -256607540i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SMGMagazine".into(), + prefab_hash: -256607540i32, + desc: "".into(), + name: "SMG Magazine".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Magazine, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1139887531i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Cocoa".into(), + prefab_hash: 1139887531i32, + desc: "".into(), + name: "Cocoa Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1290755415i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Corn".into(), + prefab_hash: -1290755415i32, + desc: "Grow a Corn." + .into(), + name: "Corn Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1990600883i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Fern".into(), + prefab_hash: -1990600883i32, + desc: "Grow a Fern." + .into(), + name: "Fern Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 311593418i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Mushroom".into(), + prefab_hash: 311593418i32, + desc: "Grow a Mushroom." + .into(), + name: "Mushroom Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1005571172i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Potato".into(), + prefab_hash: 1005571172i32, + desc: "Grow a Potato." + .into(), + name: "Potato Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1423199840i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Pumpkin".into(), + prefab_hash: 1423199840i32, + desc: "Grow a Pumpkin." + .into(), + name: "Pumpkin Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1691151239i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Rice".into(), + prefab_hash: -1691151239i32, + desc: "Grow some Rice." + .into(), + name: "Rice Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1783004244i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Soybean".into(), + prefab_hash: 1783004244i32, + desc: "Grow some Soybean." + .into(), + name: "Soybean Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1884103228i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_SugarCane".into(), + prefab_hash: -1884103228i32, + desc: "".into(), + name: "Sugarcane Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 488360169i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Switchgrass".into(), + prefab_hash: 488360169i32, + desc: "".into(), + name: "Switchgrass Seed".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1922066841i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Tomato".into(), + prefab_hash: -1922066841i32, + desc: "Grow a Tomato." + .into(), + name: "Tomato Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -654756733i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "SeedBag_Wheet".into(), + prefab_hash: -654756733i32, + desc: "Grow some Wheat." + .into(), + name: "Wheat Seeds".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 10u32, + reagents: None, + slot_class: Class::Plant, + sorting_class: SortingClass::Food, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1991297271i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "SpaceShuttle".into(), + prefab_hash: -1991297271i32, + desc: "An antiquated Sinotai transport craft, long since decommissioned." + .into(), + name: "Space Shuttle".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Captain\'s Seat".into(), class : + Class::Entity, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Passenger Seat Left".into(), class : Class::Entity, index : 1u32 }), + (2u32, SlotInfo::Direct { name : "Passenger Seat Right".into(), class : + Class::Entity, index : 2u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1527229051i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StopWatch".into(), + prefab_hash: -1527229051i32, + desc: "".into(), + name: "Stop Watch".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Time, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1298920475i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAccessBridge".into(), + prefab_hash: 1298920475i32, + desc: "Extendable bridge that spans three grids".into(), + name: "Access Bridge".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1129453144i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureActiveVent".into(), + prefab_hash: -1129453144i32, + desc: "The active vent is a powered device for maintaining gas pressure by pumping gas into (or out of) a pipe network. The vent has two modes: \'Outward\' sets it to pump gas into a space until pressure is reached; \'Inward\' sets it to pump gas out until pressure is reached. The pressure parameter can be set on a connected Console. Default pressure is 101kPa for Outward; 0kPa for Inward..." + .into(), + name: "Active Vent".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::PressureExternal, + MemoryAccess::ReadWrite), (LogicType::PressureInternal, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Outward".into()), (1, "Inward".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::DataDisk, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 446212963i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAdvancedComposter".into(), + prefab_hash: 446212963i32, + desc: "The advanced composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires Water and power to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat. \n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer\'s effects on plants will vary depending on the respective proportions of its ingredients.\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times\n" + .into(), + name: "Advanced Composter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { + typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 545937711i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAdvancedFurnace".into(), + prefab_hash: 545937711i32, + desc: "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit\'s internal pressure." + .into(), + name: "Advanced Furnace".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::Read), + (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::SettingInput, MemoryAccess::ReadWrite), + (LogicType::SettingOutput, MemoryAccess::ReadWrite), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: true, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + } + .into(), + ); + map.insert( + -463037670i32, + StructureLogicDeviceConsumerMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAdvancedPackagingMachine".into(), + prefab_hash: -463037670i32, + desc: "The Xigo Advanced Cannifier Multi-Plus Pro is an automateable packaging machine that uses Empty Cans and cooked food to create canned sustenance that does not decay. Note that the ACMPP only accepts cooked food and tin cans." + .into(), + name: "Advanced Packaging Machine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RecipeHash, + MemoryAccess::ReadWrite), (LogicType::CompletionRatio, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemCookedCondensedMilk".into(), "ItemCookedCorn".into(), + "ItemCookedMushroom".into(), "ItemCookedPowderedEggs".into(), + "ItemCookedPumpkin".into(), "ItemCookedRice".into(), + "ItemCookedSoybean".into(), "ItemCookedTomato".into(), "ItemEmptyCan" + .into(), "ItemMilk".into(), "ItemPotatoBaked".into(), "ItemSoyOil" + .into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + Recipe { target_prefab : "ItemTomatoSoup".into(), target_prefab_hash + : 688734890i32, tier : MachineTier::TierOne, time : 5f64, energy : + 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : vec![("Oil" + .into(), 1f64), ("Steel".into(), 1f64), ("Tomato".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemPumpkinSoup" + .into(), target_prefab_hash : 1277979876i32, tier : + MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Oil".into(), 1f64), ("Pumpkin" + .into(), 2f64), ("Steel".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemCornSoup".into(), target_prefab_hash : + 545034114i32, tier : MachineTier::TierOne, time : 5f64, energy : + 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : vec![("Corn" + .into(), 5f64), ("Oil".into(), 1f64), ("Steel".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemCannedMushroom".into(), target_prefab_hash : - 1344601965i32, + tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Mushroom".into(), 5f64), ("Oil" + .into(), 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemCannedPowderedEggs".into(), + target_prefab_hash : 1161510063i32, tier : MachineTier::TierOne, time + : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop + : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Egg".into(), 5f64), ("Oil".into(), 1f64), ("Steel" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemFrenchFries".into(), target_prefab_hash : - 57608687i32, tier : + MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Oil".into(), 1f64), ("Potato" + .into(), 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemCannedRicePudding".into(), + target_prefab_hash : - 1185552595i32, tier : MachineTier::TierOne, + time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Oil".into(), 1f64), ("Rice".into(), 5f64), ("Steel" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemCannedCondensedMilk".into(), target_prefab_hash : - + 2104175091i32, tier : MachineTier::TierOne, time : 5f64, energy : + 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : vec![("Milk" + .into(), 200f64), ("Steel".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemCannedEdamame".into(), + target_prefab_hash : - 999714082i32, tier : MachineTier::TierOne, + time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Oil".into(), 1f64), ("Soy".into(), 15f64), ("Steel" + .into(), 1f64)] .into_iter().collect() } + ] + .into_iter() + .collect(), + }), + memory: MemoryInfo { + instructions: Some( + vec![ + ("DeviceSetLock".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : + InstructionPartType::Bool8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(48u32) }] .into_iter().collect() }), + ("EjectAllReagents".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }), + ("EjectReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("ExecuteRecipe".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("JumpIfNextInvalid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("JumpToAddress".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("MissingRecipeReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, + Some(62u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("StackPointer".into(), Instruction { description : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("WaitUntilNextValid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ); + map.insert( + -2087593337i32, + StructureCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAirConditioner".into(), + prefab_hash: -2087593337i32, + desc: "Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature.\n\t \nThe unit has three pipe connections: input, output, and waste. Gas fed into the input will be heated or cooled to reach the target temperature, while the opposite will happen to gas on the waste network.\n\nMultiple Efficiency Multipliers can effect the amount of energy the Air Conditioner uses, and these can be view on the unit\'s green Information Panel. As the temperature difference between input and waste increases, the Temperature Differential Efficiency Multiplier will decrease. If input or waste temperature is extremely hot or cold, the Operational Temperature Efficiency will decrease. If the input or waste pipe has approach low pressures, the Pressure Efficiency will decrease.\n\nPipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. \n \nFor more information on using the air conditioner, consult the temperature control Guides page." + .into(), + name: "Air Conditioner".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::PressureInput, MemoryAccess::Read), + (LogicType::TemperatureInput, MemoryAccess::Read), + (LogicType::RatioOxygenInput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioNitrogenInput, MemoryAccess::Read), + (LogicType::RatioPollutantInput, MemoryAccess::Read), + (LogicType::RatioVolatilesInput, MemoryAccess::Read), + (LogicType::RatioWaterInput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), + (LogicType::TotalMolesInput, MemoryAccess::Read), + (LogicType::PressureOutput, MemoryAccess::Read), + (LogicType::TemperatureOutput, MemoryAccess::Read), + (LogicType::RatioOxygenOutput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioPollutantOutput, MemoryAccess::Read), + (LogicType::RatioVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioWaterOutput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), + (LogicType::TotalMolesOutput, MemoryAccess::Read), + (LogicType::PressureOutput2, MemoryAccess::Read), + (LogicType::TemperatureOutput2, MemoryAccess::Read), + (LogicType::RatioOxygenOutput2, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideOutput2, MemoryAccess::Read), + (LogicType::RatioNitrogenOutput2, MemoryAccess::Read), + (LogicType::RatioPollutantOutput2, MemoryAccess::Read), + (LogicType::RatioVolatilesOutput2, MemoryAccess::Read), + (LogicType::RatioWaterOutput2, MemoryAccess::Read), + (LogicType::RatioNitrousOxideOutput2, MemoryAccess::Read), + (LogicType::TotalMolesOutput2, MemoryAccess::Read), + (LogicType::CombustionInput, MemoryAccess::Read), + (LogicType::CombustionOutput, MemoryAccess::Read), + (LogicType::CombustionOutput2, MemoryAccess::Read), + (LogicType::OperationalTemperatureEfficiency, MemoryAccess::Read), + (LogicType::TemperatureDifferentialEfficiency, MemoryAccess::Read), + (LogicType::PressureEfficiency, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesOutput2, MemoryAccess::Read), + (LogicType::RatioSteamInput, MemoryAccess::Read), + (LogicType::RatioSteamOutput, MemoryAccess::Read), + (LogicType::RatioSteamOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideOutput2, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Waste }, + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: Some(2u32), + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2105052344i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAirlock".into(), + prefab_hash: -2105052344i32, + desc: "The standard airlock is a powered portal that forms the main component of an airlock chamber. As long as the airlock is not locked, it can be manually opened using a crowbar." + .into(), + name: "Airlock".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1736080881i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAirlockGate".into(), + prefab_hash: 1736080881i32, + desc: "1 x 1 modular door piece for building hangar doors.".into(), + name: "Small Hangar Door".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1811979158i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAngledBench".into(), + prefab_hash: 1811979158i32, + desc: "".into(), + name: "Bench (Angled)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -247344692i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureArcFurnace".into(), + prefab_hash: -247344692i32, + desc: "The simplest smelting system available to the average Stationeer, Recurso\'s arc furnace was forged itself in the depths of the Solar System to help explorational geologists determine the purity of potential asteroidal mining targets.\nCo-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources.\nThe smelting process also releases a range of by product gases, principally Nitrogen, Carbon Dioxide, Volatiles and Oxygen in differing ratios. These can be recaptured from the atmosphere by filtering, but also make the arc furnace a risk in closed environments. \nUnlike the more advanced Furnace, the arc furnace cannot create alloys." + .into(), + name: "Arc Furnace".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::Read), + (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ore, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::Ingot, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: true, + }, + } + .into(), + ); + map.insert( + 1999523701i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAreaPowerControl".into(), + prefab_hash: 1999523701i32, + desc: "An Area Power Control (APC) has three main functions: \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network.\nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only." + .into(), + name: "Area Power Control".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Charge, MemoryAccess::Read), + (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), + (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Idle".into()), (1, "Discharged".into()), (2, "Discharging" + .into()), (3, "Charging".into()), (4, "Charged".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Data Disk".into(), class : Class::DataDisk, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1032513487i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAreaPowerControlReversed".into(), + prefab_hash: -1032513487i32, + desc: "An Area Power Control (APC) has three main functions. \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. \nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only." + .into(), + name: "Area Power Control".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Charge, MemoryAccess::Read), + (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), + (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Idle".into()), (1, "Discharged".into()), (2, "Discharging" + .into()), (3, "Charging".into()), (4, "Charged".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Data Disk".into(), class : Class::DataDisk, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 7274344i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAutoMinerSmall".into(), + prefab_hash: 7274344i32, + desc: "The Recurso SquareDig autominer is a structure that when built will mine a vertical 2x2 shaft until it hits bedrock. The autominer can be connected to a chute system, and is controllable by a logic network. Note that the autominer outputs more ore than a conventional Mining Drill over the same area." + .into(), + name: "Autominer (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 336213101i32, + StructureLogicDeviceConsumerMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAutolathe".into(), + prefab_hash: 336213101i32, + desc: "The foundation of most Stationeer fabrication systems, the ExMin autolathe is a multi-axis molecular compositional system. Its complexity demands considerable time to assemble, but it remains an indispensable creation tool. Upgrade the device using a Autolathe Printer Mod for additional recipes and faster processing speeds.\n\t " + .into(), + name: "Autolathe".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RecipeHash, + MemoryAccess::ReadWrite), (LogicType::CompletionRatio, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ingot, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), + "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" + .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), + "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" + .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), + "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" + .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), + "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + Recipe { target_prefab : "ItemIronFrames".into(), target_prefab_hash + : 1225836666i32, tier : MachineTier::TierOne, time : 4f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 4f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemIronSheets".into(), target_prefab_hash : - 487378546i32, tier : + MachineTier::TierOne, time : 1f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemPlasticSheets".into(), target_prefab_hash : 662053345i32, tier : + MachineTier::TierOne, time : 1f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Silicon".into(), 0.5f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemGlassSheets" + .into(), target_prefab_hash : 1588896491i32, tier : + MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Silicon".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemStelliteGlassSheets".into(), target_prefab_hash : - + 2038663432i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Silicon".into(), 2f64), ("Stellite".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemSteelSheets" + .into(), target_prefab_hash : 38555961i32, tier : + MachineTier::TierOne, time : 3f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Steel".into(), 0.5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemAstroloySheets".into(), target_prefab_hash : - 1662476145i32, + tier : MachineTier::TierOne, time : 3f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 1i64, reagents : vec![("Astroloy".into(), + 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemSteelFrames".into(), target_prefab_hash : - 1448105779i32, tier + : MachineTier::TierOne, time : 7f64, energy : 800f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Steel".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitWallIron" + .into(), target_prefab_hash : - 524546923i32, tier : + MachineTier::TierOne, time : 1f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitRailing" + .into(), target_prefab_hash : 750176282i32, tier : + MachineTier::TierOne, time : 1f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitCompositeCladding".into(), target_prefab_hash : - + 1470820996i32, tier : MachineTier::TierOne, time : 1f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitWall".into(), target_prefab_hash : - 1826855889i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitReinforcedWindows".into(), target_prefab_hash : + 1459985302i32, tier : MachineTier::TierOne, time : 7f64, energy : + 700f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Astroloy".into(), 2f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitWindowShutter".into(), target_prefab_hash : + 1779979754i32, tier : MachineTier::TierOne, time : 7f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Solder".into(), 1f64), ("Steel".into(), 2f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitLadder".into(), + target_prefab_hash : 489494578i32, tier : MachineTier::TierOne, time + : 3f64, energy : 200f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 2f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitPipe".into(), target_prefab_hash : - + 1619793705i32, tier : MachineTier::TierOne, time : 5f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 0.5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemCableCoil".into(), target_prefab_hash : - 466050668i32, tier : + MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Copper".into(), 0.5f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitFurnace" + .into(), target_prefab_hash : - 806743925i32, tier : + MachineTier::TierOne, time : 120f64, energy : 12000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Iron" + .into(), 30f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitArcFurnace".into(), target_prefab_hash : - 98995857i32, tier + : MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitElectronicsPrinter".into(), target_prefab_hash : - + 1181922382i32, tier : MachineTier::TierOne, time : 120f64, energy : + 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 10f64), ("Gold".into(), 2f64), ("Iron".into(), + 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitRocketManufactory".into(), target_prefab_hash : - + 636127860i32, tier : MachineTier::TierOne, time : 120f64, energy : + 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 10f64), ("Gold".into(), 2f64), ("Iron".into(), + 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitSecurityPrinter".into(), target_prefab_hash : 578078533i32, + tier : MachineTier::TierOne, time : 180f64, energy : 36000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 20f64), ("Gold".into(), 20f64), ("Steel".into(), 20f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitBlastDoor".into(), + target_prefab_hash : - 1755116240i32, tier : MachineTier::TierTwo, + time : 10f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 3f64), ("Steel".into(), 15f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitRobotArmDoor".into(), target_prefab_hash : - 753675589i32, + tier : MachineTier::TierTwo, time : 10f64, energy : 400f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 5f64), ("Gold".into(), 3f64), ("Steel".into(), 12f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitFurniture".into(), + target_prefab_hash : 1162905029i32, tier : MachineTier::TierOne, time + : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitTables" + .into(), target_prefab_hash : - 1361598922i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitChairs".into(), target_prefab_hash : - 1394008073i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitBeds".into(), target_prefab_hash : - 1241256797i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitSorter".into(), target_prefab_hash : 969522478i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" + .into(), 1f64), ("Iron".into(), 10f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitHydraulicPipeBender".into(), + target_prefab_hash : - 2098556089i32, tier : MachineTier::TierOne, + time : 180f64, energy : 18000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 2f64), + ("Iron".into(), 20f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitAutolathe".into(), target_prefab_hash : - + 1753893214i32, tier : MachineTier::TierOne, time : 180f64, energy : + 36000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 10f64), ("Gold".into(), 2f64), ("Iron".into(), + 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitDoor".into(), target_prefab_hash : 168615924i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 3f64), ("Iron" + .into(), 7f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitInteriorDoors".into(), target_prefab_hash : 1935945891i32, + tier : MachineTier::TierOne, time : 10f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 3f64), ("Iron".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemWallLight".into(), target_prefab_hash : + 1108423476i32, tier : MachineTier::TierOne, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 2f64), ("Iron".into(), 1f64), ("Silicon" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitWallArch".into(), target_prefab_hash : 1625214531i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitWallFlat" + .into(), target_prefab_hash : - 846838195i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitWallGeometry".into(), target_prefab_hash : - 784733231i32, + tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 1i64, reagents : vec![("Steel".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitWallPadded".into(), target_prefab_hash : - 821868990i32, tier + : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitLocker" + .into(), target_prefab_hash : 882301399i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitSign" + .into(), target_prefab_hash : 529996327i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitStairs" + .into(), target_prefab_hash : 170878959i32, tier : + MachineTier::TierOne, time : 20f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 15f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitStairwell" + .into(), target_prefab_hash : - 1868555784i32, tier : + MachineTier::TierOne, time : 20f64, energy : 6000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 15f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitStacker" + .into(), target_prefab_hash : 1013244511i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemEmptyCan".into(), target_prefab_hash : 1013818348i32, tier : + MachineTier::TierOne, time : 1f64, energy : 70f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "CardboardBox" + .into(), target_prefab_hash : - 1976947556i32, tier : + MachineTier::TierOne, time : 2f64, energy : 120f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Silicon".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitChute" + .into(), target_prefab_hash : 1025254665i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitStandardChute".into(), target_prefab_hash : 2133035682i32, + tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Constantan" + .into(), 2f64), ("Electrum".into(), 2f64), ("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitSDBHopper" + .into(), target_prefab_hash : 323957548i32, tier : + MachineTier::TierOne, time : 10f64, energy : 700f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 15f64)] + .into_iter().collect() }, Recipe { target_prefab : "KitSDBSilo" + .into(), target_prefab_hash : 1932952652i32, tier : + MachineTier::TierOne, time : 120f64, energy : 24000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" + .into(), 20f64), ("Steel".into(), 15f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitCompositeFloorGrating".into(), + target_prefab_hash : 1182412869i32, tier : MachineTier::TierOne, time + : 3f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitToolManufactory".into(), + target_prefab_hash : 529137748i32, tier : MachineTier::TierOne, time + : 120f64, energy : 24000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 10f64), ("Iron".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitRecycler" + .into(), target_prefab_hash : 849148192i32, tier : + MachineTier::TierOne, time : 60f64, energy : 12000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Iron" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitCentrifuge".into(), target_prefab_hash : 578182956i32, tier : + MachineTier::TierOne, time : 60f64, energy : 18000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "KitStructureCombustionCentrifuge".into(), target_prefab_hash : + 231903234i32, tier : MachineTier::TierTwo, time : 120f64, energy : + 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Constantan".into(), 5f64), ("Invar".into(), 10f64), ("Steel" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitDeepMiner".into(), target_prefab_hash : - 1935075707i32, tier + : MachineTier::TierTwo, time : 180f64, energy : 72000f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 4i64, reagents : vec![("Constantan".into(), 5f64), + ("Electrum".into(), 5f64), ("Invar".into(), 10f64), ("Steel".into(), + 50f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitCrateMount".into(), target_prefab_hash : - 551612946i32, tier + : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitCrate" + .into(), target_prefab_hash : 429365598i32, tier : + MachineTier::TierOne, time : 10f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitCrateMkII" + .into(), target_prefab_hash : - 1585956426i32, tier : + MachineTier::TierTwo, time : 10f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Gold".into(), 5f64), ("Iron" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemSpaceHelmet".into(), target_prefab_hash : 714830451i32, tier : + MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemEvaSuit".into(), target_prefab_hash : 1677018918i32, tier : + MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemEggCarton".into(), target_prefab_hash : - 524289310i32, tier : + MachineTier::TierOne, time : 10f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Silicon".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemCoffeeMug" + .into(), target_prefab_hash : 1800622698i32, tier : + MachineTier::TierOne, time : 1f64, energy : 70f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitFlagODA" + .into(), target_prefab_hash : 1701764190i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 8f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitRespawnPointWallMounted".into(), target_prefab_hash : + 1574688481i32, tier : MachineTier::TierOne, time : 20f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 1f64), ("Iron".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitAccessBridge".into(), + target_prefab_hash : 513258369i32, tier : MachineTier::TierOne, time + : 30f64, energy : 15000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Solder".into(), 2f64), + ("Steel".into(), 10f64)] .into_iter().collect() } + ] + .into_iter() + .collect(), + }), + memory: MemoryInfo { + instructions: Some( + vec![ + ("DeviceSetLock".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : + InstructionPartType::Bool8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(48u32) }] .into_iter().collect() }), + ("EjectAllReagents".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }), + ("EjectReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("ExecuteRecipe".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("JumpIfNextInvalid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("JumpToAddress".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("MissingRecipeReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, + Some(62u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("StackPointer".into(), Instruction { description : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("WaitUntilNextValid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ); + map.insert( + -1672404896i32, + StructureLogicDeviceConsumerMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureAutomatedOven".into(), + prefab_hash: -1672404896i32, + desc: "".into(), + name: "Automated Oven".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RecipeHash, + MemoryAccess::ReadWrite), (LogicType::CompletionRatio, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemCorn".into(), "ItemEgg".into(), "ItemFertilizedEgg".into(), + "ItemFlour".into(), "ItemMilk".into(), "ItemMushroom".into(), + "ItemPotato".into(), "ItemPumpkin".into(), "ItemRice".into(), + "ItemSoybean".into(), "ItemSoyOil".into(), "ItemTomato".into(), + "ItemSugarCane".into(), "ItemCocoaTree".into(), "ItemCocoaPowder" + .into(), "ItemSugar".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::TierOne, + recipes: vec![ + Recipe { target_prefab : "ItemMuffin".into(), target_prefab_hash : - + 1864982322i32, tier : MachineTier::TierOne, time : 5f64, energy : + 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : vec![("Egg" + .into(), 1f64), ("Flour".into(), 50f64), ("Milk".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemCerealBar" + .into(), target_prefab_hash : 791746840i32, tier : + MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Flour".into(), 50f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemChocolateCerealBar".into(), target_prefab_hash : 860793245i32, + tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Cocoa".into(), 1f64), ("Flour" + .into(), 50f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPotatoBaked".into(), target_prefab_hash : - 2111886401i32, tier + : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Potato".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemBreadLoaf" + .into(), target_prefab_hash : 893514943i32, tier : + MachineTier::TierOne, time : 10f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Flour".into(), 200f64), ("Oil" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemFries".into(), target_prefab_hash : 1371786091i32, tier : + MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Oil".into(), 5f64), ("Potato" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPumpkinPie".into(), target_prefab_hash : 62768076i32, tier : + MachineTier::TierOne, time : 10f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 4i64, reagents : vec![("Egg".into(), 1f64), ("Flour" + .into(), 100f64), ("Milk".into(), 10f64), ("Pumpkin".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemCookedTomato" + .into(), target_prefab_hash : - 709086714i32, tier : + MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Tomato".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemCookedMushroom".into(), target_prefab_hash : - 1076892658i32, + tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Mushroom".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemCookedCorn" + .into(), target_prefab_hash : 1344773148i32, tier : + MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Corn".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemCookedRice" + .into(), target_prefab_hash : 2013539020i32, tier : + MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Rice".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemCookedPumpkin".into(), target_prefab_hash : 1849281546i32, tier + : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Pumpkin".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemCookedPowderedEggs".into(), target_prefab_hash : - + 1712264413i32, tier : MachineTier::TierOne, time : 5f64, energy : + 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Egg" + .into(), 4f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemCookedCondensedMilk".into(), target_prefab_hash : 1715917521i32, + tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Milk".into(), 100f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemCookedSoybean".into(), target_prefab_hash : 1353449022i32, tier + : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Soy".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemChocolateBar" + .into(), target_prefab_hash : 234601764i32, tier : + MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Cocoa".into(), 2f64), ("Sugar" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPlainCake".into(), target_prefab_hash : - 1108244510i32, tier : + MachineTier::TierOne, time : 30f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 4i64, reagents : vec![("Egg".into(), 1f64), ("Flour" + .into(), 50f64), ("Milk".into(), 5f64), ("Sugar".into(), 50f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemChocolateCake".into(), target_prefab_hash : - 261575861i32, tier + : MachineTier::TierOne, time : 30f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 5i64, reagents : vec![("Cocoa".into(), 2f64), ("Egg" + .into(), 1f64), ("Flour".into(), 50f64), ("Milk".into(), 5f64), + ("Sugar".into(), 50f64)] .into_iter().collect() } + ] + .into_iter() + .collect(), + }), + memory: MemoryInfo { + instructions: Some( + vec![ + ("DeviceSetLock".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : + InstructionPartType::Bool8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(48u32) }] .into_iter().collect() }), + ("EjectAllReagents".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }), + ("EjectReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("ExecuteRecipe".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("JumpIfNextInvalid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("JumpToAddress".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("MissingRecipeReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, + Some(62u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("StackPointer".into(), Instruction { description : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("WaitUntilNextValid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ); + map.insert( + 2099900163i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBackLiquidPressureRegulator".into(), + prefab_hash: 2099900163i32, + desc: "Regulates the volume ratio of liquid in the input Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty." + .into(), + name: "Liquid Back Volume Regulator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1149857558i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBackPressureRegulator".into(), + prefab_hash: -1149857558i32, + desc: "Unlike the Pressure Regulator, which closes when the input exceeds a given pressure, the back pressure regulator opens when input pressure reaches a given value." + .into(), + name: "Back Pressure Regulator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1613497288i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBasketHoop".into(), + prefab_hash: -1613497288i32, + desc: "".into(), + name: "Basket Hoop".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -400115994i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBattery".into(), + prefab_hash: -400115994i32, + desc: "Providing large-scale, reliable power storage, the Sinotai \'Dianzi\' station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: \'Dianzi cooks, but it also frys.\' \nPOWER OUTPUT\nAble to store up to 3600000W of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large)." + .into(), + name: "Station Battery".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Charge, + MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PowerPotential, + MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1945930022i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBatteryCharger".into(), + prefab_hash: 1945930022i32, + desc: "The 5-slot Xigo battery charger fits the Battery Cell (Small), Battery Cell (Large) and Battery Cell (Nuclear), providing up to 500W to any connected cell. Note: the older design means this device has minor power draw (10W) even when not charging." + .into(), + name: "Battery Cell Charger".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Battery".into(), class : Class::Battery, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Battery".into(), class : Class::Battery, index + : 2u32 }), (3u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 3u32 }), (4u32, SlotInfo::Direct { name : + "Battery".into(), class : Class::Battery, index : 4u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -761772413i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBatteryChargerSmall".into(), + prefab_hash: -761772413i32, + desc: "".into(), + name: "Battery Charger Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Battery".into(), class : Class::Battery, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1388288459i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBatteryLarge".into(), + prefab_hash: -1388288459i32, + desc: "Providing even better large-scale, reliable power storage than the {THING;StructureBattery}, the Sinotai \'Da Dianchi\' large station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: \'Dianzi cooks, but it also frys.\' \nPOWER OUTPUT\nAble to store up to 9000001 watts of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large). " + .into(), + name: "Station Battery (Large)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Charge, + MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PowerPotential, + MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1125305264i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBatteryMedium".into(), + prefab_hash: -1125305264i32, + desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" + .into(), + name: "Battery (Medium)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::Read), (LogicType::Charge, MemoryAccess::Read), + (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), + (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2123455080i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBatterySmall".into(), + prefab_hash: -2123455080i32, + desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" + .into(), + name: "Auxiliary Rocket Battery ".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::Read), (LogicType::Charge, MemoryAccess::Read), + (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), + (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Empty".into()), (1, "Critical".into()), (2, "VeryLow" + .into()), (3, "Low".into()), (4, "Medium".into()), (5, "High" + .into()), (6, "Full".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -188177083i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBeacon".into(), + prefab_hash: -188177083i32, + desc: "".into(), + name: "Beacon".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Color, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: true, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2042448192i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBench".into(), + prefab_hash: -2042448192i32, + desc: "When it\'s time to sit, nothing supports you like a bench. This bench is powered, so you can use appliances like the Microwave." + .into(), + name: "Powered Bench".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Appliance 1".into(), class : + Class::Appliance, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Appliance 2".into(), class : Class::Appliance, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 406745009i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBench1".into(), + prefab_hash: 406745009i32, + desc: "".into(), + name: "Bench (Counter Style)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Appliance 1".into(), class : + Class::Appliance, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Appliance 2".into(), class : Class::Appliance, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2127086069i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBench2".into(), + prefab_hash: -2127086069i32, + desc: "".into(), + name: "Bench (High Tech Style)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Appliance 1".into(), class : + Class::Appliance, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Appliance 2".into(), class : Class::Appliance, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -164622691i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBench3".into(), + prefab_hash: -164622691i32, + desc: "".into(), + name: "Bench (Frame Style)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Appliance 1".into(), class : + Class::Appliance, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Appliance 2".into(), class : Class::Appliance, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1750375230i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBench4".into(), + prefab_hash: 1750375230i32, + desc: "".into(), + name: "Bench (Workbench Style)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::On, MemoryAccess::ReadWrite), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Appliance 1".into(), class : + Class::Appliance, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Appliance 2".into(), class : Class::Appliance, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 337416191i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBlastDoor".into(), + prefab_hash: 337416191i32, + desc: "Airtight and almost undamageable, the original \'Millmar\' series of blast door was designed by off-world mining giant Recurso to protect asteroid-mining facilities from nuclear-incident-level explosive decompression.\nShort of a pocket-sized singularity blinking into the local space-time frame, there is effectively no limit to the pressure these blast doors can contain - ideal for constructing airlocks in pressure-sensitive environments." + .into(), + name: "Blast Door".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 697908419i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBlockBed".into(), + prefab_hash: 697908419i32, + desc: "".into(), + name: "Block Bed".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bed".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 378084505i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureBlocker".into(), + prefab_hash: 378084505i32, + desc: "".into(), + name: "Blocker".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1036015121i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableAnalysizer".into(), + prefab_hash: 1036015121i32, + desc: "".into(), + name: "Cable Analyzer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PowerPotential, MemoryAccess::Read), + (LogicType::PowerActual, MemoryAccess::Read), + (LogicType::PowerRequired, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -889269388i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCorner".into(), + prefab_hash: -889269388i32, + desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." + .into(), + name: "Cable (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 980469101i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCorner3".into(), + prefab_hash: 980469101i32, + desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." + .into(), + name: "Cable (3-Way Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 318437449i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCorner3Burnt".into(), + prefab_hash: 318437449i32, + desc: "".into(), + name: "Burnt Cable (3-Way Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2393826i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCorner3HBurnt".into(), + prefab_hash: 2393826i32, + desc: "".into(), + name: "".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1542172466i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCorner4".into(), + prefab_hash: -1542172466i32, + desc: "".into(), + name: "Cable (4-Way Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 268421361i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCorner4Burnt".into(), + prefab_hash: 268421361i32, + desc: "".into(), + name: "Burnt Cable (4-Way Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -981223316i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCorner4HBurnt".into(), + prefab_hash: -981223316i32, + desc: "".into(), + name: "Burnt Heavy Cable (4-Way Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -177220914i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCornerBurnt".into(), + prefab_hash: -177220914i32, + desc: "".into(), + name: "Burnt Cable (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -39359015i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCornerH".into(), + prefab_hash: -39359015i32, + desc: "".into(), + name: "Heavy Cable (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1843379322i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCornerH3".into(), + prefab_hash: -1843379322i32, + desc: "".into(), + name: "Heavy Cable (3-Way Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 205837861i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCornerH4".into(), + prefab_hash: 205837861i32, + desc: "".into(), + name: "Heavy Cable (4-Way Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1931412811i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableCornerHBurnt".into(), + prefab_hash: 1931412811i32, + desc: "".into(), + name: "Burnt Cable (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 281380789i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableFuse100k".into(), + prefab_hash: 281380789i32, + desc: "".into(), + name: "Fuse (100kW)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1103727120i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableFuse1k".into(), + prefab_hash: -1103727120i32, + desc: "".into(), + name: "Fuse (1kW)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -349716617i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableFuse50k".into(), + prefab_hash: -349716617i32, + desc: "".into(), + name: "Fuse (50kW)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -631590668i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableFuse5k".into(), + prefab_hash: -631590668i32, + desc: "".into(), + name: "Fuse (5kW)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -175342021i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction".into(), + prefab_hash: -175342021i32, + desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." + .into(), + name: "Cable (Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1112047202i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction4".into(), + prefab_hash: 1112047202i32, + desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." + .into(), + name: "Cable (4-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1756896811i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction4Burnt".into(), + prefab_hash: -1756896811i32, + desc: "".into(), + name: "Burnt Cable (4-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -115809132i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction4HBurnt".into(), + prefab_hash: -115809132i32, + desc: "".into(), + name: "Burnt Cable (4-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 894390004i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction5".into(), + prefab_hash: 894390004i32, + desc: "".into(), + name: "Cable (5-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1545286256i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction5Burnt".into(), + prefab_hash: 1545286256i32, + desc: "".into(), + name: "Burnt Cable (5-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1404690610i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction6".into(), + prefab_hash: -1404690610i32, + desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer duty - so much so, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." + .into(), + name: "Cable (6-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -628145954i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction6Burnt".into(), + prefab_hash: -628145954i32, + desc: "".into(), + name: "Burnt Cable (6-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1854404029i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunction6HBurnt".into(), + prefab_hash: 1854404029i32, + desc: "".into(), + name: "Burnt Cable (6-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1620686196i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunctionBurnt".into(), + prefab_hash: -1620686196i32, + desc: "".into(), + name: "Burnt Cable (Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 469451637i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunctionH".into(), + prefab_hash: 469451637i32, + desc: "".into(), + name: "Heavy Cable (3-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -742234680i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunctionH4".into(), + prefab_hash: -742234680i32, + desc: "".into(), + name: "Heavy Cable (4-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1530571426i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunctionH5".into(), + prefab_hash: -1530571426i32, + desc: "".into(), + name: "Heavy Cable (5-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1701593300i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunctionH5Burnt".into(), + prefab_hash: 1701593300i32, + desc: "".into(), + name: "Burnt Heavy Cable (5-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1036780772i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunctionH6".into(), + prefab_hash: 1036780772i32, + desc: "".into(), + name: "Heavy Cable (6-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -341365649i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableJunctionHBurnt".into(), + prefab_hash: -341365649i32, + desc: "".into(), + name: "Burnt Cable (Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 605357050i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableStraight".into(), + prefab_hash: 605357050i32, + desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official \'tool\'.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." + .into(), + name: "Cable (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1196981113i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableStraightBurnt".into(), + prefab_hash: -1196981113i32, + desc: "".into(), + name: "Burnt Cable (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -146200530i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableStraightH".into(), + prefab_hash: -146200530i32, + desc: "".into(), + name: "Heavy Cable (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2085762089i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCableStraightHBurnt".into(), + prefab_hash: 2085762089i32, + desc: "".into(), + name: "Burnt Cable (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -342072665i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCamera".into(), + prefab_hash: -342072665i32, + desc: "Nothing says \'I care\' like a security camera that\'s been linked a Motion Sensor and a Console fitted with a Camera Display.\nBe there, even when you\'re not." + .into(), + name: "Camera".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1385712131i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCapsuleTankGas".into(), + prefab_hash: -1385712131i32, + desc: "".into(), + name: "Gas Capsule Tank Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1415396263i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCapsuleTankLiquid".into(), + prefab_hash: 1415396263i32, + desc: "".into(), + name: "Liquid Capsule Tank Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1151864003i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCargoStorageMedium".into(), + prefab_hash: 1151864003i32, + desc: "".into(), + name: "Cargo Storage (Medium)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()), (3, vec![] + .into_iter().collect()), (4, vec![] .into_iter().collect()), (5, + vec![] .into_iter().collect()), (6, vec![] .into_iter().collect()), + (7, vec![] .into_iter().collect()), (8, vec![] .into_iter() + .collect()), (9, vec![] .into_iter().collect()), (10, vec![] + .into_iter().collect()), (11, vec![] .into_iter().collect()), (12, + vec![] .into_iter().collect()), (13, vec![] .into_iter().collect()), + (14, vec![] .into_iter().collect()), (15, vec![] .into_iter() + .collect()), (16, vec![] .into_iter().collect()), (17, vec![] + .into_iter().collect()), (18, vec![] .into_iter().collect()), (19, + vec![] .into_iter().collect()), (20, vec![] .into_iter().collect()), + (21, vec![] .into_iter().collect()), (22, vec![] .into_iter() + .collect()), (23, vec![] .into_iter().collect()), (24, vec![] + .into_iter().collect()), (25, vec![] .into_iter().collect()), (26, + vec![] .into_iter().collect()), (27, vec![] .into_iter().collect()), + (28, vec![] .into_iter().collect()), (29, vec![] .into_iter() + .collect()), (30, vec![] .into_iter().collect()), (31, vec![] + .into_iter().collect()), (32, vec![] .into_iter().collect()), (33, + vec![] .into_iter().collect()), (34, vec![] .into_iter().collect()), + (35, vec![] .into_iter().collect()), (36, vec![] .into_iter() + .collect()), (37, vec![] .into_iter().collect()), (38, vec![] + .into_iter().collect()), (39, vec![] .into_iter().collect()), (40, + vec![] .into_iter().collect()), (41, vec![] .into_iter().collect()), + (42, vec![] .into_iter().collect()), (43, vec![] .into_iter() + .collect()), (44, vec![] .into_iter().collect()), (45, vec![] + .into_iter().collect()), (46, vec![] .into_iter().collect()), (47, + vec![] .into_iter().collect()), (48, vec![] .into_iter().collect()), + (49, vec![] .into_iter().collect()), (50, vec![] .into_iter() + .collect()), (51, vec![] .into_iter().collect()), (52, vec![] + .into_iter().collect()), (53, vec![] .into_iter().collect()), (54, + vec![] .into_iter().collect()), (55, vec![] .into_iter().collect()), + (56, vec![] .into_iter().collect()), (57, vec![] .into_iter() + .collect()), (58, vec![] .into_iter().collect()), (59, vec![] + .into_iter().collect()), (60, vec![] .into_iter().collect()), (61, + vec![] .into_iter().collect()), (62, vec![] .into_iter().collect()), + (63, vec![] .into_iter().collect()), (64, vec![] .into_iter() + .collect()), (65, vec![] .into_iter().collect()), (66, vec![] + .into_iter().collect()), (67, vec![] .into_iter().collect()), (68, + vec![] .into_iter().collect()), (69, vec![] .into_iter().collect()), + (70, vec![] .into_iter().collect()), (71, vec![] .into_iter() + .collect()), (72, vec![] .into_iter().collect()), (73, vec![] + .into_iter().collect()), (74, vec![] .into_iter().collect()), (75, + vec![] .into_iter().collect()), (76, vec![] .into_iter().collect()), + (77, vec![] .into_iter().collect()), (78, vec![] .into_iter() + .collect()), (79, vec![] .into_iter().collect()), (80, vec![] + .into_iter().collect()), (81, vec![] .into_iter().collect()), (82, + vec![] .into_iter().collect()), (83, vec![] .into_iter().collect()), + (84, vec![] .into_iter().collect()), (85, vec![] .into_iter() + .collect()), (86, vec![] .into_iter().collect()), (87, vec![] + .into_iter().collect()), (88, vec![] .into_iter().collect()), (89, + vec![] .into_iter().collect()), (90, vec![] .into_iter().collect()), + (91, vec![] .into_iter().collect()), (92, vec![] .into_iter() + .collect()), (93, vec![] .into_iter().collect()), (94, vec![] + .into_iter().collect()), (95, vec![] .into_iter().collect()), (96, + vec![] .into_iter().collect()), (97, vec![] .into_iter().collect()), + (98, vec![] .into_iter().collect()), (99, vec![] .into_iter() + .collect()), (100, vec![] .into_iter().collect()), (101, vec![] + .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 3u32 }), (4u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { name : "Storage" + .into(), class : Class::None, index : 5u32 }), (6u32, SlotInfo::Direct { + name : "Storage".into(), class : Class::None, index : 6u32 }), (7u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 7u32 }), (8u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "Storage" + .into(), class : Class::None, index : 9u32 }), (10u32, SlotInfo::Direct { + name : "Storage".into(), class : Class::None, index : 10u32 }), (11u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 11u32 }), (12u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 12u32 }), (13u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 13u32 }), (14u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 14u32 }), (15u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 15u32 }), (16u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 16u32 }), (17u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 17u32 }), (18u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 18u32 }), (19u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 19u32 }), (20u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 20u32 }), (21u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 21u32 }), (22u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 22u32 }), (23u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 23u32 }), (24u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 24u32 }), (25u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 25u32 }), (26u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 26u32 }), (27u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 27u32 }), (28u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 28u32 }), (29u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 29u32 }), (30u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 30u32 }), (31u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 31u32 }), (32u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 32u32 }), (33u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 33u32 }), (34u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 34u32 }), (35u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 35u32 }), (36u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 36u32 }), (37u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 37u32 }), (38u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 38u32 }), (39u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 39u32 }), (40u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 40u32 }), (41u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 41u32 }), (42u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 42u32 }), (43u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 43u32 }), (44u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 44u32 }), (45u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 45u32 }), (46u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 46u32 }), (47u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 47u32 }), (48u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 48u32 }), (49u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 49u32 }), (50u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 50u32 }), (51u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 51u32 }), (52u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 52u32 }), (53u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 53u32 }), (54u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 54u32 }), (55u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 55u32 }), (56u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 56u32 }), (57u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 57u32 }), (58u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 58u32 }), (59u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 59u32 }), (60u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 60u32 }), (61u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 61u32 }), (62u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 62u32 }), (63u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 63u32 }), (64u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 64u32 }), (65u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 65u32 }), (66u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 66u32 }), (67u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 67u32 }), (68u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 68u32 }), (69u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 69u32 }), (70u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 70u32 }), (71u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 71u32 }), (72u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 72u32 }), (73u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 73u32 }), (74u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 74u32 }), (75u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 75u32 }), (76u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 76u32 }), (77u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 77u32 }), (78u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 78u32 }), (79u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 79u32 }), (80u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 80u32 }), (81u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 81u32 }), (82u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 82u32 }), (83u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 83u32 }), (84u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 84u32 }), (85u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 85u32 }), (86u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 86u32 }), (87u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 87u32 }), (88u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 88u32 }), (89u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 89u32 }), (90u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 90u32 }), (91u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 91u32 }), (92u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 92u32 }), (93u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 93u32 }), (94u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 94u32 }), (95u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 95u32 }), (96u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 96u32 }), (97u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 97u32 }), (98u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 98u32 }), (99u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 99u32 }), (100u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 100u32 }), (101u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 101u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1493672123i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCargoStorageSmall".into(), + prefab_hash: -1493672123i32, + desc: "".into(), + name: "Cargo Storage (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (6, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (7, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (8, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (10, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (11, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (12, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (13, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (14, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (15, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (16, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (17, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (18, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (19, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (20, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (21, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (22, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (23, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (24, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (25, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (26, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (27, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (28, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (29, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (30, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (31, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (33, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (34, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (35, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (36, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (37, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (38, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (39, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (40, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (41, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (42, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (43, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (44, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (45, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (46, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (47, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (48, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (49, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (50, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (51, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 3u32 }), (4u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { name : "Storage" + .into(), class : Class::None, index : 5u32 }), (6u32, SlotInfo::Direct { + name : "Storage".into(), class : Class::None, index : 6u32 }), (7u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 7u32 }), (8u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "Storage" + .into(), class : Class::None, index : 9u32 }), (10u32, SlotInfo::Direct { + name : "Storage".into(), class : Class::None, index : 10u32 }), (11u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 11u32 }), (12u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 12u32 }), (13u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 13u32 }), (14u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 14u32 }), (15u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 15u32 }), (16u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 16u32 }), (17u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 17u32 }), (18u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 18u32 }), (19u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 19u32 }), (20u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 20u32 }), (21u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 21u32 }), (22u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 22u32 }), (23u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 23u32 }), (24u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 24u32 }), (25u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 25u32 }), (26u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 26u32 }), (27u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 27u32 }), (28u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 28u32 }), (29u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 29u32 }), (30u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 30u32 }), (31u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 31u32 }), (32u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 32u32 }), (33u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 33u32 }), (34u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 34u32 }), (35u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 35u32 }), (36u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 36u32 }), (37u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 37u32 }), (38u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 38u32 }), (39u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 39u32 }), (40u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 40u32 }), (41u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 41u32 }), (42u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 42u32 }), (43u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 43u32 }), (44u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 44u32 }), (45u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 45u32 }), (46u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 46u32 }), (47u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 47u32 }), (48u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 48u32 }), (49u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 49u32 }), (50u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 50u32 }), (51u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 51u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 690945935i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCentrifuge".into(), + prefab_hash: 690945935i32, + desc: "If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. \n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. \n Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. \n If openned while powered on, the centrifuge will enter an errored state and reduce its rpm to 0 and then export any items." + .into(), + name: "Centrifuge".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + } + .into(), + ); + map.insert( + 1167659360i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChair".into(), + prefab_hash: 1167659360i32, + desc: "One of the universe\'s many chairs, optimized for bipeds with somewhere between zero and two upper limbs." + .into(), + name: "Chair".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1944858936i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairBacklessDouble".into(), + prefab_hash: 1944858936i32, + desc: "".into(), + name: "Chair (Backless Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1672275150i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairBacklessSingle".into(), + prefab_hash: 1672275150i32, + desc: "".into(), + name: "Chair (Backless Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -367720198i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairBoothCornerLeft".into(), + prefab_hash: -367720198i32, + desc: "".into(), + name: "Chair (Booth Corner Left)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1640720378i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairBoothMiddle".into(), + prefab_hash: 1640720378i32, + desc: "".into(), + name: "Chair (Booth Middle)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1152812099i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairRectangleDouble".into(), + prefab_hash: -1152812099i32, + desc: "".into(), + name: "Chair (Rectangle Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1425428917i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairRectangleSingle".into(), + prefab_hash: -1425428917i32, + desc: "".into(), + name: "Chair (Rectangle Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1245724402i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairThickDouble".into(), + prefab_hash: -1245724402i32, + desc: "".into(), + name: "Chair (Thick Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1510009608i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChairThickSingle".into(), + prefab_hash: -1510009608i32, + desc: "".into(), + name: "Chair (Thick Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -850484480i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteBin".into(), + prefab_hash: -850484480i32, + desc: "The Stationeer\'s goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nLike most Recurso-designed systems, chute bins are simple and robust powered items, allowing items to be manually passed into chute networks by pulling a lever. They can also be programmed with logic to operate automatically, although full automation requires the use items such as a SDB Hopper." + .into(), + name: "Chute Import Bin".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Input".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1360330136i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteCorner".into(), + prefab_hash: 1360330136i32, + desc: "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute corners are fundamental components of chute networks, which allow the transport of items between machines with import/export slots, such as the Furnace and other automatable structures." + .into(), + name: "Chute (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -810874728i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteDigitalFlipFlopSplitterLeft".into(), + prefab_hash: -810874728i32, + desc: "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output." + .into(), + name: "Chute Digital Flip Flop Splitter Left".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Quantity, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::SettingOutput, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Output2 }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 163728359i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteDigitalFlipFlopSplitterRight".into(), + prefab_hash: 163728359i32, + desc: "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output." + .into(), + name: "Chute Digital Flip Flop Splitter Right".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Quantity, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::SettingOutput, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Output2 }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 648608238i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteDigitalValveLeft".into(), + prefab_hash: 648608238i32, + desc: "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial." + .into(), + name: "Chute Digital Valve Left".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Quantity, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1337091041i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteDigitalValveRight".into(), + prefab_hash: -1337091041i32, + desc: "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial." + .into(), + name: "Chute Digital Valve Right".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Quantity, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1957571043i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteExportBin".into(), + prefab_hash: 1957571043i32, + desc: "".into(), + name: "Chute Export Bin".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Input".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1446854725i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteFlipFlopSplitter".into(), + prefab_hash: -1446854725i32, + desc: "A chute that toggles between two outputs".into(), + name: "Chute Flip Flop Splitter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1469588766i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteInlet".into(), + prefab_hash: -1469588766i32, + desc: "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute inlet is an aperture by which items can be introduced to import/export networks. Note that its origins in zero-gravity mining means chute inlets are unpowered and permanently open, rather than interactable, allowing objects to be thrown in. They can be connected to logic systems to monitor throughput." + .into(), + name: "Chute Inlet".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::ClearMemory, + MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Data, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -611232514i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteJunction".into(), + prefab_hash: -611232514i32, + desc: "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute junctions are fundamental components of chute networks, allowing merging or splitting of these networks. When combined with a programmed Sorter, items can be sent down different paths to various machines with import/export slots." + .into(), + name: "Chute (Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1022714809i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteOutlet".into(), + prefab_hash: -1022714809i32, + desc: "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute outlet is an aperture for exiting items from import/export networks. Note that the outlet\'s origins in zero-gravity mining means they are permanently open, rather than interactable, but can be connected to logic systems to monitor throughput." + .into(), + name: "Chute Outlet".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::ClearMemory, + MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Export".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 225377225i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteOverflow".into(), + prefab_hash: 225377225i32, + desc: "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied." + .into(), + name: "Chute Overflow".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 168307007i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteStraight".into(), + prefab_hash: 168307007i32, + desc: "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChutes are fundamental components of chute networks, which allow the transport of items between any machine or device with an import/export slot." + .into(), + name: "Chute (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1918892177i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteUmbilicalFemale".into(), + prefab_hash: -1918892177i32, + desc: "".into(), + name: "Umbilical Socket (Chute)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -659093969i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteUmbilicalFemaleSide".into(), + prefab_hash: -659093969i32, + desc: "".into(), + name: "Umbilical Socket Angle (Chute)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -958884053i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteUmbilicalMale".into(), + prefab_hash: -958884053i32, + desc: "0.Left\n1.Center\n2.Right".into(), + name: "Umbilical (Chute)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::Read), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Left".into()), (1, "Center".into()), (2, "Right".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 434875271i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteValve".into(), + prefab_hash: 434875271i32, + desc: "The Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute." + .into(), + name: "Chute Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -607241919i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureChuteWindow".into(), + prefab_hash: -607241919i32, + desc: "Chute\'s with windows let you see what\'s passing through your import/export network. But be warned, they are not insulated as other chutes are. Ices will melt." + .into(), + name: "Chute (Window)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Transport Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -128473777i32, + StructureCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCircuitHousing".into(), + prefab_hash: -128473777i32, + desc: "".into(), + name: "IC Housing".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::LineNumber, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::LineNumber, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: Some(6u32), + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1238905683i32, + StructureCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCombustionCentrifuge".into(), + prefab_hash: 1238905683i32, + desc: "The Combustion Centrifuge is a gas powered version of the Centrifuge. If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore.\n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. A combustible fuel mix should be supplied to the gas input, and waste gasses should be vented from the output. \n The machine\'s RPMs must be controlled via the throttle and combustion limiter levers. If the Combustion Centrifuge gains, or loses, RPMs too fast it will experience stress, and eventually grind to a halt. Higher RPMs directly result in faster processing speeds. \n The throttle lever controls the amount of fuel being pulled into the machine, increasing the temperature inside the engine, and leading to an increase in RPM. The limiter lever influences the speed of the combustion, and how much uncombusted gas is in the exhaust. \n Ejecting ore from the Combustion Centrifuge while it is at high RPMs will result in additional stress build up. If turned off while not stressed, the machine will automatically start to brake, and reduce RPMs in a controlled manner.\n\t " + .into(), + name: "Combustion Centrifuge".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.001f32, + radiation_factor: 0.001f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Reagents, MemoryAccess::Read), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::PressureInput, MemoryAccess::Read), + (LogicType::TemperatureInput, MemoryAccess::Read), + (LogicType::RatioOxygenInput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioNitrogenInput, MemoryAccess::Read), + (LogicType::RatioPollutantInput, MemoryAccess::Read), + (LogicType::RatioVolatilesInput, MemoryAccess::Read), + (LogicType::RatioWaterInput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), + (LogicType::TotalMolesInput, MemoryAccess::Read), + (LogicType::PressureOutput, MemoryAccess::Read), + (LogicType::TemperatureOutput, MemoryAccess::Read), + (LogicType::RatioOxygenOutput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioPollutantOutput, MemoryAccess::Read), + (LogicType::RatioVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioWaterOutput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), + (LogicType::TotalMolesOutput, MemoryAccess::Read), + (LogicType::CombustionInput, MemoryAccess::Read), + (LogicType::CombustionOutput, MemoryAccess::Read), + (LogicType::CombustionLimiter, MemoryAccess::ReadWrite), + (LogicType::Throttle, MemoryAccess::ReadWrite), (LogicType::Rpm, + MemoryAccess::Read), (LogicType::Stress, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioSteamInput, MemoryAccess::Read), + (LogicType::RatioSteamOutput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Programmable Chip".into(), class : Class::ProgrammableChip, index : 2u32 + }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: Some(2u32), + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + } + .into(), + ); + map.insert( + -1513030150i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngled".into(), + prefab_hash: -1513030150i32, + desc: "".into(), + name: "Composite Cladding (Angled)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -69685069i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledCorner".into(), + prefab_hash: -69685069i32, + desc: "".into(), + name: "Composite Cladding (Angled Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1841871763i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledCornerInner".into(), + prefab_hash: -1841871763i32, + desc: "".into(), + name: "Composite Cladding (Angled Corner Inner)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1417912632i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledCornerInnerLong".into(), + prefab_hash: -1417912632i32, + desc: "".into(), + name: "Composite Cladding (Angled Corner Inner Long)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 947705066i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledCornerInnerLongL".into(), + prefab_hash: 947705066i32, + desc: "".into(), + name: "Composite Cladding (Angled Corner Inner Long L)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1032590967i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledCornerInnerLongR".into(), + prefab_hash: -1032590967i32, + desc: "".into(), + name: "Composite Cladding (Angled Corner Inner Long R)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 850558385i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledCornerLong".into(), + prefab_hash: 850558385i32, + desc: "".into(), + name: "Composite Cladding (Long Angled Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -348918222i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledCornerLongR".into(), + prefab_hash: -348918222i32, + desc: "".into(), + name: "Composite Cladding (Long Angled Mirrored Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -387546514i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingAngledLong".into(), + prefab_hash: -387546514i32, + desc: "".into(), + name: "Composite Cladding (Long Angled)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 212919006i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingCylindrical".into(), + prefab_hash: 212919006i32, + desc: "".into(), + name: "Composite Cladding (Cylindrical)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1077151132i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingCylindricalPanel".into(), + prefab_hash: 1077151132i32, + desc: "".into(), + name: "Composite Cladding (Cylindrical Panel)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1997436771i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingPanel".into(), + prefab_hash: 1997436771i32, + desc: "".into(), + name: "Composite Cladding (Panel)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -259357734i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingRounded".into(), + prefab_hash: -259357734i32, + desc: "".into(), + name: "Composite Cladding (Rounded)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1951525046i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingRoundedCorner".into(), + prefab_hash: 1951525046i32, + desc: "".into(), + name: "Composite Cladding (Rounded Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 110184667i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingRoundedCornerInner".into(), + prefab_hash: 110184667i32, + desc: "".into(), + name: "Composite Cladding (Rounded Corner Inner)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 139107321i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingSpherical".into(), + prefab_hash: 139107321i32, + desc: "".into(), + name: "Composite Cladding (Spherical)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 534213209i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingSphericalCap".into(), + prefab_hash: 534213209i32, + desc: "".into(), + name: "Composite Cladding (Spherical Cap)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1751355139i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeCladdingSphericalCorner".into(), + prefab_hash: 1751355139i32, + desc: "".into(), + name: "Composite Cladding (Spherical Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -793837322i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeDoor".into(), + prefab_hash: -793837322i32, + desc: "Recurso\'s composite doors are rated to 300kPa, which is more than sufficient for most purposes they were designed for. However, steep pressure differentials are not your friend." + .into(), + name: "Composite Door".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 324868581i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeFloorGrating".into(), + prefab_hash: 324868581i32, + desc: "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings." + .into(), + name: "Composite Floor Grating".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -895027741i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeFloorGrating2".into(), + prefab_hash: -895027741i32, + desc: "".into(), + name: "Composite Floor Grating (Type 2)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1113471627i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeFloorGrating3".into(), + prefab_hash: -1113471627i32, + desc: "".into(), + name: "Composite Floor Grating (Type 3)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 600133846i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeFloorGrating4".into(), + prefab_hash: 600133846i32, + desc: "".into(), + name: "Composite Floor Grating (Type 4)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2109695912i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeFloorGratingOpen".into(), + prefab_hash: 2109695912i32, + desc: "".into(), + name: "Composite Floor Grating Open".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 882307910i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeFloorGratingOpenRotated".into(), + prefab_hash: 882307910i32, + desc: "".into(), + name: "Composite Floor Grating Open Rotated".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1237302061i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWall".into(), + prefab_hash: 1237302061i32, + desc: "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties." + .into(), + name: "Composite Wall (Type 1)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 718343384i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWall02".into(), + prefab_hash: 718343384i32, + desc: "".into(), + name: "Composite Wall (Type 2)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1574321230i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWall03".into(), + prefab_hash: 1574321230i32, + desc: "".into(), + name: "Composite Wall (Type 3)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1011701267i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWall04".into(), + prefab_hash: -1011701267i32, + desc: "".into(), + name: "Composite Wall (Type 4)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2060571986i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWindow".into(), + prefab_hash: -2060571986i32, + desc: "Air-tight and resistant to extreme temperatures, composite walls come in several charming, near identical varieties - reflecting their designer\'s focus on form over function." + .into(), + name: "Composite Window".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -688284639i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWindowIron".into(), + prefab_hash: -688284639i32, + desc: "".into(), + name: "Iron Window".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1580592998i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWindowShutter".into(), + prefab_hash: 1580592998i32, + desc: "".into(), + name: "Composite Window Shutter".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 791407452i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWindowShutterConnector".into(), + prefab_hash: 791407452i32, + desc: "".into(), + name: "Composite Window Shutter Connector".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2078371660i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCompositeWindowShutterController".into(), + prefab_hash: -2078371660i32, + desc: "".into(), + name: "Composite Window Shutter Controller".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -626563514i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureComputer".into(), + prefab_hash: -626563514i32, + desc: "This unit operates with a wide range of motherboards." + .into(), + name: "Computer (Modern)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Data Disk".into(), class : + Class::DataDisk, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Data Disk".into(), class : Class::DataDisk, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Motherboard".into(), class : + Class::Motherboard, index : 2u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -405593895i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureComputerUpright".into(), + prefab_hash: -405593895i32, + desc: "This unit operates with a wide range of motherboards." + .into(), + name: "Computer (Retro)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Data Disk".into(), class : + Class::DataDisk, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Data Disk".into(), class : Class::DataDisk, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Motherboard".into(), class : + Class::Motherboard, index : 2u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1420719315i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCondensationChamber".into(), + prefab_hash: 1420719315i32, + desc: "A device for safely condensing gasses into liquids. Liquids and Gasses will both exist safely inside the device. The Chamber will pressurise using its in-built pressure regulator to the target set by the setting wheel.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Condensation Chamber.\n Paired with Evaporation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner." + .into(), + name: "Condensation Chamber".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.001f32, + radiation_factor: 0.000050000002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input2 }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -965741795i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCondensationValve".into(), + prefab_hash: -965741795i32, + desc: "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction." + .into(), + name: "Condensation Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 235638270i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureConsole".into(), + prefab_hash: 235638270i32, + desc: "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed." + .into(), + name: "Console".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Circuit Board".into(), class : + Class::Circuitboard, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Data Disk".into(), class : Class::DataDisk, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -722284333i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureConsoleDual".into(), + prefab_hash: -722284333i32, + desc: "This Norsec-designed control box manages devices such as the Active Vent, Gas Sensor, Composite Door and others, depending on which circuitboard is inserted into the unit. It has separate data and power ports.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed." + .into(), + name: "Console Dual".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Circuit Board".into(), class : + Class::Circuitboard, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Data Disk".into(), class : Class::DataDisk, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -53151617i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureConsoleLED1x2".into(), + prefab_hash: -53151617i32, + desc: "0.Default\n1.Percent\n2.Power".into(), + name: "LED Display (Medium)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Color, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Default".into()), (1, "Percent".into()), (2, "Power".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: true, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1949054743i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureConsoleLED1x3".into(), + prefab_hash: -1949054743i32, + desc: "0.Default\n1.Percent\n2.Power".into(), + name: "LED Display (Large)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Color, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Default".into()), (1, "Percent".into()), (2, "Power".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: true, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -815193061i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureConsoleLED5".into(), + prefab_hash: -815193061i32, + desc: "0.Default\n1.Percent\n2.Power".into(), + name: "LED Display (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Color, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Default".into()), (1, "Percent".into()), (2, "Power".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: true, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 801677497i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureConsoleMonitor".into(), + prefab_hash: 801677497i32, + desc: "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor, Security Camera and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port, and a charming sloped interface.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed." + .into(), + name: "Console Monitor".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Circuit Board".into(), class : + Class::Circuitboard, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Data Disk".into(), class : Class::DataDisk, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1961153710i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureControlChair".into(), + prefab_hash: -1961153710i32, + desc: "Once, these chairs were the heart of space-going behemoths. Now, they\'re items of nostalgia built only by a handful of Stationeers with a sense of history. In other words, kitsch." + .into(), + name: "Control Chair".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::PositionX, MemoryAccess::Read), (LogicType::PositionY, + MemoryAccess::Read), (LogicType::PositionZ, MemoryAccess::Read), + (LogicType::VelocityMagnitude, MemoryAccess::Read), + (LogicType::VelocityRelativeX, MemoryAccess::Read), + (LogicType::VelocityRelativeY, MemoryAccess::Read), + (LogicType::VelocityRelativeZ, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Entity".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1968255729i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCornerLocker".into(), + prefab_hash: -1968255729i32, + desc: "".into(), + name: "Corner Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -733500083i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCrateMount".into(), + prefab_hash: -733500083i32, + desc: "".into(), + name: "Container Mount".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Container Slot".into(), class : + Class::Crate, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1938254586i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCryoTube".into(), + prefab_hash: 1938254586i32, + desc: "The exact operation of the Longsleep cryotube remains a commercial secret, with Norsec merely licensing the design. Able to regenerate organ damage when supplied with power and an atmosphere, the Longsleep is a minor miracle of modern medical technology." + .into(), + name: "CryoTube".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bed".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1443059329i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCryoTubeHorizontal".into(), + prefab_hash: 1443059329i32, + desc: "The horizontal variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C." + .into(), + name: "Cryo Tube Horizontal".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.005f32, + radiation_factor: 0.005f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1381321828i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureCryoTubeVertical".into(), + prefab_hash: -1381321828i32, + desc: "The vertical variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C." + .into(), + name: "Cryo Tube Vertical".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.005f32, + radiation_factor: 0.005f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1076425094i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDaylightSensor".into(), + prefab_hash: 1076425094i32, + desc: "Daylight sensors provide data on whether the current region of your base is in sunlight, and report the exact solar angle. Note that the orientation of the sensor alters the reported solar angle, while Logic systems can be used to offset it." + .into(), + name: "Daylight Sensor".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Horizontal, + MemoryAccess::Read), (LogicType::Vertical, MemoryAccess::Read), + (LogicType::SolarAngle, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::SolarIrradiance, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Default".into()), (1, "Horizontal".into()), (2, "Vertical" + .into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 265720906i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDeepMiner".into(), + prefab_hash: 265720906i32, + desc: "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s" + .into(), + name: "Deep Miner".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Export".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { + typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1280984102i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDigitalValve".into(), + prefab_hash: -1280984102i32, + desc: "The digital valve allows Stationeers to create logic-controlled valves and pipe networks." + .into(), + name: "Digital Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1944485013i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDiode".into(), + prefab_hash: 1944485013i32, + desc: "".into(), + name: "LED".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Color, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: true, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 576516101i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDiodeSlide".into(), + prefab_hash: 576516101i32, + desc: "".into(), + name: "Diode Slide".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -137465079i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDockPortSide".into(), + prefab_hash: -137465079i32, + desc: "".into(), + name: "Dock (Port Side)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1968371847i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureDrinkingFountain".into(), + prefab_hash: 1968371847i32, + desc: "The Drinking Fountain can be interacted with directly to increase hydration. It needs a Water supply." + .into(), + name: "Drinking Fountain".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1668992663i32, + StructureCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElectrolyzer".into(), + prefab_hash: -1668992663i32, + desc: "The Norsec-designed Electrolyzer splits Water into hydrogen and Oxygen. Employing unknown proprietary technology, the device uses water\'s latent heat as the energy to drive the electrosis process. If there is a downside to this near-miraculous fission, it\'s that the device is limited by the quantity of power available, which is used to maintain the temperature output. In other words, the machine works best with hot gas." + .into(), + name: "Electrolyzer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::PressureInput, MemoryAccess::Read), + (LogicType::TemperatureInput, MemoryAccess::Read), + (LogicType::RatioOxygenInput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioNitrogenInput, MemoryAccess::Read), + (LogicType::RatioPollutantInput, MemoryAccess::Read), + (LogicType::RatioVolatilesInput, MemoryAccess::Read), + (LogicType::RatioWaterInput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), + (LogicType::TotalMolesInput, MemoryAccess::Read), + (LogicType::PressureOutput, MemoryAccess::Read), + (LogicType::TemperatureOutput, MemoryAccess::Read), + (LogicType::RatioOxygenOutput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioPollutantOutput, MemoryAccess::Read), + (LogicType::RatioVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioWaterOutput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), + (LogicType::TotalMolesOutput, MemoryAccess::Read), + (LogicType::CombustionInput, MemoryAccess::Read), + (LogicType::CombustionOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioSteamInput, MemoryAccess::Read), + (LogicType::RatioSteamOutput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: Some(2u32), + has_activate_state: true, + has_atmosphere: true, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1307165496i32, + StructureLogicDeviceConsumerMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElectronicsPrinter".into(), + prefab_hash: 1307165496i32, + desc: "The electronic printer will create any electronic part you need. From circuit boards and electronic devices to solar panels. The choice is yours. Upgrade the device using a Electronic Printer Mod for additional recipes and faster processing speeds." + .into(), + name: "Electronics Printer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RecipeHash, + MemoryAccess::ReadWrite), (LogicType::CompletionRatio, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ingot, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), + "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" + .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), + "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" + .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), + "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" + .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), + "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + Recipe { target_prefab : "DynamicLight".into(), target_prefab_hash : + - 21970188i32, tier : MachineTier::TierOne, time : 20f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 2f64), ("Iron".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitGrowLight".into(), + target_prefab_hash : 341030083i32, tier : MachineTier::TierOne, time + : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 5f64), ("Electrum".into(), 10f64), + ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemBatteryCell".into(), target_prefab_hash : + 700133157i32, tier : MachineTier::TierOne, time : 10f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 2f64), ("Iron".into(), + 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemBatteryCellLarge".into(), target_prefab_hash : - 459827268i32, + tier : MachineTier::TierOne, time : 20f64, energy : 20000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 10f64), ("Gold".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "Battery_Wireless_cell" + .into(), target_prefab_hash : - 462415758i32, tier : + MachineTier::TierOne, time : 10f64, energy : 10000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" + .into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() }, + Recipe { target_prefab : "Battery_Wireless_cell_Big".into(), + target_prefab_hash : - 41519077i32, tier : MachineTier::TierOne, time + : 20f64, energy : 20000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 15f64), ("Gold".into(), 5f64), + ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitPowerTransmitter".into(), target_prefab_hash + : 291368213i32, tier : MachineTier::TierOne, time : 20f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 7f64), ("Gold".into(), 5f64), ("Steel".into(), + 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPowerTransmitterOmni".into(), target_prefab_hash : - + 831211676i32, tier : MachineTier::TierOne, time : 20f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 8f64), ("Gold".into(), 4f64), ("Steel".into(), + 4f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemBatteryCellNuclear".into(), target_prefab_hash : 544617306i32, + tier : MachineTier::TierTwo, time : 180f64, energy : 360000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Astroloy".into(), + 10f64), ("Inconel".into(), 5f64), ("Steel".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemHEMDroidRepairKit".into(), target_prefab_hash : 470636008i32, + tier : MachineTier::TierTwo, time : 40f64, energy : 1500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), + 10f64), ("Inconel".into(), 5f64), ("Solder".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemBatteryCharger".into(), target_prefab_hash : - 1866880307i32, + tier : MachineTier::TierOne, time : 1f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 5f64), ("Gold".into(), 5f64), ("Iron".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemBatteryChargerSmall" + .into(), target_prefab_hash : 1008295833i32, tier : + MachineTier::TierOne, time : 1f64, energy : 250f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 2f64), ("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "CartridgeAtmosAnalyser".into(), + target_prefab_hash : - 1550278665i32, tier : MachineTier::TierOne, + time : 5f64, energy : 100f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), + ("Iron".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "CartridgePlantAnalyser".into(), target_prefab_hash : + 1101328282i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "CartridgeElectronicReader".into(), target_prefab_hash : - + 1462180176i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "CartridgeMedicalAnalyser".into(), target_prefab_hash : - + 1116110181i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "CartridgeNetworkAnalyser".into(), target_prefab_hash : + 1606989119i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "CartridgeOreScanner".into(), target_prefab_hash : - 1768732546i32, + tier : MachineTier::TierOne, time : 5f64, energy : 100f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 5f64), ("Gold".into(), 5f64), ("Iron".into(), 1f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemSoundCartridgeBass" + .into(), target_prefab_hash : - 1883441704i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 2f64), ("Silicon".into(), 2f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSoundCartridgeDrums".into(), + target_prefab_hash : - 1901500508i32, tier : MachineTier::TierOne, + time : 5f64, energy : 100f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64), + ("Silicon".into(), 2f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemSoundCartridgeLeads".into(), target_prefab_hash + : - 1174735962i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 2f64), ("Silicon" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemSoundCartridgeSynth".into(), target_prefab_hash : - + 1971419310i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 2f64), ("Silicon" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "CartridgeOreScannerColor".into(), target_prefab_hash : + 1738236580i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Constantan".into(), 5f64), ("Electrum".into(), 5f64), ("Invar" + .into(), 5f64), ("Silicon".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitAIMeE".into(), target_prefab_hash : + 496830914i32, tier : MachineTier::TierTwo, time : 25f64, energy : + 2200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 7i64, reagents : + vec![("Astroloy".into(), 10f64), ("Constantan".into(), 8f64), + ("Copper".into(), 5f64), ("Electrum".into(), 15f64), ("Gold".into(), + 5f64), ("Invar".into(), 7f64), ("Steel".into(), 22f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitFridgeSmall".into(), + target_prefab_hash : 1661226524i32, tier : MachineTier::TierOne, time + : 10f64, energy : 100f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 2f64), + ("Iron".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitFridgeBig".into(), target_prefab_hash : - + 1168199498i32, tier : MachineTier::TierOne, time : 10f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 10f64), ("Gold".into(), 5f64), ("Iron".into(), + 20f64), ("Steel".into(), 15f64)] .into_iter().collect() }, Recipe { + target_prefab : "CartridgeConfiguration".into(), target_prefab_hash : + - 932136011i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "CartridgeTracker".into(), target_prefab_hash : 81488783i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" + .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "CartridgeGPS".into(), target_prefab_hash : + - 1957063345i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "CircuitboardAirControl".into(), target_prefab_hash : 1618019559i32, + tier : MachineTier::TierOne, time : 5f64, energy : 100f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 5f64), ("Gold".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "CircuitboardAdvAirlockControl".into(), + target_prefab_hash : 1633663176i32, tier : MachineTier::TierOne, time + : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), + ("Iron".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "CircuitboardAirlockControl".into(), + target_prefab_hash : 912176135i32, tier : MachineTier::TierOne, time + : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), + ("Iron".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "CircuitboardDoorControl".into(), target_prefab_hash + : 855694771i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "CircuitboardGasDisplay" + .into(), target_prefab_hash : - 82343730i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" + .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "CircuitboardModeControl".into(), + target_prefab_hash : - 1134148135i32, tier : MachineTier::TierOne, + time : 5f64, energy : 100f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "CircuitboardPowerControl".into(), target_prefab_hash : - + 1923778429i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "CircuitboardShipDisplay" + .into(), target_prefab_hash : - 2044446819i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "CircuitboardSolarControl".into(), target_prefab_hash : + 2020180320i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "CircuitboardGraphDisplay" + .into(), target_prefab_hash : 1344368806i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "CircuitboardHashDisplay".into(), target_prefab_hash : 1633074601i32, + tier : MachineTier::TierOne, time : 5f64, energy : 100f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 5f64), ("Gold".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemAreaPowerControl".into(), target_prefab_hash : + 1757673317i32, tier : MachineTier::TierOne, time : 5f64, energy : + 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 2f64), ("Iron".into(), 5f64), ("Solder" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemCableAnalyser".into(), target_prefab_hash : - 1792787349i32, + tier : MachineTier::TierOne, time : 5f64, energy : 100f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 2f64), ("Iron".into(), 1f64), ("Silicon".into(), 2f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemCableCoil".into(), + target_prefab_hash : - 466050668i32, tier : MachineTier::TierOne, + time : 1f64, energy : 100f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Copper".into(), 0.5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemCableCoilHeavy".into(), + target_prefab_hash : 2060134443i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 0.5f64), ("Gold".into(), 0.5f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemCableFuse" + .into(), target_prefab_hash : 195442047i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemDataDisk".into(), target_prefab_hash : 1005843700i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemFlashingLight".into(), target_prefab_hash : - 2107840748i32, + tier : MachineTier::TierOne, time : 5f64, energy : 100f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 3f64), ("Iron".into(), 2f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitBattery".into(), target_prefab_hash : + 1406656973i32, tier : MachineTier::TierOne, time : 120f64, energy : + 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 20f64), ("Gold".into(), 20f64), ("Steel" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitBatteryLarge".into(), target_prefab_hash : - 21225041i32, + tier : MachineTier::TierTwo, time : 240f64, energy : 96000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 6i64, reagents : vec![("Copper".into(), + 35f64), ("Electrum".into(), 10f64), ("Gold".into(), 35f64), + ("Silicon".into(), 5f64), ("Steel".into(), 35f64), ("Stellite" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitComputer".into(), target_prefab_hash : 1990225489i32, tier : + MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" + .into(), 5f64), ("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitConsole".into(), target_prefab_hash + : - 1241851179i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 3f64), ("Iron".into(), + 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLogicInputOutput".into(), target_prefab_hash : 1997293610i32, + tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 1f64), ("Gold".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitLogicMemory".into(), target_prefab_hash : - + 2098214189i32, tier : MachineTier::TierOne, time : 10f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 1f64), ("Gold".into(), 1f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitSpeaker".into(), + target_prefab_hash : - 126038526i32, tier : MachineTier::TierOne, + time : 10f64, energy : 1000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), + ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitLogicProcessor".into(), target_prefab_hash : + 220644373i32, tier : MachineTier::TierOne, time : 10f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitMusicMachines".into(), + target_prefab_hash : - 2038889137i32, tier : MachineTier::TierOne, + time : 10f64, energy : 1000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLogicTransmitter".into(), target_prefab_hash : 1005397063i32, + tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 4i64, reagents : vec![("Copper".into(), + 1f64), ("Electrum".into(), 3f64), ("Gold".into(), 2f64), ("Silicon" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLogicSwitch".into(), target_prefab_hash : 124499454i32, tier + : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Gold" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemIntegratedCircuit10".into(), target_prefab_hash : - + 744098481i32, tier : MachineTier::TierOne, time : 40f64, energy : + 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Electrum".into(), 5f64), ("Gold".into(), 10f64), ("Solder" + .into(), 2f64), ("Steel".into(), 4f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitLogicCircuit".into(), + target_prefab_hash : 1512322581i32, tier : MachineTier::TierOne, time + : 40f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 10f64), ("Solder".into(), 2f64), + ("Steel".into(), 4f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemPowerConnector".into(), target_prefab_hash : + 839924019i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 3f64), ("Iron".into(), + 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPressurePlate".into(), target_prefab_hash : 123504691i32, + tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 2f64), ("Gold".into(), 2f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitSolidGenerator".into(), target_prefab_hash : + 1293995736i32, tier : MachineTier::TierOne, time : 120f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 10f64), ("Iron".into(), 50f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitGasGenerator".into(), + target_prefab_hash : 377745425i32, tier : MachineTier::TierOne, time + : 120f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 10f64), ("Iron".into(), 50f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitSensor" + .into(), target_prefab_hash : - 1776897113i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" + .into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemElectronicParts".into(), + target_prefab_hash : 731250882i32, tier : MachineTier::TierOne, time + : 5f64, energy : 10f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), + ("Iron".into(), 3f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitResearchMachine".into(), target_prefab_hash : + 724776762i32, tier : MachineTier::TierOne, time : 5f64, energy : + 10f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Iron".into(), + 9f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitWeatherStation".into(), target_prefab_hash : 337505889i32, + tier : MachineTier::TierOne, time : 60f64, energy : 12000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 4i64, reagents : vec![("Copper".into(), + 5f64), ("Gold".into(), 3f64), ("Iron".into(), 8f64), ("Steel".into(), + 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemResearchCapsuleRed".into(), target_prefab_hash : 954947943i32, + tier : MachineTier::TierOne, time : 8f64, energy : 50f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold" + .into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemResearchCapsule".into(), + target_prefab_hash : 819096942i32, tier : MachineTier::TierOne, time + : 3f64, energy : 400f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), + ("Iron".into(), 9f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemResearchCapsuleGreen".into(), target_prefab_hash + : - 1352732550i32, tier : MachineTier::TierOne, time : 5f64, energy : + 10f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Astroloy".into(), 2f64), ("Copper".into(), 3f64), ("Gold" + .into(), 2f64), ("Iron".into(), 9f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemResearchCapsuleYellow".into(), + target_prefab_hash : 750952701i32, tier : MachineTier::TierOne, time + : 5f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Astroloy".into(), 3f64), ("Copper".into(), 3f64), + ("Gold".into(), 2f64), ("Iron".into(), 9f64)] .into_iter().collect() + }, Recipe { target_prefab : "ItemKitSolarPanelBasic".into(), + target_prefab_hash : 844961456i32, tier : MachineTier::TierOne, time + : 30f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 2f64), + ("Iron".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitSolarPanel".into(), target_prefab_hash : - + 1924492105i32, tier : MachineTier::TierOne, time : 60f64, energy : + 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 20f64), ("Gold".into(), 5f64), ("Steel" + .into(), 15f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitStirlingEngine".into(), target_prefab_hash : - 1821571150i32, + tier : MachineTier::TierOne, time : 60f64, energy : 6000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 20f64), ("Gold".into(), 5f64), ("Steel".into(), 30f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemKitSolarPanelBasicReinforced".into(), target_prefab_hash : - + 528695432i32, tier : MachineTier::TierTwo, time : 120f64, energy : + 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 10f64), ("Electrum".into(), 2f64), ("Invar" + .into(), 10f64), ("Steel".into(), 10f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitSolarPanelReinforced".into(), + target_prefab_hash : - 364868685i32, tier : MachineTier::TierTwo, + time : 120f64, energy : 24000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Astroloy".into(), 15f64), ("Copper".into(), 20f64), + ("Electrum".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "PortableSolarPanel".into(), + target_prefab_hash : 2043318949i32, tier : MachineTier::TierOne, time + : 5f64, energy : 200f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 3f64), + ("Iron".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitTransformer".into(), target_prefab_hash : - + 453039435i32, tier : MachineTier::TierOne, time : 60f64, energy : + 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Electrum".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitTransformerSmall" + .into(), target_prefab_hash : 665194284i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold" + .into(), 1f64), ("Iron".into(), 10f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemTablet".into(), target_prefab_hash : - + 229808600i32, tier : MachineTier::TierOne, time : 5f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Solder" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemAdvancedTablet".into(), target_prefab_hash : 1722785341i32, tier + : MachineTier::TierTwo, time : 60f64, energy : 12000f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 6i64, reagents : vec![("Copper".into(), 5.5f64), + ("Electrum".into(), 1f64), ("Gold".into(), 12f64), ("Iron".into(), + 3f64), ("Solder".into(), 5f64), ("Steel".into(), 2f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemLaptop".into(), + target_prefab_hash : 141535121i32, tier : MachineTier::TierTwo, time + : 60f64, energy : 18000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 5i64, + reagents : vec![("Copper".into(), 5.5f64), ("Electrum".into(), 5f64), + ("Gold".into(), 12f64), ("Solder".into(), 5f64), ("Steel".into(), + 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemWallLight".into(), target_prefab_hash : 1108423476i32, tier : + MachineTier::TierOne, time : 5f64, energy : 10f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "MotherboardLogic".into(), target_prefab_hash : 502555944i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "MotherboardRockets".into(), target_prefab_hash : - 806986392i32, + tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), + 5f64), ("Solder".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "MotherboardProgrammableChip".into(), + target_prefab_hash : - 161107071i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "MotherboardSorter".into(), target_prefab_hash : - 1908268220i32, + tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Gold".into(), + 5f64), ("Silver".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "MotherboardComms".into(), target_prefab_hash : - + 337075633i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 5f64), ("Electrum".into(), 2f64), ("Gold" + .into(), 5f64), ("Silver".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitBeacon".into(), target_prefab_hash : + 249073136i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 4f64), ("Solder" + .into(), 2f64), ("Steel".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitElevator".into(), target_prefab_hash + : - 945806652i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 4f64), ("Solder" + .into(), 2f64), ("Steel".into(), 2f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitHydroponicStation".into(), + target_prefab_hash : 2057179799i32, tier : MachineTier::TierOne, time + : 120f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Copper".into(), 20f64), ("Gold".into(), 5f64), + ("Nickel".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitSmallSatelliteDish" + .into(), target_prefab_hash : 1960952220i32, tier : + MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Gold" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitSatelliteDish".into(), target_prefab_hash : 178422810i32, + tier : MachineTier::TierOne, time : 120f64, energy : 24000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), + 15f64), ("Solder".into(), 10f64), ("Steel".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLargeSatelliteDish".into(), target_prefab_hash : - + 2039971217i32, tier : MachineTier::TierOne, time : 240f64, energy : + 72000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Astroloy".into(), 100f64), ("Inconel".into(), 50f64), + ("Waspaloy".into(), 20f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitLandingPadBasic".into(), target_prefab_hash : + 293581318i32, tier : MachineTier::TierOne, time : 10f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 1f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitLandingPadAtmos" + .into(), target_prefab_hash : 1817007843i32, tier : + MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Steel" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLandingPadWaypoint".into(), target_prefab_hash : - + 1267511065i32, tier : MachineTier::TierOne, time : 10f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 1f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitHarvie".into(), + target_prefab_hash : - 1022693454i32, tier : MachineTier::TierOne, + time : 60f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 5i64, + reagents : vec![("Copper".into(), 15f64), ("Electrum".into(), 10f64), + ("Silicon".into(), 5f64), ("Solder".into(), 5f64), ("Steel".into(), + 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitDynamicGenerator".into(), target_prefab_hash : - + 732720413i32, tier : MachineTier::TierOne, time : 120f64, energy : + 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : vec![("Gold" + .into(), 15f64), ("Nickel".into(), 15f64), ("Solder".into(), 5f64), + ("Steel".into(), 20f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitVendingMachine".into(), target_prefab_hash : + - 2038384332i32, tier : MachineTier::TierOne, time : 60f64, energy : + 15000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Electrum".into(), 50f64), ("Gold".into(), 50f64), ("Solder" + .into(), 10f64), ("Steel".into(), 20f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitVendingMachineRefrigerated".into(), + target_prefab_hash : - 1867508561i32, tier : MachineTier::TierTwo, + time : 60f64, energy : 25000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Electrum".into(), 80f64), ("Gold".into(), 60f64), + ("Solder".into(), 30f64), ("Steel".into(), 40f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitAutomatedOven".into(), + target_prefab_hash : - 1931958659i32, tier : MachineTier::TierTwo, + time : 50f64, energy : 15000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 5i64, + reagents : vec![("Constantan".into(), 5f64), ("Copper".into(), + 15f64), ("Gold".into(), 10f64), ("Solder".into(), 10f64), ("Steel" + .into(), 25f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitAdvancedPackagingMachine".into(), target_prefab_hash : - + 598545233i32, tier : MachineTier::TierTwo, time : 60f64, energy : + 18000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Constantan".into(), 10f64), ("Copper".into(), 10f64), + ("Electrum".into(), 15f64), ("Steel".into(), 20f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitAdvancedComposter" + .into(), target_prefab_hash : - 1431998347i32, tier : + MachineTier::TierTwo, time : 55f64, energy : 20000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 4i64, reagents : vec![("Copper".into(), 15f64), + ("Electrum".into(), 20f64), ("Solder".into(), 5f64), ("Steel".into(), + 30f64)] .into_iter().collect() }, Recipe { target_prefab : + "PortableComposter".into(), target_prefab_hash : - 1958705204i32, + tier : MachineTier::TierOne, time : 55f64, energy : 20000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 15f64), ("Steel".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitTurbineGenerator".into(), target_prefab_hash + : - 1590715731i32, tier : MachineTier::TierOne, time : 60f64, energy + : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 4f64), ("Iron".into(), + 5f64), ("Solder".into(), 4f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitUprightWindTurbine".into(), + target_prefab_hash : - 1798044015i32, tier : MachineTier::TierOne, + time : 60f64, energy : 12000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 5f64), + ("Iron".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitWindTurbine".into(), target_prefab_hash : - + 868916503i32, tier : MachineTier::TierTwo, time : 60f64, energy : + 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 10f64), ("Electrum".into(), 5f64), ("Steel" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemLabeller".into(), target_prefab_hash : - 743968726i32, tier : + MachineTier::TierOne, time : 15f64, energy : 800f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ElectronicPrinterMod".into(), + target_prefab_hash : - 311170652i32, tier : MachineTier::TierOne, + time : 180f64, energy : 72000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), + 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() + .collect() }, Recipe { target_prefab : "AutolathePrinterMod".into(), + target_prefab_hash : 221058307i32, tier : MachineTier::TierTwo, time + : 180f64, energy : 72000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), + 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ToolPrinterMod".into(), + target_prefab_hash : 1700018136i32, tier : MachineTier::TierTwo, time + : 180f64, energy : 72000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), + 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() + .collect() }, Recipe { target_prefab : "PipeBenderMod".into(), + target_prefab_hash : 443947415i32, tier : MachineTier::TierTwo, time + : 180f64, energy : 72000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), + 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitAdvancedFurnace" + .into(), target_prefab_hash : - 616758353i32, tier : + MachineTier::TierTwo, time : 180f64, energy : 36000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 6i64, reagents : vec![("Copper".into(), 25f64), + ("Electrum".into(), 15f64), ("Gold".into(), 5f64), ("Silicon".into(), + 6f64), ("Solder".into(), 8f64), ("Steel".into(), 30f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ApplianceMicrowave".into(), + target_prefab_hash : - 1136173965i32, tier : MachineTier::TierOne, + time : 45f64, energy : 1500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), + ("Iron".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ApplianceTabletDock".into(), target_prefab_hash : + 1853941363i32, tier : MachineTier::TierOne, time : 30f64, energy : + 750f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), ("Iron".into(), + 5f64), ("Silicon".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "AppliancePackagingMachine".into(), + target_prefab_hash : - 749191906i32, tier : MachineTier::TierOne, + time : 30f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), + ("Iron".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ApplianceDeskLampRight".into(), target_prefab_hash : + 1174360780i32, tier : MachineTier::TierOne, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron" + .into(), 2f64), ("Silicon".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ApplianceDeskLampLeft".into(), + target_prefab_hash : - 1683849799i32, tier : MachineTier::TierOne, + time : 10f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Iron".into(), 2f64), ("Silicon".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ApplianceReagentProcessor".into(), target_prefab_hash : + 1260918085i32, tier : MachineTier::TierOne, time : 45f64, energy : + 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), ("Iron".into(), + 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ApplianceChemistryStation".into(), target_prefab_hash : + 1365789392i32, tier : MachineTier::TierOne, time : 45f64, energy : + 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 1f64), ("Steel".into(), + 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "AppliancePaintMixer".into(), target_prefab_hash : - 1339716113i32, + tier : MachineTier::TierOne, time : 45f64, energy : 1500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 5f64), ("Gold".into(), 1f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitAutoMinerSmall" + .into(), target_prefab_hash : 1668815415i32, tier : + MachineTier::TierTwo, time : 90f64, energy : 9000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 5i64, reagents : vec![("Copper".into(), 15f64), + ("Electrum".into(), 50f64), ("Invar".into(), 25f64), ("Iron".into(), + 15f64), ("Steel".into(), 100f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitHorizontalAutoMiner".into(), + target_prefab_hash : 844391171i32, tier : MachineTier::TierTwo, time + : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 5i64, + reagents : vec![("Copper".into(), 7f64), ("Electrum".into(), 25f64), + ("Invar".into(), 15f64), ("Iron".into(), 8f64), ("Steel".into(), + 60f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemCreditCard".into(), target_prefab_hash : - 1756772618i32, tier : + MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), + ("Silicon".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "AppliancePlantGeneticAnalyzer".into(), + target_prefab_hash : - 1303038067i32, tier : MachineTier::TierOne, + time : 45f64, energy : 4500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 1f64), + ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "AppliancePlantGeneticSplicer".into(), + target_prefab_hash : - 1094868323i32, tier : MachineTier::TierOne, + time : 50f64, energy : 5000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Inconel".into(), 10f64), ("Stellite".into(), + 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "AppliancePlantGeneticStabilizer".into(), target_prefab_hash : + 871432335i32, tier : MachineTier::TierOne, time : 50f64, energy : + 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Inconel".into(), 10f64), ("Stellite".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitGroundTelescope".into(), target_prefab_hash : - + 2140672772i32, tier : MachineTier::TierOne, time : 150f64, energy : + 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Electrum".into(), 15f64), ("Solder".into(), 10f64), ("Steel" + .into(), 25f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLinearRail".into(), target_prefab_hash : - 441759975i32, tier + : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Steel".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitRoboticArm".into(), target_prefab_hash : - 1228287398i32, + tier : MachineTier::TierOne, time : 150f64, energy : 10000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Astroloy".into(), + 15f64), ("Hastelloy".into(), 5f64), ("Inconel".into(), 10f64)] + .into_iter().collect() } + ] + .into_iter() + .collect(), + }), + memory: MemoryInfo { + instructions: Some( + vec![ + ("DeviceSetLock".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : + InstructionPartType::Bool8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(48u32) }] .into_iter().collect() }), + ("EjectAllReagents".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }), + ("EjectReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("ExecuteRecipe".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("JumpIfNextInvalid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("JumpToAddress".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("MissingRecipeReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, + Some(62u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("StackPointer".into(), Instruction { description : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("WaitUntilNextValid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ); + map.insert( + -827912235i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElevatorLevelFront".into(), + prefab_hash: -827912235i32, + desc: "".into(), + name: "Elevator Level (Cabled)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::ElevatorSpeed, MemoryAccess::ReadWrite), + (LogicType::ElevatorLevel, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Elevator, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Elevator, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2060648791i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElevatorLevelIndustrial".into(), + prefab_hash: 2060648791i32, + desc: "".into(), + name: "Elevator Level".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::ElevatorSpeed, MemoryAccess::ReadWrite), + (LogicType::ElevatorLevel, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Elevator, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Elevator, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 826144419i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElevatorShaft".into(), + prefab_hash: 826144419i32, + desc: "".into(), + name: "Elevator Shaft (Cabled)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ElevatorSpeed, + MemoryAccess::ReadWrite), (LogicType::ElevatorLevel, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Elevator, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Elevator, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1998354978i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureElevatorShaftIndustrial".into(), + prefab_hash: 1998354978i32, + desc: "".into(), + name: "Elevator Shaft".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::ElevatorSpeed, MemoryAccess::ReadWrite), + (LogicType::ElevatorLevel, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Elevator, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Elevator, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1668452680i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureEmergencyButton".into(), + prefab_hash: 1668452680i32, + desc: "".into(), + name: "Important Button".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2035781224i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureEngineMountTypeA1".into(), + prefab_hash: 2035781224i32, + desc: "".into(), + name: "Engine Mount (Type A1)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1429782576i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureEvaporationChamber".into(), + prefab_hash: -1429782576i32, + desc: "A device for safely evaporating liquids into gasses. Liquids and Gasses will both exist safely inside the device. Lowering the pressure target of the in-built back pressure regulator using the setting wheel will change the boiling temperature of liquids inside.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Evaporation Chamber. \n Paired with Condensation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner." + .into(), + name: "Evaporation Chamber".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.001f32, + radiation_factor: 0.000050000002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input2 }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 195298587i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureExpansionValve".into(), + prefab_hash: 195298587i32, + desc: "Allows for moving liquids from a liquid pipe into a gas pipe. Only allows liquids to pass in one direction. Typically this is done to allow the liquid to evaporate into a gas as part of an airconditioning loop." + .into(), + name: "Expansion Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1622567418i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFairingTypeA1".into(), + prefab_hash: 1622567418i32, + desc: "".into(), + name: "Fairing (Type A1)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -104908736i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFairingTypeA2".into(), + prefab_hash: -104908736i32, + desc: "".into(), + name: "Fairing (Type A2)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1900541738i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFairingTypeA3".into(), + prefab_hash: -1900541738i32, + desc: "".into(), + name: "Fairing (Type A3)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -348054045i32, + StructureCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFiltration".into(), + prefab_hash: -348054045i32, + desc: "The Filtration Unit is based on a long-standing ExMin system, itself based on older designs of uncertain provenance. It is available in the Kit (Atmospherics).\nThe device has nonetheless proven indispensable for Stationeer atmospheric systems, as it can filter two gases simultaneously from a single pipe network using a dual filter array. The unit has an input, and a filter output as well as an unfiltered outlet for any residual gases.\n" + .into(), + name: "Filtration".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::PressureInput, MemoryAccess::Read), + (LogicType::TemperatureInput, MemoryAccess::Read), + (LogicType::RatioOxygenInput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioNitrogenInput, MemoryAccess::Read), + (LogicType::RatioPollutantInput, MemoryAccess::Read), + (LogicType::RatioVolatilesInput, MemoryAccess::Read), + (LogicType::RatioWaterInput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), + (LogicType::TotalMolesInput, MemoryAccess::Read), + (LogicType::PressureOutput, MemoryAccess::Read), + (LogicType::TemperatureOutput, MemoryAccess::Read), + (LogicType::RatioOxygenOutput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioPollutantOutput, MemoryAccess::Read), + (LogicType::RatioVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioWaterOutput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), + (LogicType::TotalMolesOutput, MemoryAccess::Read), + (LogicType::PressureOutput2, MemoryAccess::Read), + (LogicType::TemperatureOutput2, MemoryAccess::Read), + (LogicType::RatioOxygenOutput2, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideOutput2, MemoryAccess::Read), + (LogicType::RatioNitrogenOutput2, MemoryAccess::Read), + (LogicType::RatioPollutantOutput2, MemoryAccess::Read), + (LogicType::RatioVolatilesOutput2, MemoryAccess::Read), + (LogicType::RatioWaterOutput2, MemoryAccess::Read), + (LogicType::RatioNitrousOxideOutput2, MemoryAccess::Read), + (LogicType::TotalMolesOutput2, MemoryAccess::Read), + (LogicType::CombustionInput, MemoryAccess::Read), + (LogicType::CombustionOutput, MemoryAccess::Read), + (LogicType::CombustionOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesOutput2, MemoryAccess::Read), + (LogicType::RatioSteamInput, MemoryAccess::Read), + (LogicType::RatioSteamOutput, MemoryAccess::Read), + (LogicType::RatioSteamOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantOutput2, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideOutput2, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Filter".into(), class : + Class::GasFilter, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Gas Filter".into(), class : Class::GasFilter, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 2u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Waste }, + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: Some(2u32), + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1529819532i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFlagSmall".into(), + prefab_hash: -1529819532i32, + desc: "".into(), + name: "Small Flag".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1535893860i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFlashingLight".into(), + prefab_hash: -1535893860i32, + desc: "Few objects or ideas are as clearly and transparently named as the Flashing Light, although fans of scrupulous accuracy have been known to refer to it by its full, official title: \'Default Yellow Flashing Light\'." + .into(), + name: "Flashing Light".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 839890807i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFlatBench".into(), + prefab_hash: 839890807i32, + desc: "".into(), + name: "Bench (Flat)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Seat".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1048813293i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFloorDrain".into(), + prefab_hash: 1048813293i32, + desc: "A passive liquid floor inlet that quickly removes liquids in one direction from the world into the connected pipe network. It will equalise gasses with the world atmosphere also." + .into(), + name: "Passive Liquid Inlet".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1432512808i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFrame".into(), + prefab_hash: 1432512808i32, + desc: "More durable than the Iron Frame, steel frames also have several variations for more complex constructions, such as the Steel Frame (Corner) and Steel Frame (Corner Cut). Like iron frames, they are placed then completed by welding Steel Sheets to the open framework." + .into(), + name: "Steel Frame".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2112390778i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFrameCorner".into(), + prefab_hash: -2112390778i32, + desc: "More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. \nWith a little patience and maneuvering, the corner frame\'s Gothic-inspired silhouette allows the creation of ogival arches and even more ambitious architecture, although they are not airtight and cannot be built on." + .into(), + name: "Steel Frame (Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 271315669i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFrameCornerCut".into(), + prefab_hash: 271315669i32, + desc: "0.Mode0\n1.Mode1".into(), + name: "Steel Frame (Corner Cut)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1240951678i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFrameIron".into(), + prefab_hash: -1240951678i32, + desc: "".into(), + name: "Iron Frame".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -302420053i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFrameSide".into(), + prefab_hash: -302420053i32, + desc: "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions." + .into(), + name: "Steel Frame (Side)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 958476921i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFridgeBig".into(), + prefab_hash: 958476921i32, + desc: "The Xigo Koolaid fridge is a self-cooling storage device with 15 slots that preserves food when powered and turned on. While many users have complained about the placement of the power switch, its place in the pantheon of off-world whiteware is unquestioned.\n \nWith its own permanent internal atmosphere, the Koolaid fridge slows the decay of food by maintaining an optimal internal temperature. Its power usage varies on the external temperature against which it must balance its internal temperature. As such, it must shed heat to operate, so the Koolaid fridge DOES NOT work in a vacuum.\n \nAlso, don\'t leave the door open, as it will equalize with the current world temperature. And maybe start to beep.\n\nFor more information about food preservation, visit the food decay section of the Stationpedia." + .into(), + name: "Fridge (Large)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (6, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (7, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (8, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (10, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (11, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (12, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (13, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (14, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 6u32 + }), (7u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 9u32 }), (10u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 10u32 }), (11u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 11u32 + }), (12u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 12u32 }), (13u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 13u32 }), (14u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 14u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 751887598i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFridgeSmall".into(), + prefab_hash: 751887598i32, + desc: "Essentially a heavily insulated box that allows users to pipe in any desired atmosphere, the Recurso Minibar fridge was a simple solution to the problem of food decay. It stores a small number of items, at any temperature you can muster.\n \n For more information about food preservation, visit the food decay section of the Stationpedia." + .into(), + name: "Fridge Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1947944864i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFurnace".into(), + prefab_hash: 1947944864i32, + desc: "The Zhurong furnace employs a high-temperature gas mixture of Oxygen and Volatiles to smelt ingots and a range of alloys as raw materials for fabricators.\nA basic gas mixture can be achieved by adding Ice (Oxite) and Ice (Volatiles) in a 1:2 ratio directly to the furnace, but more complex alloys will require careful management of a dedicated gas mixing network. Exact ingredient ratios must be observed. Likewise, smelting ores at insufficient temperatures will produce reagents, which must be recycled.\nIf liquids are present in the furnace, they will gather there until the furnace is connected to a liquid pipe network." + .into(), + name: "Furnace".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Reagents, + MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::RecipeHash, MemoryAccess::Read), (LogicType::ClearMemory, + MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output2 }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: true, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: false, + has_open_state: true, + has_reagents: true, + }, + } + .into(), + ); + map.insert( + 1033024712i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFuselageTypeA1".into(), + prefab_hash: 1033024712i32, + desc: "".into(), + name: "Fuselage (Type A1)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1533287054i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFuselageTypeA2".into(), + prefab_hash: -1533287054i32, + desc: "".into(), + name: "Fuselage (Type A2)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1308115015i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFuselageTypeA4".into(), + prefab_hash: 1308115015i32, + desc: "".into(), + name: "Fuselage (Type A4)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 147395155i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureFuselageTypeC5".into(), + prefab_hash: 147395155i32, + desc: "".into(), + name: "Fuselage (Type C5)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1165997963i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasGenerator".into(), + prefab_hash: 1165997963i32, + desc: "".into(), + name: "Gas Fuel Generator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.01f32, + radiation_factor: 0.01f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PowerGeneration, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2104106366i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasMixer".into(), + prefab_hash: 2104106366i32, + desc: "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%." + .into(), + name: "Gas Mixer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input2 }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1252983604i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasSensor".into(), + prefab_hash: -1252983604i32, + desc: "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents." + .into(), + name: "Gas Sensor".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1632165346i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasTankStorage".into(), + prefab_hash: 1632165346i32, + desc: "When connected to a pipe network, the tank storage unit allows you to refill a Canister, as well as read various atmospheric data from the Gas Canister." + .into(), + name: "Gas Tank Storage".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Quantity, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1680477930i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasUmbilicalFemale".into(), + prefab_hash: -1680477930i32, + desc: "".into(), + name: "Umbilical Socket (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -648683847i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasUmbilicalFemaleSide".into(), + prefab_hash: -648683847i32, + desc: "".into(), + name: "Umbilical Socket Angle (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1814939203i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGasUmbilicalMale".into(), + prefab_hash: -1814939203i32, + desc: "0.Left\n1.Center\n2.Right".into(), + name: "Umbilical (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::Read), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Left".into()), (1, "Center".into()), (2, "Right".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -324331872i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGlassDoor".into(), + prefab_hash: -324331872i32, + desc: "0.Operate\n1.Logic".into(), + name: "Glass Door".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -214232602i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGovernedGasEngine".into(), + prefab_hash: -214232602i32, + desc: "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas." + .into(), + name: "Pumped Gas Engine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::Throttle, MemoryAccess::ReadWrite), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::PassedMoles, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -619745681i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGroundBasedTelescope".into(), + prefab_hash: -619745681i32, + desc: "A telescope that can be oriented to observe Celestial Bodies. When within full alignment will show orbital information for that celestial object. Atmospheric conditions may disrupt the ability to observe some objects at some times of day. To collect Horizontal and Vertical values you can use a Rocket Celestial Tracker while it is in orbit, or a Daylight Sensor for primary body data." + .into(), + name: "Telescope".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::HorizontalRatio, MemoryAccess::ReadWrite), + (LogicType::VerticalRatio, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::CelestialHash, MemoryAccess::Read), + (LogicType::AlignmentError, MemoryAccess::Read), + (LogicType::DistanceAu, MemoryAccess::Read), (LogicType::OrbitPeriod, + MemoryAccess::Read), (LogicType::Inclination, MemoryAccess::Read), + (LogicType::Eccentricity, MemoryAccess::Read), + (LogicType::SemiMajorAxis, MemoryAccess::Read), + (LogicType::DistanceKm, MemoryAccess::Read), + (LogicType::CelestialParentHash, MemoryAccess::Read), + (LogicType::TrueAnomaly, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1758710260i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureGrowLight".into(), + prefab_hash: -1758710260i32, + desc: "Agrizero\'s leading hydroponic lighting system, the GrowUp UV light supplements sunshine in low light or sun-distant conditions. The unit adds growability over the space of a grid, so requires proximate placement to work. " + .into(), + name: "Grow Light".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 958056199i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHarvie".into(), + prefab_hash: 958056199i32, + desc: "Use above a Hydroponics Tray or Hydroponics Device to manage the planting and harvest of your crops. It contains a button that will allow you to activate it\'s modes, or connect it to a logic system to do this for you. The modes indicate current growth status of the plant below. Import is used for planting, and harvested plants are sent to export." + .into(), + name: "Harvie".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Plant, + MemoryAccess::Write), (LogicType::Harvest, MemoryAccess::Write), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Idle".into()), (1, "Happy".into()), (2, "UnHappy".into()), + (3, "Dead".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Plant, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Hand" + .into(), class : Class::None, index : 2u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 944685608i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHeatExchangeLiquidtoGas".into(), + prefab_hash: 944685608i32, + desc: "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn\'t stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe \'N Flow-P\' has four connections, allowing you to pass separate liquid and gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to devices like a Volume Pump or a Liquid Back Volume Regulator." + .into(), + name: "Heat Exchanger - Liquid + Gas".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 21266291i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHeatExchangerGastoGas".into(), + prefab_hash: 21266291i32, + desc: "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn\'t stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe \'N Flow-P\' has four connections, allowing you to pass two gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to gas management devices like a Volume Pump or a Back Pressure Regulator." + .into(), + name: "Heat Exchanger - Gas".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -613784254i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHeatExchangerLiquidtoLiquid".into(), + prefab_hash: -613784254i32, + desc: "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn\'t stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe \'N Flow-P\' has four connections, allowing you to pass two liquid networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to liquid management devices like a Liquid Volume Pump or a Liquid Back Volume Regulator.\n" + .into(), + name: "Heat Exchanger - Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1070427573i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHorizontalAutoMiner".into(), + prefab_hash: 1070427573i32, + desc: "The Recurso OGRE (Orthogonal Ground Rotating Excavator) is a base structure with attached mining vehicle, which will mine a horizontal shaft up to X meters long. When full, the mining vehicle will return to the base to empty itself, before returning to dig. If it encounters empty space, it will also return to base and await instruction. The unit will return if deactivated.\n \nThe OGRE can be connected to a chute system, and is controllable by a logic network. Note that the OGRE outputs more ore than a conventional Mining Drill over the same area, due to more efficient processing.\n\nMODES\nIdle - 0\nMining - 1\nReturning - 2\nDepostingOre - 3\nFinished - 4\n" + .into(), + name: "OGRE".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1888248335i32, + StructureLogicDeviceConsumerMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHydraulicPipeBender".into(), + prefab_hash: -1888248335i32, + desc: "A go-to tool for all your atmospheric and plumbing needs, the ExMin Atmoprinter will create everything from pipes, pumps and tanks, to vents and filters, ensuring your survival in any environment. Upgrade the Atmoprinter using a Pipe Bender Mod for additional recipes and faster processing speeds." + .into(), + name: "Hydraulic Pipe Bender".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RecipeHash, + MemoryAccess::ReadWrite), (LogicType::CompletionRatio, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ingot, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), + "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" + .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), + "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" + .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), + "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" + .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), + "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + Recipe { target_prefab : "ItemKitDynamicCanister".into(), + target_prefab_hash : - 1061945368i32, tier : MachineTier::TierOne, + time : 20f64, energy : 1000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 20f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitDynamicGasTankAdvanced".into(), + target_prefab_hash : 1533501495i32, tier : MachineTier::TierTwo, time + : 40f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 20f64), + ("Silicon".into(), 5f64), ("Steel".into(), 15f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitDynamicLiquidCanister" + .into(), target_prefab_hash : 375541286i32, tier : + MachineTier::TierOne, time : 20f64, energy : 1000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitDynamicMKIILiquidCanister".into(), target_prefab_hash : - + 638019974i32, tier : MachineTier::TierTwo, time : 40f64, energy : + 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 5f64), ("Iron".into(), 20f64), ("Silicon" + .into(), 5f64), ("Steel".into(), 15f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemActiveVent".into(), target_prefab_hash + : - 842048328i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 1f64), ("Iron".into(), + 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemGasCanisterEmpty".into(), target_prefab_hash : 42280099i32, tier + : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitWaterBottleFiller".into(), target_prefab_hash : 159886536i32, + tier : MachineTier::TierOne, time : 7f64, energy : 620f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 3f64), ("Iron".into(), 5f64), ("Silicon".into(), 8f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitDrinkingFountain" + .into(), target_prefab_hash : - 1743663875i32, tier : + MachineTier::TierOne, time : 20f64, energy : 620f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Iron" + .into(), 5f64), ("Silicon".into(), 8f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemWaterBottle".into(), target_prefab_hash + : 107741229i32, tier : MachineTier::TierOne, time : 4f64, energy : + 120f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron" + .into(), 2f64), ("Silicon".into(), 4f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasCanisterSmart".into(), + target_prefab_hash : - 668314371i32, tier : MachineTier::TierTwo, + time : 10f64, energy : 1000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Silicon".into(), 2f64), + ("Steel".into(), 15f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemLiquidCanisterSmart".into(), target_prefab_hash + : 777684475i32, tier : MachineTier::TierTwo, time : 10f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 2f64), ("Silicon".into(), 2f64), ("Steel" + .into(), 15f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemLiquidCanisterEmpty".into(), target_prefab_hash : - + 185207387i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitSuitStorage".into(), target_prefab_hash : 1088892825i32, tier + : MachineTier::TierOne, time : 30f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 15f64), ("Silver".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasFilterCarbonDioxide".into(), + target_prefab_hash : 1635000764i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasFilterPollutants".into(), + target_prefab_hash : 1915566057i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasFilterNitrogen".into(), + target_prefab_hash : 632853248i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasFilterOxygen".into(), + target_prefab_hash : - 721824748i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasFilterVolatiles".into(), + target_prefab_hash : 15011598i32, tier : MachineTier::TierOne, time : + 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop + : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasFilterNitrousOxide".into(), + target_prefab_hash : - 1247674305i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasFilterWater".into(), + target_prefab_hash : - 1993197973i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasFilterCarbonDioxideM".into(), + target_prefab_hash : 416897318i32, tier : MachineTier::TierOne, time + : 20f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Constantan".into(), 1f64), ("Iron".into(), 5f64), + ("Silver".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemGasFilterPollutantsM".into(), target_prefab_hash + : 63677771i32, tier : MachineTier::TierOne, time : 20f64, energy : + 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Constantan".into(), 1f64), ("Iron".into(), 5f64), ("Silver" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemGasFilterNitrogenM".into(), target_prefab_hash : - 632657357i32, + tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Constantan" + .into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemGasFilterOxygenM".into(), target_prefab_hash : - 1067319543i32, + tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Constantan" + .into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemGasFilterVolatilesM".into(), target_prefab_hash : 1037507240i32, + tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Constantan" + .into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemGasFilterNitrousOxideM".into(), target_prefab_hash : + 1824284061i32, tier : MachineTier::TierOne, time : 20f64, energy : + 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Constantan".into(), 1f64), ("Iron".into(), 5f64), ("Silver" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemGasFilterWaterM".into(), target_prefab_hash : 8804422i32, tier : + MachineTier::TierOne, time : 20f64, energy : 2500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Constantan".into(), 1f64), + ("Iron".into(), 5f64), ("Silver".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemGasFilterCarbonDioxideL" + .into(), target_prefab_hash : 1876847024i32, tier : + MachineTier::TierTwo, time : 45f64, energy : 4000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Invar".into(), 1f64), ("Steel" + .into(), 5f64), ("Stellite".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGasFilterPollutantsL".into(), + target_prefab_hash : 1959564765i32, tier : MachineTier::TierTwo, time + : 45f64, energy : 4000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), + ("Stellite".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemGasFilterNitrogenL".into(), target_prefab_hash : + - 1387439451i32, tier : MachineTier::TierTwo, time : 45f64, energy : + 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemGasFilterOxygenL".into(), target_prefab_hash : - 1217998945i32, + tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Invar".into(), + 1f64), ("Steel".into(), 5f64), ("Stellite".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemGasFilterVolatilesL".into(), target_prefab_hash : 1255156286i32, + tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Invar".into(), + 1f64), ("Steel".into(), 5f64), ("Stellite".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemGasFilterNitrousOxideL".into(), target_prefab_hash : + 465267979i32, tier : MachineTier::TierTwo, time : 45f64, energy : + 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemGasFilterWaterL".into(), target_prefab_hash : 2004969680i32, + tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Invar".into(), + 1f64), ("Steel".into(), 5f64), ("Stellite".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPipeUtility".into(), target_prefab_hash : 1934508338i32, tier + : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPipeUtilityLiquid".into(), target_prefab_hash : 595478589i32, + tier : MachineTier::TierOne, time : 15f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), + 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemAdhesiveInsulation".into(), target_prefab_hash : 1871048978i32, + tier : MachineTier::TierOne, time : 2f64, energy : 200f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Silicon".into(), + 1f64), ("Steel".into(), 0.5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitInsulatedPipeUtility".into(), + target_prefab_hash : - 27284803i32, tier : MachineTier::TierOne, time + : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Silicon".into(), 1f64), ("Steel".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitInsulatedPipeUtilityLiquid".into(), target_prefab_hash : - + 1831558953i32, tier : MachineTier::TierOne, time : 15f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Silicon".into(), 1f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemHydroponicTray".into(), + target_prefab_hash : - 1193543727i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 10f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitPlanter".into(), target_prefab_hash + : 119096484i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitAirlock".into(), target_prefab_hash : 964043875i32, tier : + MachineTier::TierOne, time : 50f64, energy : 5000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" + .into(), 5f64), ("Steel".into(), 15f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitAirlockGate".into(), + target_prefab_hash : 682546947i32, tier : MachineTier::TierOne, time + : 60f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), + ("Steel".into(), 25f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitAtmospherics".into(), target_prefab_hash : + 1222286371i32, tier : MachineTier::TierOne, time : 30f64, energy : + 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 20f64), ("Gold".into(), 5f64), ("Iron".into(), + 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitWaterPurifier".into(), target_prefab_hash : 611181283i32, + tier : MachineTier::TierOne, time : 30f64, energy : 6000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 20f64), ("Gold".into(), 5f64), ("Iron".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitChute".into(), + target_prefab_hash : 1025254665i32, tier : MachineTier::TierOne, time + : 2f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitStandardChute".into(), + target_prefab_hash : 2133035682i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Constantan".into(), 2f64), ("Electrum".into(), + 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitPipe".into(), target_prefab_hash : - + 1619793705i32, tier : MachineTier::TierOne, time : 2f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 0.5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitInsulatedPipe".into(), target_prefab_hash : 452636699i32, + tier : MachineTier::TierOne, time : 4f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Silicon".into(), + 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitInsulatedLiquidPipe".into(), + target_prefab_hash : 2067655311i32, tier : MachineTier::TierOne, time + : 4f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Silicon".into(), 1f64), ("Steel".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPipeLiquid".into(), target_prefab_hash : - 1166461357i32, + tier : MachineTier::TierOne, time : 2f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), + 0.5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitRegulator".into(), target_prefab_hash : 1181371795i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 1f64), ("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitLiquidRegulator".into(), + target_prefab_hash : 1951126161i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), + ("Iron".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitTank".into(), target_prefab_hash : + 771439840i32, tier : MachineTier::TierOne, time : 20f64, energy : + 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 5f64), ("Steel".into(), 20f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitLiquidTank".into(), + target_prefab_hash : - 799849305i32, tier : MachineTier::TierOne, + time : 20f64, energy : 2000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 5f64), ("Steel".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitTankInsulated".into(), target_prefab_hash : 1021053608i32, + tier : MachineTier::TierOne, time : 30f64, energy : 6000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 5f64), ("Silicon".into(), 30f64), ("Steel".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLiquidTankInsulated".into(), target_prefab_hash : + 617773453i32, tier : MachineTier::TierOne, time : 30f64, energy : + 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Silicon".into(), 30f64), ("Steel" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPassiveVent".into(), target_prefab_hash : 238631271i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemPassiveVentInsulated".into(), target_prefab_hash : - + 1397583760i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Silicon".into(), 5f64), ("Steel".into(), 1f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemPipeCowl".into(), + target_prefab_hash : - 38898376i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemPipeAnalyizer".into(), + target_prefab_hash : - 767597887i32, tier : MachineTier::TierOne, + time : 10f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Electrum".into(), 2f64), ("Gold".into(), 2f64), + ("Iron".into(), 2f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemPipeIgniter".into(), target_prefab_hash : + 1366030599i32, tier : MachineTier::TierOne, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Electrum".into(), 2f64), ("Iron".into(), 2f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemLiquidPipeAnalyzer" + .into(), target_prefab_hash : 226055671i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Electrum".into(), 2f64), + ("Gold".into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() + }, Recipe { target_prefab : "ItemPipeDigitalValve".into(), + target_prefab_hash : - 1532448832i32, tier : MachineTier::TierOne, + time : 15f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Invar".into(), 3f64), + ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemWaterPipeDigitalValve".into(), + target_prefab_hash : 309693520i32, tier : MachineTier::TierOne, time + : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Invar".into(), 3f64), + ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemPipeGasMixer".into(), target_prefab_hash : - + 1134459463i32, tier : MachineTier::TierOne, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 2f64), ("Iron".into(), + 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPipeLabel".into(), target_prefab_hash : 391769637i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemPipeMeter" + .into(), target_prefab_hash : 1207939683i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemWaterPipeMeter".into(), target_prefab_hash : - 90898877i32, tier + : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemLiquidDrain".into(), target_prefab_hash : 2036225202i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPipeRadiator".into(), target_prefab_hash : 920411066i32, tier + : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Gold".into(), 3f64), ("Steel" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLargeExtendableRadiator".into(), target_prefab_hash : + 847430620i32, tier : MachineTier::TierTwo, time : 30f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 10f64), ("Invar".into(), 10f64), ("Steel" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPassiveLargeRadiatorLiquid".into(), target_prefab_hash : + 1453961898i32, tier : MachineTier::TierTwo, time : 30f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Invar".into(), 5f64), ("Steel" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPassiveLargeRadiatorGas".into(), target_prefab_hash : - + 1752768283i32, tier : MachineTier::TierTwo, time : 30f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Invar".into(), 5f64), ("Steel" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPoweredVent".into(), target_prefab_hash : 2015439334i32, tier + : MachineTier::TierTwo, time : 20f64, energy : 1000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Electrum".into(), 5f64), + ("Invar".into(), 2f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitHeatExchanger".into(), + target_prefab_hash : - 1710540039i32, tier : MachineTier::TierTwo, + time : 30f64, energy : 1000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Invar".into(), 10f64), ("Steel".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLargeDirectHeatExchanger".into(), target_prefab_hash : + 450164077i32, tier : MachineTier::TierTwo, time : 30f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Invar".into(), 10f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemKitPassthroughHeatExchanger".into(), target_prefab_hash : + 636112787i32, tier : MachineTier::TierTwo, time : 30f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Invar".into(), 10f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemKitSmallDirectHeatExchanger".into(), target_prefab_hash : - + 1332682164i32, tier : MachineTier::TierOne, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 5f64), ("Steel".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitEvaporationChamber" + .into(), target_prefab_hash : 1587787610i32, tier : + MachineTier::TierOne, time : 30f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 10f64), + ("Silicon".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitPipeRadiatorLiquid" + .into(), target_prefab_hash : - 1697302609i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Gold".into(), 3f64), ("Steel" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPipeValve".into(), target_prefab_hash : 799323450i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemLiquidPipeValve".into(), target_prefab_hash : - 2126113312i32, + tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemPipeVolumePump".into(), target_prefab_hash : - + 1766301997i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Iron".into(), + 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitTurboVolumePump".into(), target_prefab_hash : - + 1248429712i32, tier : MachineTier::TierTwo, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 4f64), ("Electrum".into(), 5f64), ("Gold" + .into(), 4f64), ("Steel".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitLiquidTurboVolumePump".into(), + target_prefab_hash : - 1805020897i32, tier : MachineTier::TierTwo, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Copper".into(), 4f64), ("Electrum".into(), 5f64), + ("Gold".into(), 4f64), ("Steel".into(), 5f64)] .into_iter().collect() + }, Recipe { target_prefab : "ItemLiquidPipeVolumePump".into(), + target_prefab_hash : - 2106280569i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), + ("Iron".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemLiquidPipeHeater".into(), target_prefab_hash : - + 248475032i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 3f64), ("Gold".into(), 3f64), ("Iron".into(), + 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPipeHeater".into(), target_prefab_hash : - 1751627006i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold" + .into(), 3f64), ("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitPortablesConnector".into(), + target_prefab_hash : 1041148999i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemWallCooler".into(), target_prefab_hash + : - 1567752627i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 3f64), ("Gold".into(), 1f64), ("Iron".into(), + 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemWaterWallCooler".into(), target_prefab_hash : - 1721846327i32, + tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 3f64), ("Gold".into(), 1f64), ("Iron".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemWallHeater".into(), + target_prefab_hash : 1880134612i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 1f64), + ("Iron".into(), 3f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitSleeper".into(), target_prefab_hash : + 326752036i32, tier : MachineTier::TierOne, time : 60f64, energy : + 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 10f64), ("Gold".into(), 10f64), ("Steel" + .into(), 25f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitCryoTube".into(), target_prefab_hash : - 545234195i32, tier : + MachineTier::TierTwo, time : 120f64, energy : 24000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 4i64, reagents : vec![("Copper".into(), 10f64), ("Gold" + .into(), 10f64), ("Silver".into(), 5f64), ("Steel".into(), 35f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemDynamicAirCon".into(), target_prefab_hash : 1072914031i32, tier + : MachineTier::TierOne, time : 60f64, energy : 5000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 4i64, reagents : vec![("Gold".into(), 5f64), ("Silver" + .into(), 5f64), ("Solder".into(), 5f64), ("Steel".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemDynamicScrubber".into(), target_prefab_hash : - 971920158i32, + tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 4i64, reagents : vec![("Gold".into(), + 5f64), ("Invar".into(), 5f64), ("Solder".into(), 5f64), ("Steel" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitDynamicHydroponics".into(), target_prefab_hash : - + 1861154222i32, tier : MachineTier::TierOne, time : 30f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Nickel".into(), 5f64), ("Steel" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPipeOrgan".into(), target_prefab_hash : - 827125300i32, tier + : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitIceCrusher".into(), target_prefab_hash : 288111533i32, tier : + MachineTier::TierOne, time : 30f64, energy : 3000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" + .into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitShower".into(), target_prefab_hash : + 735858725i32, tier : MachineTier::TierOne, time : 30f64, energy : + 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Iron".into(), 5f64), ("Silicon" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ApplianceSeedTray".into(), target_prefab_hash : 142831994i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 10f64), ("Silicon".into(), 15f64)] .into_iter().collect() } + ] + .into_iter() + .collect(), + }), + memory: MemoryInfo { + instructions: Some( + vec![ + ("DeviceSetLock".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : + InstructionPartType::Bool8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(48u32) }] .into_iter().collect() }), + ("EjectAllReagents".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }), + ("EjectReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("ExecuteRecipe".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("JumpIfNextInvalid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("JumpToAddress".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("MissingRecipeReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, + Some(62u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("StackPointer".into(), Instruction { description : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("WaitUntilNextValid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ); + map.insert( + 1441767298i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHydroponicsStation".into(), + prefab_hash: 1441767298i32, + desc: "".into(), + name: "Hydroponics Station".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Efficiency, MemoryAccess::Read), + (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::Mature, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Efficiency, MemoryAccess::Read), + (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::Mature, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Efficiency, MemoryAccess::Read), + (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::Mature, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Efficiency, MemoryAccess::Read), + (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::Mature, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Efficiency, MemoryAccess::Read), + (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::Mature, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Efficiency, MemoryAccess::Read), + (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::Mature, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (6, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Efficiency, MemoryAccess::Read), + (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::Mature, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (7, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Efficiency, MemoryAccess::Read), + (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::Mature, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Plant".into(), class : + Class::Plant, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Plant" + .into(), class : Class::Plant, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Plant".into(), class : Class::Plant, index : 3u32 }), (4u32, + SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, index : + 4u32 }), (5u32, SlotInfo::Direct { name : "Plant".into(), class : + Class::Plant, index : 5u32 }), (6u32, SlotInfo::Direct { name : "Plant" + .into(), class : Class::Plant, index : 6u32 }), (7u32, SlotInfo::Direct { + name : "Plant".into(), class : Class::Plant, index : 7u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1464854517i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHydroponicsTray".into(), + prefab_hash: 1464854517i32, + desc: "The Agrizero hydroponics tray is the ideal vessel for growing a range of plantlife. It must be supplied with water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie." + .into(), + name: "Hydroponics Tray".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Fertiliser".into(), + class : Class::Plant, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1841632400i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureHydroponicsTrayData".into(), + prefab_hash: -1841632400i32, + desc: "The Agrizero hydroponics device is the ideal vessel for growing a range of plantlife. It must be supplied with Water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie. Note that unlike the Hydroponics Tray, these cannot be placed consecutively as they are considered devices rather than pure pipes. They do, however, allow data interrogation for logic systems." + .into(), + name: "Hydroponics Device".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Efficiency, MemoryAccess::Read), + (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::Mature, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Seeding, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Fertiliser".into(), + class : Class::Plant, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 443849486i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureIceCrusher".into(), + prefab_hash: 443849486i32, + desc: "The Recurso KoolAuger converts various ices into their respective gases and liquids.\nA remarkably smart and compact sublimation-melting unit, it produces gas or liquid depending on the ice being processed. The upper outlet is gas, the lower for liquid, and while you can attach any pipe you like to either outlet, it will only function if the correct network is attached. It will also only pass gas or liquid into a network if it is powered and turned on.\nIf the KoolAuger is full, it will not accept any further ice until the gas or liquid contents is drained. In this state, it will flash a yellow error state on the activation switch." + .into(), + name: "Ice Crusher".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ore, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1005491513i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureIgniter".into(), + prefab_hash: 1005491513i32, + desc: "It gets the party started. Especially if that party is an explosive gas mixture." + .into(), + name: "Igniter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1693382705i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInLineTankGas1x1".into(), + prefab_hash: -1693382705i32, + desc: "A small expansion tank that increases the volume of a pipe network." + .into(), + name: "In-Line Tank Small Gas".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 35149429i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInLineTankGas1x2".into(), + prefab_hash: 35149429i32, + desc: "A small expansion tank that increases the volume of a pipe network." + .into(), + name: "In-Line Tank Gas".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 543645499i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInLineTankLiquid1x1".into(), + prefab_hash: 543645499i32, + desc: "A small expansion tank that increases the volume of a pipe network." + .into(), + name: "In-Line Tank Small Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1183969663i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInLineTankLiquid1x2".into(), + prefab_hash: -1183969663i32, + desc: "A small expansion tank that increases the volume of a pipe network." + .into(), + name: "In-Line Tank Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1818267386i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedInLineTankGas1x1".into(), + prefab_hash: 1818267386i32, + desc: "".into(), + name: "Insulated In-Line Tank Small Gas".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -177610944i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedInLineTankGas1x2".into(), + prefab_hash: -177610944i32, + desc: "".into(), + name: "Insulated In-Line Tank Gas".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -813426145i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedInLineTankLiquid1x1".into(), + prefab_hash: -813426145i32, + desc: "".into(), + name: "Insulated In-Line Tank Small Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1452100517i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedInLineTankLiquid1x2".into(), + prefab_hash: 1452100517i32, + desc: "".into(), + name: "Insulated In-Line Tank Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1967711059i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeCorner".into(), + prefab_hash: -1967711059i32, + desc: "Insulated pipes greatly reduce heat loss from gases stored in them." + .into(), + name: "Insulated Pipe (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -92778058i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeCrossJunction".into(), + prefab_hash: -92778058i32, + desc: "Insulated pipes greatly reduce heat loss from gases stored in them." + .into(), + name: "Insulated Pipe (Cross Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1328210035i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeCrossJunction3".into(), + prefab_hash: 1328210035i32, + desc: "Insulated pipes greatly reduce heat loss from gases stored in them." + .into(), + name: "Insulated Pipe (3-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -783387184i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeCrossJunction4".into(), + prefab_hash: -783387184i32, + desc: "Insulated pipes greatly reduce heat loss from gases stored in them." + .into(), + name: "Insulated Pipe (4-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1505147578i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeCrossJunction5".into(), + prefab_hash: -1505147578i32, + desc: "Insulated pipes greatly reduce heat loss from gases stored in them." + .into(), + name: "Insulated Pipe (5-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1061164284i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeCrossJunction6".into(), + prefab_hash: 1061164284i32, + desc: "Insulated pipes greatly reduce heat loss from gases stored in them." + .into(), + name: "Insulated Pipe (6-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1713710802i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeLiquidCorner".into(), + prefab_hash: 1713710802i32, + desc: "Liquid piping with very low temperature loss or gain.".into(), + name: "Insulated Liquid Pipe (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1926651727i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeLiquidCrossJunction".into(), + prefab_hash: 1926651727i32, + desc: "Liquid piping with very low temperature loss or gain.".into(), + name: "Insulated Liquid Pipe (3-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 363303270i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeLiquidCrossJunction4".into(), + prefab_hash: 363303270i32, + desc: "Liquid piping with very low temperature loss or gain.".into(), + name: "Insulated Liquid Pipe (4-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1654694384i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeLiquidCrossJunction5".into(), + prefab_hash: 1654694384i32, + desc: "Liquid piping with very low temperature loss or gain.".into(), + name: "Insulated Liquid Pipe (5-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -72748982i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeLiquidCrossJunction6".into(), + prefab_hash: -72748982i32, + desc: "Liquid piping with very low temperature loss or gain.".into(), + name: "Insulated Liquid Pipe (6-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 295678685i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeLiquidStraight".into(), + prefab_hash: 295678685i32, + desc: "Liquid piping with very low temperature loss or gain.".into(), + name: "Insulated Liquid Pipe (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -532384855i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeLiquidTJunction".into(), + prefab_hash: -532384855i32, + desc: "Liquid piping with very low temperature loss or gain.".into(), + name: "Insulated Liquid Pipe (T Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2134172356i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeStraight".into(), + prefab_hash: 2134172356i32, + desc: "Insulated pipes greatly reduce heat loss from gases stored in them." + .into(), + name: "Insulated Pipe (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2076086215i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedPipeTJunction".into(), + prefab_hash: -2076086215i32, + desc: "Insulated pipes greatly reduce heat loss from gases stored in them." + .into(), + name: "Insulated Pipe (T Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -31273349i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedTankConnector".into(), + prefab_hash: -31273349i32, + desc: "".into(), + name: "Insulated Tank Connector".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1602030414i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInsulatedTankConnectorLiquid".into(), + prefab_hash: -1602030414i32, + desc: "".into(), + name: "Insulated Tank Connector Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Portable Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -2096421875i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInteriorDoorGlass".into(), + prefab_hash: -2096421875i32, + desc: "0.Operate\n1.Logic".into(), + name: "Interior Door Glass".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 847461335i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInteriorDoorPadded".into(), + prefab_hash: 847461335i32, + desc: "0.Operate\n1.Logic".into(), + name: "Interior Door Padded".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1981698201i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInteriorDoorPaddedThin".into(), + prefab_hash: 1981698201i32, + desc: "0.Operate\n1.Logic".into(), + name: "Interior Door Padded Thin".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1182923101i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureInteriorDoorTriangle".into(), + prefab_hash: -1182923101i32, + desc: "0.Operate\n1.Logic".into(), + name: "Interior Door Triangle".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -828056979i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureKlaxon".into(), + prefab_hash: -828056979i32, + desc: "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output." + .into(), + name: "Klaxon Speaker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::SoundAlert, + MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "None".into()), (1, "Alarm2".into()), (2, "Alarm3".into()), + (3, "Alarm4".into()), (4, "Alarm5".into()), (5, "Alarm6".into()), + (6, "Alarm7".into()), (7, "Music1".into()), (8, "Music2".into()), + (9, "Music3".into()), (10, "Alarm8".into()), (11, "Alarm9" + .into()), (12, "Alarm10".into()), (13, "Alarm11".into()), (14, + "Alarm12".into()), (15, "Danger".into()), (16, "Warning".into()), + (17, "Alert".into()), (18, "StormIncoming".into()), (19, + "IntruderAlert".into()), (20, "Depressurising".into()), (21, + "Pressurising".into()), (22, "AirlockCycling".into()), (23, + "PowerLow".into()), (24, "SystemFailure".into()), (25, "Welcome" + .into()), (26, "MalfunctionDetected".into()), (27, + "HaltWhoGoesThere".into()), (28, "FireFireFire".into()), (29, + "One".into()), (30, "Two".into()), (31, "Three".into()), (32, + "Four".into()), (33, "Five".into()), (34, "Floor".into()), (35, + "RocketLaunching".into()), (36, "LiftOff".into()), (37, + "TraderIncoming".into()), (38, "TraderLanded".into()), (39, + "PressureHigh".into()), (40, "PressureLow".into()), (41, + "TemperatureHigh".into()), (42, "TemperatureLow".into()), (43, + "PollutantsDetected".into()), (44, "HighCarbonDioxide".into()), + (45, "Alarm1".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -415420281i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLadder".into(), + prefab_hash: -415420281i32, + desc: "".into(), + name: "Ladder".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1541734993i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLadderEnd".into(), + prefab_hash: 1541734993i32, + desc: "".into(), + name: "Ladder End".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1230658883i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLargeDirectHeatExchangeGastoGas".into(), + prefab_hash: -1230658883i32, + desc: "Direct Heat Exchangers equalize the temperature of the two input networks." + .into(), + name: "Large Direct Heat Exchanger - Gas + Gas".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1412338038i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLargeDirectHeatExchangeGastoLiquid".into(), + prefab_hash: 1412338038i32, + desc: "Direct Heat Exchangers equalize the temperature of the two input networks." + .into(), + name: "Large Direct Heat Exchanger - Gas + Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 792686502i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLargeDirectHeatExchangeLiquidtoLiquid".into(), + prefab_hash: 792686502i32, + desc: "Direct Heat Exchangers equalize the temperature of the two input networks." + .into(), + name: "Large Direct Heat Exchange - Liquid + Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -566775170i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLargeExtendableRadiator".into(), + prefab_hash: -566775170i32, + desc: "Omptimised for radiating heat in vacuum and low pressure environments. If pointed at the sun it will heat its contents rapidly via solar heating. The panels can fold away to stop all heat radiation/solar heating and protect them from storms." + .into(), + name: "Large Extendable Radiator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.02f32, + radiation_factor: 2f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1351081801i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLargeHangerDoor".into(), + prefab_hash: -1351081801i32, + desc: "1 x 3 modular door piece for building hangar doors.".into(), + name: "Large Hangar Door".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1913391845i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLargeSatelliteDish".into(), + prefab_hash: 1913391845i32, + desc: "This large communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer (Modern) containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic." + .into(), + name: "Large Satellite Dish".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::Horizontal, MemoryAccess::ReadWrite), + (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::SignalStrength, MemoryAccess::Read), + (LogicType::SignalId, MemoryAccess::Read), + (LogicType::InterrogationProgress, MemoryAccess::Read), + (LogicType::TargetPadIndex, MemoryAccess::ReadWrite), + (LogicType::SizeX, MemoryAccess::Read), (LogicType::SizeZ, + MemoryAccess::Read), (LogicType::MinimumWattsToContact, + MemoryAccess::Read), (LogicType::WattsReachingContact, + MemoryAccess::Read), (LogicType::ContactTypeId, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::BestContactFilter, MemoryAccess::ReadWrite), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1978422481i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLarreDockAtmos".into(), + prefab_hash: 1978422481i32, + desc: "0.Outward\n1.Inward".into(), + name: "LARrE Dock (Atmos)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::PressureExternal, MemoryAccess::ReadWrite), + (LogicType::PressureInternal, MemoryAccess::ReadWrite), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::Index, + MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Outward".into()), (1, "Inward".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Filter".into(), class : + Class::GasFilter, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::RoboticArmRail, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::RoboticArmRail, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1011275082i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLarreDockBypass".into(), + prefab_hash: 1011275082i32, + desc: "".into(), + name: "LARrE Dock (Bypass)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::RoboticArmRail, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::RoboticArmRail, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1555459562i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLarreDockCargo".into(), + prefab_hash: -1555459562i32, + desc: "".into(), + name: "LARrE Dock (Cargo)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::Index, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read), + (LogicType::TargetSlotIndex, MemoryAccess::ReadWrite), + (LogicType::TargetPrefabHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Arm Slot".into(), class : Class::None, + index : 0u32 }), (255u32, SlotInfo::Proxy { name : "Target Slot".into(), + index : 255u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::RoboticArmRail, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::RoboticArmRail, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -522428667i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLarreDockCollector".into(), + prefab_hash: -522428667i32, + desc: "0.Outward\n1.Inward".into(), + name: "LARrE Dock (Collector)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()), (3, vec![] + .into_iter().collect()), (4, vec![] .into_iter().collect()), (5, + vec![] .into_iter().collect()), (6, vec![] .into_iter().collect()), + (7, vec![] .into_iter().collect()), (8, vec![] .into_iter() + .collect()), (9, vec![] .into_iter().collect()), (10, vec![] + .into_iter().collect()), (11, vec![] .into_iter().collect()), (12, + vec![] .into_iter().collect()), (13, vec![] .into_iter().collect()), + (14, vec![] .into_iter().collect()), (15, vec![] .into_iter() + .collect()), (16, vec![] .into_iter().collect()), (17, vec![] + .into_iter().collect()), (18, vec![] .into_iter().collect()), (19, + vec![] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::Index, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Outward".into()), (1, "Inward".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "".into(), class : Class::None, + index : 2u32 }), (3u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 4u32 }), + (5u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 5u32 }), (6u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 6u32 }), (7u32, + SlotInfo::Direct { name : "".into(), class : Class::None, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 9u32 }), + (10u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 10u32 }), (11u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 11u32 }), + (12u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 12u32 }), (13u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 13u32 }), + (14u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 14u32 }), (15u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 15u32 }), + (16u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 16u32 }), (17u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 17u32 }), + (18u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 18u32 }), (19u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 19u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::RoboticArmRail, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::RoboticArmRail, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 85133079i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLarreDockHydroponics".into(), + prefab_hash: 85133079i32, + desc: "".into(), + name: "LARrE Dock (Hydroponics)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::Index, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read), + (LogicType::TargetSlotIndex, MemoryAccess::Read), + (LogicType::TargetPrefabHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Arm Slot".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Arm Slot".into(), + class : Class::None, index : 1u32 }), (255u32, SlotInfo::Proxy { name : + "Target Slot".into(), index : 255u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::RoboticArmRail, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::RoboticArmRail, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -558953231i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLaunchMount".into(), + prefab_hash: -558953231i32, + desc: "The first piece to place whern building a rocket. Rockets can be constructed and/or landed here. Each Launch Mount will be allocated a slot on the Space Map and assigned a Location Code." + .into(), + name: "Launch Mount".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 797794350i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightLong".into(), + prefab_hash: 797794350i32, + desc: "".into(), + name: "Wall Light (Long)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1847265835i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightLongAngled".into(), + prefab_hash: 1847265835i32, + desc: "".into(), + name: "Wall Light (Long Angled)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 555215790i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightLongWide".into(), + prefab_hash: 555215790i32, + desc: "".into(), + name: "Wall Light (Long Wide)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1514476632i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightRound".into(), + prefab_hash: 1514476632i32, + desc: "".into(), + name: "Light Round".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1592905386i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightRoundAngled".into(), + prefab_hash: 1592905386i32, + desc: "".into(), + name: "Light Round (Angled)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1436121888i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLightRoundSmall".into(), + prefab_hash: 1436121888i32, + desc: "".into(), + name: "Light Round (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1687692899i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidDrain".into(), + prefab_hash: 1687692899i32, + desc: "When connected to power and activated, it pumps liquid from a liquid network into the world." + .into(), + name: "Active Liquid Outlet".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2113838091i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidPipeAnalyzer".into(), + prefab_hash: -2113838091i32, + desc: "".into(), + name: "Liquid Pipe Analyzer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::Volume, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -287495560i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidPipeHeater".into(), + prefab_hash: -287495560i32, + desc: "Adds 1000 joules of heat per tick to the contents of your pipe network." + .into(), + name: "Pipe Heater (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2072805863i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidPipeRadiator".into(), + prefab_hash: 2072805863i32, + desc: "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added to the liquid within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the liquid in question. Adding multiple radiators will speed up heat transfer." + .into(), + name: "Liquid Pipe Convection Radiator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 1f32, + radiation_factor: 0.75f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 482248766i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidPressureRegulator".into(), + prefab_hash: 482248766i32, + desc: "Regulates the volume ratio of liquid in the output Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty." + .into(), + name: "Liquid Volume Regulator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1098900430i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTankBig".into(), + prefab_hash: 1098900430i32, + desc: "".into(), + name: "Liquid Tank Big".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1430440215i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTankBigInsulated".into(), + prefab_hash: -1430440215i32, + desc: "".into(), + name: "Insulated Liquid Tank Big".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1988118157i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTankSmall".into(), + prefab_hash: 1988118157i32, + desc: "".into(), + name: "Liquid Tank Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 608607718i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTankSmallInsulated".into(), + prefab_hash: 608607718i32, + desc: "".into(), + name: "Insulated Liquid Tank Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1691898022i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTankStorage".into(), + prefab_hash: 1691898022i32, + desc: "When connected to a liquid pipe network, the tank storage unit allows you to refill a Liquid Canister, as well as read various atmospheric data from the Gas Canister. It will not accept gas canisters." + .into(), + name: "Liquid Tank Storage".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Quantity, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Liquid Canister".into(), class : + Class::LiquidCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1051805505i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidTurboVolumePump".into(), + prefab_hash: -1051805505i32, + desc: "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction." + .into(), + name: "Turbo Volume Pump (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Right".into()), (1, "Left".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1734723642i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidUmbilicalFemale".into(), + prefab_hash: 1734723642i32, + desc: "".into(), + name: "Umbilical Socket (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1220870319i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidUmbilicalFemaleSide".into(), + prefab_hash: 1220870319i32, + desc: "".into(), + name: "Umbilical Socket Angle (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1798420047i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidUmbilicalMale".into(), + prefab_hash: -1798420047i32, + desc: "0.Left\n1.Center\n2.Right".into(), + name: "Umbilical (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::Read), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Left".into()), (1, "Center".into()), (2, "Right".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1849974453i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidValve".into(), + prefab_hash: 1849974453i32, + desc: "".into(), + name: "Valve (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -454028979i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLiquidVolumePump".into(), + prefab_hash: -454028979i32, + desc: "".into(), + name: "Liquid Volume Pump".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -647164662i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLockerSmall".into(), + prefab_hash: -647164662i32, + desc: "".into(), + name: "Locker (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 264413729i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicBatchReader".into(), + prefab_hash: 264413729i32, + desc: "".into(), + name: "Batch Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 436888930i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicBatchSlotReader".into(), + prefab_hash: 436888930i32, + desc: "".into(), + name: "Batch Slot Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1415443359i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicBatchWriter".into(), + prefab_hash: 1415443359i32, + desc: "".into(), + name: "Batch Writer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ForceWrite, + MemoryAccess::Write), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 491845673i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicButton".into(), + prefab_hash: 491845673i32, + desc: "".into(), + name: "Button".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1489728908i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicCompare".into(), + prefab_hash: -1489728908i32, + desc: "0.Equals\n1.Greater\n2.Less\n3.NotEquals".into(), + name: "Logic Compare".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Equals".into()), (1, "Greater".into()), (2, "Less".into()), + (3, "NotEquals".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 554524804i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicDial".into(), + prefab_hash: 554524804i32, + desc: "An assignable dial with up to 1000 modes.".into(), + name: "Dial".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1942143074i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicGate".into(), + prefab_hash: 1942143074i32, + desc: "A logic device that performs a logical operation on one or more binary inputs that produces a single binary output. An input greater than zero is considered true for operations." + .into(), + name: "Logic Gate".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "AND".into()), (1, "OR".into()), (2, "XOR".into()), (3, + "NAND".into()), (4, "NOR".into()), (5, "XNOR".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2077593121i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicHashGen".into(), + prefab_hash: 2077593121i32, + desc: "".into(), + name: "Logic Hash Generator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1657691323i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicMath".into(), + prefab_hash: 1657691323i32, + desc: "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log" + .into(), + name: "Logic Math".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Add".into()), (1, "Subtract".into()), (2, "Multiply" + .into()), (3, "Divide".into()), (4, "Mod".into()), (5, "Atan2" + .into()), (6, "Pow".into()), (7, "Log".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1160020195i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicMathUnary".into(), + prefab_hash: -1160020195i32, + desc: "0.Ceil\n1.Floor\n2.Abs\n3.Log\n4.Exp\n5.Round\n6.Rand\n7.Sqrt\n8.Sin\n9.Cos\n10.Tan\n11.Asin\n12.Acos\n13.Atan\n14.Not" + .into(), + name: "Math Unary".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Ceil".into()), (1, "Floor".into()), (2, "Abs".into()), (3, + "Log".into()), (4, "Exp".into()), (5, "Round".into()), (6, "Rand" + .into()), (7, "Sqrt".into()), (8, "Sin".into()), (9, "Cos" + .into()), (10, "Tan".into()), (11, "Asin".into()), (12, "Acos" + .into()), (13, "Atan".into()), (14, "Not".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -851746783i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicMemory".into(), + prefab_hash: -851746783i32, + desc: "".into(), + name: "Logic Memory".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 929022276i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicMinMax".into(), + prefab_hash: 929022276i32, + desc: "0.Greater\n1.Less".into(), + name: "Logic Min/Max".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Greater".into()), (1, "Less".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2096189278i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicMirror".into(), + prefab_hash: 2096189278i32, + desc: "".into(), + name: "Logic Mirror".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![].into_iter().collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -345383640i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicReader".into(), + prefab_hash: -345383640i32, + desc: "".into(), + name: "Logic Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -124308857i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicReagentReader".into(), + prefab_hash: -124308857i32, + desc: "".into(), + name: "Reagent Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 876108549i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicRocketDownlink".into(), + prefab_hash: 876108549i32, + desc: "".into(), + name: "Logic Rocket Downlink".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 546002924i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicRocketUplink".into(), + prefab_hash: 546002924i32, + desc: "".into(), + name: "Logic Uplink".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1822736084i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicSelect".into(), + prefab_hash: 1822736084i32, + desc: "0.Equals\n1.Greater\n2.Less\n3.NotEquals".into(), + name: "Logic Select".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Equals".into()), (1, "Greater".into()), (2, "Less".into()), + (3, "NotEquals".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -767867194i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicSlotReader".into(), + prefab_hash: -767867194i32, + desc: "".into(), + name: "Slot Reader".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 873418029i32, + StructureLogicDeviceMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicSorter".into(), + prefab_hash: 873418029i32, + desc: "Contains an Internal Memory which is assessed to check whether something should be sorted. When an item is in the Import Slot, the stack is checked and if result is true the thing is moved to the Export 2 slot, otherwise it is moved to the Export slot. The Mode is used in how the stack is assessed, by default the mode is ALL, so every instruction in the stack would need to return true." + .into(), + name: "Logic Sorter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "All".into()), (1, "Any".into()), (2, "None".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Export 2".into(), class : Class::None, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "Data Disk".into(), class : Class::DataDisk, + index : 3u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Output2 }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + memory: MemoryInfo { + instructions: Some( + vec![ + ("FilterPrefabHashEquals".into(), Instruction { description : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "SorterInstruction".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "PREFAB_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("FilterPrefabHashNotEquals".into(), Instruction { description : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "SorterInstruction".into(), value : 2i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "PREFAB_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("FilterQuantityCompare".into(), Instruction { description : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | QUANTITY | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" + .into(), description_stripped : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | QUANTITY | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" + .into(), typ : "SorterInstruction".into(), value : 5i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "CONDITION_OPERATION".into(), + typ : InstructionPartType::Byte8 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 31u32)) + }, name : "QUANTITY".into(), typ : InstructionPartType::UShort16 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((32u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(32u32) }] .into_iter().collect() }), + ("FilterSlotTypeCompare".into(), Instruction { description : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SLOT_TYPE | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" + .into(), description_stripped : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SLOT_TYPE | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" + .into(), typ : "SorterInstruction".into(), value : 4i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "CONDITION_OPERATION".into(), + typ : InstructionPartType::Byte8 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 31u32)) + }, name : "SLOT_TYPE".into(), typ : InstructionPartType::UShort16 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((32u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(32u32) }] .into_iter().collect() }), + ("FilterSortingClassCompare".into(), Instruction { description : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SORTING_CLASS | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" + .into(), description_stripped : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SORTING_CLASS | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" + .into(), typ : "SorterInstruction".into(), value : 3i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "CONDITION_OPERATION".into(), + typ : InstructionPartType::Byte8 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 31u32)) + }, name : "SORTING_CLASS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((32u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(32u32) }] .into_iter().collect() }), + ("LimitNextExecutionByCount".into(), Instruction { description : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "SorterInstruction".into(), value : 6i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "COUNT".into(), typ : + InstructionPartType::UInt32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 32u32, + }, + } + .into(), + ); + map.insert( + 1220484876i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicSwitch".into(), + prefab_hash: 1220484876i32, + desc: "".into(), + name: "Lever".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 321604921i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicSwitch2".into(), + prefab_hash: 321604921i32, + desc: "".into(), + name: "Switch".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -693235651i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicTransmitter".into(), + prefab_hash: -693235651i32, + desc: "Connects to Logic Transmitter" + .into(), + name: "Logic Transmitter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![].into_iter().collect(), + modes: Some( + vec![(0, "Passive".into()), (1, "Active".into())] + .into_iter() + .collect(), + ), + transmission_receiver: true, + wireless_logic: true, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1326019434i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicWriter".into(), + prefab_hash: -1326019434i32, + desc: "".into(), + name: "Logic Writer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ForceWrite, + MemoryAccess::Write), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1321250424i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureLogicWriterSwitch".into(), + prefab_hash: -1321250424i32, + desc: "".into(), + name: "Logic Writer Switch".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ForceWrite, MemoryAccess::Write), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1808154199i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureManualHatch".into(), + prefab_hash: -1808154199i32, + desc: "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock." + .into(), + name: "Manual Hatch".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1918215845i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMediumConvectionRadiator".into(), + prefab_hash: -1918215845i32, + desc: "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere." + .into(), + name: "Medium Convection Radiator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 1.25f32, + radiation_factor: 0.4f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1169014183i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMediumConvectionRadiatorLiquid".into(), + prefab_hash: -1169014183i32, + desc: "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere." + .into(), + name: "Medium Convection Radiator Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 1.25f32, + radiation_factor: 0.4f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -566348148i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMediumHangerDoor".into(), + prefab_hash: -566348148i32, + desc: "1 x 2 modular door piece for building hangar doors.".into(), + name: "Medium Hangar Door".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Operate".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -975966237i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMediumRadiator".into(), + prefab_hash: -975966237i32, + desc: "A stand-alone radiator unit optimized for radiating heat in vacuums." + .into(), + name: "Medium Radiator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.2f32, + radiation_factor: 4f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1141760613i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMediumRadiatorLiquid".into(), + prefab_hash: -1141760613i32, + desc: "A stand-alone liquid radiator unit optimized for radiating heat in vacuums." + .into(), + name: "Medium Radiator Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.2f32, + radiation_factor: 4f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1093860567i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMediumRocketGasFuelTank".into(), + prefab_hash: -1093860567i32, + desc: "".into(), + name: "Gas Capsule Tank Medium".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1143639539i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMediumRocketLiquidFuelTank".into(), + prefab_hash: 1143639539i32, + desc: "".into(), + name: "Liquid Capsule Tank Medium".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1713470563i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureMotionSensor".into(), + prefab_hash: -1713470563i32, + desc: "Originally developed to monitor dance marathons, the motion sensor can also be connected to Logic systems for security purposes, automatic lighting, doors and various other applications.\nThe sensor activates whenever a player enters the grid it is placed on." + .into(), + name: "Motion Sensor".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Quantity, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1898243702i32, + StructureCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "StructureNitrolyzer".into(), + prefab_hash: 1898243702i32, + desc: "This device is used to create Nitrous Oxide from Oxygen, Nitrogen, and a large amount of energy. The process does not completely transform all the available gas at once, so the output is a mix of all three gasses, which may need further processing. More NOS will be created, if the gas inside the machine is close to a 1/1 ratio of Oxygen to Nitrogen. The second gas input line in optional, and not required if the gas is pre mixed." + .into(), + name: "Nitrolyzer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::PressureInput, MemoryAccess::Read), + (LogicType::TemperatureInput, MemoryAccess::Read), + (LogicType::RatioOxygenInput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioNitrogenInput, MemoryAccess::Read), + (LogicType::RatioPollutantInput, MemoryAccess::Read), + (LogicType::RatioVolatilesInput, MemoryAccess::Read), + (LogicType::RatioWaterInput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), + (LogicType::TotalMolesInput, MemoryAccess::Read), + (LogicType::PressureInput2, MemoryAccess::Read), + (LogicType::TemperatureInput2, MemoryAccess::Read), + (LogicType::RatioOxygenInput2, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideInput2, MemoryAccess::Read), + (LogicType::RatioNitrogenInput2, MemoryAccess::Read), + (LogicType::RatioPollutantInput2, MemoryAccess::Read), + (LogicType::RatioVolatilesInput2, MemoryAccess::Read), + (LogicType::RatioWaterInput2, MemoryAccess::Read), + (LogicType::RatioNitrousOxideInput2, MemoryAccess::Read), + (LogicType::TotalMolesInput2, MemoryAccess::Read), + (LogicType::PressureOutput, MemoryAccess::Read), + (LogicType::TemperatureOutput, MemoryAccess::Read), + (LogicType::RatioOxygenOutput, MemoryAccess::Read), + (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioPollutantOutput, MemoryAccess::Read), + (LogicType::RatioVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioWaterOutput, MemoryAccess::Read), + (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), + (LogicType::TotalMolesOutput, MemoryAccess::Read), + (LogicType::CombustionInput, MemoryAccess::Read), + (LogicType::CombustionInput2, MemoryAccess::Read), + (LogicType::CombustionOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenInput2, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenInput2, MemoryAccess::Read), + (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesInput2, MemoryAccess::Read), + (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioSteamInput, MemoryAccess::Read), + (LogicType::RatioSteamInput2, MemoryAccess::Read), + (LogicType::RatioSteamOutput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideInput2, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantInput2, MemoryAccess::Read), + (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideInput2, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Idle".into()), (1, "Active".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input2 }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: Some(2u32), + has_activate_state: true, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 322782515i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureOccupancySensor".into(), + prefab_hash: 322782515i32, + desc: "Will be triggered if there is a player in the same room as the sensor. The quantity variable will show the number of players. You can use configure it to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet. This sensor only works when placed in a room." + .into(), + name: "Occupancy Sensor".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Activate, MemoryAccess::Read), (LogicType::Quantity, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1794932560i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureOverheadShortCornerLocker".into(), + prefab_hash: -1794932560i32, + desc: "".into(), + name: "Overhead Corner Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1468249454i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureOverheadShortLocker".into(), + prefab_hash: 1468249454i32, + desc: "".into(), + name: "Overhead Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (6, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (7, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (8, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 6u32 + }), (7u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 9u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2066977095i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePassiveLargeRadiatorGas".into(), + prefab_hash: 2066977095i32, + desc: "Has been replaced by Medium Convection Radiator." + .into(), + name: "Medium Convection Radiator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 1f32, + radiation_factor: 0.4f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 24786172i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePassiveLargeRadiatorLiquid".into(), + prefab_hash: 24786172i32, + desc: "Has been replaced by Medium Convection Radiator Liquid." + .into(), + name: "Medium Convection Radiator Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 1f32, + radiation_factor: 0.4f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1812364811i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePassiveLiquidDrain".into(), + prefab_hash: 1812364811i32, + desc: "Moves liquids from a pipe network to the world atmosphere." + .into(), + name: "Passive Liquid Drain".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 335498166i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePassiveVent".into(), + prefab_hash: 335498166i32, + desc: "Passive vents allow gases to move into and out of pipe networks, which are closed systems unless connected to a device or structure. Passive vents are not powered, merely an aperture, essentially turning an enclosed space into part of the pipe network. " + .into(), + name: "Passive Vent".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1363077139i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePassiveVentInsulated".into(), + prefab_hash: 1363077139i32, + desc: "".into(), + name: "Insulated Passive Vent".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1674187440i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePassthroughHeatExchangerGasToGas".into(), + prefab_hash: -1674187440i32, + desc: "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures." + .into(), + name: "CounterFlow Heat Exchanger - Gas + Gas".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input2 }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Output2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1928991265i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePassthroughHeatExchangerGasToLiquid".into(), + prefab_hash: 1928991265i32, + desc: "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures." + .into(), + name: "CounterFlow Heat Exchanger - Gas + Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input2 }, + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1472829583i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePassthroughHeatExchangerLiquidToLiquid".into(), + prefab_hash: -1472829583i32, + desc: "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exchange of temperatures." + .into(), + name: "CounterFlow Heat Exchanger - Liquid + Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input2 }, + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1434523206i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThickLandscapeLarge".into(), + prefab_hash: -1434523206i32, + desc: "".into(), + name: "Picture Frame Thick Landscape Large".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2041566697i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThickLandscapeSmall".into(), + prefab_hash: -2041566697i32, + desc: "".into(), + name: "Picture Frame Thick Landscape Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 950004659i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThickMountLandscapeLarge".into(), + prefab_hash: 950004659i32, + desc: "".into(), + name: "Picture Frame Thick Landscape Large".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 347154462i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThickMountLandscapeSmall".into(), + prefab_hash: 347154462i32, + desc: "".into(), + name: "Picture Frame Thick Landscape Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1459641358i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThickMountPortraitLarge".into(), + prefab_hash: -1459641358i32, + desc: "".into(), + name: "Picture Frame Thick Mount Portrait Large".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2066653089i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThickMountPortraitSmall".into(), + prefab_hash: -2066653089i32, + desc: "".into(), + name: "Picture Frame Thick Mount Portrait Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1686949570i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThickPortraitLarge".into(), + prefab_hash: -1686949570i32, + desc: "".into(), + name: "Picture Frame Thick Portrait Large".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1218579821i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThickPortraitSmall".into(), + prefab_hash: -1218579821i32, + desc: "".into(), + name: "Picture Frame Thick Portrait Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1418288625i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThinLandscapeLarge".into(), + prefab_hash: -1418288625i32, + desc: "".into(), + name: "Picture Frame Thin Landscape Large".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2024250974i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThinLandscapeSmall".into(), + prefab_hash: -2024250974i32, + desc: "".into(), + name: "Picture Frame Thin Landscape Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1146760430i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThinMountLandscapeLarge".into(), + prefab_hash: -1146760430i32, + desc: "".into(), + name: "Picture Frame Thin Landscape Large".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1752493889i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThinMountLandscapeSmall".into(), + prefab_hash: -1752493889i32, + desc: "".into(), + name: "Picture Frame Thin Landscape Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1094895077i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThinMountPortraitLarge".into(), + prefab_hash: 1094895077i32, + desc: "".into(), + name: "Picture Frame Thin Portrait Large".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1835796040i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThinMountPortraitSmall".into(), + prefab_hash: 1835796040i32, + desc: "".into(), + name: "Picture Frame Thin Portrait Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1212777087i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThinPortraitLarge".into(), + prefab_hash: 1212777087i32, + desc: "".into(), + name: "Picture Frame Thin Portrait Large".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1684488658i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePictureFrameThinPortraitSmall".into(), + prefab_hash: 1684488658i32, + desc: "".into(), + name: "Picture Frame Thin Portrait Small".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 435685051i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeAnalysizer".into(), + prefab_hash: 435685051i32, + desc: "Allegedly the outcome of a weekend father-daughter electronics project by an overzealous {ExMin engineer, the pipe analyzer is essentially a more advanced version of the Pipe Meter.\nDisplaying the internal pressure of pipe networks, it also reads out temperature and gas contents, and can be connected to a Console or Computer (Modern) via a {Logic system." + .into(), + name: "Pipe Analyzer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::Volume, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1785673561i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeCorner".into(), + prefab_hash: -1785673561i32, + desc: "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench." + .into(), + name: "Pipe (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 465816159i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeCowl".into(), + prefab_hash: 465816159i32, + desc: "".into(), + name: "Pipe Cowl".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1405295588i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeCrossJunction".into(), + prefab_hash: -1405295588i32, + desc: "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench." + .into(), + name: "Pipe (Cross Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2038427184i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeCrossJunction3".into(), + prefab_hash: 2038427184i32, + desc: "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench." + .into(), + name: "Pipe (3-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -417629293i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeCrossJunction4".into(), + prefab_hash: -417629293i32, + desc: "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench." + .into(), + name: "Pipe (4-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1877193979i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeCrossJunction5".into(), + prefab_hash: -1877193979i32, + desc: "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench." + .into(), + name: "Pipe (5-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 152378047i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeCrossJunction6".into(), + prefab_hash: 152378047i32, + desc: "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench." + .into(), + name: "Pipe (6-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -419758574i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeHeater".into(), + prefab_hash: -419758574i32, + desc: "Adds 1000 joules of heat per tick to the contents of your pipe network." + .into(), + name: "Pipe Heater (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1286441942i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeIgniter".into(), + prefab_hash: 1286441942i32, + desc: "Ignites the atmosphere inside the attached pipe network.".into(), + name: "Pipe Igniter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2068497073i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeInsulatedLiquidCrossJunction".into(), + prefab_hash: -2068497073i32, + desc: "Liquid piping with very low temperature loss or gain.".into(), + name: "Insulated Liquid Pipe (Cross Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -999721119i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLabel".into(), + prefab_hash: -999721119i32, + desc: "As its perspicacious name suggests, the pipe label is designed to be attached to a straight stretch of pipe. Users can then label the label with the Labeller." + .into(), + name: "Pipe Label".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1856720921i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLiquidCorner".into(), + prefab_hash: -1856720921i32, + desc: "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench." + .into(), + name: "Liquid Pipe (Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1848735691i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLiquidCrossJunction".into(), + prefab_hash: 1848735691i32, + desc: "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." + .into(), + name: "Liquid Pipe (Cross Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1628087508i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLiquidCrossJunction3".into(), + prefab_hash: 1628087508i32, + desc: "You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench." + .into(), + name: "Liquid Pipe (3-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -9555593i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLiquidCrossJunction4".into(), + prefab_hash: -9555593i32, + desc: "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." + .into(), + name: "Liquid Pipe (4-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2006384159i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLiquidCrossJunction5".into(), + prefab_hash: -2006384159i32, + desc: "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." + .into(), + name: "Liquid Pipe (5-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 291524699i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLiquidCrossJunction6".into(), + prefab_hash: 291524699i32, + desc: "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." + .into(), + name: "Liquid Pipe (6-Way Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -523832822i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLiquidOneWayValveLever".into(), + prefab_hash: -523832822i32, + desc: "".into(), + name: "One Way Valve (Liquid)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 667597982i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLiquidStraight".into(), + prefab_hash: 667597982i32, + desc: "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench." + .into(), + name: "Liquid Pipe (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 262616717i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeLiquidTJunction".into(), + prefab_hash: 262616717i32, + desc: "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." + .into(), + name: "Liquid Pipe (T Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1798362329i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeMeter".into(), + prefab_hash: -1798362329i32, + desc: "While the Stationeers program has, thus far, inspired little in the way of classical poetry, the following haiku was found etched, ironically, on a piece of pipe wreckage found on Vulcan:\n\"Humble pipe meter\nspeaks the truth, transmits pressure\nwithin any pipe\"" + .into(), + name: "Pipe Meter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1289581593i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeOneWayValveLever".into(), + prefab_hash: 1289581593i32, + desc: "".into(), + name: "One Way Valve (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1305252611i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeOrgan".into(), + prefab_hash: 1305252611i32, + desc: "The pipe organ can be attached to one end of a Kit (Pipe Valve). The length of the pipe after the pipe organ changes the pitch of the note it will play when the valve is opened. Use Logic to open and close the valves to create some custom tunes for your base or an audible warning." + .into(), + name: "Pipe Organ".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1696603168i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeRadiator".into(), + prefab_hash: 1696603168i32, + desc: "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added the gas within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the gas in question. Adding multiple radiators will speed up heat transfer." + .into(), + name: "Pipe Convection Radiator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 1f32, + radiation_factor: 0.75f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -399883995i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeRadiatorFlat".into(), + prefab_hash: -399883995i32, + desc: "A pipe mounted radiator optimized for radiating heat in vacuums." + .into(), + name: "Pipe Radiator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.2f32, + radiation_factor: 3f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2024754523i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeRadiatorFlatLiquid".into(), + prefab_hash: 2024754523i32, + desc: "A liquid pipe mounted radiator optimized for radiating heat in vacuums." + .into(), + name: "Pipe Radiator Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.2f32, + radiation_factor: 3f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 73728932i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeStraight".into(), + prefab_hash: 73728932i32, + desc: "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench." + .into(), + name: "Pipe (Straight)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -913817472i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePipeTJunction".into(), + prefab_hash: -913817472i32, + desc: "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench." + .into(), + name: "Pipe (T Junction)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1125641329i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePlanter".into(), + prefab_hash: -1125641329i32, + desc: "A small planter for decorative or hydroponic purposes. Can be connected to Water, or watered manually using a Water Bottle or Liquid Canister (Water)." + .into(), + name: "Planter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Plant".into(), class : Class::Plant, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Plant".into(), class : + Class::Plant, index : 1u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1559586682i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePlatformLadderOpen".into(), + prefab_hash: 1559586682i32, + desc: "".into(), + name: "Ladder Platform".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 989835703i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePlinth".into(), + prefab_hash: 989835703i32, + desc: "".into(), + name: "Plinth".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -899013427i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePortablesConnector".into(), + prefab_hash: -899013427i32, + desc: "".into(), + name: "Portables Connector".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Portables".into(), class : + Class::Portables, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -782951720i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerConnector".into(), + prefab_hash: -782951720i32, + desc: "Attaches a Kit (Portable Generator) to a power network." + .into(), + name: "Power Connector".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Portable Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -65087121i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerTransmitter".into(), + prefab_hash: -65087121i32, + desc: "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter\'s collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output." + .into(), + name: "Microwave Power Transmitter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::PowerPotential, + MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PositionX, MemoryAccess::Read), + (LogicType::PositionY, MemoryAccess::Read), (LogicType::PositionZ, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Unlinked".into()), (1, "Linked".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -327468845i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerTransmitterOmni".into(), + prefab_hash: -327468845i32, + desc: "".into(), + name: "Power Transmitter Omni".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1195820278i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerTransmitterReceiver".into(), + prefab_hash: 1195820278i32, + desc: "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter\'s collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.Connects to Logic Transmitter" + .into(), + name: "Microwave Power Receiver".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::PowerPotential, + MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PositionX, MemoryAccess::Read), + (LogicType::PositionY, MemoryAccess::Read), (LogicType::PositionZ, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Unlinked".into()), (1, "Linked".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: true, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 101488029i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerUmbilicalFemale".into(), + prefab_hash: 101488029i32, + desc: "".into(), + name: "Umbilical Socket (Power)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1922506192i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerUmbilicalFemaleSide".into(), + prefab_hash: 1922506192i32, + desc: "".into(), + name: "Umbilical Socket Angle (Power)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1529453938i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePowerUmbilicalMale".into(), + prefab_hash: 1529453938i32, + desc: "0.Left\n1.Center\n2.Right".into(), + name: "Umbilical (Power)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::Read), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Left".into()), (1, "Center".into()), (2, "Right".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 938836756i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePoweredVent".into(), + prefab_hash: 938836756i32, + desc: "Great for moving large quantities of air into a pipe network. Its primary purpose is for the creation of multi-grid airlocks. It can effeciently pull a vacuum on a small to medium sized room." + .into(), + name: "Powered Vent".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::PressureExternal, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Outward".into()), (1, "Inward".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -785498334i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePoweredVentLarge".into(), + prefab_hash: -785498334i32, + desc: "For building large scale airlock systems and pressurised hangers, a bigger and bolder version of the Powered Vent that can effeciently pull a vacuum in large room." + .into(), + name: "Powered Vent Large".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::PressureExternal, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Outward".into()), (1, "Inward".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 23052817i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressurantValve".into(), + prefab_hash: 23052817i32, + desc: "Pumps gas into a liquid pipe in order to raise the pressure" + .into(), + name: "Pressurant Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -624011170i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressureFedGasEngine".into(), + prefab_hash: -624011170i32, + desc: "Inefficient but very powerful, the Pressure Fed Gas Engine moves gas from each of its two inputs based on the pressure of the input pipes. Control the mixing ratio of fuels by tweaking the input pressures to target a 2:1 mix of Volatiles to Oxygen gas. Chilling propellant gasses or using Nitrous Oxide as an oxydizer will result in even higher thrust outputs." + .into(), + name: "Pressure Fed Gas Engine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::Throttle, MemoryAccess::ReadWrite), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::PassedMoles, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input2 }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 379750958i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressureFedLiquidEngine".into(), + prefab_hash: 379750958i32, + desc: "Highly efficient and powerful, the Pressure Fed Liquid Engine is a challenging engine to run in a stable configuration. Liquid is pulled from the input into the engine based on the input gas pressure. Some gas is also moved in this process so Stationeers will need to devise a system to maintain a high gas pressure in the liquid input pipe. The second liquid pipe connection is an optional heat-exchanger connection which exchanges heat between the pipes contents and the engine bell, the Setting variable drives the effectiveness of the heat-exchanger." + .into(), + name: "Pressure Fed Liquid Engine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::Throttle, MemoryAccess::ReadWrite), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::PassedMoles, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input2 }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2008706143i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressurePlateLarge".into(), + prefab_hash: -2008706143i32, + desc: "".into(), + name: "Trigger Plate (Large)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1269458680i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressurePlateMedium".into(), + prefab_hash: 1269458680i32, + desc: "".into(), + name: "Trigger Plate (Medium)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1536471028i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressurePlateSmall".into(), + prefab_hash: -1536471028i32, + desc: "".into(), + name: "Trigger Plate (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 209854039i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePressureRegulator".into(), + prefab_hash: 209854039i32, + desc: "Controlling the flow of gas between two pipe networks, pressure regulators shift gas until a set pressure on the outlet side is achieved, or the gas supply is exhausted. The back pressure regulator, by contrast, will only operate when pressure on the intake side exceeds the set value. With a max pressure of over 20,000kPa, it requires power to operate." + .into(), + name: "Pressure Regulator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 568800213i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureProximitySensor".into(), + prefab_hash: 568800213i32, + desc: "Will be triggered if there is a player in the range of the sensor (as defined by the setting dial). The quantity variable will show the number of players. You can configure the sensor to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet." + .into(), + name: "Proximity Sensor".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Activate, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Quantity, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2031440019i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePumpedLiquidEngine".into(), + prefab_hash: -2031440019i32, + desc: "Liquid propellants bring greater efficiencies with Pumped Liquid Engine. Two inputs are provided so Stationeers can seperate their fuels, the Setting variable controls the mixing ratio of the inputs. The engine is designed to run on Liquid Volatiles and Liquid Oxygen, some Stationeers have reported excessive thrust values by switching to Liquid Nitrous Oxide" + .into(), + name: "Pumped Liquid Engine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::Throttle, MemoryAccess::ReadWrite), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::PassedMoles, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -737232128i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructurePurgeValve".into(), + prefab_hash: -737232128i32, + desc: "Allows for removal of pressurant gas and evaporated liquids from a liquid pipe. Similar in function to a Back Pressure Regulator the Purge Valve moves gas from the input liquid pipe to the output gas pipe aiming to keep the pressure of the input at the target setting." + .into(), + name: "Purge Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1756913871i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRailing".into(), + prefab_hash: -1756913871i32, + desc: "\"Safety third.\"".into(), + name: "Railing Industrial (Type 1)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1633947337i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRecycler".into(), + prefab_hash: -1633947337i32, + desc: "A device for collecting the raw resources while destroying an item. Produces Reagent Mix containing packages of reagents. Pass these through the Centrifuge to gain back the source ores. Plants and organic matter passed through will create Biomass, which when passed through the Centrifuge will produce Biomass." + .into(), + name: "Recycler".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: true, + }, + } + .into(), + ); + map.insert( + -1577831321i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRefrigeratedVendingMachine".into(), + prefab_hash: -1577831321i32, + desc: "The refrigerated OmniKool vending machine is an advanced version of the standard Vending Machine, which maintains an optimum pressure and constant temperature of -130 degrees C, to prevent food spoilage. It can hold up to 100 stacks.\nThe OmniKool also has an in-built Stacker, allowing players to set the stack sizes of any items ADDED to the device. The unit\'s default stack size is 50.\nNOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. " + .into(), + name: "Refrigerated Vending Machine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()), (3, vec![] + .into_iter().collect()), (4, vec![] .into_iter().collect()), (5, + vec![] .into_iter().collect()), (6, vec![] .into_iter().collect()), + (7, vec![] .into_iter().collect()), (8, vec![] .into_iter() + .collect()), (9, vec![] .into_iter().collect()), (10, vec![] + .into_iter().collect()), (11, vec![] .into_iter().collect()), (12, + vec![] .into_iter().collect()), (13, vec![] .into_iter().collect()), + (14, vec![] .into_iter().collect()), (15, vec![] .into_iter() + .collect()), (16, vec![] .into_iter().collect()), (17, vec![] + .into_iter().collect()), (18, vec![] .into_iter().collect()), (19, + vec![] .into_iter().collect()), (20, vec![] .into_iter().collect()), + (21, vec![] .into_iter().collect()), (22, vec![] .into_iter() + .collect()), (23, vec![] .into_iter().collect()), (24, vec![] + .into_iter().collect()), (25, vec![] .into_iter().collect()), (26, + vec![] .into_iter().collect()), (27, vec![] .into_iter().collect()), + (28, vec![] .into_iter().collect()), (29, vec![] .into_iter() + .collect()), (30, vec![] .into_iter().collect()), (31, vec![] + .into_iter().collect()), (32, vec![] .into_iter().collect()), (33, + vec![] .into_iter().collect()), (34, vec![] .into_iter().collect()), + (35, vec![] .into_iter().collect()), (36, vec![] .into_iter() + .collect()), (37, vec![] .into_iter().collect()), (38, vec![] + .into_iter().collect()), (39, vec![] .into_iter().collect()), (40, + vec![] .into_iter().collect()), (41, vec![] .into_iter().collect()), + (42, vec![] .into_iter().collect()), (43, vec![] .into_iter() + .collect()), (44, vec![] .into_iter().collect()), (45, vec![] + .into_iter().collect()), (46, vec![] .into_iter().collect()), (47, + vec![] .into_iter().collect()), (48, vec![] .into_iter().collect()), + (49, vec![] .into_iter().collect()), (50, vec![] .into_iter() + .collect()), (51, vec![] .into_iter().collect()), (52, vec![] + .into_iter().collect()), (53, vec![] .into_iter().collect()), (54, + vec![] .into_iter().collect()), (55, vec![] .into_iter().collect()), + (56, vec![] .into_iter().collect()), (57, vec![] .into_iter() + .collect()), (58, vec![] .into_iter().collect()), (59, vec![] + .into_iter().collect()), (60, vec![] .into_iter().collect()), (61, + vec![] .into_iter().collect()), (62, vec![] .into_iter().collect()), + (63, vec![] .into_iter().collect()), (64, vec![] .into_iter() + .collect()), (65, vec![] .into_iter().collect()), (66, vec![] + .into_iter().collect()), (67, vec![] .into_iter().collect()), (68, + vec![] .into_iter().collect()), (69, vec![] .into_iter().collect()), + (70, vec![] .into_iter().collect()), (71, vec![] .into_iter() + .collect()), (72, vec![] .into_iter().collect()), (73, vec![] + .into_iter().collect()), (74, vec![] .into_iter().collect()), (75, + vec![] .into_iter().collect()), (76, vec![] .into_iter().collect()), + (77, vec![] .into_iter().collect()), (78, vec![] .into_iter() + .collect()), (79, vec![] .into_iter().collect()), (80, vec![] + .into_iter().collect()), (81, vec![] .into_iter().collect()), (82, + vec![] .into_iter().collect()), (83, vec![] .into_iter().collect()), + (84, vec![] .into_iter().collect()), (85, vec![] .into_iter() + .collect()), (86, vec![] .into_iter().collect()), (87, vec![] + .into_iter().collect()), (88, vec![] .into_iter().collect()), (89, + vec![] .into_iter().collect()), (90, vec![] .into_iter().collect()), + (91, vec![] .into_iter().collect()), (92, vec![] .into_iter() + .collect()), (93, vec![] .into_iter().collect()), (94, vec![] + .into_iter().collect()), (95, vec![] .into_iter().collect()), (96, + vec![] .into_iter().collect()), (97, vec![] .into_iter().collect()), + (98, vec![] .into_iter().collect()), (99, vec![] .into_iter() + .collect()), (100, vec![] .into_iter().collect()), (101, vec![] + .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RequestHash, + MemoryAccess::ReadWrite), (LogicType::ClearMemory, + MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::TotalMoles, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 3u32 }), (4u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { name : "Storage" + .into(), class : Class::None, index : 5u32 }), (6u32, SlotInfo::Direct { + name : "Storage".into(), class : Class::None, index : 6u32 }), (7u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 7u32 }), (8u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "Storage" + .into(), class : Class::None, index : 9u32 }), (10u32, SlotInfo::Direct { + name : "Storage".into(), class : Class::None, index : 10u32 }), (11u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 11u32 }), (12u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 12u32 }), (13u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 13u32 }), (14u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 14u32 }), (15u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 15u32 }), (16u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 16u32 }), (17u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 17u32 }), (18u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 18u32 }), (19u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 19u32 }), (20u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 20u32 }), (21u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 21u32 }), (22u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 22u32 }), (23u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 23u32 }), (24u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 24u32 }), (25u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 25u32 }), (26u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 26u32 }), (27u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 27u32 }), (28u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 28u32 }), (29u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 29u32 }), (30u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 30u32 }), (31u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 31u32 }), (32u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 32u32 }), (33u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 33u32 }), (34u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 34u32 }), (35u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 35u32 }), (36u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 36u32 }), (37u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 37u32 }), (38u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 38u32 }), (39u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 39u32 }), (40u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 40u32 }), (41u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 41u32 }), (42u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 42u32 }), (43u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 43u32 }), (44u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 44u32 }), (45u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 45u32 }), (46u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 46u32 }), (47u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 47u32 }), (48u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 48u32 }), (49u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 49u32 }), (50u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 50u32 }), (51u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 51u32 }), (52u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 52u32 }), (53u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 53u32 }), (54u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 54u32 }), (55u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 55u32 }), (56u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 56u32 }), (57u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 57u32 }), (58u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 58u32 }), (59u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 59u32 }), (60u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 60u32 }), (61u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 61u32 }), (62u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 62u32 }), (63u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 63u32 }), (64u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 64u32 }), (65u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 65u32 }), (66u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 66u32 }), (67u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 67u32 }), (68u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 68u32 }), (69u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 69u32 }), (70u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 70u32 }), (71u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 71u32 }), (72u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 72u32 }), (73u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 73u32 }), (74u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 74u32 }), (75u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 75u32 }), (76u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 76u32 }), (77u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 77u32 }), (78u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 78u32 }), (79u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 79u32 }), (80u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 80u32 }), (81u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 81u32 }), (82u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 82u32 }), (83u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 83u32 }), (84u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 84u32 }), (85u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 85u32 }), (86u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 86u32 }), (87u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 87u32 }), (88u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 88u32 }), (89u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 89u32 }), (90u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 90u32 }), (91u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 91u32 }), (92u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 92u32 }), (93u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 93u32 }), (94u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 94u32 }), (95u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 95u32 }), (96u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 96u32 }), (97u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 97u32 }), (98u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 98u32 }), (99u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 99u32 }), (100u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 100u32 }), (101u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 101u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: true, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2027713511i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureReinforcedCompositeWindow".into(), + prefab_hash: 2027713511i32, + desc: "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa." + .into(), + name: "Reinforced Window (Composite)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -816454272i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureReinforcedCompositeWindowSteel".into(), + prefab_hash: -816454272i32, + desc: "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa." + .into(), + name: "Reinforced Window (Composite Steel)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -475746988i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureReinforcedWall".into(), + prefab_hash: -475746988i32, + desc: "".into(), + name: "Reinforced Wall".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1939061729i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureReinforcedWallPaddedWindow".into(), + prefab_hash: 1939061729i32, + desc: "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa." + .into(), + name: "Reinforced Window (Padded)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 158502707i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureReinforcedWallPaddedWindowThin".into(), + prefab_hash: 158502707i32, + desc: "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa." + .into(), + name: "Reinforced Window (Thin)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2131782367i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRobotArmDoor".into(), + prefab_hash: -2131782367i32, + desc: "".into(), + name: "Linear Rail Door".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1818718810i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRoboticArmDock".into(), + prefab_hash: -1818718810i32, + desc: "The Linear Articulated Rail Entity or LArRE can be used to plant, harvest and fertilize plants in plant trays. It can also grab items from a Chute Export Bin and drop them in a Chute Import Bin. LArRE can interact with plant trays or chute bins built under a linear rail station or built under its dock." + .into(), + name: "LArRE Dock".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::Index, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Arm Slot".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::RoboticArmRail, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::RoboticArmRail, role : ConnectionRole::None }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1323992709i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRoboticArmRailCorner".into(), + prefab_hash: -1323992709i32, + desc: "".into(), + name: "Linear Rail Corner".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1974053060i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRoboticArmRailCornerStop".into(), + prefab_hash: 1974053060i32, + desc: "".into(), + name: "Linear Rail Corner Station".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -267108827i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRoboticArmRailInnerCorner".into(), + prefab_hash: -267108827i32, + desc: "".into(), + name: "Linear Rail Inner Corner".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -33470826i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRoboticArmRailOuterCorner".into(), + prefab_hash: -33470826i32, + desc: "".into(), + name: "Linear Rail Outer Corner".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1785844184i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRoboticArmRailStraight".into(), + prefab_hash: -1785844184i32, + desc: "".into(), + name: "Linear Rail Straight".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1800701885i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRoboticArmRailStraightStop".into(), + prefab_hash: 1800701885i32, + desc: "".into(), + name: "Linear Rail Straight Station".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 808389066i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketAvionics".into(), + prefab_hash: 808389066i32, + desc: "".into(), + name: "Rocket Avionics".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Reagents, + MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Quantity, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::VelocityRelativeY, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::Progress, MemoryAccess::Read), + (LogicType::DestinationCode, MemoryAccess::ReadWrite), + (LogicType::Acceleration, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::AutoShutOff, MemoryAccess::ReadWrite), (LogicType::Mass, + MemoryAccess::Read), (LogicType::DryMass, MemoryAccess::Read), + (LogicType::Thrust, MemoryAccess::Read), (LogicType::Weight, + MemoryAccess::Read), (LogicType::ThrustToWeight, MemoryAccess::Read), + (LogicType::TimeToDestination, MemoryAccess::Read), + (LogicType::BurnTimeRemaining, MemoryAccess::Read), + (LogicType::AutoLand, MemoryAccess::Write), + (LogicType::FlightControlRule, MemoryAccess::Read), + (LogicType::ReEntryAltitude, MemoryAccess::Read), (LogicType::Apex, + MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::Discover, MemoryAccess::Read), (LogicType::Chart, + MemoryAccess::Read), (LogicType::Survey, MemoryAccess::Read), + (LogicType::NavPoints, MemoryAccess::Read), + (LogicType::ChartedNavPoints, MemoryAccess::Read), (LogicType::Sites, + MemoryAccess::Read), (LogicType::CurrentCode, MemoryAccess::Read), + (LogicType::Density, MemoryAccess::Read), (LogicType::Richness, + MemoryAccess::Read), (LogicType::Size, MemoryAccess::Read), + (LogicType::TotalQuantity, MemoryAccess::Read), + (LogicType::MinedQuantity, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read), (LogicType::Altitude, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Invalid".into()), (1, "None".into()), (2, "Mine".into()), + (3, "Survey".into()), (4, "Discover".into()), (5, "Chart".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: true, + }, + } + .into(), + ); + map.insert( + 997453927i32, + StructureLogicDeviceMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketCelestialTracker".into(), + prefab_hash: 997453927i32, + desc: "The Celestial Tracker can be placed in Rockets and when turned on will provide data that can be used to orientate devices such as the Telescope. The Horizontal and Vertical output is localized to the orientation of the tracker. You can calibrate your alignment by comparing the result for the primary body with the output from the Daylight Sensor. Full functionality will only be available in orbit, but you can configure using the primary body. For aligning with the telescope, have the face plate facing up and the cables facing in the same direction as for the telescope and the output values will be aligned." + .into(), + name: "Rocket Celestial Tracker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::Read), + (LogicType::Vertical, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::Index, + MemoryAccess::ReadWrite), (LogicType::CelestialHash, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + memory: MemoryInfo { + instructions: Some( + vec![ + ("BodyOrientation".into(), Instruction { description : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CELESTIAL_INDEX | BYTE_8 |\r\n| 16-31 | HORIZONTAL_DECI_DEGREES | SHORT_16 |\r\n| 32-47 | VERTICAL_DECI_DEGREES | SHORT_16 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CELESTIAL_INDEX | BYTE_8 |\r\n| 16-31 | HORIZONTAL_DECI_DEGREES | SHORT_16 |\r\n| 32-47 | VERTICAL_DECI_DEGREES | SHORT_16 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "CelestialTracking".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "CELESTIAL_INDEX".into(), typ + : InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 31u32)) + }, name : "HORIZONTAL_DECI_DEGREES".into(), typ : + InstructionPartType::Short16 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((32u32, 47u32)) + }, name : "VERTICAL_DECI_DEGREES".into(), typ : + InstructionPartType::Short16 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::Read, + memory_size: 12u32, + }, + } + .into(), + ); + map.insert( + 150135861i32, + StructureCircuitHolderTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketCircuitHousing".into(), + prefab_hash: 150135861i32, + desc: "".into(), + name: "Rocket Circuit Housing".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::LineNumber, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::LineNumber, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: true, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Programmable Chip".into(), class : + Class::ProgrammableChip, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: Some(6u32), + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 178472613i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketEngineTiny".into(), + prefab_hash: 178472613i32, + desc: "".into(), + name: "Rocket Engine (Tiny)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1781051034i32, + StructureLogicDeviceConsumerMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketManufactory".into(), + prefab_hash: 1781051034i32, + desc: "".into(), + name: "Rocket Manufactory".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RecipeHash, + MemoryAccess::ReadWrite), (LogicType::CompletionRatio, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ingot, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), + "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" + .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), + "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" + .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), + "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" + .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), + "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + Recipe { target_prefab : "ItemKitFuselage".into(), target_prefab_hash + : - 366262681i32, tier : MachineTier::TierOne, time : 120f64, energy + : 60000f64, temperature : RecipeRange { start : 1f64, stop : + 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, + stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { + rule : 0i64, is_any : true, is_any_to_remove : false, reagents : + vec![] .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Steel".into(), 20f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitLaunchTower".into(), target_prefab_hash : - + 174523552i32, tier : MachineTier::TierOne, time : 30f64, energy : + 30000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Steel".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitLaunchMount".into(), target_prefab_hash : - + 1854167549i32, tier : MachineTier::TierOne, time : 240f64, energy : + 120000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Steel".into(), 60f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitChuteUmbilical".into(), target_prefab_hash : + - 876560854i32, tier : MachineTier::TierOne, time : 5f64, energy : + 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 3f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitElectricUmbilical" + .into(), target_prefab_hash : 1603046970i32, tier : + MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Gold".into(), 5f64), ("Steel" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLiquidUmbilical".into(), target_prefab_hash : 1571996765i32, + tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 5f64), ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitGasUmbilical".into(), target_prefab_hash : - + 1867280568i32, tier : MachineTier::TierOne, time : 5f64, energy : + 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitRocketBattery".into(), + target_prefab_hash : - 314072139i32, tier : MachineTier::TierOne, + time : 10f64, energy : 10000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Electrum".into(), 5f64), ("Solder".into(), 5f64), + ("Steel".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitRocketGasFuelTank".into(), target_prefab_hash + : - 1629347579i32, tier : MachineTier::TierOne, time : 10f64, energy + : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitRocketLiquidFuelTank" + .into(), target_prefab_hash : 2032027950i32, tier : + MachineTier::TierOne, time : 10f64, energy : 5000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Steel" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitRocketAvionics".into(), target_prefab_hash : 1396305045i32, + tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), + 2f64), ("Solder".into(), 3f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitRocketDatalink".into(), target_prefab_hash : + - 1256996603i32, tier : MachineTier::TierOne, time : 5f64, energy : + 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Electrum".into(), 2f64), ("Solder".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemKitRocketCelestialTracker".into(), target_prefab_hash : - + 303008602i32, tier : MachineTier::TierOne, time : 5f64, energy : + 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Electrum".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitRocketCircuitHousing" + .into(), target_prefab_hash : 721251202i32, tier : + MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Electrum".into(), 2f64), + ("Solder".into(), 3f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitRocketCargoStorage".into(), + target_prefab_hash : 479850239i32, tier : MachineTier::TierOne, time + : 30f64, energy : 30000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Constantan".into(), 10f64), ("Invar".into(), 5f64), + ("Steel".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitRocketMiner".into(), target_prefab_hash : - + 867969909i32, tier : MachineTier::TierOne, time : 60f64, energy : + 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Constantan".into(), 10f64), ("Electrum".into(), 5f64), + ("Invar".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitAccessBridge".into(), + target_prefab_hash : 513258369i32, tier : MachineTier::TierOne, time + : 30f64, energy : 9000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 3f64), + ("Steel".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitStairwell".into(), target_prefab_hash : - + 1868555784i32, tier : MachineTier::TierOne, time : 20f64, energy : + 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 15f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitRocketScanner".into(), target_prefab_hash : 1753647154i32, + tier : MachineTier::TierOne, time : 60f64, energy : 60000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 10f64), ("Gold".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemRocketScanningHead".into(), target_prefab_hash : + - 1198702771i32, tier : MachineTier::TierOne, time : 60f64, energy : + 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 3f64), ("Gold".into(), 2f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemRocketMiningDrillHead" + .into(), target_prefab_hash : 2109945337i32, tier : + MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemRocketMiningDrillHeadMineral".into(), target_prefab_hash : + 1083675581i32, tier : MachineTier::TierOne, time : 30f64, energy : + 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron" + .into(), 10f64), ("Steel".into(), 10f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemRocketMiningDrillHeadIce".into(), + target_prefab_hash : - 380904592i32, tier : MachineTier::TierOne, + time : 30f64, energy : 5000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Iron".into(), 10f64), ("Steel".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemRocketMiningDrillHeadDurable".into(), target_prefab_hash : + 1530764483i32, tier : MachineTier::TierOne, time : 30f64, energy : + 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron" + .into(), 10f64), ("Steel".into(), 10f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemRocketMiningDrillHeadLongTerm".into(), + target_prefab_hash : - 684020753i32, tier : MachineTier::TierOne, + time : 30f64, energy : 5000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Invar".into(), 5f64), ("Steel".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemRocketMiningDrillHeadHighSpeedIce".into(), target_prefab_hash : + 653461728i32, tier : MachineTier::TierOne, time : 30f64, energy : + 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Invar".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemRocketMiningDrillHeadHighSpeedMineral".into(), + target_prefab_hash : 1440678625i32, tier : MachineTier::TierOne, time + : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Invar".into(), 5f64), ("Steel".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitGovernedGasRocketEngine".into(), target_prefab_hash : + 206848766i32, tier : MachineTier::TierOne, time : 60f64, energy : + 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 10f64), ("Gold".into(), 5f64), ("Iron".into(), + 15f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPressureFedGasEngine".into(), target_prefab_hash : - + 121514007i32, tier : MachineTier::TierOne, time : 60f64, energy : + 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Constantan".into(), 10f64), ("Electrum".into(), 5f64), + ("Invar".into(), 20f64), ("Steel".into(), 20f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemKitPressureFedLiquidEngine".into(), target_prefab_hash : - + 99091572i32, tier : MachineTier::TierOne, time : 60f64, energy : + 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Astroloy".into(), 10f64), ("Inconel".into(), 5f64), + ("Waspaloy".into(), 15f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitPumpedLiquidEngine".into(), + target_prefab_hash : 1921918951i32, tier : MachineTier::TierOne, time + : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Constantan".into(), 10f64), ("Electrum".into(), + 5f64), ("Steel".into(), 15f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitRocketTransformerSmall".into(), + target_prefab_hash : - 932335800i32, tier : MachineTier::TierOne, + time : 60f64, energy : 12000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Electrum".into(), 5f64), ("Steel".into(), 10f64)] + .into_iter().collect() } + ] + .into_iter() + .collect(), + }), + memory: MemoryInfo { + instructions: Some( + vec![ + ("DeviceSetLock".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : + InstructionPartType::Bool8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(48u32) }] .into_iter().collect() }), + ("EjectAllReagents".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }), + ("EjectReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("ExecuteRecipe".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("JumpIfNextInvalid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("JumpToAddress".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("MissingRecipeReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, + Some(62u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("StackPointer".into(), Instruction { description : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("WaitUntilNextValid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ); + map.insert( + -2087223687i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketMiner".into(), + prefab_hash: -2087223687i32, + desc: "Gathers available resources at the rocket\'s current space location." + .into(), + name: "Rocket Miner".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::DrillCondition, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Export".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Drill Head Slot" + .into(), class : Class::DrillHead, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2014252591i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketScanner".into(), + prefab_hash: 2014252591i32, + desc: "".into(), + name: "Rocket Scanner".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Scanner Head Slot".into(), class : + Class::ScanningHead, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -654619479i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketTower".into(), + prefab_hash: -654619479i32, + desc: "".into(), + name: "Launch Tower".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 518925193i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRocketTransformerSmall".into(), + prefab_hash: 518925193i32, + desc: "".into(), + name: "Transformer Small (Rocket)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 806513938i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureRover".into(), + prefab_hash: 806513938i32, + desc: "".into(), + name: "Rover Frame".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1875856925i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSDBHopper".into(), + prefab_hash: -1875856925i32, + desc: "".into(), + name: "SDB Hopper".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::ClearMemory, + MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 467225612i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSDBHopperAdvanced".into(), + prefab_hash: 467225612i32, + desc: "".into(), + name: "SDB Hopper Advanced".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::ClearMemory, + MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1155865682i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSDBSilo".into(), + prefab_hash: 1155865682i32, + desc: "The majestic silo holds large quantities of almost anything. While it is doing that, it cannot be deconstructed. Note also, that any food you put into a silo is likely to decay extremely rapidly. The silo can hold up to 600 stacks." + .into(), + name: "SDB Silo".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Mode0".into()), (1, "Mode1".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 439026183i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSatelliteDish".into(), + prefab_hash: 439026183i32, + desc: "This medium communications unit can be used to communicate with nearby trade vessels.\n \nWhen connected to a Computer (Modern) containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic." + .into(), + name: "Medium Satellite Dish".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::Horizontal, MemoryAccess::ReadWrite), + (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::SignalStrength, MemoryAccess::Read), + (LogicType::SignalId, MemoryAccess::Read), + (LogicType::InterrogationProgress, MemoryAccess::Read), + (LogicType::TargetPadIndex, MemoryAccess::ReadWrite), + (LogicType::SizeX, MemoryAccess::Read), (LogicType::SizeZ, + MemoryAccess::Read), (LogicType::MinimumWattsToContact, + MemoryAccess::Read), (LogicType::WattsReachingContact, + MemoryAccess::Read), (LogicType::ContactTypeId, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::BestContactFilter, MemoryAccess::ReadWrite), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -641491515i32, + StructureLogicDeviceConsumerMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSecurityPrinter".into(), + prefab_hash: -641491515i32, + desc: "Any Stationeer concerned about security needs the Harkwell-designed Vigilant-E security printer. Use the Vigilant-E to create a Cartridge (Access Controller), in order to restrict access to different parts of your base via keycards like the Access Card (Blue). The printer also makes a variety of weapons and ammunitions to defend your base against any hostile, aggressive or just slightly rude entites you encounter as you explore the Solar System.\n" + .into(), + name: "Security Printer".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RecipeHash, + MemoryAccess::ReadWrite), (LogicType::CompletionRatio, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ingot, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), + "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" + .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), + "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" + .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), + "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" + .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), + "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + Recipe { target_prefab : "CartridgeAccessController".into(), + target_prefab_hash : - 1634532552i32, tier : MachineTier::TierOne, + time : 5f64, energy : 100f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), + ("Iron".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "AccessCardBlack".into(), target_prefab_hash : - + 1330388999i32, tier : MachineTier::TierOne, time : 2f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "AccessCardBlue".into(), target_prefab_hash : - 1411327657i32, tier : + MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" + .into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "AccessCardBrown".into(), target_prefab_hash + : 1412428165i32, tier : MachineTier::TierOne, time : 2f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "AccessCardGray".into(), target_prefab_hash : - 1339479035i32, tier : + MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" + .into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "AccessCardGreen".into(), target_prefab_hash + : - 374567952i32, tier : MachineTier::TierOne, time : 2f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "AccessCardKhaki".into(), target_prefab_hash : 337035771i32, tier : + MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" + .into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "AccessCardOrange".into(), + target_prefab_hash : - 332896929i32, tier : MachineTier::TierOne, + time : 2f64, energy : 200f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), + ("Iron".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "AccessCardPink".into(), target_prefab_hash : + 431317557i32, tier : MachineTier::TierOne, time : 2f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "AccessCardPurple".into(), target_prefab_hash : 459843265i32, tier : + MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" + .into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "AccessCardRed".into(), target_prefab_hash : + - 1713748313i32, tier : MachineTier::TierOne, time : 2f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "AccessCardWhite".into(), target_prefab_hash : 2079959157i32, tier : + MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" + .into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "AccessCardYellow".into(), + target_prefab_hash : 568932536i32, tier : MachineTier::TierOne, time + : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), + ("Iron".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "Handgun".into(), target_prefab_hash : 247238062i32, + tier : MachineTier::TierOne, time : 120f64, energy : 3000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Nickel".into(), + 10f64), ("Steel".into(), 30f64)] .into_iter().collect() }, Recipe { + target_prefab : "HandgunMagazine".into(), target_prefab_hash : + 1254383185i32, tier : MachineTier::TierOne, time : 60f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 3f64), ("Lead".into(), 1f64), ("Steel".into(), + 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemAmmoBox".into(), target_prefab_hash : - 9559091i32, tier : + MachineTier::TierOne, time : 120f64, energy : 3000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 30f64), ("Lead" + .into(), 50f64), ("Steel".into(), 30f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGrenade".into(), target_prefab_hash : + 1544275894i32, tier : MachineTier::TierOne, time : 90f64, energy : + 2900f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 15f64), ("Gold".into(), 1f64), ("Lead".into(), + 25f64), ("Steel".into(), 25f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemExplosive".into(), target_prefab_hash : + 235361649i32, tier : MachineTier::TierTwo, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Electrum".into(), 1f64), ("Silicon".into(), 3f64), ("Solder" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMiningCharge".into(), target_prefab_hash : 15829510i32, tier : + MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Gold".into(), 1f64), ("Iron" + .into(), 1f64), ("Silicon".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "WeaponPistolEnergy".into(), + target_prefab_hash : - 385323479i32, tier : MachineTier::TierTwo, + time : 120f64, energy : 3000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Electrum".into(), 20f64), ("Gold".into(), 10f64), + ("Solder".into(), 10f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "WeaponRifleEnergy".into(), + target_prefab_hash : 1154745374i32, tier : MachineTier::TierTwo, time + : 240f64, energy : 10000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 6i64, + reagents : vec![("Constantan".into(), 10f64), ("Electrum".into(), + 20f64), ("Gold".into(), 10f64), ("Invar".into(), 10f64), ("Solder" + .into(), 10f64), ("Steel".into(), 20f64)] .into_iter().collect() }, + Recipe { target_prefab : "FireArmSMG".into(), target_prefab_hash : - + 86315541i32, tier : MachineTier::TierOne, time : 120f64, energy : + 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Nickel".into(), 10f64), ("Steel".into(), 30f64)] .into_iter() + .collect() }, Recipe { target_prefab : "SMGMagazine".into(), + target_prefab_hash : - 256607540i32, tier : MachineTier::TierOne, + time : 60f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 3f64), ("Lead".into(), 1f64), + ("Steel".into(), 3f64)] .into_iter().collect() } + ] + .into_iter() + .collect(), + }), + memory: MemoryInfo { + instructions: Some( + vec![ + ("DeviceSetLock".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : + InstructionPartType::Bool8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(48u32) }] .into_iter().collect() }), + ("EjectAllReagents".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }), + ("EjectReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("ExecuteRecipe".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("JumpIfNextInvalid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("JumpToAddress".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("MissingRecipeReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, + Some(62u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("StackPointer".into(), Instruction { description : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("WaitUntilNextValid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ); + map.insert( + 1172114950i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShelf".into(), + prefab_hash: 1172114950i32, + desc: "".into(), + name: "Shelf".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 182006674i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShelfMedium".into(), + prefab_hash: 182006674i32, + desc: "A shelf for putting things on, so you can see them.".into(), + name: "Shelf Medium".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (6, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (7, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (8, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (10, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (11, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (12, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (13, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (14, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 6u32 + }), (7u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 9u32 }), (10u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 10u32 }), (11u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 11u32 + }), (12u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 12u32 }), (13u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 13u32 }), (14u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 14u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1330754486i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShortCornerLocker".into(), + prefab_hash: 1330754486i32, + desc: "".into(), + name: "Short Corner Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -554553467i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShortLocker".into(), + prefab_hash: -554553467i32, + desc: "".into(), + name: "Short Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (6, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (7, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (8, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 6u32 + }), (7u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 9u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -775128944i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShower".into(), + prefab_hash: -775128944i32, + desc: "".into(), + name: "Shower".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1081797501i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureShowerPowered".into(), + prefab_hash: -1081797501i32, + desc: "".into(), + name: "Shower (Powered)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 879058460i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSign1x1".into(), + prefab_hash: 879058460i32, + desc: "".into(), + name: "Sign 1x1".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 908320837i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSign2x1".into(), + prefab_hash: 908320837i32, + desc: "".into(), + name: "Sign 2x1".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -492611i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSingleBed".into(), + prefab_hash: -492611i32, + desc: "".into(), + name: "Single Bed".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bed".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1467449329i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSleeper".into(), + prefab_hash: -1467449329i32, + desc: "".into(), + name: "Sleeper".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bed".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1213495833i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSleeperLeft".into(), + prefab_hash: 1213495833i32, + desc: "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided." + .into(), + name: "Sleeper Left".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Safe".into()), (1, "Unsafe".into()), (2, "Unpowered".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1812330717i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSleeperRight".into(), + prefab_hash: -1812330717i32, + desc: "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided." + .into(), + name: "Sleeper Right".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Safe".into()), (1, "Unsafe".into()), (2, "Unpowered".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1300059018i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSleeperVertical".into(), + prefab_hash: -1300059018i32, + desc: "The vertical variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided." + .into(), + name: "Sleeper Vertical".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.1f32, + radiation_factor: 0.1f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "Safe".into()), (1, "Unsafe".into()), (2, "Unpowered".into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1382098999i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSleeperVerticalDroid".into(), + prefab_hash: 1382098999i32, + desc: "The Droid Sleeper will recharge robot batteries and equiped suit batteries if present. This sleeper variant is only safe for robots. Entering as a non robot character will cause you to take damage." + .into(), + name: "Droid Sleeper Vertical".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Player".into(), class : Class::Entity, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1310303582i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallDirectHeatExchangeGastoGas".into(), + prefab_hash: 1310303582i32, + desc: "Direct Heat Exchangers equalize the temperature of the two input networks." + .into(), + name: "Small Direct Heat Exchanger - Gas + Gas".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1825212016i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallDirectHeatExchangeLiquidtoGas".into(), + prefab_hash: 1825212016i32, + desc: "Direct Heat Exchangers equalize the temperature of the two input networks." + .into(), + name: "Small Direct Heat Exchanger - Liquid + Gas ".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -507770416i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallDirectHeatExchangeLiquidtoLiquid".into(), + prefab_hash: -507770416i32, + desc: "Direct Heat Exchangers equalize the temperature of the two input networks." + .into(), + name: "Small Direct Heat Exchanger - Liquid + Liquid".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input2 } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2138748650i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallSatelliteDish".into(), + prefab_hash: -2138748650i32, + desc: "This small communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer (Modern) containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic." + .into(), + name: "Small Satellite Dish".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::Horizontal, MemoryAccess::ReadWrite), + (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::SignalStrength, MemoryAccess::Read), + (LogicType::SignalId, MemoryAccess::Read), + (LogicType::InterrogationProgress, MemoryAccess::Read), + (LogicType::TargetPadIndex, MemoryAccess::ReadWrite), + (LogicType::SizeX, MemoryAccess::Read), (LogicType::SizeZ, + MemoryAccess::Read), (LogicType::MinimumWattsToContact, + MemoryAccess::Read), (LogicType::WattsReachingContact, + MemoryAccess::Read), (LogicType::ContactTypeId, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::BestContactFilter, MemoryAccess::ReadWrite), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1633000411i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableBacklessDouble".into(), + prefab_hash: -1633000411i32, + desc: "".into(), + name: "Small (Table Backless Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1897221677i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableBacklessSingle".into(), + prefab_hash: -1897221677i32, + desc: "".into(), + name: "Small (Table Backless Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1260651529i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableDinnerSingle".into(), + prefab_hash: 1260651529i32, + desc: "".into(), + name: "Small (Table Dinner Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -660451023i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableRectangleDouble".into(), + prefab_hash: -660451023i32, + desc: "".into(), + name: "Small (Table Rectangle Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -924678969i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableRectangleSingle".into(), + prefab_hash: -924678969i32, + desc: "".into(), + name: "Small (Table Rectangle Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -19246131i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableThickDouble".into(), + prefab_hash: -19246131i32, + desc: "".into(), + name: "Small (Table Thick Double)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -291862981i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSmallTableThickSingle".into(), + prefab_hash: -291862981i32, + desc: "".into(), + name: "Small Table (Thick Single)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2045627372i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSolarPanel".into(), + prefab_hash: -2045627372i32, + desc: "Sinotai\'s standard solar panels are used for generating power from sunlight. They can be connected to Logic systems, in order to track sunlight, but their reduced during storms and when damaged. You can repair these using some trusty Duct Tape." + .into(), + name: "Solar Panel".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1554349863i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSolarPanel45".into(), + prefab_hash: -1554349863i32, + desc: "Sinotai basic solar panels generate power from sunlight, sitting at 45 degrees to the ground. Their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape." + .into(), + name: "Solar Panel (Angled)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 930865127i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSolarPanel45Reinforced".into(), + prefab_hash: 930865127i32, + desc: "This solar panel is resistant to storm damage.".into(), + name: "Solar Panel (Heavy Angled)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -539224550i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSolarPanelDual".into(), + prefab_hash: -539224550i32, + desc: "Sinotai dual solar panels are used for generating power from sunlight, with dedicated data and power ports. They can be connected to {Logic systems, in order to track sunlight, but their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape." + .into(), + name: "Solar Panel (Dual)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1545574413i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSolarPanelDualReinforced".into(), + prefab_hash: -1545574413i32, + desc: "This solar panel is resistant to storm damage.".into(), + name: "Solar Panel (Heavy Dual)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1968102968i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSolarPanelFlat".into(), + prefab_hash: 1968102968i32, + desc: "Sinotai basic solar panels generate power from sunlight. They lie flat to the ground, and their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape." + .into(), + name: "Solar Panel (Flat)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1697196770i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSolarPanelFlatReinforced".into(), + prefab_hash: 1697196770i32, + desc: "This solar panel is resistant to storm damage.".into(), + name: "Solar Panel (Heavy Flat)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -934345724i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSolarPanelReinforced".into(), + prefab_hash: -934345724i32, + desc: "This solar panel is resistant to storm damage.".into(), + name: "Solar Panel (Heavy)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, + MemoryAccess::ReadWrite), (LogicType::Vertical, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 813146305i32, + StructureLogicDeviceConsumerTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSolidFuelGenerator".into(), + prefab_hash: 813146305i32, + desc: "The mainstay of power generation for Stationeers, this device provides 20kW of power. Multiple solid resources can be loaded. While operating, the device will output its maximum power regardless of whether you have captured it or not. Watch for blown wires! It will output much more power than your regular Cable Coil can handle." + .into(), + name: "Generator (Solid Fuel)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::ClearMemory, + MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), + (LogicType::PowerGeneration, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Not Generating".into()), (1, "Generating".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Input".into(), class : Class::Ore, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemCharcoal".into(), "ItemCoalOre".into(), "ItemSolidFuel".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: None, + } + .into(), + ); + map.insert( + -1009150565i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSorter".into(), + prefab_hash: -1009150565i32, + desc: "No amount of automation is complete without some way of moving different items to different parts of a system. The Xigo A2B sorter can be programmed via a computer with a Sorter Motherboard to direct various items into different chute networks. Filtered items are always passed out the righthand side of the sorter, while non filtered items continue straight through." + .into(), + name: "Sorter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Output, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Split".into()), (1, "Filter".into()), (2, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Export 2".into(), class : Class::None, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "Data Disk".into(), class : Class::DataDisk, + index : 3u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Output2 }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2020231820i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStacker".into(), + prefab_hash: -2020231820i32, + desc: "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed." + .into(), + name: "Stacker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Output, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Automatic".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Processing".into(), class : Class::None, index : 2u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1585641623i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStackerReverse".into(), + prefab_hash: 1585641623i32, + desc: "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs. The reversed stacker has power and data on the opposite side.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed." + .into(), + name: "Stacker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Output, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Automatic".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Export" + .into(), class : Class::None, index : 2u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1405018945i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairs4x2".into(), + prefab_hash: 1405018945i32, + desc: "".into(), + name: "Stairs".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 155214029i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairs4x2RailL".into(), + prefab_hash: 155214029i32, + desc: "".into(), + name: "Stairs with Rail (Left)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -212902482i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairs4x2RailR".into(), + prefab_hash: -212902482i32, + desc: "".into(), + name: "Stairs with Rail (Right)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1088008720i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairs4x2Rails".into(), + prefab_hash: -1088008720i32, + desc: "".into(), + name: "Stairs with Rails".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 505924160i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellBackLeft".into(), + prefab_hash: 505924160i32, + desc: "".into(), + name: "Stairwell (Back Left)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -862048392i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellBackPassthrough".into(), + prefab_hash: -862048392i32, + desc: "".into(), + name: "Stairwell (Back Passthrough)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2128896573i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellBackRight".into(), + prefab_hash: -2128896573i32, + desc: "".into(), + name: "Stairwell (Back Right)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -37454456i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellFrontLeft".into(), + prefab_hash: -37454456i32, + desc: "".into(), + name: "Stairwell (Front Left)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1625452928i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellFrontPassthrough".into(), + prefab_hash: -1625452928i32, + desc: "".into(), + name: "Stairwell (Front Passthrough)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 340210934i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellFrontRight".into(), + prefab_hash: 340210934i32, + desc: "".into(), + name: "Stairwell (Front Right)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2049879875i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStairwellNoDoors".into(), + prefab_hash: 2049879875i32, + desc: "".into(), + name: "Stairwell (No Doors)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -260316435i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStirlingEngine".into(), + prefab_hash: -260316435i32, + desc: "Harnessing an ancient thermal exploit, the Recurso \'Libra\' Stirling Engine generates power via the expansion and contraction of a working gas to drive pistons operating an electrical generator.\n \nWhen high pressure hot gas is supplied into the input pipe, this gas will heat the hot side of the unit, then pass into the output pipe. The cooler side uses the room\'s ambient atmosphere, which must be kept at a lower temperature and pressure in order to create a differential. Add a working gas by inserting a Gas Canister. The unit must be deactivated when adding or removing canisters, or the working gas may leak into the surrounding atmosphere.\n \nGases with a low molecular mass make the most efficient working gases. Increasing the moles of working gas can result in a greater potential power output. However, overpressuring the unit may have... sub-optimal results." + .into(), + name: "Stirling Engine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.15f32, + radiation_factor: 0.15f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), + (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::RatioOxygen, + MemoryAccess::Read), (LogicType::RatioCarbonDioxide, + MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PowerGeneration, + MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), + (LogicType::Volume, MemoryAccess::Read), + (LogicType::RatioNitrousOxide, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, + MemoryAccess::Read), (LogicType::EnvironmentEfficiency, + MemoryAccess::Read), (LogicType::WorkingGasEfficiency, + MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, + MemoryAccess::Read), (LogicType::RatioLiquidOxygen, + MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, + MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Gas Canister".into(), class : + Class::GasCanister, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Power, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -793623899i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureStorageLocker".into(), + prefab_hash: -793623899i32, + desc: "".into(), + name: "Locker".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (3, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (4, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (5, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (6, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (7, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (8, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (9, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (10, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (11, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (12, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (13, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (14, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (15, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (16, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (17, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (18, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (19, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (20, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (21, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (22, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (23, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (24, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (25, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (26, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (27, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (28, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (29, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 2u32 }), (3u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 3u32 }), (4u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { + name : "".into(), class : Class::None, index : 5u32 }), (6u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 6u32 + }), (7u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 7u32 }), (8u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "".into(), + class : Class::None, index : 9u32 }), (10u32, SlotInfo::Direct { name : + "".into(), class : Class::None, index : 10u32 }), (11u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 11u32 + }), (12u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 12u32 }), (13u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 13u32 }), (14u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 14u32 }), (15u32, SlotInfo::Direct + { name : "".into(), class : Class::None, index : 15u32 }), (16u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 16u32 + }), (17u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 17u32 }), (18u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 18u32 }), (19u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 19u32 }), (20u32, SlotInfo::Direct + { name : "".into(), class : Class::None, index : 20u32 }), (21u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 21u32 + }), (22u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 22u32 }), (23u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 23u32 }), (24u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 24u32 }), (25u32, SlotInfo::Direct + { name : "".into(), class : Class::None, index : 25u32 }), (26u32, + SlotInfo::Direct { name : "".into(), class : Class::None, index : 26u32 + }), (27u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 27u32 }), (28u32, SlotInfo::Direct { name : "".into(), class : + Class::None, index : 28u32 }), (29u32, SlotInfo::Direct { name : "" + .into(), class : Class::None, index : 29u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 255034731i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureSuitStorage".into(), + prefab_hash: 255034731i32, + desc: "As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic.\nWhen powered and connected to and , it will recharge the suit\'s batteries, refill the Canister (Oxygen) and your Filter (Nitrogen) Gas Canister. The wastetank will be pumped out to the pipe connected to the waste outlet.\nAll the rack\'s pipes must be connected or the unit will show an error state, but it will still charge the battery." + .into(), + name: "Suit Storage".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Charge, MemoryAccess::Read), + (LogicSlotType::ChargeRatio, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::On, + MemoryAccess::ReadWrite), (LogicSlotType::Lock, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Charge, MemoryAccess::Read), + (LogicSlotType::ChargeRatio, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::PressureWaste, MemoryAccess::Read), + (LogicSlotType::PressureAir, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (2, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Charge, MemoryAccess::Read), + (LogicSlotType::ChargeRatio, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Helmet".into(), class : Class::Helmet, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Suit".into(), class : + Class::Suit, index : 1u32 }), (2u32, SlotInfo::Direct { name : "Back" + .into(), class : Class::Back, index : 2u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 }, + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1606848156i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankBig".into(), + prefab_hash: -1606848156i32, + desc: "".into(), + name: "Large Tank".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1280378227i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankBigInsulated".into(), + prefab_hash: 1280378227i32, + desc: "".into(), + name: "Tank Big (Insulated)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1276379454i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankConnector".into(), + prefab_hash: -1276379454i32, + desc: "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network." + .into(), + name: "Tank Connector".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1331802518i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankConnectorLiquid".into(), + prefab_hash: 1331802518i32, + desc: "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network." + .into(), + name: "Liquid Tank Connector".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.010000001f32, + radiation_factor: 0.0005f32, + }), + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Portable Slot".into(), class : + Class::None, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1013514688i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankSmall".into(), + prefab_hash: 1013514688i32, + desc: "".into(), + name: "Small Tank".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 955744474i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankSmallAir".into(), + prefab_hash: 955744474i32, + desc: "".into(), + name: "Small Tank (Air)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 2102454415i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankSmallFuel".into(), + prefab_hash: 2102454415i32, + desc: "".into(), + name: "Small Tank (Fuel)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0.05f32, + radiation_factor: 0.002f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 272136332i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTankSmallInsulated".into(), + prefab_hash: 272136332i32, + desc: "".into(), + name: "Tank Small (Insulated)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: Some(ThermalInfo { + convection_factor: 0f32, + radiation_factor: 0f32, + }), + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, + MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), + (LogicType::Setting, MemoryAccess::ReadWrite), + (LogicType::RatioOxygen, MemoryAccess::Read), + (LogicType::RatioCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioNitrogen, MemoryAccess::Read), + (LogicType::RatioPollutant, MemoryAccess::Read), + (LogicType::RatioVolatiles, MemoryAccess::Read), + (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, + MemoryAccess::Read), (LogicType::RatioNitrousOxide, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::Combustion, MemoryAccess::Read), + (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), + (LogicType::VolumeOfLiquid, MemoryAccess::Read), + (LogicType::RatioLiquidOxygen, MemoryAccess::Read), + (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), + (LogicType::RatioSteam, MemoryAccess::Read), + (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), + (LogicType::RatioLiquidPollutant, MemoryAccess::Read), + (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::RatioHydrogen, MemoryAccess::Read), + (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), + (LogicType::RatioPollutedWater, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: true, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: true, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -465741100i32, + StructureLogicDeviceConsumerMemoryTemplate { + prefab: PrefabInfo { + prefab_name: "StructureToolManufactory".into(), + prefab_hash: -465741100i32, + desc: "No mission can be completed without the proper tools. The Norsec ThuulDek manufactory can fabricate almost any tool or hand-held device a Stationeer may need to complete their mission, as well as a variety of delightful paints.\nUpgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds." + .into(), + name: "Tool Manufactory".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RecipeHash, + MemoryAccess::ReadWrite), (LogicType::CompletionRatio, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ingot, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: true, + has_reagents: true, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec![ + "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), + "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" + .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), + "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" + .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), + "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" + .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), + "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() + ] + .into_iter() + .collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: Some(FabricatorInfo { + tier: MachineTier::Undefined, + recipes: vec![ + Recipe { target_prefab : "ItemSprayCanBlack".into(), + target_prefab_hash : - 688107795i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanBlue".into(), + target_prefab_hash : - 498464883i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanBrown".into(), + target_prefab_hash : 845176977i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanGreen".into(), + target_prefab_hash : - 1880941852i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanGrey".into(), + target_prefab_hash : - 1645266981i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanKhaki".into(), + target_prefab_hash : 1918456047i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanOrange".into(), + target_prefab_hash : - 158007629i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanPink".into(), + target_prefab_hash : 1344257263i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanPurple".into(), + target_prefab_hash : 30686509i32, tier : MachineTier::TierOne, time : + 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop + : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanRed".into(), target_prefab_hash + : 1514393921i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemSprayCanWhite".into(), target_prefab_hash : 498481505i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemSprayCanYellow".into(), target_prefab_hash : 995468116i32, tier + : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemMKIICrowbar" + .into(), target_prefab_hash : 1440775434i32, tier : + MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Electrum".into(), 5f64), + ("Iron".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemMKIIWrench".into(), target_prefab_hash : + 1862001680i32, tier : MachineTier::TierTwo, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Electrum".into(), 3f64), ("Iron".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemMKIIDuctTape".into(), + target_prefab_hash : 388774906i32, tier : MachineTier::TierTwo, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Electrum".into(), 1f64), ("Iron".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemMKIIDrill" + .into(), target_prefab_hash : 324791548i32, tier : + MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), + ("Electrum".into(), 5f64), ("Iron".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemMKIIScrewdriver".into(), + target_prefab_hash : - 2015613246i32, tier : MachineTier::TierTwo, + time : 10f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Electrum".into(), 2f64), ("Iron".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemMKIIArcWelder".into(), target_prefab_hash : - 2061979347i32, + tier : MachineTier::TierTwo, time : 30f64, energy : 2500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), + 14f64), ("Invar".into(), 5f64), ("Solder".into(), 10f64), ("Steel" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMKIIAngleGrinder".into(), target_prefab_hash : 240174650i32, + tier : MachineTier::TierTwo, time : 10f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 1f64), ("Electrum".into(), 4f64), ("Iron".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemMKIIWireCutters".into(), + target_prefab_hash : - 178893251i32, tier : MachineTier::TierTwo, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Electrum".into(), 5f64), ("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemMKIIMiningDrill".into(), target_prefab_hash : - 1875271296i32, + tier : MachineTier::TierTwo, time : 5f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 2f64), ("Electrum".into(), 5f64), ("Iron".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemSprayGun".into(), + target_prefab_hash : 1289723966i32, tier : MachineTier::TierTwo, time + : 10f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Invar".into(), 5f64), ("Silicon".into(), 10f64), + ("Steel".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemCrowbar".into(), target_prefab_hash : + 856108234i32, tier : MachineTier::TierOne, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemWearLamp".into(), target_prefab_hash : - 598730959i32, tier : + MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemFlashlight".into(), target_prefab_hash : - 838472102i32, tier : + MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemDisposableBatteryCharger".into(), target_prefab_hash : - + 2124435700i32, tier : MachineTier::TierOne, time : 10f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 2f64), ("Iron".into(), + 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemBeacon".into(), target_prefab_hash : - 869869491i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 1f64), ("Iron".into(), 2f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemWrench".into(), target_prefab_hash : - + 1886261558i32, tier : MachineTier::TierOne, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemDuctTape".into(), target_prefab_hash : - 1943134693i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemDrill" + .into(), target_prefab_hash : 2009673399i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ToyLuna".into(), target_prefab_hash : 94730034i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Gold".into(), 1f64), ("Iron" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemScrewdriver".into(), target_prefab_hash : 687940869i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemArcWelder" + .into(), target_prefab_hash : 1385062886i32, tier : + MachineTier::TierOne, time : 30f64, energy : 2500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 4i64, reagents : vec![("Electrum".into(), 10f64), + ("Invar".into(), 5f64), ("Solder".into(), 10f64), ("Steel".into(), + 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemWeldingTorch".into(), target_prefab_hash : - 2066892079i32, tier + : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemAngleGrinder".into(), target_prefab_hash : 201215010i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemTerrainManipulator".into(), target_prefab_hash : 111280987i32, + tier : MachineTier::TierOne, time : 15f64, energy : 600f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 3f64), ("Gold".into(), 2f64), ("Iron".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemDirtCanister".into(), + target_prefab_hash : 902565329i32, tier : MachineTier::TierOne, time + : 5f64, energy : 400f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemWireCutters".into(), target_prefab_hash + : 1535854074i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemLabeller".into(), target_prefab_hash : - 743968726i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Gold".into(), 1f64), ("Iron" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemRemoteDetonator".into(), target_prefab_hash : 678483886i32, tier + : MachineTier::TierTwo, time : 30f64, energy : 1500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), + ("Solder".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemExplosive".into(), + target_prefab_hash : 235361649i32, tier : MachineTier::TierTwo, time + : 90f64, energy : 9000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Electrum".into(), 1f64), ("Silicon".into(), 7f64), + ("Solder".into(), 2f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemMiningCharge".into(), target_prefab_hash : + 15829510i32, tier : MachineTier::TierOne, time : 60f64, energy : + 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : vec![("Gold" + .into(), 1f64), ("Iron".into(), 1f64), ("Silicon".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemMiningDrill" + .into(), target_prefab_hash : 1055173191i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMiningDrillPneumatic".into(), target_prefab_hash : + 1258187304i32, tier : MachineTier::TierOne, time : 20f64, energy : + 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 4f64), ("Solder".into(), 4f64), ("Steel" + .into(), 6f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMiningDrillHeavy".into(), target_prefab_hash : - 1663349918i32, + tier : MachineTier::TierTwo, time : 30f64, energy : 2500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), + 5f64), ("Invar".into(), 10f64), ("Solder".into(), 10f64), ("Steel" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPickaxe".into(), target_prefab_hash : - 913649823i32, tier : + MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Iron" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMiningBelt".into(), target_prefab_hash : - 676435305i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemMiningBeltMKII".into(), target_prefab_hash : 1470787934i32, tier + : MachineTier::TierTwo, time : 10f64, energy : 1000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Constantan".into(), 5f64), + ("Steel".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemMiningBackPack".into(), target_prefab_hash : - + 1650383245i32, tier : MachineTier::TierOne, time : 8f64, energy : + 800f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 6f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemHardMiningBackPack".into(), target_prefab_hash : 900366130i32, + tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Invar".into(), + 1f64), ("Steel".into(), 6f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemSpaceHelmet".into(), target_prefab_hash : + 714830451i32, tier : MachineTier::TierOne, time : 15f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemSpacepack".into(), + target_prefab_hash : - 1260618380i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemJetpackBasic" + .into(), target_prefab_hash : 1969189000i32, tier : + MachineTier::TierOne, time : 30f64, energy : 1500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Gold".into(), 2f64), ("Lead" + .into(), 5f64), ("Steel".into(), 10f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemEvaSuit".into(), target_prefab_hash : + 1677018918i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 2f64), ("Iron".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemToolBelt".into(), + target_prefab_hash : - 355127880i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemMkIIToolbelt".into(), + target_prefab_hash : 1467558064i32, tier : MachineTier::TierTwo, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Constantan".into(), 5f64), ("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : + "WeaponPistolEnergy".into(), target_prefab_hash : - 385323479i32, + tier : MachineTier::TierTwo, time : 120f64, energy : 3000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), + 20f64), ("Gold".into(), 10f64), ("Solder".into(), 10f64), ("Steel" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "WeaponRifleEnergy".into(), target_prefab_hash : 1154745374i32, tier + : MachineTier::TierTwo, time : 240f64, energy : 10000f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 6i64, reagents : vec![("Constantan".into(), 10f64), + ("Electrum".into(), 20f64), ("Gold".into(), 10f64), ("Invar".into(), + 10f64), ("Solder".into(), 10f64), ("Steel".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : "UniformCommander" + .into(), target_prefab_hash : - 2083426457i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] + .into_iter().collect() }, Recipe { target_prefab : + "UniformOrangeJumpSuit".into(), target_prefab_hash : 810053150i32, + tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), + 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "UniformMarine".into(), target_prefab_hash : - 48342840i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Silicon".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemClothingBagOveralls_Aus".into(), target_prefab_hash : - + 869697826i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Silicon".into(), 25f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemClothingBagOveralls_Brazil".into(), + target_prefab_hash : 611886665i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_Canada".into(), + target_prefab_hash : 1265354377i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_China".into(), + target_prefab_hash : - 271773907i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_EU".into(), + target_prefab_hash : 1969872429i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_France".into(), + target_prefab_hash : 670416861i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_Germany".into(), + target_prefab_hash : 1858014029i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_Japan".into(), + target_prefab_hash : - 1694123145i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_Korea".into(), + target_prefab_hash : - 1309808369i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_NZ".into(), + target_prefab_hash : 102898295i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_Russia".into(), + target_prefab_hash : 520003812i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_SouthAfrica" + .into(), target_prefab_hash : - 265868019i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemClothingBagOveralls_UK".into(), target_prefab_hash : - + 979046113i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Silicon".into(), 25f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemClothingBagOveralls_Ukraine".into(), + target_prefab_hash : - 198158955i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemClothingBagOveralls_US".into(), + target_prefab_hash : - 691508919i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemRoadFlare".into(), target_prefab_hash : + 871811564i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "FlareGun".into(), target_prefab_hash : 118685786i32, tier : + MachineTier::TierOne, time : 10f64, energy : 2000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Iron".into(), 10f64), + ("Silicon".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemChemLightBlue".into(), target_prefab_hash : - + 772542081i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Silicon".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemChemLightGreen".into(), target_prefab_hash : - + 597479390i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Silicon".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemChemLightRed".into(), target_prefab_hash : - + 525810132i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Silicon".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemChemLightWhite".into(), target_prefab_hash : + 1312166823i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Silicon".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemChemLightYellow".into(), target_prefab_hash : + 1224819963i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Silicon".into(), 1f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemIgniter".into(), target_prefab_hash : + 890106742i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Copper".into(), 3f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemHardSuit".into(), target_prefab_hash : - + 1758310454i32, tier : MachineTier::TierTwo, time : 60f64, energy : + 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Astroloy".into(), 10f64), ("Steel".into(), 20f64), ("Stellite" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemReusableFireExtinguisher".into(), target_prefab_hash : - + 1773192190i32, tier : MachineTier::TierOne, time : 20f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemHardsuitHelmet".into(), target_prefab_hash : - + 84573099i32, tier : MachineTier::TierTwo, time : 50f64, energy : + 1750f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Astroloy".into(), 2f64), ("Steel".into(), 10f64), ("Stellite" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMarineBodyArmor".into(), target_prefab_hash : 1399098998i32, + tier : MachineTier::TierOne, time : 60f64, energy : 3000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Nickel".into(), + 10f64), ("Silicon".into(), 10f64), ("Steel".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemMarineHelmet" + .into(), target_prefab_hash : 1073631646i32, tier : + MachineTier::TierOne, time : 45f64, energy : 1750f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Gold".into(), 4f64), ("Silicon" + .into(), 4f64), ("Steel".into(), 8f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemNVG".into(), target_prefab_hash : + 982514123i32, tier : MachineTier::TierOne, time : 45f64, energy : + 2750f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Hastelloy".into(), 10f64), ("Silicon".into(), 5f64), ("Steel" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemSensorLenses".into(), target_prefab_hash : - 1176140051i32, tier + : MachineTier::TierTwo, time : 45f64, energy : 3500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Inconel".into(), 5f64), + ("Silicon".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemSensorProcessingUnitOreScanner".into(), target_prefab_hash : - + 1219128491i32, tier : MachineTier::TierTwo, time : 15f64, energy : + 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), + 5f64), ("Silicon".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemSensorProcessingUnitMesonScanner".into(), + target_prefab_hash : - 1730464583i32, tier : MachineTier::TierTwo, + time : 15f64, energy : 100f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), + ("Iron".into(), 5f64), ("Silicon".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemSensorProcessingUnitCelestialScanner".into(), target_prefab_hash + : - 1154200014i32, tier : MachineTier::TierTwo, time : 15f64, energy + : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), + 5f64), ("Silicon".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemGlasses".into(), target_prefab_hash : - + 1068925231i32, tier : MachineTier::TierOne, time : 20f64, energy : + 250f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron" + .into(), 15f64), ("Silicon".into(), 10f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemHardBackpack".into(), + target_prefab_hash : 374891127i32, tier : MachineTier::TierTwo, time + : 30f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Astroloy".into(), 5f64), ("Steel".into(), 15f64), + ("Stellite".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemHardJetpack".into(), target_prefab_hash : - + 412551656i32, tier : MachineTier::TierTwo, time : 40f64, energy : + 1750f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Astroloy".into(), 8f64), ("Steel".into(), 20f64), ("Stellite" + .into(), 8f64), ("Waspaloy".into(), 8f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemFlagSmall".into(), target_prefab_hash : + 2011191088i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemBasketBall".into(), target_prefab_hash : - 1262580790i32, tier : + MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Silicon".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitBasket" + .into(), target_prefab_hash : 148305004i32, tier : + MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPlantSampler".into(), target_prefab_hash : 173023800i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 5f64)] .into_iter().collect() } + ] + .into_iter() + .collect(), + }), + memory: MemoryInfo { + instructions: Some( + vec![ + ("DeviceSetLock".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" + .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : + InstructionPartType::Bool8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(48u32) }] .into_iter().collect() }), + ("EjectAllReagents".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }), + ("EjectReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" + .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : + InstructionPartType::Int32 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(24u32) }] .into_iter().collect() }), + ("ExecuteRecipe".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("JumpIfNextInvalid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("JumpToAddress".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("MissingRecipeReagent".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" + .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, + Some(62u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : + InstructionPartType::Byte8 }, InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) + }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 + }, InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(16u32) }] .into_iter().collect() }), + ("StackPointer".into(), Instruction { description : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" + .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, + parts : vec![InstructionPart { range : { trait FromTuple < T >: + Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple + < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) + -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, + T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) + -> Self { tuple } } #[inline] fn convert < T0, T1, Out : + FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { + Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : + "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : + InstructionPartType::UShort16 }, InstructionPart { range : { + trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; + } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) + }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(40u32) }] .into_iter().collect() }), + ("WaitUntilNextValid".into(), Instruction { description : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), description_stripped : + "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" + .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : + { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> + Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] + fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } + impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] + fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, + Some(53u32))) }, parts : vec![InstructionPart { range : { trait + FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl + < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn + from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl + < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn + from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn + convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, + T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, + name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, + InstructionPart { range : { trait FromTuple < T >: Sized { fn + from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > + for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { + [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > + for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> + Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < + (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) + } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : + InstructionPartType::Unused(56u32) }] .into_iter().collect() }) + ] + .into_iter() + .collect(), + ), + memory_access: MemoryAccess::ReadWrite, + memory_size: 64u32, + }, + } + .into(), + ); + map.insert( + 1473807953i32, + StructureSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTorpedoRack".into(), + prefab_hash: 1473807953i32, + desc: "".into(), + name: "Torpedo Rack".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Torpedo".into(), class : + Class::Torpedo, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Torpedo".into(), class : Class::Torpedo, index : 1u32 }), (2u32, + SlotInfo::Direct { name : "Torpedo".into(), class : Class::Torpedo, index + : 2u32 }), (3u32, SlotInfo::Direct { name : "Torpedo".into(), class : + Class::Torpedo, index : 3u32 }), (4u32, SlotInfo::Direct { name : + "Torpedo".into(), class : Class::Torpedo, index : 4u32 }), (5u32, + SlotInfo::Direct { name : "Torpedo".into(), class : Class::Torpedo, index + : 5u32 }), (6u32, SlotInfo::Direct { name : "Torpedo".into(), class : + Class::Torpedo, index : 6u32 }), (7u32, SlotInfo::Direct { name : + "Torpedo".into(), class : Class::Torpedo, index : 7u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1570931620i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTraderWaypoint".into(), + prefab_hash: 1570931620i32, + desc: "".into(), + name: "Trader Waypoint".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1423212473i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTransformer".into(), + prefab_hash: -1423212473i32, + desc: "The large Norsec transformer is a critical component of extended electrical networks, controlling the maximum power that will flow down a cable. To prevent overloading, output can be set from 0 to 50,000W. \nNote that transformers operate as data isolators, preventing data flowing into any network beyond it." + .into(), + name: "Transformer (Large)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1065725831i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTransformerMedium".into(), + prefab_hash: -1065725831i32, + desc: "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it." + .into(), + name: "Transformer (Medium)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 833912764i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTransformerMediumReversed".into(), + prefab_hash: 833912764i32, + desc: "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it." + .into(), + name: "Transformer Reversed (Medium)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -890946730i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTransformerSmall".into(), + prefab_hash: -890946730i32, + desc: "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it." + .into(), + name: "Transformer (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::Output } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1054059374i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTransformerSmallReversed".into(), + prefab_hash: 1054059374i32, + desc: "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it." + .into(), + name: "Transformer Reversed (Small)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1282191063i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTurbineGenerator".into(), + prefab_hash: 1282191063i32, + desc: "".into(), + name: "Turbine Generator".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PowerGeneration, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1310794736i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureTurboVolumePump".into(), + prefab_hash: 1310794736i32, + desc: "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction." + .into(), + name: "Turbo Volume Pump (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, + MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), + (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Right".into()), (1, "Left".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo + { typ : ConnectionType::Pipe, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 750118160i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureUnloader".into(), + prefab_hash: 750118160i32, + desc: "The Xigo Re:Gurge is a handy unit for unloading any items inserted into it, and feeding them into a chute network. For instance, if you add a full Mining Belt, the Re:Gurge will empty a mining belt of its contents, insert them into the chute network, then insert the mining belt itself. A Sorter is recommended to reclaim the mining belt.\n\nOutput = 0 exporting the main item\nOutput = 1 exporting items inside and eventually the main item." + .into(), + name: "Unloader".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()), (1, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, + MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Output, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Automatic".into()), (1, "Logic".into())] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, + role : ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1622183451i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureUprightWindTurbine".into(), + prefab_hash: 1622183451i32, + desc: "Norsec\'s basic wind turbine is an easily fabricated, rapidly deployed design that is strong enough to withstand the worst that environments can throw at it. \nWhile the wind turbine is optimized to produce power even on low atmosphere worlds (up to 200W), it performs best in denser environments. Output varies with wind speed, and during storms, may increase dramatically (up to 800W), so be careful to design your power networks with that in mind." + .into(), + name: "Upright Wind Turbine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PowerGeneration, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -692036078i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureValve".into(), + prefab_hash: -692036078i32, + desc: "".into(), + name: "Valve (Gas)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -443130773i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureVendingMachine".into(), + prefab_hash: -443130773i32, + desc: "The Xigo-designed \'Slot Mate\' vending machine allows storage of almost any item, while also operating as a distribution point for working with Traders. You cannot trade without a vending machine, or its more advanced equivalent, the Refrigerated Vending Machine. Each vending machine can hold up to 100 stacks." + .into(), + name: "Vending Machine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![] .into_iter().collect()), (1, vec![] .into_iter() + .collect()), (2, vec![] .into_iter().collect()), (3, vec![] + .into_iter().collect()), (4, vec![] .into_iter().collect()), (5, + vec![] .into_iter().collect()), (6, vec![] .into_iter().collect()), + (7, vec![] .into_iter().collect()), (8, vec![] .into_iter() + .collect()), (9, vec![] .into_iter().collect()), (10, vec![] + .into_iter().collect()), (11, vec![] .into_iter().collect()), (12, + vec![] .into_iter().collect()), (13, vec![] .into_iter().collect()), + (14, vec![] .into_iter().collect()), (15, vec![] .into_iter() + .collect()), (16, vec![] .into_iter().collect()), (17, vec![] + .into_iter().collect()), (18, vec![] .into_iter().collect()), (19, + vec![] .into_iter().collect()), (20, vec![] .into_iter().collect()), + (21, vec![] .into_iter().collect()), (22, vec![] .into_iter() + .collect()), (23, vec![] .into_iter().collect()), (24, vec![] + .into_iter().collect()), (25, vec![] .into_iter().collect()), (26, + vec![] .into_iter().collect()), (27, vec![] .into_iter().collect()), + (28, vec![] .into_iter().collect()), (29, vec![] .into_iter() + .collect()), (30, vec![] .into_iter().collect()), (31, vec![] + .into_iter().collect()), (32, vec![] .into_iter().collect()), (33, + vec![] .into_iter().collect()), (34, vec![] .into_iter().collect()), + (35, vec![] .into_iter().collect()), (36, vec![] .into_iter() + .collect()), (37, vec![] .into_iter().collect()), (38, vec![] + .into_iter().collect()), (39, vec![] .into_iter().collect()), (40, + vec![] .into_iter().collect()), (41, vec![] .into_iter().collect()), + (42, vec![] .into_iter().collect()), (43, vec![] .into_iter() + .collect()), (44, vec![] .into_iter().collect()), (45, vec![] + .into_iter().collect()), (46, vec![] .into_iter().collect()), (47, + vec![] .into_iter().collect()), (48, vec![] .into_iter().collect()), + (49, vec![] .into_iter().collect()), (50, vec![] .into_iter() + .collect()), (51, vec![] .into_iter().collect()), (52, vec![] + .into_iter().collect()), (53, vec![] .into_iter().collect()), (54, + vec![] .into_iter().collect()), (55, vec![] .into_iter().collect()), + (56, vec![] .into_iter().collect()), (57, vec![] .into_iter() + .collect()), (58, vec![] .into_iter().collect()), (59, vec![] + .into_iter().collect()), (60, vec![] .into_iter().collect()), (61, + vec![] .into_iter().collect()), (62, vec![] .into_iter().collect()), + (63, vec![] .into_iter().collect()), (64, vec![] .into_iter() + .collect()), (65, vec![] .into_iter().collect()), (66, vec![] + .into_iter().collect()), (67, vec![] .into_iter().collect()), (68, + vec![] .into_iter().collect()), (69, vec![] .into_iter().collect()), + (70, vec![] .into_iter().collect()), (71, vec![] .into_iter() + .collect()), (72, vec![] .into_iter().collect()), (73, vec![] + .into_iter().collect()), (74, vec![] .into_iter().collect()), (75, + vec![] .into_iter().collect()), (76, vec![] .into_iter().collect()), + (77, vec![] .into_iter().collect()), (78, vec![] .into_iter() + .collect()), (79, vec![] .into_iter().collect()), (80, vec![] + .into_iter().collect()), (81, vec![] .into_iter().collect()), (82, + vec![] .into_iter().collect()), (83, vec![] .into_iter().collect()), + (84, vec![] .into_iter().collect()), (85, vec![] .into_iter() + .collect()), (86, vec![] .into_iter().collect()), (87, vec![] + .into_iter().collect()), (88, vec![] .into_iter().collect()), (89, + vec![] .into_iter().collect()), (90, vec![] .into_iter().collect()), + (91, vec![] .into_iter().collect()), (92, vec![] .into_iter() + .collect()), (93, vec![] .into_iter().collect()), (94, vec![] + .into_iter().collect()), (95, vec![] .into_iter().collect()), (96, + vec![] .into_iter().collect()), (97, vec![] .into_iter().collect()), + (98, vec![] .into_iter().collect()), (99, vec![] .into_iter() + .collect()), (100, vec![] .into_iter().collect()), (101, vec![] + .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Ratio, + MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::RequestHash, + MemoryAccess::ReadWrite), (LogicType::ClearMemory, + MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::None, + index : 0u32 }), (1u32, SlotInfo::Direct { name : "Export".into(), class + : Class::None, index : 1u32 }), (2u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 2u32 }), (3u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 3u32 }), (4u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 4u32 }), (5u32, SlotInfo::Direct { name : "Storage" + .into(), class : Class::None, index : 5u32 }), (6u32, SlotInfo::Direct { + name : "Storage".into(), class : Class::None, index : 6u32 }), (7u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 7u32 }), (8u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 8u32 }), (9u32, SlotInfo::Direct { name : "Storage" + .into(), class : Class::None, index : 9u32 }), (10u32, SlotInfo::Direct { + name : "Storage".into(), class : Class::None, index : 10u32 }), (11u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 11u32 }), (12u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 12u32 }), (13u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 13u32 }), (14u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 14u32 }), (15u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 15u32 }), (16u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 16u32 }), (17u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 17u32 }), (18u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 18u32 }), (19u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 19u32 }), (20u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 20u32 }), (21u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 21u32 }), (22u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 22u32 }), (23u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 23u32 }), (24u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 24u32 }), (25u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 25u32 }), (26u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 26u32 }), (27u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 27u32 }), (28u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 28u32 }), (29u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 29u32 }), (30u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 30u32 }), (31u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 31u32 }), (32u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 32u32 }), (33u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 33u32 }), (34u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 34u32 }), (35u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 35u32 }), (36u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 36u32 }), (37u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 37u32 }), (38u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 38u32 }), (39u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 39u32 }), (40u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 40u32 }), (41u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 41u32 }), (42u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 42u32 }), (43u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 43u32 }), (44u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 44u32 }), (45u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 45u32 }), (46u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 46u32 }), (47u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 47u32 }), (48u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 48u32 }), (49u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 49u32 }), (50u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 50u32 }), (51u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 51u32 }), (52u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 52u32 }), (53u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 53u32 }), (54u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 54u32 }), (55u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 55u32 }), (56u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 56u32 }), (57u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 57u32 }), (58u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 58u32 }), (59u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 59u32 }), (60u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 60u32 }), (61u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 61u32 }), (62u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 62u32 }), (63u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 63u32 }), (64u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 64u32 }), (65u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 65u32 }), (66u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 66u32 }), (67u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 67u32 }), (68u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 68u32 }), (69u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 69u32 }), (70u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 70u32 }), (71u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 71u32 }), (72u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 72u32 }), (73u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 73u32 }), (74u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 74u32 }), (75u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 75u32 }), (76u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 76u32 }), (77u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 77u32 }), (78u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 78u32 }), (79u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 79u32 }), (80u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 80u32 }), (81u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 81u32 }), (82u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 82u32 }), (83u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 83u32 }), (84u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 84u32 }), (85u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 85u32 }), (86u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 86u32 }), (87u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 87u32 }), (88u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 88u32 }), (89u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 89u32 }), (90u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 90u32 }), (91u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 91u32 }), (92u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 92u32 }), (93u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 93u32 }), (94u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 94u32 }), (95u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 95u32 }), (96u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 96u32 }), (97u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 97u32 }), (98u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 98u32 }), (99u32, SlotInfo::Direct { name : "Storage".into(), class : + Class::None, index : 99u32 }), (100u32, SlotInfo::Direct { name : + "Storage".into(), class : Class::None, index : 100u32 }), (101u32, + SlotInfo::Direct { name : "Storage".into(), class : Class::None, index : + 101u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Chute, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::Chute, role : ConnectionRole::Output }, + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -321403609i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureVolumePump".into(), + prefab_hash: -321403609i32, + desc: "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks." + .into(), + name: "Volume Pump".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo + { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -858143148i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArch".into(), + prefab_hash: -858143148i32, + desc: "".into(), + name: "Wall (Arch)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1649708822i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchArrow".into(), + prefab_hash: 1649708822i32, + desc: "".into(), + name: "Wall (Arch Arrow)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1794588890i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchCornerRound".into(), + prefab_hash: 1794588890i32, + desc: "".into(), + name: "Wall (Arch Corner Round)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1963016580i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchCornerSquare".into(), + prefab_hash: -1963016580i32, + desc: "".into(), + name: "Wall (Arch Corner Square)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1281911841i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchCornerTriangle".into(), + prefab_hash: 1281911841i32, + desc: "".into(), + name: "Wall (Arch Corner Triangle)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1182510648i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchPlating".into(), + prefab_hash: 1182510648i32, + desc: "".into(), + name: "Wall (Arch Plating)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 782529714i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallArchTwoTone".into(), + prefab_hash: 782529714i32, + desc: "".into(), + name: "Wall (Arch Two Tone)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -739292323i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallCooler".into(), + prefab_hash: -739292323i32, + desc: "The Xigo Freezy Boi wall cooler complements the wall heater, which can only raise the temperature. The wall cooler functions by drawing heat from the surrounding atmosphere and adding that heat into its pipe network.\nIn order to run the wall cooler properly, you will need to connect pipes to the wall cooler and fill the connected pipe network with any type of gas. The gas\'s heat capacity and volume will determine how fast it reacts to temperature changes.\n\nEFFICIENCY\nThe higher the difference in temperature between the gas stored in the pipes and the room, the less efficient the wall cooler will be. So to keep the wall cooler running at an acceptable efficiency you will need to get rid of the heat that accumulates in the pipes connected to it. A common practice would be to run the pipes to the outside and use radiators on the outside section of the pipes to get rid of the heat.\nThe less efficient the wall cooler, the less power it consumes. It will consume 1010W at max efficiency. The wall cooler can be controlled by logic chips to run when the temperature hits a certain degree.\nERRORS\nIf the wall cooler is flashing an error then it is missing one of the following:\n\n- Pipe connection to the wall cooler.\n- Gas in the connected pipes, or pressure is too low.\n- Atmosphere in the surrounding environment or pressure is too low.\n\nFor more information about how to control temperatures, consult the temperature control Guides page." + .into(), + name: "Wall Cooler".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::DataDisk, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Pipe, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1635864154i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallFlat".into(), + prefab_hash: 1635864154i32, + desc: "".into(), + name: "Wall (Flat)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 898708250i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallFlatCornerRound".into(), + prefab_hash: 898708250i32, + desc: "".into(), + name: "Wall (Flat Corner Round)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 298130111i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallFlatCornerSquare".into(), + prefab_hash: 298130111i32, + desc: "".into(), + name: "Wall (Flat Corner Square)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2097419366i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallFlatCornerTriangle".into(), + prefab_hash: 2097419366i32, + desc: "".into(), + name: "Wall (Flat Corner Triangle)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1161662836i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallFlatCornerTriangleFlat".into(), + prefab_hash: -1161662836i32, + desc: "".into(), + name: "Wall (Flat Corner Triangle Flat)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1979212240i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallGeometryCorner".into(), + prefab_hash: 1979212240i32, + desc: "".into(), + name: "Wall (Geometry Corner)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1049735537i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallGeometryStreight".into(), + prefab_hash: 1049735537i32, + desc: "".into(), + name: "Wall (Geometry Straight)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1602758612i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallGeometryT".into(), + prefab_hash: 1602758612i32, + desc: "".into(), + name: "Wall (Geometry T)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1427845483i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallGeometryTMirrored".into(), + prefab_hash: -1427845483i32, + desc: "".into(), + name: "Wall (Geometry T Mirrored)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 24258244i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallHeater".into(), + prefab_hash: 24258244i32, + desc: "The Xigo wall heater is a simple device that can be installed on a wall or frame and connected to power. When switched on, it will start heating the surrounding environment. It consumes 1010W of power and can be controlled by logic chips to run when the temperature hits a certain level." + .into(), + name: "Wall Heater".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::DataDisk, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1287324802i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallIron".into(), + prefab_hash: 1287324802i32, + desc: "".into(), + name: "Iron Wall (Type 1)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1485834215i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallIron02".into(), + prefab_hash: 1485834215i32, + desc: "".into(), + name: "Iron Wall (Type 2)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 798439281i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallIron03".into(), + prefab_hash: 798439281i32, + desc: "".into(), + name: "Iron Wall (Type 3)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1309433134i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallIron04".into(), + prefab_hash: -1309433134i32, + desc: "".into(), + name: "Iron Wall (Type 4)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1492930217i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallLargePanel".into(), + prefab_hash: 1492930217i32, + desc: "".into(), + name: "Wall (Large Panel)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -776581573i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallLargePanelArrow".into(), + prefab_hash: -776581573i32, + desc: "".into(), + name: "Wall (Large Panel Arrow)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1860064656i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallLight".into(), + prefab_hash: -1860064656i32, + desc: "".into(), + name: "Wall Light".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -1306415132i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallLightBattery".into(), + prefab_hash: -1306415132i32, + desc: "".into(), + name: "Wall Light (Battery)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1590330637i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedArch".into(), + prefab_hash: 1590330637i32, + desc: "".into(), + name: "Wall (Padded Arch)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1126688298i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedArchCorner".into(), + prefab_hash: -1126688298i32, + desc: "".into(), + name: "Wall (Padded Arch Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1171987947i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedArchLightFittingTop".into(), + prefab_hash: 1171987947i32, + desc: "".into(), + name: "Wall (Padded Arch Light Fitting Top)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1546743960i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedArchLightsFittings".into(), + prefab_hash: -1546743960i32, + desc: "".into(), + name: "Wall (Padded Arch Lights Fittings)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -155945899i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedCorner".into(), + prefab_hash: -155945899i32, + desc: "".into(), + name: "Wall (Padded Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1183203913i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedCornerThin".into(), + prefab_hash: 1183203913i32, + desc: "".into(), + name: "Wall (Padded Corner Thin)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 8846501i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedNoBorder".into(), + prefab_hash: 8846501i32, + desc: "".into(), + name: "Wall (Padded No Border)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 179694804i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedNoBorderCorner".into(), + prefab_hash: 179694804i32, + desc: "".into(), + name: "Wall (Padded No Border Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1611559100i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedThinNoBorder".into(), + prefab_hash: -1611559100i32, + desc: "".into(), + name: "Wall (Padded Thin No Border)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1769527556i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedThinNoBorderCorner".into(), + prefab_hash: 1769527556i32, + desc: "".into(), + name: "Wall (Padded Thin No Border Corner)".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2087628940i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedWindow".into(), + prefab_hash: 2087628940i32, + desc: "".into(), + name: "Wall (Padded Window)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -37302931i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddedWindowThin".into(), + prefab_hash: -37302931i32, + desc: "".into(), + name: "Wall (Padded Window Thin)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 635995024i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPadding".into(), + prefab_hash: 635995024i32, + desc: "".into(), + name: "Wall (Padding)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1243329828i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddingArchVent".into(), + prefab_hash: -1243329828i32, + desc: "".into(), + name: "Wall (Padding Arch Vent)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 2024882687i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddingLightFitting".into(), + prefab_hash: 2024882687i32, + desc: "".into(), + name: "Wall (Padding Light Fitting)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1102403554i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPaddingThin".into(), + prefab_hash: -1102403554i32, + desc: "".into(), + name: "Wall (Padding Thin)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 26167457i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallPlating".into(), + prefab_hash: 26167457i32, + desc: "".into(), + name: "Wall (Plating)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 619828719i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallSmallPanelsAndHatch".into(), + prefab_hash: 619828719i32, + desc: "".into(), + name: "Wall (Small Panels And Hatch)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -639306697i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallSmallPanelsArrow".into(), + prefab_hash: -639306697i32, + desc: "".into(), + name: "Wall (Small Panels Arrow)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 386820253i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallSmallPanelsMonoChrome".into(), + prefab_hash: 386820253i32, + desc: "".into(), + name: "Wall (Small Panels Mono Chrome)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1407480603i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallSmallPanelsOpen".into(), + prefab_hash: -1407480603i32, + desc: "".into(), + name: "Wall (Small Panels Open)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 1709994581i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallSmallPanelsTwoTone".into(), + prefab_hash: 1709994581i32, + desc: "".into(), + name: "Wall (Small Panels Two Tone)".into(), + }, + structure: StructureInfo { small_grid: false }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1177469307i32, + StructureTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWallVent".into(), + prefab_hash: -1177469307i32, + desc: "Used to mix atmospheres passively between two walls.".into(), + name: "Wall Vent".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -1178961954i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterBottleFiller".into(), + prefab_hash: -1178961954i32, + desc: "".into(), + name: "Water Bottle Filler".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bottle Slot".into(), class : + Class::LiquidBottle, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Bottle Slot".into(), class : Class::LiquidBottle, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1433754995i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterBottleFillerBottom".into(), + prefab_hash: 1433754995i32, + desc: "".into(), + name: "Water Bottle Filler Bottom".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, + MemoryAccess::ReadWrite), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bottle Slot".into(), class : + Class::LiquidBottle, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Bottle Slot".into(), class : Class::LiquidBottle, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -756587791i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterBottleFillerPowered".into(), + prefab_hash: -756587791i32, + desc: "".into(), + name: "Waterbottle Filler".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bottle Slot".into(), class : + Class::LiquidBottle, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Bottle Slot".into(), class : Class::LiquidBottle, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Input }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1986658780i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterBottleFillerPoweredBottom".into(), + prefab_hash: 1986658780i32, + desc: "".into(), + name: "Waterbottle Filler".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()), (1, + vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), + (LogicSlotType::Pressure, MemoryAccess::Read), + (LogicSlotType::Temperature, MemoryAccess::Read), + (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, + MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, + MemoryAccess::Read), (LogicSlotType::ReferenceId, + MemoryAccess::Read)] .into_iter().collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Bottle Slot".into(), class : + Class::LiquidBottle, index : 0u32 }), (1u32, SlotInfo::Direct { name : + "Bottle Slot".into(), class : Class::LiquidBottle, index : 1u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -517628750i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterDigitalValve".into(), + prefab_hash: -517628750i32, + desc: "".into(), + name: "Liquid Digital Valve".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::PowerAndData, role : + ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 433184168i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterPipeMeter".into(), + prefab_hash: 433184168i32, + desc: "".into(), + name: "Liquid Pipe Meter".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![].into_iter().collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 887383294i32, + StructureLogicDeviceConsumerTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterPurifier".into(), + prefab_hash: 887383294i32, + desc: "Cleans Polluted Water and outputs Water. The purification process requires Charcoal which can be added to the machine via the import bin. The procesing throughput can be improved by increasing the gas pressure of the input pipe relative to the gas pressure of the output pipe." + .into(), + name: "Water Purifier".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![(0, vec![] .into_iter().collect())] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), + (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, + MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), + (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Import".into(), class : Class::Ore, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PipeLiquid, role : ConnectionRole::Input }, + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::Output }, ConnectionInfo { typ : + ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo + { typ : ConnectionType::Chute, role : ConnectionRole::Input } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + consumer_info: ConsumerInfo { + consumed_resources: vec!["ItemCharcoal".into()].into_iter().collect(), + processed_reagents: vec![].into_iter().collect(), + }, + fabricator_info: None, + } + .into(), + ); + map.insert( + -1369060582i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWaterWallCooler".into(), + prefab_hash: -1369060582i32, + desc: "".into(), + name: "Liquid Wall Cooler".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, + MemoryAccess::Read), (LogicSlotType::MaxQuantity, + MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), + (LogicSlotType::SortingClass, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Error, + MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), + (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, + MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, + MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::DataDisk, + index : 0u32 }) + ] + .into_iter() + .collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::PipeLiquid, role : + ConnectionRole::None }, ConnectionInfo { typ : + ConnectionType::PowerAndData, role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: false, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1997212478i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWeatherStation".into(), + prefab_hash: 1997212478i32, + desc: "0.NoStorm\n1.StormIncoming\n2.InStorm".into(), + name: "Weather Station".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, + MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), + (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::RequiredPower, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), + (LogicType::NextWeatherEventTime, MemoryAccess::Read), + (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![ + (0, "NoStorm".into()), (1, "StormIncoming".into()), (2, "InStorm" + .into()) + ] + .into_iter() + .collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Data, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: true, + has_atmosphere: false, + has_color_state: false, + has_lock_state: true, + has_mode_state: true, + has_on_off_state: true, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + -2082355173i32, + StructureLogicDeviceTemplate { + prefab: PrefabInfo { + prefab_name: "StructureWindTurbine".into(), + prefab_hash: -2082355173i32, + desc: "The Stationeers wind turbine was first designed by Norsec atmospheric engineers, looking to create a wind-driven power generation system that would operate even on exceedingly low atmosphere worlds. The ultra-light blades respond to exceedingly low atmospheric densities, while being strong enough to function even under huge strain in much more demanding environments.\nWhile the wind turbine is optimized to produce power (up to 500W) even on low atmosphere worlds, it performs best in denser environments. Output varies with wind speed and, during storms, may increase dramatically (up to 10,000W), so be careful to design your power networks with that in mind." + .into(), + name: "Wind Turbine".into(), + }, + structure: StructureInfo { small_grid: true }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![].into_iter().collect(), + logic_types: vec![ + (LogicType::PowerGeneration, MemoryAccess::Read), + (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, + MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![].into_iter().collect(), + device: DeviceInfo { + connection_list: vec![ + ConnectionInfo { typ : ConnectionType::Power, role : + ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, + role : ConnectionRole::None } + ] + .into_iter() + .collect(), + device_pins_length: None, + has_activate_state: false, + has_atmosphere: false, + has_color_state: false, + has_lock_state: false, + has_mode_state: false, + has_on_off_state: false, + has_open_state: false, + has_reagents: false, + }, + } + .into(), + ); + map.insert( + 1700018136i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ToolPrinterMod".into(), + prefab_hash: 1700018136i32, + desc: "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options." + .into(), + name: "Tool Printer Mod".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + 94730034i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "ToyLuna".into(), + prefab_hash: 94730034i32, + desc: "".into(), + name: "Toy Luna".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map.insert( + -2083426457i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "UniformCommander".into(), + prefab_hash: -2083426457i32, + desc: "".into(), + name: "Uniform Commander".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Uniform, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "Access Card".into(), + class : Class::AccessCard, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Access Card".into(), class : Class::AccessCard, index : 3u32 }), + (4u32, SlotInfo::Direct { name : "Credit Card".into(), class : + Class::CreditCard, index : 4u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -48342840i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "UniformMarine".into(), + prefab_hash: -48342840i32, + desc: "".into(), + name: "Marine Uniform".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Uniform, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "Access Card".into(), + class : Class::AccessCard, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Credit Card".into(), class : Class::CreditCard, index : 3u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 810053150i32, + ItemSlotsTemplate { + prefab: PrefabInfo { + prefab_name: "UniformOrangeJumpSuit".into(), + prefab_hash: 810053150i32, + desc: "".into(), + name: "Jump Suit (Orange)".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Uniform, + sorting_class: SortingClass::Clothing, + }, + thermal_info: None, + internal_atmo_info: None, + slots: vec![ + (0u32, SlotInfo::Direct { name : "".into(), class : Class::None, index : + 0u32 }), (1u32, SlotInfo::Direct { name : "".into(), class : Class::None, + index : 1u32 }), (2u32, SlotInfo::Direct { name : "Access Card".into(), + class : Class::AccessCard, index : 2u32 }), (3u32, SlotInfo::Direct { + name : "Credit Card".into(), class : Class::CreditCard, index : 3u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 789494694i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "WeaponEnergy".into(), + prefab_hash: 789494694i32, + desc: "".into(), + name: "Weapon Energy".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, + MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: None, + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -385323479i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "WeaponPistolEnergy".into(), + prefab_hash: -385323479i32, + desc: "0.Stun\n1.Kill".into(), + name: "Energy Pistol".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Stun".into()), (1, "Kill".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + 1154745374i32, + ItemLogicTemplate { + prefab: PrefabInfo { + prefab_name: "WeaponRifleEnergy".into(), + prefab_hash: 1154745374i32, + desc: "0.Stun\n1.Kill".into(), + name: "Energy Rifle".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::None, + sorting_class: SortingClass::Tools, + }, + thermal_info: None, + internal_atmo_info: None, + logic: LogicInfo { + logic_slot_types: vec![ + (0, vec![(LogicSlotType::Occupied, MemoryAccess::Read), + (LogicSlotType::OccupantHash, MemoryAccess::Read), + (LogicSlotType::Quantity, MemoryAccess::Read), + (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, + MemoryAccess::Read), (LogicSlotType::ChargeRatio, + MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), + (LogicSlotType::MaxQuantity, MemoryAccess::Read), + (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() + .collect()) + ] + .into_iter() + .collect(), + logic_types: vec![ + (LogicType::Power, MemoryAccess::Read), (LogicType::Open, + MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), + (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, + MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), + (LogicType::ReferenceId, MemoryAccess::Read) + ] + .into_iter() + .collect(), + modes: Some( + vec![(0, "Stun".into()), (1, "Kill".into())].into_iter().collect(), + ), + transmission_receiver: false, + wireless_logic: false, + circuit_holder: false, + }, + slots: vec![ + (0u32, SlotInfo::Direct { name : "Battery".into(), class : + Class::Battery, index : 0u32 }) + ] + .into_iter() + .collect(), + } + .into(), + ); + map.insert( + -1102977898i32, + ItemTemplate { + prefab: PrefabInfo { + prefab_name: "WeaponTorpedo".into(), + prefab_hash: -1102977898i32, + desc: "".into(), + name: "Torpedo".into(), + }, + item: ItemInfo { + consumable: false, + filter_type: None, + ingredient: false, + max_quantity: 1u32, + reagents: None, + slot_class: Class::Torpedo, + sorting_class: SortingClass::Default, + }, + thermal_info: None, + internal_atmo_info: None, + } + .into(), + ); + map +} diff --git a/stationeers_data/src/database/reagent_map.rs b/stationeers_data/src/database/reagent_map.rs new file mode 100644 index 0000000..ab55a03 --- /dev/null +++ b/stationeers_data/src/database/reagent_map.rs @@ -0,0 +1,581 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run +// +// `cargo xtask generate -m database` +// +// from the workspace to regenerate +// +// ================================================= + +use crate::templates::Reagent; +pub fn build_reagent_database() -> std::collections::BTreeMap< + u8, + crate::templates::Reagent, +> { + #[allow(clippy::unreadable_literal)] + let mut map: std::collections::BTreeMap = std::collections::BTreeMap::new(); + map.insert( + 20u8, + Reagent { + id: 20u8, + name: "Alcohol".into(), + hash: 1565803737i32, + unit: "ml".into(), + is_organic: true, + sources: vec![].into_iter().collect(), + }, + ); + map.insert( + 36u8, + Reagent { + id: 36u8, + name: "Astroloy".into(), + hash: -1493155787i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemAstroloyIngot".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 40u8, + Reagent { + id: 40u8, + name: "Biomass".into(), + hash: 925270362i32, + unit: "".into(), + is_organic: true, + sources: vec![("ItemBiomass".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 5u8, + Reagent { + id: 5u8, + name: "Carbon".into(), + hash: 1582746610i32, + unit: "g".into(), + is_organic: true, + sources: vec![("HumanSkull".into(), 1f64), ("ItemCharcoal".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 37u8, + Reagent { + id: 37u8, + name: "Cobalt".into(), + hash: 1702246124i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemCobaltOre".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 44u8, + Reagent { + id: 44u8, + name: "Cocoa".into(), + hash: 678781198i32, + unit: "g".into(), + is_organic: true, + sources: vec![ + ("ItemCocoaPowder".into(), 1f64), ("ItemCocoaTree".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 27u8, + Reagent { + id: 27u8, + name: "ColorBlue".into(), + hash: 557517660i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ReagentColorBlue".into(), 10f64)].into_iter().collect(), + }, + ); + map.insert( + 26u8, + Reagent { + id: 26u8, + name: "ColorGreen".into(), + hash: 2129955242i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ReagentColorGreen".into(), 10f64)].into_iter().collect(), + }, + ); + map.insert( + 29u8, + Reagent { + id: 29u8, + name: "ColorOrange".into(), + hash: 1728153015i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ReagentColorOrange".into(), 10f64)].into_iter().collect(), + }, + ); + map.insert( + 25u8, + Reagent { + id: 25u8, + name: "ColorRed".into(), + hash: 667001276i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ReagentColorRed".into(), 10f64)].into_iter().collect(), + }, + ); + map.insert( + 28u8, + Reagent { + id: 28u8, + name: "ColorYellow".into(), + hash: -1430202288i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ReagentColorYellow".into(), 10f64)].into_iter().collect(), + }, + ); + map.insert( + 15u8, + Reagent { + id: 15u8, + name: "Constantan".into(), + hash: 1731241392i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemConstantanIngot".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 7u8, + Reagent { + id: 7u8, + name: "Copper".into(), + hash: -1172078909i32, + unit: "g".into(), + is_organic: true, + sources: vec![ + ("ItemCopperIngot".into(), 1f64), ("ItemCopperOre".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 38u8, + Reagent { + id: 38u8, + name: "Corn".into(), + hash: 1550709753i32, + unit: "".into(), + is_organic: true, + sources: vec![("ItemCookedCorn".into(), 1f64), ("ItemCorn".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 2u8, + Reagent { + id: 2u8, + name: "Egg".into(), + hash: 1887084450i32, + unit: "".into(), + is_organic: true, + sources: vec![ + ("ItemCookedPowderedEggs".into(), 1f64), ("ItemEgg".into(), 1f64), + ("ItemFertilizedEgg".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 13u8, + Reagent { + id: 13u8, + name: "Electrum".into(), + hash: 478264742i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemElectrumIngot".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 24u8, + Reagent { + id: 24u8, + name: "Fenoxitone".into(), + hash: -865687737i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemFern".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 0u8, + Reagent { + id: 0u8, + name: "Flour".into(), + hash: -811006991i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemFlour".into(), 50f64)].into_iter().collect(), + }, + ); + map.insert( + 4u8, + Reagent { + id: 4u8, + name: "Gold".into(), + hash: -409226641i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemGoldIngot".into(), 1f64), ("ItemGoldOre".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 35u8, + Reagent { + id: 35u8, + name: "Hastelloy".into(), + hash: 2019732679i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemHastelloyIngot".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 9u8, + Reagent { + id: 9u8, + name: "Hydrocarbon".into(), + hash: 2003628602i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemCoalOre".into(), 1f64), ("ItemSolidFuel".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 34u8, + Reagent { + id: 34u8, + name: "Inconel".into(), + hash: -586072179i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemInconelIngot".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 14u8, + Reagent { + id: 14u8, + name: "Invar".into(), + hash: -626453759i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemInvarIngot".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 3u8, + Reagent { + id: 3u8, + name: "Iron".into(), + hash: -666742878i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemIronIngot".into(), 1f64), ("ItemIronOre".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 12u8, + Reagent { + id: 12u8, + name: "Lead".into(), + hash: -2002530571i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemLeadIngot".into(), 1f64), ("ItemLeadOre".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 1u8, + Reagent { + id: 1u8, + name: "Milk".into(), + hash: 471085864i32, + unit: "ml".into(), + is_organic: true, + sources: vec![ + ("ItemCookedCondensedMilk".into(), 1f64), ("ItemMilk".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 42u8, + Reagent { + id: 42u8, + name: "Mushroom".into(), + hash: 516242109i32, + unit: "g".into(), + is_organic: true, + sources: vec![ + ("ItemCookedMushroom".into(), 1f64), ("ItemMushroom".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 11u8, + Reagent { + id: 11u8, + name: "Nickel".into(), + hash: 556601662i32, + unit: "g".into(), + is_organic: true, + sources: vec![ + ("ItemNickelIngot".into(), 1f64), ("ItemNickelOre".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 21u8, + Reagent { + id: 21u8, + name: "Oil".into(), + hash: 1958538866i32, + unit: "ml".into(), + is_organic: true, + sources: vec![("ItemSoyOil".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 17u8, + Reagent { + id: 17u8, + name: "Plastic".into(), + hash: 791382247i32, + unit: "g".into(), + is_organic: true, + sources: vec![].into_iter().collect(), + }, + ); + map.insert( + 22u8, + Reagent { + id: 22u8, + name: "Potato".into(), + hash: -1657266385i32, + unit: "".into(), + is_organic: true, + sources: vec![("ItemPotato".into(), 1f64), ("ItemPotatoBaked".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 30u8, + Reagent { + id: 30u8, + name: "Pumpkin".into(), + hash: -1250164309i32, + unit: "".into(), + is_organic: true, + sources: vec![ + ("ItemCookedPumpkin".into(), 1f64), ("ItemPumpkin".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 31u8, + Reagent { + id: 31u8, + name: "Rice".into(), + hash: 1951286569i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemCookedRice".into(), 1f64), ("ItemRice".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 19u8, + Reagent { + id: 19u8, + name: "SalicylicAcid".into(), + hash: -2086114347i32, + unit: "g".into(), + is_organic: true, + sources: vec![].into_iter().collect(), + }, + ); + map.insert( + 18u8, + Reagent { + id: 18u8, + name: "Silicon".into(), + hash: -1195893171i32, + unit: "g".into(), + is_organic: true, + sources: vec![ + ("ItemSiliconIngot".into(), 0.1f64), ("ItemSiliconOre".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 10u8, + Reagent { + id: 10u8, + name: "Silver".into(), + hash: 687283565i32, + unit: "g".into(), + is_organic: true, + sources: vec![ + ("ItemSilverIngot".into(), 1f64), ("ItemSilverOre".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 16u8, + Reagent { + id: 16u8, + name: "Solder".into(), + hash: -1206542381i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemSolderIngot".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 41u8, + Reagent { + id: 41u8, + name: "Soy".into(), + hash: 1510471435i32, + unit: "".into(), + is_organic: true, + sources: vec![ + ("ItemCookedSoybean".into(), 1f64), ("ItemSoybean".into(), 1f64) + ] + .into_iter() + .collect(), + }, + ); + map.insert( + 8u8, + Reagent { + id: 8u8, + name: "Steel".into(), + hash: 1331613335i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemEmptyCan".into(), 1f64), ("ItemSteelIngot".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 33u8, + Reagent { + id: 33u8, + name: "Stellite".into(), + hash: -500544800i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemStelliteIngot".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 43u8, + Reagent { + id: 43u8, + name: "Sugar".into(), + hash: 1778746875i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemSugar".into(), 10f64), ("ItemSugarCane".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 23u8, + Reagent { + id: 23u8, + name: "Tomato".into(), + hash: 733496620i32, + unit: "".into(), + is_organic: true, + sources: vec![("ItemCookedTomato".into(), 1f64), ("ItemTomato".into(), 1f64)] + .into_iter() + .collect(), + }, + ); + map.insert( + 6u8, + Reagent { + id: 6u8, + name: "Uranium".into(), + hash: -208860272i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemUraniumOre".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 32u8, + Reagent { + id: 32u8, + name: "Waspaloy".into(), + hash: 1787814293i32, + unit: "g".into(), + is_organic: true, + sources: vec![("ItemWaspaloyIngot".into(), 1f64)].into_iter().collect(), + }, + ); + map.insert( + 39u8, + Reagent { + id: 39u8, + name: "Wheat".into(), + hash: -686695134i32, + unit: "".into(), + is_organic: true, + sources: vec![("ItemWheat".into(), 1f64)].into_iter().collect(), + }, + ); + map +} diff --git a/stationeers_data/src/enums/basic.rs b/stationeers_data/src/enums/basic.rs new file mode 100644 index 0000000..81c9775 --- /dev/null +++ b/stationeers_data/src/enums/basic.rs @@ -0,0 +1,2308 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run +// +// `cargo xtask generate -m enums` +// +// from the workspace to regenerate +// +// ================================================= + +use serde_derive::{Deserialize, Serialize}; +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; +use super::script::{LogicSlotType, LogicType}; +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum AirConditioningMode { + #[strum(serialize = "Cold")] + #[strum(props(docs = "", value = "0"))] + Cold = 0u8, + #[strum(serialize = "Hot")] + #[strum(props(docs = "", value = "1"))] + Hot = 1u8, +} +impl TryFrom for AirConditioningMode { + type Error = super::ParseError; + fn try_from( + value: f64, + ) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = AirConditioningMode::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum AirControlMode { + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "Offline")] + #[strum(props(docs = "", value = "1"))] + Offline = 1u8, + #[strum(serialize = "Pressure")] + #[strum(props(docs = "", value = "2"))] + Pressure = 2u8, + #[strum(serialize = "Draught")] + #[strum(props(docs = "", value = "4"))] + Draught = 4u8, +} +impl TryFrom for AirControlMode { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = AirControlMode::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum ColorType { + #[strum(serialize = "Blue")] + #[strum(props(docs = "", value = "0"))] + Blue = 0u8, + #[strum(serialize = "Gray")] + #[strum(props(docs = "", value = "1"))] + Gray = 1u8, + #[strum(serialize = "Green")] + #[strum(props(docs = "", value = "2"))] + Green = 2u8, + #[strum(serialize = "Orange")] + #[strum(props(docs = "", value = "3"))] + Orange = 3u8, + #[strum(serialize = "Red")] + #[strum(props(docs = "", value = "4"))] + Red = 4u8, + #[strum(serialize = "Yellow")] + #[strum(props(docs = "", value = "5"))] + Yellow = 5u8, + #[strum(serialize = "White")] + #[strum(props(docs = "", value = "6"))] + White = 6u8, + #[strum(serialize = "Black")] + #[strum(props(docs = "", value = "7"))] + Black = 7u8, + #[strum(serialize = "Brown")] + #[strum(props(docs = "", value = "8"))] + Brown = 8u8, + #[strum(serialize = "Khaki")] + #[strum(props(docs = "", value = "9"))] + Khaki = 9u8, + #[strum(serialize = "Pink")] + #[strum(props(docs = "", value = "10"))] + Pink = 10u8, + #[strum(serialize = "Purple")] + #[strum(props(docs = "", value = "11"))] + Purple = 11u8, +} +impl TryFrom for ColorType { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = ColorType::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum DaylightSensorMode { + #[strum(serialize = "Default")] + #[strum(props(docs = "", value = "0"))] + #[default] + Default = 0u8, + #[strum(serialize = "Horizontal")] + #[strum(props(docs = "", value = "1"))] + Horizontal = 1u8, + #[strum(serialize = "Vertical")] + #[strum(props(docs = "", value = "2"))] + Vertical = 2u8, +} +impl TryFrom for DaylightSensorMode { + type Error = super::ParseError; + fn try_from( + value: f64, + ) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = DaylightSensorMode::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum ElevatorMode { + #[strum(serialize = "Stationary")] + #[strum(props(docs = "", value = "0"))] + Stationary = 0u8, + #[strum(serialize = "Upward")] + #[strum(props(docs = "", value = "1"))] + Upward = 1u8, + #[strum(serialize = "Downward")] + #[strum(props(docs = "", value = "2"))] + Downward = 2u8, +} +impl TryFrom for ElevatorMode { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = ElevatorMode::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum EntityState { + #[strum(serialize = "Alive")] + #[strum(props(docs = "", value = "0"))] + Alive = 0u8, + #[strum(serialize = "Dead")] + #[strum(props(docs = "", value = "1"))] + Dead = 1u8, + #[strum(serialize = "Unconscious")] + #[strum(props(docs = "", value = "2"))] + Unconscious = 2u8, + #[strum(serialize = "Decay")] + #[strum(props(docs = "", value = "3"))] + Decay = 3u8, +} +impl TryFrom for EntityState { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = EntityState::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u32)] +pub enum GasType { + #[strum(serialize = "Undefined")] + #[strum(props(docs = "", value = "0"))] + Undefined = 0u32, + #[strum(serialize = "Oxygen")] + #[strum(props(docs = "", value = "1"))] + Oxygen = 1u32, + #[strum(serialize = "Nitrogen")] + #[strum(props(docs = "", value = "2"))] + Nitrogen = 2u32, + #[strum(serialize = "CarbonDioxide")] + #[strum(props(docs = "", value = "4"))] + CarbonDioxide = 4u32, + #[strum(serialize = "Volatiles")] + #[strum(props(docs = "", value = "8"))] + Volatiles = 8u32, + #[strum(serialize = "Pollutant")] + #[strum(props(docs = "", value = "16"))] + Pollutant = 16u32, + #[strum(serialize = "Water")] + #[strum(props(docs = "", value = "32"))] + Water = 32u32, + #[strum(serialize = "NitrousOxide")] + #[strum(props(docs = "", value = "64"))] + NitrousOxide = 64u32, + #[strum(serialize = "LiquidNitrogen")] + #[strum(props(docs = "", value = "128"))] + LiquidNitrogen = 128u32, + #[strum(serialize = "LiquidOxygen")] + #[strum(props(docs = "", value = "256"))] + LiquidOxygen = 256u32, + #[strum(serialize = "LiquidVolatiles")] + #[strum(props(docs = "", value = "512"))] + LiquidVolatiles = 512u32, + #[strum(serialize = "Steam")] + #[strum(props(docs = "", value = "1024"))] + Steam = 1024u32, + #[strum(serialize = "LiquidCarbonDioxide")] + #[strum(props(docs = "", value = "2048"))] + LiquidCarbonDioxide = 2048u32, + #[strum(serialize = "LiquidPollutant")] + #[strum(props(docs = "", value = "4096"))] + LiquidPollutant = 4096u32, + #[strum(serialize = "LiquidNitrousOxide")] + #[strum(props(docs = "", value = "8192"))] + LiquidNitrousOxide = 8192u32, + #[strum(serialize = "Hydrogen")] + #[strum(props(docs = "", value = "16384"))] + Hydrogen = 16384u32, + #[strum(serialize = "LiquidHydrogen")] + #[strum(props(docs = "", value = "32768"))] + LiquidHydrogen = 32768u32, + #[strum(serialize = "PollutedWater")] + #[strum(props(docs = "", value = "65536"))] + PollutedWater = 65536u32, +} +impl TryFrom for GasType { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = GasType::iter() + .find(|enm| (f64::from(*enm as u32) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum PowerMode { + #[strum(serialize = "Idle")] + #[strum(props(docs = "", value = "0"))] + Idle = 0u8, + #[strum(serialize = "Discharged")] + #[strum(props(docs = "", value = "1"))] + Discharged = 1u8, + #[strum(serialize = "Discharging")] + #[strum(props(docs = "", value = "2"))] + Discharging = 2u8, + #[strum(serialize = "Charging")] + #[strum(props(docs = "", value = "3"))] + Charging = 3u8, + #[strum(serialize = "Charged")] + #[strum(props(docs = "", value = "4"))] + Charged = 4u8, +} +impl TryFrom for PowerMode { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = PowerMode::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum PrinterInstruction { + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "StackPointer")] + #[strum(props(docs = "", value = "1"))] + StackPointer = 1u8, + #[strum(serialize = "ExecuteRecipe")] + #[strum(props(docs = "", value = "2"))] + ExecuteRecipe = 2u8, + #[strum(serialize = "WaitUntilNextValid")] + #[strum(props(docs = "", value = "3"))] + WaitUntilNextValid = 3u8, + #[strum(serialize = "JumpIfNextInvalid")] + #[strum(props(docs = "", value = "4"))] + JumpIfNextInvalid = 4u8, + #[strum(serialize = "JumpToAddress")] + #[strum(props(docs = "", value = "5"))] + JumpToAddress = 5u8, + #[strum(serialize = "DeviceSetLock")] + #[strum(props(docs = "", value = "6"))] + DeviceSetLock = 6u8, + #[strum(serialize = "EjectReagent")] + #[strum(props(docs = "", value = "7"))] + EjectReagent = 7u8, + #[strum(serialize = "EjectAllReagents")] + #[strum(props(docs = "", value = "8"))] + EjectAllReagents = 8u8, + #[strum(serialize = "MissingRecipeReagent")] + #[strum(props(docs = "", value = "9"))] + MissingRecipeReagent = 9u8, +} +impl TryFrom for PrinterInstruction { + type Error = super::ParseError; + fn try_from( + value: f64, + ) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = PrinterInstruction::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum ReEntryProfile { + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "Low")] + #[strum(props(docs = "", value = "1"))] + Low = 1u8, + #[strum(serialize = "Medium")] + #[strum(props(docs = "", value = "2"))] + Medium = 2u8, + #[strum(serialize = "High")] + #[strum(props(docs = "", value = "3"))] + High = 3u8, + #[strum(serialize = "Max")] + #[strum(props(docs = "", value = "4"))] + Max = 4u8, +} +impl TryFrom for ReEntryProfile { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = ReEntryProfile::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum RobotMode { + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "Follow")] + #[strum(props(docs = "", value = "1"))] + Follow = 1u8, + #[strum(serialize = "MoveToTarget")] + #[strum(props(docs = "", value = "2"))] + MoveToTarget = 2u8, + #[strum(serialize = "Roam")] + #[strum(props(docs = "", value = "3"))] + Roam = 3u8, + #[strum(serialize = "Unload")] + #[strum(props(docs = "", value = "4"))] + Unload = 4u8, + #[strum(serialize = "PathToTarget")] + #[strum(props(docs = "", value = "5"))] + PathToTarget = 5u8, + #[strum(serialize = "StorageFull")] + #[strum(props(docs = "", value = "6"))] + StorageFull = 6u8, +} +impl TryFrom for RobotMode { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = RobotMode::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum RocketMode { + #[strum(serialize = "Invalid")] + #[strum(props(docs = "", value = "0"))] + Invalid = 0u8, + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "1"))] + #[default] + None = 1u8, + #[strum(serialize = "Mine")] + #[strum(props(docs = "", value = "2"))] + Mine = 2u8, + #[strum(serialize = "Survey")] + #[strum(props(docs = "", value = "3"))] + Survey = 3u8, + #[strum(serialize = "Discover")] + #[strum(props(docs = "", value = "4"))] + Discover = 4u8, + #[strum(serialize = "Chart")] + #[strum(props(docs = "", value = "5"))] + Chart = 5u8, +} +impl TryFrom for RocketMode { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = RocketMode::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum Class { + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "Helmet")] + #[strum(props(docs = "", value = "1"))] + Helmet = 1u8, + #[strum(serialize = "Suit")] + #[strum(props(docs = "", value = "2"))] + Suit = 2u8, + #[strum(serialize = "Back")] + #[strum(props(docs = "", value = "3"))] + Back = 3u8, + #[strum(serialize = "GasFilter")] + #[strum(props(docs = "", value = "4"))] + GasFilter = 4u8, + #[strum(serialize = "GasCanister")] + #[strum(props(docs = "", value = "5"))] + GasCanister = 5u8, + #[strum(serialize = "Motherboard")] + #[strum(props(docs = "", value = "6"))] + Motherboard = 6u8, + #[strum(serialize = "Circuitboard")] + #[strum(props(docs = "", value = "7"))] + Circuitboard = 7u8, + #[strum(serialize = "DataDisk")] + #[strum(props(docs = "", value = "8"))] + DataDisk = 8u8, + #[strum(serialize = "Organ")] + #[strum(props(docs = "", value = "9"))] + Organ = 9u8, + #[strum(serialize = "Ore")] + #[strum(props(docs = "", value = "10"))] + Ore = 10u8, + #[strum(serialize = "Plant")] + #[strum(props(docs = "", value = "11"))] + Plant = 11u8, + #[strum(serialize = "Uniform")] + #[strum(props(docs = "", value = "12"))] + Uniform = 12u8, + #[strum(serialize = "Entity")] + #[strum(props(docs = "", value = "13"))] + Entity = 13u8, + #[strum(serialize = "Battery")] + #[strum(props(docs = "", value = "14"))] + Battery = 14u8, + #[strum(serialize = "Egg")] + #[strum(props(docs = "", value = "15"))] + Egg = 15u8, + #[strum(serialize = "Belt")] + #[strum(props(docs = "", value = "16"))] + Belt = 16u8, + #[strum(serialize = "Tool")] + #[strum(props(docs = "", value = "17"))] + Tool = 17u8, + #[strum(serialize = "Appliance")] + #[strum(props(docs = "", value = "18"))] + Appliance = 18u8, + #[strum(serialize = "Ingot")] + #[strum(props(docs = "", value = "19"))] + Ingot = 19u8, + #[strum(serialize = "Torpedo")] + #[strum(props(docs = "", value = "20"))] + Torpedo = 20u8, + #[strum(serialize = "Cartridge")] + #[strum(props(docs = "", value = "21"))] + Cartridge = 21u8, + #[strum(serialize = "AccessCard")] + #[strum(props(docs = "", value = "22"))] + AccessCard = 22u8, + #[strum(serialize = "Magazine")] + #[strum(props(docs = "", value = "23"))] + Magazine = 23u8, + #[strum(serialize = "Circuit")] + #[strum(props(docs = "", value = "24"))] + Circuit = 24u8, + #[strum(serialize = "Bottle")] + #[strum(props(docs = "", value = "25"))] + Bottle = 25u8, + #[strum(serialize = "ProgrammableChip")] + #[strum(props(docs = "", value = "26"))] + ProgrammableChip = 26u8, + #[strum(serialize = "Glasses")] + #[strum(props(docs = "", value = "27"))] + Glasses = 27u8, + #[strum(serialize = "CreditCard")] + #[strum(props(docs = "", value = "28"))] + CreditCard = 28u8, + #[strum(serialize = "DirtCanister")] + #[strum(props(docs = "", value = "29"))] + DirtCanister = 29u8, + #[strum(serialize = "SensorProcessingUnit")] + #[strum(props(docs = "", value = "30"))] + SensorProcessingUnit = 30u8, + #[strum(serialize = "LiquidCanister")] + #[strum(props(docs = "", value = "31"))] + LiquidCanister = 31u8, + #[strum(serialize = "LiquidBottle")] + #[strum(props(docs = "", value = "32"))] + LiquidBottle = 32u8, + #[strum(serialize = "Wreckage")] + #[strum(props(docs = "", value = "33"))] + Wreckage = 33u8, + #[strum(serialize = "SoundCartridge")] + #[strum(props(docs = "", value = "34"))] + SoundCartridge = 34u8, + #[strum(serialize = "DrillHead")] + #[strum(props(docs = "", value = "35"))] + DrillHead = 35u8, + #[strum(serialize = "ScanningHead")] + #[strum(props(docs = "", value = "36"))] + ScanningHead = 36u8, + #[strum(serialize = "Flare")] + #[strum(props(docs = "", value = "37"))] + Flare = 37u8, + #[strum(serialize = "Blocked")] + #[strum(props(docs = "", value = "38"))] + Blocked = 38u8, + #[strum(serialize = "SuitMod")] + #[strum(props(docs = "", value = "39"))] + SuitMod = 39u8, + #[strum(serialize = "Crate")] + #[strum(props(docs = "", value = "40"))] + Crate = 40u8, + #[strum(serialize = "Portables")] + #[strum(props(docs = "", value = "41"))] + Portables = 41u8, +} +impl TryFrom for Class { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = Class::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum SorterInstruction { + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "FilterPrefabHashEquals")] + #[strum(props(docs = "", value = "1"))] + FilterPrefabHashEquals = 1u8, + #[strum(serialize = "FilterPrefabHashNotEquals")] + #[strum(props(docs = "", value = "2"))] + FilterPrefabHashNotEquals = 2u8, + #[strum(serialize = "FilterSortingClassCompare")] + #[strum(props(docs = "", value = "3"))] + FilterSortingClassCompare = 3u8, + #[strum(serialize = "FilterSlotTypeCompare")] + #[strum(props(docs = "", value = "4"))] + FilterSlotTypeCompare = 4u8, + #[strum(serialize = "FilterQuantityCompare")] + #[strum(props(docs = "", value = "5"))] + FilterQuantityCompare = 5u8, + #[strum(serialize = "LimitNextExecutionByCount")] + #[strum(props(docs = "", value = "6"))] + LimitNextExecutionByCount = 6u8, +} +impl TryFrom for SorterInstruction { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = SorterInstruction::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum SortingClass { + #[strum(serialize = "Default")] + #[strum(props(docs = "", value = "0"))] + #[default] + Default = 0u8, + #[strum(serialize = "Kits")] + #[strum(props(docs = "", value = "1"))] + Kits = 1u8, + #[strum(serialize = "Tools")] + #[strum(props(docs = "", value = "2"))] + Tools = 2u8, + #[strum(serialize = "Resources")] + #[strum(props(docs = "", value = "3"))] + Resources = 3u8, + #[strum(serialize = "Food")] + #[strum(props(docs = "", value = "4"))] + Food = 4u8, + #[strum(serialize = "Clothing")] + #[strum(props(docs = "", value = "5"))] + Clothing = 5u8, + #[strum(serialize = "Appliances")] + #[strum(props(docs = "", value = "6"))] + Appliances = 6u8, + #[strum(serialize = "Atmospherics")] + #[strum(props(docs = "", value = "7"))] + Atmospherics = 7u8, + #[strum(serialize = "Storage")] + #[strum(props(docs = "", value = "8"))] + Storage = 8u8, + #[strum(serialize = "Ores")] + #[strum(props(docs = "", value = "9"))] + Ores = 9u8, + #[strum(serialize = "Ices")] + #[strum(props(docs = "", value = "10"))] + Ices = 10u8, +} +impl TryFrom for SortingClass { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = SortingClass::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum SoundAlert { + #[strum(serialize = "None")] + #[strum(props(docs = "", value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "Alarm2")] + #[strum(props(docs = "", value = "1"))] + Alarm2 = 1u8, + #[strum(serialize = "Alarm3")] + #[strum(props(docs = "", value = "2"))] + Alarm3 = 2u8, + #[strum(serialize = "Alarm4")] + #[strum(props(docs = "", value = "3"))] + Alarm4 = 3u8, + #[strum(serialize = "Alarm5")] + #[strum(props(docs = "", value = "4"))] + Alarm5 = 4u8, + #[strum(serialize = "Alarm6")] + #[strum(props(docs = "", value = "5"))] + Alarm6 = 5u8, + #[strum(serialize = "Alarm7")] + #[strum(props(docs = "", value = "6"))] + Alarm7 = 6u8, + #[strum(serialize = "Music1")] + #[strum(props(docs = "", value = "7"))] + Music1 = 7u8, + #[strum(serialize = "Music2")] + #[strum(props(docs = "", value = "8"))] + Music2 = 8u8, + #[strum(serialize = "Music3")] + #[strum(props(docs = "", value = "9"))] + Music3 = 9u8, + #[strum(serialize = "Alarm8")] + #[strum(props(docs = "", value = "10"))] + Alarm8 = 10u8, + #[strum(serialize = "Alarm9")] + #[strum(props(docs = "", value = "11"))] + Alarm9 = 11u8, + #[strum(serialize = "Alarm10")] + #[strum(props(docs = "", value = "12"))] + Alarm10 = 12u8, + #[strum(serialize = "Alarm11")] + #[strum(props(docs = "", value = "13"))] + Alarm11 = 13u8, + #[strum(serialize = "Alarm12")] + #[strum(props(docs = "", value = "14"))] + Alarm12 = 14u8, + #[strum(serialize = "Danger")] + #[strum(props(docs = "", value = "15"))] + Danger = 15u8, + #[strum(serialize = "Warning")] + #[strum(props(docs = "", value = "16"))] + Warning = 16u8, + #[strum(serialize = "Alert")] + #[strum(props(docs = "", value = "17"))] + Alert = 17u8, + #[strum(serialize = "StormIncoming")] + #[strum(props(docs = "", value = "18"))] + StormIncoming = 18u8, + #[strum(serialize = "IntruderAlert")] + #[strum(props(docs = "", value = "19"))] + IntruderAlert = 19u8, + #[strum(serialize = "Depressurising")] + #[strum(props(docs = "", value = "20"))] + Depressurising = 20u8, + #[strum(serialize = "Pressurising")] + #[strum(props(docs = "", value = "21"))] + Pressurising = 21u8, + #[strum(serialize = "AirlockCycling")] + #[strum(props(docs = "", value = "22"))] + AirlockCycling = 22u8, + #[strum(serialize = "PowerLow")] + #[strum(props(docs = "", value = "23"))] + PowerLow = 23u8, + #[strum(serialize = "SystemFailure")] + #[strum(props(docs = "", value = "24"))] + SystemFailure = 24u8, + #[strum(serialize = "Welcome")] + #[strum(props(docs = "", value = "25"))] + Welcome = 25u8, + #[strum(serialize = "MalfunctionDetected")] + #[strum(props(docs = "", value = "26"))] + MalfunctionDetected = 26u8, + #[strum(serialize = "HaltWhoGoesThere")] + #[strum(props(docs = "", value = "27"))] + HaltWhoGoesThere = 27u8, + #[strum(serialize = "FireFireFire")] + #[strum(props(docs = "", value = "28"))] + FireFireFire = 28u8, + #[strum(serialize = "One")] + #[strum(props(docs = "", value = "29"))] + One = 29u8, + #[strum(serialize = "Two")] + #[strum(props(docs = "", value = "30"))] + Two = 30u8, + #[strum(serialize = "Three")] + #[strum(props(docs = "", value = "31"))] + Three = 31u8, + #[strum(serialize = "Four")] + #[strum(props(docs = "", value = "32"))] + Four = 32u8, + #[strum(serialize = "Five")] + #[strum(props(docs = "", value = "33"))] + Five = 33u8, + #[strum(serialize = "Floor")] + #[strum(props(docs = "", value = "34"))] + Floor = 34u8, + #[strum(serialize = "RocketLaunching")] + #[strum(props(docs = "", value = "35"))] + RocketLaunching = 35u8, + #[strum(serialize = "LiftOff")] + #[strum(props(docs = "", value = "36"))] + LiftOff = 36u8, + #[strum(serialize = "TraderIncoming")] + #[strum(props(docs = "", value = "37"))] + TraderIncoming = 37u8, + #[strum(serialize = "TraderLanded")] + #[strum(props(docs = "", value = "38"))] + TraderLanded = 38u8, + #[strum(serialize = "PressureHigh")] + #[strum(props(docs = "", value = "39"))] + PressureHigh = 39u8, + #[strum(serialize = "PressureLow")] + #[strum(props(docs = "", value = "40"))] + PressureLow = 40u8, + #[strum(serialize = "TemperatureHigh")] + #[strum(props(docs = "", value = "41"))] + TemperatureHigh = 41u8, + #[strum(serialize = "TemperatureLow")] + #[strum(props(docs = "", value = "42"))] + TemperatureLow = 42u8, + #[strum(serialize = "PollutantsDetected")] + #[strum(props(docs = "", value = "43"))] + PollutantsDetected = 43u8, + #[strum(serialize = "HighCarbonDioxide")] + #[strum(props(docs = "", value = "44"))] + HighCarbonDioxide = 44u8, + #[strum(serialize = "Alarm1")] + #[strum(props(docs = "", value = "45"))] + Alarm1 = 45u8, +} +impl TryFrom for SoundAlert { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = SoundAlert::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum LogicTransmitterMode { + #[strum(serialize = "Passive")] + #[strum(props(docs = "", value = "0"))] + Passive = 0u8, + #[strum(serialize = "Active")] + #[strum(props(docs = "", value = "1"))] + Active = 1u8, +} +impl TryFrom for LogicTransmitterMode { + type Error = super::ParseError; + fn try_from( + value: f64, + ) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = LogicTransmitterMode::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum VentDirection { + #[strum(serialize = "Outward")] + #[strum(props(docs = "", value = "0"))] + Outward = 0u8, + #[strum(serialize = "Inward")] + #[strum(props(docs = "", value = "1"))] + Inward = 1u8, +} +impl TryFrom for VentDirection { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = VentDirection::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum ConditionOperation { + #[strum(serialize = "Equals")] + #[strum(props(docs = "", value = "0"))] + Equals = 0u8, + #[strum(serialize = "Greater")] + #[strum(props(docs = "", value = "1"))] + Greater = 1u8, + #[strum(serialize = "Less")] + #[strum(props(docs = "", value = "2"))] + Less = 2u8, + #[strum(serialize = "NotEquals")] + #[strum(props(docs = "", value = "3"))] + NotEquals = 3u8, +} +impl TryFrom for ConditionOperation { + type Error = super::ParseError; + fn try_from( + value: f64, + ) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = ConditionOperation::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +pub enum BasicEnum { + AirCon(AirConditioningMode), + AirControl(AirControlMode), + Color(ColorType), + DaylightSensorMode(DaylightSensorMode), + ElevatorMode(ElevatorMode), + EntityState(EntityState), + GasType(GasType), + LogicSlotType(LogicSlotType), + LogicType(LogicType), + PowerMode(PowerMode), + PrinterInstruction(PrinterInstruction), + ReEntryProfile(ReEntryProfile), + RobotMode(RobotMode), + RocketMode(RocketMode), + SlotClass(Class), + SorterInstruction(SorterInstruction), + SortingClass(SortingClass), + Sound(SoundAlert), + TransmitterMode(LogicTransmitterMode), + Vent(VentDirection), + Unnamed(ConditionOperation), +} +impl BasicEnum { + pub fn get_value(&self) -> u32 { + match self { + Self::AirCon(enm) => *enm as u32, + Self::AirControl(enm) => *enm as u32, + Self::Color(enm) => *enm as u32, + Self::DaylightSensorMode(enm) => *enm as u32, + Self::ElevatorMode(enm) => *enm as u32, + Self::EntityState(enm) => *enm as u32, + Self::GasType(enm) => *enm as u32, + Self::LogicSlotType(enm) => *enm as u32, + Self::LogicType(enm) => *enm as u32, + Self::PowerMode(enm) => *enm as u32, + Self::PrinterInstruction(enm) => *enm as u32, + Self::ReEntryProfile(enm) => *enm as u32, + Self::RobotMode(enm) => *enm as u32, + Self::RocketMode(enm) => *enm as u32, + Self::SlotClass(enm) => *enm as u32, + Self::SorterInstruction(enm) => *enm as u32, + Self::SortingClass(enm) => *enm as u32, + Self::Sound(enm) => *enm as u32, + Self::TransmitterMode(enm) => *enm as u32, + Self::Vent(enm) => *enm as u32, + Self::Unnamed(enm) => *enm as u32, + } + } + pub fn get_str(&self, prop: &str) -> Option<&'static str> { + match self { + Self::AirCon(enm) => enm.get_str(prop), + Self::AirControl(enm) => enm.get_str(prop), + Self::Color(enm) => enm.get_str(prop), + Self::DaylightSensorMode(enm) => enm.get_str(prop), + Self::ElevatorMode(enm) => enm.get_str(prop), + Self::EntityState(enm) => enm.get_str(prop), + Self::GasType(enm) => enm.get_str(prop), + Self::LogicSlotType(enm) => enm.get_str(prop), + Self::LogicType(enm) => enm.get_str(prop), + Self::PowerMode(enm) => enm.get_str(prop), + Self::PrinterInstruction(enm) => enm.get_str(prop), + Self::ReEntryProfile(enm) => enm.get_str(prop), + Self::RobotMode(enm) => enm.get_str(prop), + Self::RocketMode(enm) => enm.get_str(prop), + Self::SlotClass(enm) => enm.get_str(prop), + Self::SorterInstruction(enm) => enm.get_str(prop), + Self::SortingClass(enm) => enm.get_str(prop), + Self::Sound(enm) => enm.get_str(prop), + Self::TransmitterMode(enm) => enm.get_str(prop), + Self::Vent(enm) => enm.get_str(prop), + Self::Unnamed(enm) => enm.get_str(prop), + } + } + pub fn iter() -> impl std::iter::Iterator { + use strum::IntoEnumIterator; + AirConditioningMode::iter() + .map(Self::AirCon) + .chain(AirControlMode::iter().map(Self::AirControl)) + .chain(ColorType::iter().map(Self::Color)) + .chain(DaylightSensorMode::iter().map(Self::DaylightSensorMode)) + .chain(ElevatorMode::iter().map(Self::ElevatorMode)) + .chain(EntityState::iter().map(Self::EntityState)) + .chain(GasType::iter().map(Self::GasType)) + .chain(LogicSlotType::iter().map(Self::LogicSlotType)) + .chain(LogicType::iter().map(Self::LogicType)) + .chain(PowerMode::iter().map(Self::PowerMode)) + .chain(PrinterInstruction::iter().map(Self::PrinterInstruction)) + .chain(ReEntryProfile::iter().map(Self::ReEntryProfile)) + .chain(RobotMode::iter().map(Self::RobotMode)) + .chain(RocketMode::iter().map(Self::RocketMode)) + .chain(Class::iter().map(Self::SlotClass)) + .chain(SorterInstruction::iter().map(Self::SorterInstruction)) + .chain(SortingClass::iter().map(Self::SortingClass)) + .chain(SoundAlert::iter().map(Self::Sound)) + .chain(LogicTransmitterMode::iter().map(Self::TransmitterMode)) + .chain(VentDirection::iter().map(Self::Vent)) + .chain(ConditionOperation::iter().map(Self::Unnamed)) + } +} +impl std::str::FromStr for BasicEnum { + type Err = super::ParseError; + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_str() { + "aircon.cold" => Ok(Self::AirCon(AirConditioningMode::Cold)), + "aircon.hot" => Ok(Self::AirCon(AirConditioningMode::Hot)), + "aircontrol.draught" => Ok(Self::AirControl(AirControlMode::Draught)), + "aircontrol.none" => Ok(Self::AirControl(AirControlMode::None)), + "aircontrol.offline" => Ok(Self::AirControl(AirControlMode::Offline)), + "aircontrol.pressure" => Ok(Self::AirControl(AirControlMode::Pressure)), + "color.black" => Ok(Self::Color(ColorType::Black)), + "color.blue" => Ok(Self::Color(ColorType::Blue)), + "color.brown" => Ok(Self::Color(ColorType::Brown)), + "color.gray" => Ok(Self::Color(ColorType::Gray)), + "color.green" => Ok(Self::Color(ColorType::Green)), + "color.khaki" => Ok(Self::Color(ColorType::Khaki)), + "color.orange" => Ok(Self::Color(ColorType::Orange)), + "color.pink" => Ok(Self::Color(ColorType::Pink)), + "color.purple" => Ok(Self::Color(ColorType::Purple)), + "color.red" => Ok(Self::Color(ColorType::Red)), + "color.white" => Ok(Self::Color(ColorType::White)), + "color.yellow" => Ok(Self::Color(ColorType::Yellow)), + "daylightsensormode.default" => { + Ok(Self::DaylightSensorMode(DaylightSensorMode::Default)) + } + "daylightsensormode.horizontal" => { + Ok(Self::DaylightSensorMode(DaylightSensorMode::Horizontal)) + } + "daylightsensormode.vertical" => { + Ok(Self::DaylightSensorMode(DaylightSensorMode::Vertical)) + } + "elevatormode.downward" => Ok(Self::ElevatorMode(ElevatorMode::Downward)), + "elevatormode.stationary" => Ok(Self::ElevatorMode(ElevatorMode::Stationary)), + "elevatormode.upward" => Ok(Self::ElevatorMode(ElevatorMode::Upward)), + "entitystate.alive" => Ok(Self::EntityState(EntityState::Alive)), + "entitystate.dead" => Ok(Self::EntityState(EntityState::Dead)), + "entitystate.decay" => Ok(Self::EntityState(EntityState::Decay)), + "entitystate.unconscious" => Ok(Self::EntityState(EntityState::Unconscious)), + "gastype.carbondioxide" => Ok(Self::GasType(GasType::CarbonDioxide)), + "gastype.hydrogen" => Ok(Self::GasType(GasType::Hydrogen)), + "gastype.liquidcarbondioxide" => { + Ok(Self::GasType(GasType::LiquidCarbonDioxide)) + } + "gastype.liquidhydrogen" => Ok(Self::GasType(GasType::LiquidHydrogen)), + "gastype.liquidnitrogen" => Ok(Self::GasType(GasType::LiquidNitrogen)), + "gastype.liquidnitrousoxide" => { + Ok(Self::GasType(GasType::LiquidNitrousOxide)) + } + "gastype.liquidoxygen" => Ok(Self::GasType(GasType::LiquidOxygen)), + "gastype.liquidpollutant" => Ok(Self::GasType(GasType::LiquidPollutant)), + "gastype.liquidvolatiles" => Ok(Self::GasType(GasType::LiquidVolatiles)), + "gastype.nitrogen" => Ok(Self::GasType(GasType::Nitrogen)), + "gastype.nitrousoxide" => Ok(Self::GasType(GasType::NitrousOxide)), + "gastype.oxygen" => Ok(Self::GasType(GasType::Oxygen)), + "gastype.pollutant" => Ok(Self::GasType(GasType::Pollutant)), + "gastype.pollutedwater" => Ok(Self::GasType(GasType::PollutedWater)), + "gastype.steam" => Ok(Self::GasType(GasType::Steam)), + "gastype.undefined" => Ok(Self::GasType(GasType::Undefined)), + "gastype.volatiles" => Ok(Self::GasType(GasType::Volatiles)), + "gastype.water" => Ok(Self::GasType(GasType::Water)), + "logicslottype.charge" => Ok(Self::LogicSlotType(LogicSlotType::Charge)), + "logicslottype.chargeratio" => { + Ok(Self::LogicSlotType(LogicSlotType::ChargeRatio)) + } + "logicslottype.class" => Ok(Self::LogicSlotType(LogicSlotType::Class)), + "logicslottype.damage" => Ok(Self::LogicSlotType(LogicSlotType::Damage)), + "logicslottype.efficiency" => { + Ok(Self::LogicSlotType(LogicSlotType::Efficiency)) + } + "logicslottype.filtertype" => { + Ok(Self::LogicSlotType(LogicSlotType::FilterType)) + } + "logicslottype.growth" => Ok(Self::LogicSlotType(LogicSlotType::Growth)), + "logicslottype.health" => Ok(Self::LogicSlotType(LogicSlotType::Health)), + "logicslottype.linenumber" => { + Ok(Self::LogicSlotType(LogicSlotType::LineNumber)) + } + "logicslottype.lock" => Ok(Self::LogicSlotType(LogicSlotType::Lock)), + "logicslottype.mature" => Ok(Self::LogicSlotType(LogicSlotType::Mature)), + "logicslottype.maxquantity" => { + Ok(Self::LogicSlotType(LogicSlotType::MaxQuantity)) + } + "logicslottype.none" => Ok(Self::LogicSlotType(LogicSlotType::None)), + "logicslottype.occupanthash" => { + Ok(Self::LogicSlotType(LogicSlotType::OccupantHash)) + } + "logicslottype.occupied" => Ok(Self::LogicSlotType(LogicSlotType::Occupied)), + "logicslottype.on" => Ok(Self::LogicSlotType(LogicSlotType::On)), + "logicslottype.open" => Ok(Self::LogicSlotType(LogicSlotType::Open)), + "logicslottype.prefabhash" => { + Ok(Self::LogicSlotType(LogicSlotType::PrefabHash)) + } + "logicslottype.pressure" => Ok(Self::LogicSlotType(LogicSlotType::Pressure)), + "logicslottype.pressureair" => { + Ok(Self::LogicSlotType(LogicSlotType::PressureAir)) + } + "logicslottype.pressurewaste" => { + Ok(Self::LogicSlotType(LogicSlotType::PressureWaste)) + } + "logicslottype.quantity" => Ok(Self::LogicSlotType(LogicSlotType::Quantity)), + "logicslottype.referenceid" => { + Ok(Self::LogicSlotType(LogicSlotType::ReferenceId)) + } + "logicslottype.seeding" => Ok(Self::LogicSlotType(LogicSlotType::Seeding)), + "logicslottype.sortingclass" => { + Ok(Self::LogicSlotType(LogicSlotType::SortingClass)) + } + "logicslottype.temperature" => { + Ok(Self::LogicSlotType(LogicSlotType::Temperature)) + } + "logicslottype.volume" => Ok(Self::LogicSlotType(LogicSlotType::Volume)), + "logictype.acceleration" => Ok(Self::LogicType(LogicType::Acceleration)), + "logictype.activate" => Ok(Self::LogicType(LogicType::Activate)), + "logictype.airrelease" => Ok(Self::LogicType(LogicType::AirRelease)), + "logictype.alignmenterror" => Ok(Self::LogicType(LogicType::AlignmentError)), + "logictype.altitude" => Ok(Self::LogicType(LogicType::Altitude)), + "logictype.apex" => Ok(Self::LogicType(LogicType::Apex)), + "logictype.autoland" => Ok(Self::LogicType(LogicType::AutoLand)), + "logictype.autoshutoff" => Ok(Self::LogicType(LogicType::AutoShutOff)), + "logictype.bestcontactfilter" => { + Ok(Self::LogicType(LogicType::BestContactFilter)) + } + "logictype.bpm" => Ok(Self::LogicType(LogicType::Bpm)), + "logictype.burntimeremaining" => { + Ok(Self::LogicType(LogicType::BurnTimeRemaining)) + } + "logictype.celestialhash" => Ok(Self::LogicType(LogicType::CelestialHash)), + "logictype.celestialparenthash" => { + Ok(Self::LogicType(LogicType::CelestialParentHash)) + } + "logictype.channel0" => Ok(Self::LogicType(LogicType::Channel0)), + "logictype.channel1" => Ok(Self::LogicType(LogicType::Channel1)), + "logictype.channel2" => Ok(Self::LogicType(LogicType::Channel2)), + "logictype.channel3" => Ok(Self::LogicType(LogicType::Channel3)), + "logictype.channel4" => Ok(Self::LogicType(LogicType::Channel4)), + "logictype.channel5" => Ok(Self::LogicType(LogicType::Channel5)), + "logictype.channel6" => Ok(Self::LogicType(LogicType::Channel6)), + "logictype.channel7" => Ok(Self::LogicType(LogicType::Channel7)), + "logictype.charge" => Ok(Self::LogicType(LogicType::Charge)), + "logictype.chart" => Ok(Self::LogicType(LogicType::Chart)), + "logictype.chartednavpoints" => { + Ok(Self::LogicType(LogicType::ChartedNavPoints)) + } + "logictype.clearmemory" => Ok(Self::LogicType(LogicType::ClearMemory)), + "logictype.collectablegoods" => { + Ok(Self::LogicType(LogicType::CollectableGoods)) + } + "logictype.color" => Ok(Self::LogicType(LogicType::Color)), + "logictype.combustion" => Ok(Self::LogicType(LogicType::Combustion)), + "logictype.combustioninput" => { + Ok(Self::LogicType(LogicType::CombustionInput)) + } + "logictype.combustioninput2" => { + Ok(Self::LogicType(LogicType::CombustionInput2)) + } + "logictype.combustionlimiter" => { + Ok(Self::LogicType(LogicType::CombustionLimiter)) + } + "logictype.combustionoutput" => { + Ok(Self::LogicType(LogicType::CombustionOutput)) + } + "logictype.combustionoutput2" => { + Ok(Self::LogicType(LogicType::CombustionOutput2)) + } + "logictype.completionratio" => { + Ok(Self::LogicType(LogicType::CompletionRatio)) + } + "logictype.contacttypeid" => Ok(Self::LogicType(LogicType::ContactTypeId)), + "logictype.currentcode" => Ok(Self::LogicType(LogicType::CurrentCode)), + "logictype.currentresearchpodtype" => { + Ok(Self::LogicType(LogicType::CurrentResearchPodType)) + } + "logictype.density" => Ok(Self::LogicType(LogicType::Density)), + "logictype.destinationcode" => { + Ok(Self::LogicType(LogicType::DestinationCode)) + } + "logictype.discover" => Ok(Self::LogicType(LogicType::Discover)), + "logictype.distanceau" => Ok(Self::LogicType(LogicType::DistanceAu)), + "logictype.distancekm" => Ok(Self::LogicType(LogicType::DistanceKm)), + "logictype.drillcondition" => Ok(Self::LogicType(LogicType::DrillCondition)), + "logictype.drymass" => Ok(Self::LogicType(LogicType::DryMass)), + "logictype.eccentricity" => Ok(Self::LogicType(LogicType::Eccentricity)), + "logictype.elevatorlevel" => Ok(Self::LogicType(LogicType::ElevatorLevel)), + "logictype.elevatorspeed" => Ok(Self::LogicType(LogicType::ElevatorSpeed)), + "logictype.entitystate" => Ok(Self::LogicType(LogicType::EntityState)), + "logictype.environmentefficiency" => { + Ok(Self::LogicType(LogicType::EnvironmentEfficiency)) + } + "logictype.error" => Ok(Self::LogicType(LogicType::Error)), + "logictype.exhaustvelocity" => { + Ok(Self::LogicType(LogicType::ExhaustVelocity)) + } + "logictype.exportcount" => Ok(Self::LogicType(LogicType::ExportCount)), + "logictype.exportquantity" => Ok(Self::LogicType(LogicType::ExportQuantity)), + "logictype.exportslothash" => Ok(Self::LogicType(LogicType::ExportSlotHash)), + "logictype.exportslotoccupant" => { + Ok(Self::LogicType(LogicType::ExportSlotOccupant)) + } + "logictype.filtration" => Ok(Self::LogicType(LogicType::Filtration)), + "logictype.flightcontrolrule" => { + Ok(Self::LogicType(LogicType::FlightControlRule)) + } + "logictype.flush" => Ok(Self::LogicType(LogicType::Flush)), + "logictype.forcewrite" => Ok(Self::LogicType(LogicType::ForceWrite)), + "logictype.forwardx" => Ok(Self::LogicType(LogicType::ForwardX)), + "logictype.forwardy" => Ok(Self::LogicType(LogicType::ForwardY)), + "logictype.forwardz" => Ok(Self::LogicType(LogicType::ForwardZ)), + "logictype.fuel" => Ok(Self::LogicType(LogicType::Fuel)), + "logictype.harvest" => Ok(Self::LogicType(LogicType::Harvest)), + "logictype.horizontal" => Ok(Self::LogicType(LogicType::Horizontal)), + "logictype.horizontalratio" => { + Ok(Self::LogicType(LogicType::HorizontalRatio)) + } + "logictype.idle" => Ok(Self::LogicType(LogicType::Idle)), + "logictype.importcount" => Ok(Self::LogicType(LogicType::ImportCount)), + "logictype.importquantity" => Ok(Self::LogicType(LogicType::ImportQuantity)), + "logictype.importslothash" => Ok(Self::LogicType(LogicType::ImportSlotHash)), + "logictype.importslotoccupant" => { + Ok(Self::LogicType(LogicType::ImportSlotOccupant)) + } + "logictype.inclination" => Ok(Self::LogicType(LogicType::Inclination)), + "logictype.index" => Ok(Self::LogicType(LogicType::Index)), + "logictype.interrogationprogress" => { + Ok(Self::LogicType(LogicType::InterrogationProgress)) + } + "logictype.linenumber" => Ok(Self::LogicType(LogicType::LineNumber)), + "logictype.lock" => Ok(Self::LogicType(LogicType::Lock)), + "logictype.manualresearchrequiredpod" => { + Ok(Self::LogicType(LogicType::ManualResearchRequiredPod)) + } + "logictype.mass" => Ok(Self::LogicType(LogicType::Mass)), + "logictype.maximum" => Ok(Self::LogicType(LogicType::Maximum)), + "logictype.mineablesinqueue" => { + Ok(Self::LogicType(LogicType::MineablesInQueue)) + } + "logictype.mineablesinvicinity" => { + Ok(Self::LogicType(LogicType::MineablesInVicinity)) + } + "logictype.minedquantity" => Ok(Self::LogicType(LogicType::MinedQuantity)), + "logictype.minimumwattstocontact" => { + Ok(Self::LogicType(LogicType::MinimumWattsToContact)) + } + "logictype.mode" => Ok(Self::LogicType(LogicType::Mode)), + "logictype.namehash" => Ok(Self::LogicType(LogicType::NameHash)), + "logictype.navpoints" => Ok(Self::LogicType(LogicType::NavPoints)), + "logictype.nextweathereventtime" => { + Ok(Self::LogicType(LogicType::NextWeatherEventTime)) + } + "logictype.none" => Ok(Self::LogicType(LogicType::None)), + "logictype.on" => Ok(Self::LogicType(LogicType::On)), + "logictype.open" => Ok(Self::LogicType(LogicType::Open)), + "logictype.operationaltemperatureefficiency" => { + Ok(Self::LogicType(LogicType::OperationalTemperatureEfficiency)) + } + "logictype.orbitperiod" => Ok(Self::LogicType(LogicType::OrbitPeriod)), + "logictype.orientation" => Ok(Self::LogicType(LogicType::Orientation)), + "logictype.output" => Ok(Self::LogicType(LogicType::Output)), + "logictype.passedmoles" => Ok(Self::LogicType(LogicType::PassedMoles)), + "logictype.plant" => Ok(Self::LogicType(LogicType::Plant)), + "logictype.plantefficiency1" => { + Ok(Self::LogicType(LogicType::PlantEfficiency1)) + } + "logictype.plantefficiency2" => { + Ok(Self::LogicType(LogicType::PlantEfficiency2)) + } + "logictype.plantefficiency3" => { + Ok(Self::LogicType(LogicType::PlantEfficiency3)) + } + "logictype.plantefficiency4" => { + Ok(Self::LogicType(LogicType::PlantEfficiency4)) + } + "logictype.plantgrowth1" => Ok(Self::LogicType(LogicType::PlantGrowth1)), + "logictype.plantgrowth2" => Ok(Self::LogicType(LogicType::PlantGrowth2)), + "logictype.plantgrowth3" => Ok(Self::LogicType(LogicType::PlantGrowth3)), + "logictype.plantgrowth4" => Ok(Self::LogicType(LogicType::PlantGrowth4)), + "logictype.planthash1" => Ok(Self::LogicType(LogicType::PlantHash1)), + "logictype.planthash2" => Ok(Self::LogicType(LogicType::PlantHash2)), + "logictype.planthash3" => Ok(Self::LogicType(LogicType::PlantHash3)), + "logictype.planthash4" => Ok(Self::LogicType(LogicType::PlantHash4)), + "logictype.planthealth1" => Ok(Self::LogicType(LogicType::PlantHealth1)), + "logictype.planthealth2" => Ok(Self::LogicType(LogicType::PlantHealth2)), + "logictype.planthealth3" => Ok(Self::LogicType(LogicType::PlantHealth3)), + "logictype.planthealth4" => Ok(Self::LogicType(LogicType::PlantHealth4)), + "logictype.positionx" => Ok(Self::LogicType(LogicType::PositionX)), + "logictype.positiony" => Ok(Self::LogicType(LogicType::PositionY)), + "logictype.positionz" => Ok(Self::LogicType(LogicType::PositionZ)), + "logictype.power" => Ok(Self::LogicType(LogicType::Power)), + "logictype.poweractual" => Ok(Self::LogicType(LogicType::PowerActual)), + "logictype.powergeneration" => { + Ok(Self::LogicType(LogicType::PowerGeneration)) + } + "logictype.powerpotential" => Ok(Self::LogicType(LogicType::PowerPotential)), + "logictype.powerrequired" => Ok(Self::LogicType(LogicType::PowerRequired)), + "logictype.prefabhash" => Ok(Self::LogicType(LogicType::PrefabHash)), + "logictype.pressure" => Ok(Self::LogicType(LogicType::Pressure)), + "logictype.pressureefficiency" => { + Ok(Self::LogicType(LogicType::PressureEfficiency)) + } + "logictype.pressureexternal" => { + Ok(Self::LogicType(LogicType::PressureExternal)) + } + "logictype.pressureinput" => Ok(Self::LogicType(LogicType::PressureInput)), + "logictype.pressureinput2" => Ok(Self::LogicType(LogicType::PressureInput2)), + "logictype.pressureinternal" => { + Ok(Self::LogicType(LogicType::PressureInternal)) + } + "logictype.pressureoutput" => Ok(Self::LogicType(LogicType::PressureOutput)), + "logictype.pressureoutput2" => { + Ok(Self::LogicType(LogicType::PressureOutput2)) + } + "logictype.pressuresetting" => { + Ok(Self::LogicType(LogicType::PressureSetting)) + } + "logictype.progress" => Ok(Self::LogicType(LogicType::Progress)), + "logictype.quantity" => Ok(Self::LogicType(LogicType::Quantity)), + "logictype.ratio" => Ok(Self::LogicType(LogicType::Ratio)), + "logictype.ratiocarbondioxide" => { + Ok(Self::LogicType(LogicType::RatioCarbonDioxide)) + } + "logictype.ratiocarbondioxideinput" => { + Ok(Self::LogicType(LogicType::RatioCarbonDioxideInput)) + } + "logictype.ratiocarbondioxideinput2" => { + Ok(Self::LogicType(LogicType::RatioCarbonDioxideInput2)) + } + "logictype.ratiocarbondioxideoutput" => { + Ok(Self::LogicType(LogicType::RatioCarbonDioxideOutput)) + } + "logictype.ratiocarbondioxideoutput2" => { + Ok(Self::LogicType(LogicType::RatioCarbonDioxideOutput2)) + } + "logictype.ratiohydrogen" => Ok(Self::LogicType(LogicType::RatioHydrogen)), + "logictype.ratioliquidcarbondioxide" => { + Ok(Self::LogicType(LogicType::RatioLiquidCarbonDioxide)) + } + "logictype.ratioliquidcarbondioxideinput" => { + Ok(Self::LogicType(LogicType::RatioLiquidCarbonDioxideInput)) + } + "logictype.ratioliquidcarbondioxideinput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidCarbonDioxideInput2)) + } + "logictype.ratioliquidcarbondioxideoutput" => { + Ok(Self::LogicType(LogicType::RatioLiquidCarbonDioxideOutput)) + } + "logictype.ratioliquidcarbondioxideoutput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidCarbonDioxideOutput2)) + } + "logictype.ratioliquidhydrogen" => { + Ok(Self::LogicType(LogicType::RatioLiquidHydrogen)) + } + "logictype.ratioliquidnitrogen" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrogen)) + } + "logictype.ratioliquidnitrogeninput" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrogenInput)) + } + "logictype.ratioliquidnitrogeninput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrogenInput2)) + } + "logictype.ratioliquidnitrogenoutput" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrogenOutput)) + } + "logictype.ratioliquidnitrogenoutput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrogenOutput2)) + } + "logictype.ratioliquidnitrousoxide" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrousOxide)) + } + "logictype.ratioliquidnitrousoxideinput" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrousOxideInput)) + } + "logictype.ratioliquidnitrousoxideinput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrousOxideInput2)) + } + "logictype.ratioliquidnitrousoxideoutput" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrousOxideOutput)) + } + "logictype.ratioliquidnitrousoxideoutput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidNitrousOxideOutput2)) + } + "logictype.ratioliquidoxygen" => { + Ok(Self::LogicType(LogicType::RatioLiquidOxygen)) + } + "logictype.ratioliquidoxygeninput" => { + Ok(Self::LogicType(LogicType::RatioLiquidOxygenInput)) + } + "logictype.ratioliquidoxygeninput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidOxygenInput2)) + } + "logictype.ratioliquidoxygenoutput" => { + Ok(Self::LogicType(LogicType::RatioLiquidOxygenOutput)) + } + "logictype.ratioliquidoxygenoutput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidOxygenOutput2)) + } + "logictype.ratioliquidpollutant" => { + Ok(Self::LogicType(LogicType::RatioLiquidPollutant)) + } + "logictype.ratioliquidpollutantinput" => { + Ok(Self::LogicType(LogicType::RatioLiquidPollutantInput)) + } + "logictype.ratioliquidpollutantinput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidPollutantInput2)) + } + "logictype.ratioliquidpollutantoutput" => { + Ok(Self::LogicType(LogicType::RatioLiquidPollutantOutput)) + } + "logictype.ratioliquidpollutantoutput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidPollutantOutput2)) + } + "logictype.ratioliquidvolatiles" => { + Ok(Self::LogicType(LogicType::RatioLiquidVolatiles)) + } + "logictype.ratioliquidvolatilesinput" => { + Ok(Self::LogicType(LogicType::RatioLiquidVolatilesInput)) + } + "logictype.ratioliquidvolatilesinput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidVolatilesInput2)) + } + "logictype.ratioliquidvolatilesoutput" => { + Ok(Self::LogicType(LogicType::RatioLiquidVolatilesOutput)) + } + "logictype.ratioliquidvolatilesoutput2" => { + Ok(Self::LogicType(LogicType::RatioLiquidVolatilesOutput2)) + } + "logictype.rationitrogen" => Ok(Self::LogicType(LogicType::RatioNitrogen)), + "logictype.rationitrogeninput" => { + Ok(Self::LogicType(LogicType::RatioNitrogenInput)) + } + "logictype.rationitrogeninput2" => { + Ok(Self::LogicType(LogicType::RatioNitrogenInput2)) + } + "logictype.rationitrogenoutput" => { + Ok(Self::LogicType(LogicType::RatioNitrogenOutput)) + } + "logictype.rationitrogenoutput2" => { + Ok(Self::LogicType(LogicType::RatioNitrogenOutput2)) + } + "logictype.rationitrousoxide" => { + Ok(Self::LogicType(LogicType::RatioNitrousOxide)) + } + "logictype.rationitrousoxideinput" => { + Ok(Self::LogicType(LogicType::RatioNitrousOxideInput)) + } + "logictype.rationitrousoxideinput2" => { + Ok(Self::LogicType(LogicType::RatioNitrousOxideInput2)) + } + "logictype.rationitrousoxideoutput" => { + Ok(Self::LogicType(LogicType::RatioNitrousOxideOutput)) + } + "logictype.rationitrousoxideoutput2" => { + Ok(Self::LogicType(LogicType::RatioNitrousOxideOutput2)) + } + "logictype.ratiooxygen" => Ok(Self::LogicType(LogicType::RatioOxygen)), + "logictype.ratiooxygeninput" => { + Ok(Self::LogicType(LogicType::RatioOxygenInput)) + } + "logictype.ratiooxygeninput2" => { + Ok(Self::LogicType(LogicType::RatioOxygenInput2)) + } + "logictype.ratiooxygenoutput" => { + Ok(Self::LogicType(LogicType::RatioOxygenOutput)) + } + "logictype.ratiooxygenoutput2" => { + Ok(Self::LogicType(LogicType::RatioOxygenOutput2)) + } + "logictype.ratiopollutant" => Ok(Self::LogicType(LogicType::RatioPollutant)), + "logictype.ratiopollutantinput" => { + Ok(Self::LogicType(LogicType::RatioPollutantInput)) + } + "logictype.ratiopollutantinput2" => { + Ok(Self::LogicType(LogicType::RatioPollutantInput2)) + } + "logictype.ratiopollutantoutput" => { + Ok(Self::LogicType(LogicType::RatioPollutantOutput)) + } + "logictype.ratiopollutantoutput2" => { + Ok(Self::LogicType(LogicType::RatioPollutantOutput2)) + } + "logictype.ratiopollutedwater" => { + Ok(Self::LogicType(LogicType::RatioPollutedWater)) + } + "logictype.ratiosteam" => Ok(Self::LogicType(LogicType::RatioSteam)), + "logictype.ratiosteaminput" => { + Ok(Self::LogicType(LogicType::RatioSteamInput)) + } + "logictype.ratiosteaminput2" => { + Ok(Self::LogicType(LogicType::RatioSteamInput2)) + } + "logictype.ratiosteamoutput" => { + Ok(Self::LogicType(LogicType::RatioSteamOutput)) + } + "logictype.ratiosteamoutput2" => { + Ok(Self::LogicType(LogicType::RatioSteamOutput2)) + } + "logictype.ratiovolatiles" => Ok(Self::LogicType(LogicType::RatioVolatiles)), + "logictype.ratiovolatilesinput" => { + Ok(Self::LogicType(LogicType::RatioVolatilesInput)) + } + "logictype.ratiovolatilesinput2" => { + Ok(Self::LogicType(LogicType::RatioVolatilesInput2)) + } + "logictype.ratiovolatilesoutput" => { + Ok(Self::LogicType(LogicType::RatioVolatilesOutput)) + } + "logictype.ratiovolatilesoutput2" => { + Ok(Self::LogicType(LogicType::RatioVolatilesOutput2)) + } + "logictype.ratiowater" => Ok(Self::LogicType(LogicType::RatioWater)), + "logictype.ratiowaterinput" => { + Ok(Self::LogicType(LogicType::RatioWaterInput)) + } + "logictype.ratiowaterinput2" => { + Ok(Self::LogicType(LogicType::RatioWaterInput2)) + } + "logictype.ratiowateroutput" => { + Ok(Self::LogicType(LogicType::RatioWaterOutput)) + } + "logictype.ratiowateroutput2" => { + Ok(Self::LogicType(LogicType::RatioWaterOutput2)) + } + "logictype.reentryaltitude" => { + Ok(Self::LogicType(LogicType::ReEntryAltitude)) + } + "logictype.reagents" => Ok(Self::LogicType(LogicType::Reagents)), + "logictype.recipehash" => Ok(Self::LogicType(LogicType::RecipeHash)), + "logictype.referenceid" => Ok(Self::LogicType(LogicType::ReferenceId)), + "logictype.requesthash" => Ok(Self::LogicType(LogicType::RequestHash)), + "logictype.requiredpower" => Ok(Self::LogicType(LogicType::RequiredPower)), + "logictype.returnfuelcost" => Ok(Self::LogicType(LogicType::ReturnFuelCost)), + "logictype.richness" => Ok(Self::LogicType(LogicType::Richness)), + "logictype.rpm" => Ok(Self::LogicType(LogicType::Rpm)), + "logictype.semimajoraxis" => Ok(Self::LogicType(LogicType::SemiMajorAxis)), + "logictype.setting" => Ok(Self::LogicType(LogicType::Setting)), + "logictype.settinginput" => Ok(Self::LogicType(LogicType::SettingInput)), + "logictype.settingoutput" => Ok(Self::LogicType(LogicType::SettingOutput)), + "logictype.signalid" => Ok(Self::LogicType(LogicType::SignalId)), + "logictype.signalstrength" => Ok(Self::LogicType(LogicType::SignalStrength)), + "logictype.sites" => Ok(Self::LogicType(LogicType::Sites)), + "logictype.size" => Ok(Self::LogicType(LogicType::Size)), + "logictype.sizex" => Ok(Self::LogicType(LogicType::SizeX)), + "logictype.sizey" => Ok(Self::LogicType(LogicType::SizeY)), + "logictype.sizez" => Ok(Self::LogicType(LogicType::SizeZ)), + "logictype.solarangle" => Ok(Self::LogicType(LogicType::SolarAngle)), + "logictype.solarirradiance" => { + Ok(Self::LogicType(LogicType::SolarIrradiance)) + } + "logictype.soundalert" => Ok(Self::LogicType(LogicType::SoundAlert)), + "logictype.stress" => Ok(Self::LogicType(LogicType::Stress)), + "logictype.survey" => Ok(Self::LogicType(LogicType::Survey)), + "logictype.targetpadindex" => Ok(Self::LogicType(LogicType::TargetPadIndex)), + "logictype.targetprefabhash" => { + Ok(Self::LogicType(LogicType::TargetPrefabHash)) + } + "logictype.targetslotindex" => { + Ok(Self::LogicType(LogicType::TargetSlotIndex)) + } + "logictype.targetx" => Ok(Self::LogicType(LogicType::TargetX)), + "logictype.targety" => Ok(Self::LogicType(LogicType::TargetY)), + "logictype.targetz" => Ok(Self::LogicType(LogicType::TargetZ)), + "logictype.temperature" => Ok(Self::LogicType(LogicType::Temperature)), + "logictype.temperaturedifferentialefficiency" => { + Ok(Self::LogicType(LogicType::TemperatureDifferentialEfficiency)) + } + "logictype.temperatureexternal" => { + Ok(Self::LogicType(LogicType::TemperatureExternal)) + } + "logictype.temperatureinput" => { + Ok(Self::LogicType(LogicType::TemperatureInput)) + } + "logictype.temperatureinput2" => { + Ok(Self::LogicType(LogicType::TemperatureInput2)) + } + "logictype.temperatureoutput" => { + Ok(Self::LogicType(LogicType::TemperatureOutput)) + } + "logictype.temperatureoutput2" => { + Ok(Self::LogicType(LogicType::TemperatureOutput2)) + } + "logictype.temperaturesetting" => { + Ok(Self::LogicType(LogicType::TemperatureSetting)) + } + "logictype.throttle" => Ok(Self::LogicType(LogicType::Throttle)), + "logictype.thrust" => Ok(Self::LogicType(LogicType::Thrust)), + "logictype.thrusttoweight" => Ok(Self::LogicType(LogicType::ThrustToWeight)), + "logictype.time" => Ok(Self::LogicType(LogicType::Time)), + "logictype.timetodestination" => { + Ok(Self::LogicType(LogicType::TimeToDestination)) + } + "logictype.totalmoles" => Ok(Self::LogicType(LogicType::TotalMoles)), + "logictype.totalmolesinput" => { + Ok(Self::LogicType(LogicType::TotalMolesInput)) + } + "logictype.totalmolesinput2" => { + Ok(Self::LogicType(LogicType::TotalMolesInput2)) + } + "logictype.totalmolesoutput" => { + Ok(Self::LogicType(LogicType::TotalMolesOutput)) + } + "logictype.totalmolesoutput2" => { + Ok(Self::LogicType(LogicType::TotalMolesOutput2)) + } + "logictype.totalquantity" => Ok(Self::LogicType(LogicType::TotalQuantity)), + "logictype.trueanomaly" => Ok(Self::LogicType(LogicType::TrueAnomaly)), + "logictype.velocitymagnitude" => { + Ok(Self::LogicType(LogicType::VelocityMagnitude)) + } + "logictype.velocityrelativex" => { + Ok(Self::LogicType(LogicType::VelocityRelativeX)) + } + "logictype.velocityrelativey" => { + Ok(Self::LogicType(LogicType::VelocityRelativeY)) + } + "logictype.velocityrelativez" => { + Ok(Self::LogicType(LogicType::VelocityRelativeZ)) + } + "logictype.velocityx" => Ok(Self::LogicType(LogicType::VelocityX)), + "logictype.velocityy" => Ok(Self::LogicType(LogicType::VelocityY)), + "logictype.velocityz" => Ok(Self::LogicType(LogicType::VelocityZ)), + "logictype.vertical" => Ok(Self::LogicType(LogicType::Vertical)), + "logictype.verticalratio" => Ok(Self::LogicType(LogicType::VerticalRatio)), + "logictype.volume" => Ok(Self::LogicType(LogicType::Volume)), + "logictype.volumeofliquid" => Ok(Self::LogicType(LogicType::VolumeOfLiquid)), + "logictype.wattsreachingcontact" => { + Ok(Self::LogicType(LogicType::WattsReachingContact)) + } + "logictype.weight" => Ok(Self::LogicType(LogicType::Weight)), + "logictype.workinggasefficiency" => { + Ok(Self::LogicType(LogicType::WorkingGasEfficiency)) + } + "powermode.charged" => Ok(Self::PowerMode(PowerMode::Charged)), + "powermode.charging" => Ok(Self::PowerMode(PowerMode::Charging)), + "powermode.discharged" => Ok(Self::PowerMode(PowerMode::Discharged)), + "powermode.discharging" => Ok(Self::PowerMode(PowerMode::Discharging)), + "powermode.idle" => Ok(Self::PowerMode(PowerMode::Idle)), + "printerinstruction.devicesetlock" => { + Ok(Self::PrinterInstruction(PrinterInstruction::DeviceSetLock)) + } + "printerinstruction.ejectallreagents" => { + Ok(Self::PrinterInstruction(PrinterInstruction::EjectAllReagents)) + } + "printerinstruction.ejectreagent" => { + Ok(Self::PrinterInstruction(PrinterInstruction::EjectReagent)) + } + "printerinstruction.executerecipe" => { + Ok(Self::PrinterInstruction(PrinterInstruction::ExecuteRecipe)) + } + "printerinstruction.jumpifnextinvalid" => { + Ok(Self::PrinterInstruction(PrinterInstruction::JumpIfNextInvalid)) + } + "printerinstruction.jumptoaddress" => { + Ok(Self::PrinterInstruction(PrinterInstruction::JumpToAddress)) + } + "printerinstruction.missingrecipereagent" => { + Ok(Self::PrinterInstruction(PrinterInstruction::MissingRecipeReagent)) + } + "printerinstruction.none" => { + Ok(Self::PrinterInstruction(PrinterInstruction::None)) + } + "printerinstruction.stackpointer" => { + Ok(Self::PrinterInstruction(PrinterInstruction::StackPointer)) + } + "printerinstruction.waituntilnextvalid" => { + Ok(Self::PrinterInstruction(PrinterInstruction::WaitUntilNextValid)) + } + "reentryprofile.high" => Ok(Self::ReEntryProfile(ReEntryProfile::High)), + "reentryprofile.low" => Ok(Self::ReEntryProfile(ReEntryProfile::Low)), + "reentryprofile.max" => Ok(Self::ReEntryProfile(ReEntryProfile::Max)), + "reentryprofile.medium" => Ok(Self::ReEntryProfile(ReEntryProfile::Medium)), + "reentryprofile.none" => Ok(Self::ReEntryProfile(ReEntryProfile::None)), + "robotmode.follow" => Ok(Self::RobotMode(RobotMode::Follow)), + "robotmode.movetotarget" => Ok(Self::RobotMode(RobotMode::MoveToTarget)), + "robotmode.none" => Ok(Self::RobotMode(RobotMode::None)), + "robotmode.pathtotarget" => Ok(Self::RobotMode(RobotMode::PathToTarget)), + "robotmode.roam" => Ok(Self::RobotMode(RobotMode::Roam)), + "robotmode.storagefull" => Ok(Self::RobotMode(RobotMode::StorageFull)), + "robotmode.unload" => Ok(Self::RobotMode(RobotMode::Unload)), + "rocketmode.chart" => Ok(Self::RocketMode(RocketMode::Chart)), + "rocketmode.discover" => Ok(Self::RocketMode(RocketMode::Discover)), + "rocketmode.invalid" => Ok(Self::RocketMode(RocketMode::Invalid)), + "rocketmode.mine" => Ok(Self::RocketMode(RocketMode::Mine)), + "rocketmode.none" => Ok(Self::RocketMode(RocketMode::None)), + "rocketmode.survey" => Ok(Self::RocketMode(RocketMode::Survey)), + "slotclass.accesscard" => Ok(Self::SlotClass(Class::AccessCard)), + "slotclass.appliance" => Ok(Self::SlotClass(Class::Appliance)), + "slotclass.back" => Ok(Self::SlotClass(Class::Back)), + "slotclass.battery" => Ok(Self::SlotClass(Class::Battery)), + "slotclass.belt" => Ok(Self::SlotClass(Class::Belt)), + "slotclass.blocked" => Ok(Self::SlotClass(Class::Blocked)), + "slotclass.bottle" => Ok(Self::SlotClass(Class::Bottle)), + "slotclass.cartridge" => Ok(Self::SlotClass(Class::Cartridge)), + "slotclass.circuit" => Ok(Self::SlotClass(Class::Circuit)), + "slotclass.circuitboard" => Ok(Self::SlotClass(Class::Circuitboard)), + "slotclass.crate" => Ok(Self::SlotClass(Class::Crate)), + "slotclass.creditcard" => Ok(Self::SlotClass(Class::CreditCard)), + "slotclass.datadisk" => Ok(Self::SlotClass(Class::DataDisk)), + "slotclass.dirtcanister" => Ok(Self::SlotClass(Class::DirtCanister)), + "slotclass.drillhead" => Ok(Self::SlotClass(Class::DrillHead)), + "slotclass.egg" => Ok(Self::SlotClass(Class::Egg)), + "slotclass.entity" => Ok(Self::SlotClass(Class::Entity)), + "slotclass.flare" => Ok(Self::SlotClass(Class::Flare)), + "slotclass.gascanister" => Ok(Self::SlotClass(Class::GasCanister)), + "slotclass.gasfilter" => Ok(Self::SlotClass(Class::GasFilter)), + "slotclass.glasses" => Ok(Self::SlotClass(Class::Glasses)), + "slotclass.helmet" => Ok(Self::SlotClass(Class::Helmet)), + "slotclass.ingot" => Ok(Self::SlotClass(Class::Ingot)), + "slotclass.liquidbottle" => Ok(Self::SlotClass(Class::LiquidBottle)), + "slotclass.liquidcanister" => Ok(Self::SlotClass(Class::LiquidCanister)), + "slotclass.magazine" => Ok(Self::SlotClass(Class::Magazine)), + "slotclass.motherboard" => Ok(Self::SlotClass(Class::Motherboard)), + "slotclass.none" => Ok(Self::SlotClass(Class::None)), + "slotclass.ore" => Ok(Self::SlotClass(Class::Ore)), + "slotclass.organ" => Ok(Self::SlotClass(Class::Organ)), + "slotclass.plant" => Ok(Self::SlotClass(Class::Plant)), + "slotclass.portables" => Ok(Self::SlotClass(Class::Portables)), + "slotclass.programmablechip" => Ok(Self::SlotClass(Class::ProgrammableChip)), + "slotclass.scanninghead" => Ok(Self::SlotClass(Class::ScanningHead)), + "slotclass.sensorprocessingunit" => { + Ok(Self::SlotClass(Class::SensorProcessingUnit)) + } + "slotclass.soundcartridge" => Ok(Self::SlotClass(Class::SoundCartridge)), + "slotclass.suit" => Ok(Self::SlotClass(Class::Suit)), + "slotclass.suitmod" => Ok(Self::SlotClass(Class::SuitMod)), + "slotclass.tool" => Ok(Self::SlotClass(Class::Tool)), + "slotclass.torpedo" => Ok(Self::SlotClass(Class::Torpedo)), + "slotclass.uniform" => Ok(Self::SlotClass(Class::Uniform)), + "slotclass.wreckage" => Ok(Self::SlotClass(Class::Wreckage)), + "sorterinstruction.filterprefabhashequals" => { + Ok(Self::SorterInstruction(SorterInstruction::FilterPrefabHashEquals)) + } + "sorterinstruction.filterprefabhashnotequals" => { + Ok(Self::SorterInstruction(SorterInstruction::FilterPrefabHashNotEquals)) + } + "sorterinstruction.filterquantitycompare" => { + Ok(Self::SorterInstruction(SorterInstruction::FilterQuantityCompare)) + } + "sorterinstruction.filterslottypecompare" => { + Ok(Self::SorterInstruction(SorterInstruction::FilterSlotTypeCompare)) + } + "sorterinstruction.filtersortingclasscompare" => { + Ok(Self::SorterInstruction(SorterInstruction::FilterSortingClassCompare)) + } + "sorterinstruction.limitnextexecutionbycount" => { + Ok(Self::SorterInstruction(SorterInstruction::LimitNextExecutionByCount)) + } + "sorterinstruction.none" => { + Ok(Self::SorterInstruction(SorterInstruction::None)) + } + "sortingclass.appliances" => Ok(Self::SortingClass(SortingClass::Appliances)), + "sortingclass.atmospherics" => { + Ok(Self::SortingClass(SortingClass::Atmospherics)) + } + "sortingclass.clothing" => Ok(Self::SortingClass(SortingClass::Clothing)), + "sortingclass.default" => Ok(Self::SortingClass(SortingClass::Default)), + "sortingclass.food" => Ok(Self::SortingClass(SortingClass::Food)), + "sortingclass.ices" => Ok(Self::SortingClass(SortingClass::Ices)), + "sortingclass.kits" => Ok(Self::SortingClass(SortingClass::Kits)), + "sortingclass.ores" => Ok(Self::SortingClass(SortingClass::Ores)), + "sortingclass.resources" => Ok(Self::SortingClass(SortingClass::Resources)), + "sortingclass.storage" => Ok(Self::SortingClass(SortingClass::Storage)), + "sortingclass.tools" => Ok(Self::SortingClass(SortingClass::Tools)), + "sound.airlockcycling" => Ok(Self::Sound(SoundAlert::AirlockCycling)), + "sound.alarm1" => Ok(Self::Sound(SoundAlert::Alarm1)), + "sound.alarm10" => Ok(Self::Sound(SoundAlert::Alarm10)), + "sound.alarm11" => Ok(Self::Sound(SoundAlert::Alarm11)), + "sound.alarm12" => Ok(Self::Sound(SoundAlert::Alarm12)), + "sound.alarm2" => Ok(Self::Sound(SoundAlert::Alarm2)), + "sound.alarm3" => Ok(Self::Sound(SoundAlert::Alarm3)), + "sound.alarm4" => Ok(Self::Sound(SoundAlert::Alarm4)), + "sound.alarm5" => Ok(Self::Sound(SoundAlert::Alarm5)), + "sound.alarm6" => Ok(Self::Sound(SoundAlert::Alarm6)), + "sound.alarm7" => Ok(Self::Sound(SoundAlert::Alarm7)), + "sound.alarm8" => Ok(Self::Sound(SoundAlert::Alarm8)), + "sound.alarm9" => Ok(Self::Sound(SoundAlert::Alarm9)), + "sound.alert" => Ok(Self::Sound(SoundAlert::Alert)), + "sound.danger" => Ok(Self::Sound(SoundAlert::Danger)), + "sound.depressurising" => Ok(Self::Sound(SoundAlert::Depressurising)), + "sound.firefirefire" => Ok(Self::Sound(SoundAlert::FireFireFire)), + "sound.five" => Ok(Self::Sound(SoundAlert::Five)), + "sound.floor" => Ok(Self::Sound(SoundAlert::Floor)), + "sound.four" => Ok(Self::Sound(SoundAlert::Four)), + "sound.haltwhogoesthere" => Ok(Self::Sound(SoundAlert::HaltWhoGoesThere)), + "sound.highcarbondioxide" => Ok(Self::Sound(SoundAlert::HighCarbonDioxide)), + "sound.intruderalert" => Ok(Self::Sound(SoundAlert::IntruderAlert)), + "sound.liftoff" => Ok(Self::Sound(SoundAlert::LiftOff)), + "sound.malfunctiondetected" => { + Ok(Self::Sound(SoundAlert::MalfunctionDetected)) + } + "sound.music1" => Ok(Self::Sound(SoundAlert::Music1)), + "sound.music2" => Ok(Self::Sound(SoundAlert::Music2)), + "sound.music3" => Ok(Self::Sound(SoundAlert::Music3)), + "sound.none" => Ok(Self::Sound(SoundAlert::None)), + "sound.one" => Ok(Self::Sound(SoundAlert::One)), + "sound.pollutantsdetected" => Ok(Self::Sound(SoundAlert::PollutantsDetected)), + "sound.powerlow" => Ok(Self::Sound(SoundAlert::PowerLow)), + "sound.pressurehigh" => Ok(Self::Sound(SoundAlert::PressureHigh)), + "sound.pressurelow" => Ok(Self::Sound(SoundAlert::PressureLow)), + "sound.pressurising" => Ok(Self::Sound(SoundAlert::Pressurising)), + "sound.rocketlaunching" => Ok(Self::Sound(SoundAlert::RocketLaunching)), + "sound.stormincoming" => Ok(Self::Sound(SoundAlert::StormIncoming)), + "sound.systemfailure" => Ok(Self::Sound(SoundAlert::SystemFailure)), + "sound.temperaturehigh" => Ok(Self::Sound(SoundAlert::TemperatureHigh)), + "sound.temperaturelow" => Ok(Self::Sound(SoundAlert::TemperatureLow)), + "sound.three" => Ok(Self::Sound(SoundAlert::Three)), + "sound.traderincoming" => Ok(Self::Sound(SoundAlert::TraderIncoming)), + "sound.traderlanded" => Ok(Self::Sound(SoundAlert::TraderLanded)), + "sound.two" => Ok(Self::Sound(SoundAlert::Two)), + "sound.warning" => Ok(Self::Sound(SoundAlert::Warning)), + "sound.welcome" => Ok(Self::Sound(SoundAlert::Welcome)), + "transmittermode.active" => { + Ok(Self::TransmitterMode(LogicTransmitterMode::Active)) + } + "transmittermode.passive" => { + Ok(Self::TransmitterMode(LogicTransmitterMode::Passive)) + } + "vent.inward" => Ok(Self::Vent(VentDirection::Inward)), + "vent.outward" => Ok(Self::Vent(VentDirection::Outward)), + "equals" => Ok(Self::Unnamed(ConditionOperation::Equals)), + "greater" => Ok(Self::Unnamed(ConditionOperation::Greater)), + "less" => Ok(Self::Unnamed(ConditionOperation::Less)), + "notequals" => Ok(Self::Unnamed(ConditionOperation::NotEquals)), + _ => { + Err(super::ParseError { + enm: s.to_string(), + }) + } + } + } +} +impl std::fmt::Display for BasicEnum { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::AirCon(enm) => write!(f, "AirCon.{}", enm), + Self::AirControl(enm) => write!(f, "AirControl.{}", enm), + Self::Color(enm) => write!(f, "Color.{}", enm), + Self::DaylightSensorMode(enm) => write!(f, "DaylightSensorMode.{}", enm), + Self::ElevatorMode(enm) => write!(f, "ElevatorMode.{}", enm), + Self::EntityState(enm) => write!(f, "EntityState.{}", enm), + Self::GasType(enm) => write!(f, "GasType.{}", enm), + Self::LogicSlotType(enm) => write!(f, "LogicSlotType.{}", enm), + Self::LogicType(enm) => write!(f, "LogicType.{}", enm), + Self::PowerMode(enm) => write!(f, "PowerMode.{}", enm), + Self::PrinterInstruction(enm) => write!(f, "PrinterInstruction.{}", enm), + Self::ReEntryProfile(enm) => write!(f, "ReEntryProfile.{}", enm), + Self::RobotMode(enm) => write!(f, "RobotMode.{}", enm), + Self::RocketMode(enm) => write!(f, "RocketMode.{}", enm), + Self::SlotClass(enm) => write!(f, "SlotClass.{}", enm), + Self::SorterInstruction(enm) => write!(f, "SorterInstruction.{}", enm), + Self::SortingClass(enm) => write!(f, "SortingClass.{}", enm), + Self::Sound(enm) => write!(f, "Sound.{}", enm), + Self::TransmitterMode(enm) => write!(f, "TransmitterMode.{}", enm), + Self::Vent(enm) => write!(f, "Vent.{}", enm), + Self::Unnamed(enm) => write!(f, "_unnamed{}", enm), + } + } +} diff --git a/stationeers_data/src/enums/prefabs.rs b/stationeers_data/src/enums/prefabs.rs new file mode 100644 index 0000000..4889a3c --- /dev/null +++ b/stationeers_data/src/enums/prefabs.rs @@ -0,0 +1,7764 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run +// +// `cargo xtask generate -m enums` +// +// from the workspace to regenerate +// +// ================================================= + +use serde_derive::{Deserialize, Serialize}; +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(i32)] +pub enum StationpediaPrefab { + #[strum(serialize = "ItemKitGroundTelescope")] + #[strum(props(name = "Kit (Telescope)", desc = "", value = "-2140672772"))] + ItemKitGroundTelescope = -2140672772i32, + #[strum(serialize = "StructureSmallSatelliteDish")] + #[strum( + props( + name = "Small Satellite Dish", + desc = "This small communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer (Modern) containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", + value = "-2138748650" + ) + )] + StructureSmallSatelliteDish = -2138748650i32, + #[strum(serialize = "StructureRobotArmDoor")] + #[strum(props(name = "Linear Rail Door", desc = "", value = "-2131782367"))] + StructureRobotArmDoor = -2131782367i32, + #[strum(serialize = "StructureStairwellBackRight")] + #[strum(props(name = "Stairwell (Back Right)", desc = "", value = "-2128896573"))] + StructureStairwellBackRight = -2128896573i32, + #[strum(serialize = "StructureBench2")] + #[strum(props(name = "Bench (High Tech Style)", desc = "", value = "-2127086069"))] + StructureBench2 = -2127086069i32, + #[strum(serialize = "ItemLiquidPipeValve")] + #[strum( + props( + name = "Kit (Liquid Pipe Valve)", + desc = "This kit creates a Valve (Liquid).", + value = "-2126113312" + ) + )] + ItemLiquidPipeValve = -2126113312i32, + #[strum(serialize = "ItemDisposableBatteryCharger")] + #[strum( + props( + name = "Disposable Battery Charger", + desc = "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.", + value = "-2124435700" + ) + )] + ItemDisposableBatteryCharger = -2124435700i32, + #[strum(serialize = "StructureBatterySmall")] + #[strum( + props( + name = "Auxiliary Rocket Battery ", + desc = "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + value = "-2123455080" + ) + )] + StructureBatterySmall = -2123455080i32, + #[strum(serialize = "StructureLiquidPipeAnalyzer")] + #[strum(props(name = "Liquid Pipe Analyzer", desc = "", value = "-2113838091"))] + StructureLiquidPipeAnalyzer = -2113838091i32, + #[strum(serialize = "ItemGasTankStorage")] + #[strum( + props( + name = "Kit (Canister Storage)", + desc = "This kit produces a Kit (Canister Storage) for refilling a Canister.", + value = "-2113012215" + ) + )] + ItemGasTankStorage = -2113012215i32, + #[strum(serialize = "StructureFrameCorner")] + #[strum( + props( + name = "Steel Frame (Corner)", + desc = "More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. \nWith a little patience and maneuvering, the corner frame's Gothic-inspired silhouette allows the creation of ogival arches and even more ambitious architecture, although they are not airtight and cannot be built on.", + value = "-2112390778" + ) + )] + StructureFrameCorner = -2112390778i32, + #[strum(serialize = "ItemPotatoBaked")] + #[strum(props(name = "Baked Potato", desc = "", value = "-2111886401"))] + ItemPotatoBaked = -2111886401i32, + #[strum(serialize = "ItemFlashingLight")] + #[strum(props(name = "Kit (Flashing Light)", desc = "", value = "-2107840748"))] + ItemFlashingLight = -2107840748i32, + #[strum(serialize = "ItemLiquidPipeVolumePump")] + #[strum(props(name = "Kit (Liquid Volume Pump)", desc = "", value = "-2106280569"))] + ItemLiquidPipeVolumePump = -2106280569i32, + #[strum(serialize = "StructureAirlock")] + #[strum( + props( + name = "Airlock", + desc = "The standard airlock is a powered portal that forms the main component of an airlock chamber. As long as the airlock is not locked, it can be manually opened using a crowbar.", + value = "-2105052344" + ) + )] + StructureAirlock = -2105052344i32, + #[strum(serialize = "ItemCannedCondensedMilk")] + #[strum( + props( + name = "Canned Condensed Milk", + desc = "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Condensed Milk and an Empty Can, canned condensed milk is fairly high in nutrition, and does not decay.", + value = "-2104175091" + ) + )] + ItemCannedCondensedMilk = -2104175091i32, + #[strum(serialize = "ItemKitHydraulicPipeBender")] + #[strum( + props(name = "Kit (Hydraulic Pipe Bender)", desc = "", value = "-2098556089") + )] + ItemKitHydraulicPipeBender = -2098556089i32, + #[strum(serialize = "ItemKitLogicMemory")] + #[strum(props(name = "Kit (Logic Memory)", desc = "", value = "-2098214189"))] + ItemKitLogicMemory = -2098214189i32, + #[strum(serialize = "StructureInteriorDoorGlass")] + #[strum( + props( + name = "Interior Door Glass", + desc = "0.Operate\n1.Logic", + value = "-2096421875" + ) + )] + StructureInteriorDoorGlass = -2096421875i32, + #[strum(serialize = "StructureAirConditioner")] + #[strum( + props( + name = "Air Conditioner", + desc = "Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature.\n\t \nThe unit has three pipe connections: input, output, and waste. Gas fed into the input will be heated or cooled to reach the target temperature, while the opposite will happen to gas on the waste network.\n\nMultiple Efficiency Multipliers can effect the amount of energy the Air Conditioner uses, and these can be view on the unit's green Information Panel. As the temperature difference between input and waste increases, the Temperature Differential Efficiency Multiplier will decrease. If input or waste temperature is extremely hot or cold, the Operational Temperature Efficiency will decrease. If the input or waste pipe has approach low pressures, the Pressure Efficiency will decrease.\n\nPipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. \n \nFor more information on using the air conditioner, consult the temperature control Guides page.", + value = "-2087593337" + ) + )] + StructureAirConditioner = -2087593337i32, + #[strum(serialize = "StructureRocketMiner")] + #[strum( + props( + name = "Rocket Miner", + desc = "Gathers available resources at the rocket's current space location.", + value = "-2087223687" + ) + )] + StructureRocketMiner = -2087223687i32, + #[strum(serialize = "DynamicGPR")] + #[strum( + props( + name = "", + desc = "", + value = "-2085885850" + ) + )] + DynamicGpr = -2085885850i32, + #[strum(serialize = "UniformCommander")] + #[strum(props(name = "Uniform Commander", desc = "", value = "-2083426457"))] + UniformCommander = -2083426457i32, + #[strum(serialize = "StructureWindTurbine")] + #[strum( + props( + name = "Wind Turbine", + desc = "The Stationeers wind turbine was first designed by Norsec atmospheric engineers, looking to create a wind-driven power generation system that would operate even on exceedingly low atmosphere worlds. The ultra-light blades respond to exceedingly low atmospheric densities, while being strong enough to function even under huge strain in much more demanding environments.\nWhile the wind turbine is optimized to produce power (up to 500W) even on low atmosphere worlds, it performs best in denser environments. Output varies with wind speed and, during storms, may increase dramatically (up to 10,000W), so be careful to design your power networks with that in mind.", + value = "-2082355173" + ) + )] + StructureWindTurbine = -2082355173i32, + #[strum(serialize = "StructureCompositeWindowShutterController")] + #[strum( + props( + name = "Composite Window Shutter Controller", + desc = "", + value = "-2078371660" + ) + )] + StructureCompositeWindowShutterController = -2078371660i32, + #[strum(serialize = "StructureInsulatedPipeTJunction")] + #[strum( + props( + name = "Insulated Pipe (T Junction)", + desc = "Insulated pipes greatly reduce heat loss from gases stored in them.", + value = "-2076086215" + ) + )] + StructureInsulatedPipeTJunction = -2076086215i32, + #[strum(serialize = "ItemPureIcePollutedWater")] + #[strum( + props( + name = "Pure Ice Polluted Water", + desc = "A frozen chunk of Polluted Water", + value = "-2073202179" + ) + )] + ItemPureIcePollutedWater = -2073202179i32, + #[strum(serialize = "RailingIndustrial02")] + #[strum( + props(name = "Railing Industrial (Type 2)", desc = "", value = "-2072792175") + )] + RailingIndustrial02 = -2072792175i32, + #[strum(serialize = "StructurePipeInsulatedLiquidCrossJunction")] + #[strum( + props( + name = "Insulated Liquid Pipe (Cross Junction)", + desc = "Liquid piping with very low temperature loss or gain.", + value = "-2068497073" + ) + )] + StructurePipeInsulatedLiquidCrossJunction = -2068497073i32, + #[strum(serialize = "ItemWeldingTorch")] + #[strum( + props( + name = "Welding Torch", + desc = "Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures.\nAn upgraded version of the classic 'Zairo' model first manufactured by ExMin for modular space habitat assembly, the Arlite is powered by a single Canister (Fuel) and designed to function equally well in deep space and deep gravity wells.", + value = "-2066892079" + ) + )] + ItemWeldingTorch = -2066892079i32, + #[strum(serialize = "StructurePictureFrameThickMountPortraitSmall")] + #[strum( + props( + name = "Picture Frame Thick Mount Portrait Small", + desc = "", + value = "-2066653089" + ) + )] + StructurePictureFrameThickMountPortraitSmall = -2066653089i32, + #[strum(serialize = "Landingpad_DataConnectionPiece")] + #[strum( + props( + name = "Landingpad Data And Power", + desc = "Provides power to the landing pad. The data port must be connected to the data port of a computer with a communications motherboard for a trader to be called in to land.", + value = "-2066405918" + ) + )] + LandingpadDataConnectionPiece = -2066405918i32, + #[strum(serialize = "ItemKitPictureFrame")] + #[strum(props(name = "Kit Picture Frame", desc = "", value = "-2062364768"))] + ItemKitPictureFrame = -2062364768i32, + #[strum(serialize = "ItemMKIIArcWelder")] + #[strum(props(name = "Mk II Arc Welder", desc = "", value = "-2061979347"))] + ItemMkiiArcWelder = -2061979347i32, + #[strum(serialize = "StructureCompositeWindow")] + #[strum( + props( + name = "Composite Window", + desc = "Air-tight and resistant to extreme temperatures, composite walls come in several charming, near identical varieties - reflecting their designer's focus on form over function.", + value = "-2060571986" + ) + )] + StructureCompositeWindow = -2060571986i32, + #[strum(serialize = "ItemEmergencyDrill")] + #[strum(props(name = "Emergency Drill", desc = "", value = "-2052458905"))] + ItemEmergencyDrill = -2052458905i32, + #[strum(serialize = "Rover_MkI")] + #[strum( + props( + name = "Rover MkI", + desc = "A distant cousin of the jeep, the Mk I {Sinotai electric rover is one of the most simple and durable light vehicles in the known universe. Able to carry two passengers and cargo such as the Portable Gas Tank (Air) or , it is powered by up to three batteries, accepting everything including Battery Cell (Nuclear).\nA quad-array of hub-mounted electric engines propels the reinforced aluminium frame over most terrain and modest obstacles. While the Mk I is designed for stability in low-horizontality circumstances, if it rolls, try using your Crowbar to put it right way up.Connects to Logic Transmitter", + value = "-2049946335" + ) + )] + RoverMkI = -2049946335i32, + #[strum(serialize = "StructureSolarPanel")] + #[strum( + props( + name = "Solar Panel", + desc = "Sinotai's standard solar panels are used for generating power from sunlight. They can be connected to Logic systems, in order to track sunlight, but their reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", + value = "-2045627372" + ) + )] + StructureSolarPanel = -2045627372i32, + #[strum(serialize = "CircuitboardShipDisplay")] + #[strum( + props( + name = "Ship Display", + desc = "When the original Stationeer Handbook collapsed under its own weight into a singularity, certain information was irretrievably lost. Amongst this mysterious corpus of knowledge is the exact purpose of the ship display board.", + value = "-2044446819" + ) + )] + CircuitboardShipDisplay = -2044446819i32, + #[strum(serialize = "StructureBench")] + #[strum( + props( + name = "Powered Bench", + desc = "When it's time to sit, nothing supports you like a bench. This bench is powered, so you can use appliances like the Microwave.", + value = "-2042448192" + ) + )] + StructureBench = -2042448192i32, + #[strum(serialize = "StructurePictureFrameThickLandscapeSmall")] + #[strum( + props( + name = "Picture Frame Thick Landscape Small", + desc = "", + value = "-2041566697" + ) + )] + StructurePictureFrameThickLandscapeSmall = -2041566697i32, + #[strum(serialize = "ItemKitLargeSatelliteDish")] + #[strum( + props(name = "Kit (Large Satellite Dish)", desc = "", value = "-2039971217") + )] + ItemKitLargeSatelliteDish = -2039971217i32, + #[strum(serialize = "ItemKitMusicMachines")] + #[strum(props(name = "Kit (Music Machines)", desc = "", value = "-2038889137"))] + ItemKitMusicMachines = -2038889137i32, + #[strum(serialize = "ItemStelliteGlassSheets")] + #[strum( + props( + name = "Stellite Glass Sheets", + desc = "A stronger glass substitute.", + value = "-2038663432" + ) + )] + ItemStelliteGlassSheets = -2038663432i32, + #[strum(serialize = "ItemKitVendingMachine")] + #[strum(props(name = "Kit (Vending Machine)", desc = "", value = "-2038384332"))] + ItemKitVendingMachine = -2038384332i32, + #[strum(serialize = "StructurePumpedLiquidEngine")] + #[strum( + props( + name = "Pumped Liquid Engine", + desc = "Liquid propellants bring greater efficiencies with Pumped Liquid Engine. Two inputs are provided so Stationeers can seperate their fuels, the Setting variable controls the mixing ratio of the inputs. The engine is designed to run on Liquid Volatiles and Liquid Oxygen, some Stationeers have reported excessive thrust values by switching to Liquid Nitrous Oxide", + value = "-2031440019" + ) + )] + StructurePumpedLiquidEngine = -2031440019i32, + #[strum(serialize = "StructurePictureFrameThinLandscapeSmall")] + #[strum( + props( + name = "Picture Frame Thin Landscape Small", + desc = "", + value = "-2024250974" + ) + )] + StructurePictureFrameThinLandscapeSmall = -2024250974i32, + #[strum(serialize = "StructureStacker")] + #[strum( + props( + name = "Stacker", + desc = "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", + value = "-2020231820" + ) + )] + StructureStacker = -2020231820i32, + #[strum(serialize = "ItemMKIIScrewdriver")] + #[strum( + props( + name = "Mk II Screwdriver", + desc = "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units. The MK II is more resistant to temperature and pressure.", + value = "-2015613246" + ) + )] + ItemMkiiScrewdriver = -2015613246i32, + #[strum(serialize = "StructurePressurePlateLarge")] + #[strum(props(name = "Trigger Plate (Large)", desc = "", value = "-2008706143"))] + StructurePressurePlateLarge = -2008706143i32, + #[strum(serialize = "StructurePipeLiquidCrossJunction5")] + #[strum( + props( + name = "Liquid Pipe (5-Way Junction)", + desc = "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + value = "-2006384159" + ) + )] + StructurePipeLiquidCrossJunction5 = -2006384159i32, + #[strum(serialize = "ItemGasFilterWater")] + #[strum( + props( + name = "Filter (Water)", + desc = "Sinotai filters are used to capture various gases, which can be disposed of, or used elsewhere. Water can be collected by filtering smelted Ice (Water)", + value = "-1993197973" + ) + )] + ItemGasFilterWater = -1993197973i32, + #[strum(serialize = "SpaceShuttle")] + #[strum( + props( + name = "Space Shuttle", + desc = "An antiquated Sinotai transport craft, long since decommissioned.", + value = "-1991297271" + ) + )] + SpaceShuttle = -1991297271i32, + #[strum(serialize = "SeedBag_Fern")] + #[strum( + props( + name = "Fern Seeds", + desc = "Grow a Fern.", + value = "-1990600883" + ) + )] + SeedBagFern = -1990600883i32, + #[strum(serialize = "ItemSecurityCamera")] + #[strum( + props( + name = "Security Camera", + desc = "Security cameras can be paired with a Motion Sensor, then connected to a Console fitted with a Camera Display for that 'always watched' feeling.", + value = "-1981101032" + ) + )] + ItemSecurityCamera = -1981101032i32, + #[strum(serialize = "CardboardBox")] + #[strum(props(name = "Cardboard Box", desc = "", value = "-1976947556"))] + CardboardBox = -1976947556i32, + #[strum(serialize = "ItemSoundCartridgeSynth")] + #[strum(props(name = "Sound Cartridge Synth", desc = "", value = "-1971419310"))] + ItemSoundCartridgeSynth = -1971419310i32, + #[strum(serialize = "StructureCornerLocker")] + #[strum(props(name = "Corner Locker", desc = "", value = "-1968255729"))] + StructureCornerLocker = -1968255729i32, + #[strum(serialize = "StructureInsulatedPipeCorner")] + #[strum( + props( + name = "Insulated Pipe (Corner)", + desc = "Insulated pipes greatly reduce heat loss from gases stored in them.", + value = "-1967711059" + ) + )] + StructureInsulatedPipeCorner = -1967711059i32, + #[strum(serialize = "StructureWallArchCornerSquare")] + #[strum(props(name = "Wall (Arch Corner Square)", desc = "", value = "-1963016580"))] + StructureWallArchCornerSquare = -1963016580i32, + #[strum(serialize = "StructureControlChair")] + #[strum( + props( + name = "Control Chair", + desc = "Once, these chairs were the heart of space-going behemoths. Now, they're items of nostalgia built only by a handful of Stationeers with a sense of history. In other words, kitsch.", + value = "-1961153710" + ) + )] + StructureControlChair = -1961153710i32, + #[strum(serialize = "PortableComposter")] + #[strum( + props( + name = "Portable Composter", + desc = "A simple composting device, the basic composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires a full Liquid Canister and a battery to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat.\n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for", + value = "-1958705204" + ) + )] + PortableComposter = -1958705204i32, + #[strum(serialize = "CartridgeGPS")] + #[strum(props(name = "Cartridge (GPS)", desc = "", value = "-1957063345"))] + CartridgeGps = -1957063345i32, + #[strum(serialize = "StructureConsoleLED1x3")] + #[strum( + props( + name = "LED Display (Large)", + desc = "0.Default\n1.Percent\n2.Power", + value = "-1949054743" + ) + )] + StructureConsoleLed1X3 = -1949054743i32, + #[strum(serialize = "ItemDuctTape")] + #[strum( + props( + name = "Duct Tape", + desc = "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage.", + value = "-1943134693" + ) + )] + ItemDuctTape = -1943134693i32, + #[strum(serialize = "DynamicLiquidCanisterEmpty")] + #[strum( + props( + name = "Portable Liquid Tank", + desc = "This portable tank stores liquid, and liquid only. You can bolt one to a Kit (Liquid Tank Connector) using a Wrench, then connect it to a pipe network to refill it. You can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", + value = "-1939209112" + ) + )] + DynamicLiquidCanisterEmpty = -1939209112i32, + #[strum(serialize = "ItemKitDeepMiner")] + #[strum(props(name = "Kit (Deep Miner)", desc = "", value = "-1935075707"))] + ItemKitDeepMiner = -1935075707i32, + #[strum(serialize = "ItemKitAutomatedOven")] + #[strum(props(name = "Kit (Automated Oven)", desc = "", value = "-1931958659"))] + ItemKitAutomatedOven = -1931958659i32, + #[strum(serialize = "MothershipCore")] + #[strum( + props( + name = "Mothership Core", + desc = "A relic of from an earlier era of space ambition, Sinotai's mothership cores formed the central element of a generation's space-going creations. While Sinotai's pivot to smaller, modular craft upset some purists, motherships continue to be built and maintained by dedicated enthusiasts.", + value = "-1930442922" + ) + )] + MothershipCore = -1930442922i32, + #[strum(serialize = "ItemKitSolarPanel")] + #[strum(props(name = "Kit (Solar Panel)", desc = "", value = "-1924492105"))] + ItemKitSolarPanel = -1924492105i32, + #[strum(serialize = "CircuitboardPowerControl")] + #[strum( + props( + name = "Power Control", + desc = "Under distant suns and demanding environments, Stationeer systems need to balance reliability, resilience and versatility. The power control board allows remote enabling and disabling of selected devices, disconnecting manual operation. \n \nThe circuit board has two modes: 'Link' switches all devices on or off; 'Toggle' switches each device to their alternate state. ", + value = "-1923778429" + ) + )] + CircuitboardPowerControl = -1923778429i32, + #[strum(serialize = "SeedBag_Tomato")] + #[strum( + props( + name = "Tomato Seeds", + desc = "Grow a Tomato.", + value = "-1922066841" + ) + )] + SeedBagTomato = -1922066841i32, + #[strum(serialize = "StructureChuteUmbilicalFemale")] + #[strum(props(name = "Umbilical Socket (Chute)", desc = "", value = "-1918892177"))] + StructureChuteUmbilicalFemale = -1918892177i32, + #[strum(serialize = "StructureMediumConvectionRadiator")] + #[strum( + props( + name = "Medium Convection Radiator", + desc = "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.", + value = "-1918215845" + ) + )] + StructureMediumConvectionRadiator = -1918215845i32, + #[strum(serialize = "ItemGasFilterVolatilesInfinite")] + #[strum( + props( + name = "Catalytic Filter (Volatiles)", + desc = "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + value = "-1916176068" + ) + )] + ItemGasFilterVolatilesInfinite = -1916176068i32, + #[strum(serialize = "MotherboardSorter")] + #[strum( + props( + name = "Sorter Motherboard", + desc = "Motherboards are connected to Computer (Modern)s to perform various technical functions.\nThe Norsec-designed K-cops 10-10 sorter motherboard permits Stationeers to control which items a Sorter does, and does not, permit to pass.", + value = "-1908268220" + ) + )] + MotherboardSorter = -1908268220i32, + #[strum(serialize = "ItemSoundCartridgeDrums")] + #[strum(props(name = "Sound Cartridge Drums", desc = "", value = "-1901500508"))] + ItemSoundCartridgeDrums = -1901500508i32, + #[strum(serialize = "StructureFairingTypeA3")] + #[strum(props(name = "Fairing (Type A3)", desc = "", value = "-1900541738"))] + StructureFairingTypeA3 = -1900541738i32, + #[strum(serialize = "RailingElegant02")] + #[strum(props(name = "Railing Elegant (Type 2)", desc = "", value = "-1898247915"))] + RailingElegant02 = -1898247915i32, + #[strum(serialize = "ItemStelliteIngot")] + #[strum(props(name = "Ingot (Stellite)", desc = "", value = "-1897868623"))] + ItemStelliteIngot = -1897868623i32, + #[strum(serialize = "StructureSmallTableBacklessSingle")] + #[strum( + props(name = "Small (Table Backless Single)", desc = "", value = "-1897221677") + )] + StructureSmallTableBacklessSingle = -1897221677i32, + #[strum(serialize = "StructureHydraulicPipeBender")] + #[strum( + props( + name = "Hydraulic Pipe Bender", + desc = "A go-to tool for all your atmospheric and plumbing needs, the ExMin Atmoprinter will create everything from pipes, pumps and tanks, to vents and filters, ensuring your survival in any environment. Upgrade the Atmoprinter using a Pipe Bender Mod for additional recipes and faster processing speeds.", + value = "-1888248335" + ) + )] + StructureHydraulicPipeBender = -1888248335i32, + #[strum(serialize = "ItemWrench")] + #[strum( + props( + name = "Wrench", + desc = "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures", + value = "-1886261558" + ) + )] + ItemWrench = -1886261558i32, + #[strum(serialize = "SeedBag_SugarCane")] + #[strum(props(name = "Sugarcane Seeds", desc = "", value = "-1884103228"))] + SeedBagSugarCane = -1884103228i32, + #[strum(serialize = "ItemSoundCartridgeBass")] + #[strum(props(name = "Sound Cartridge Bass", desc = "", value = "-1883441704"))] + ItemSoundCartridgeBass = -1883441704i32, + #[strum(serialize = "ItemSprayCanGreen")] + #[strum( + props( + name = "Spray Paint (Green)", + desc = "Green is the color of life, and longing. Paradoxically, it's also the color of envy, and tolerance. It denotes sickness, youth, and wealth. But really, it's just what light does at around 500 billionths of a meter.", + value = "-1880941852" + ) + )] + ItemSprayCanGreen = -1880941852i32, + #[strum(serialize = "StructurePipeCrossJunction5")] + #[strum( + props( + name = "Pipe (5-Way Junction)", + desc = "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + value = "-1877193979" + ) + )] + StructurePipeCrossJunction5 = -1877193979i32, + #[strum(serialize = "StructureSDBHopper")] + #[strum(props(name = "SDB Hopper", desc = "", value = "-1875856925"))] + StructureSdbHopper = -1875856925i32, + #[strum(serialize = "ItemMKIIMiningDrill")] + #[strum( + props( + name = "Mk II Mining Drill", + desc = "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.' The MK II is more resistant to temperature and pressure.", + value = "-1875271296" + ) + )] + ItemMkiiMiningDrill = -1875271296i32, + #[strum(serialize = "Landingpad_TaxiPieceCorner")] + #[strum(props(name = "Landingpad Taxi Corner", desc = "", value = "-1872345847"))] + LandingpadTaxiPieceCorner = -1872345847i32, + #[strum(serialize = "ItemKitStairwell")] + #[strum(props(name = "Kit (Stairwell)", desc = "", value = "-1868555784"))] + ItemKitStairwell = -1868555784i32, + #[strum(serialize = "ItemKitVendingMachineRefrigerated")] + #[strum( + props( + name = "Kit (Vending Machine Refrigerated)", + desc = "", + value = "-1867508561" + ) + )] + ItemKitVendingMachineRefrigerated = -1867508561i32, + #[strum(serialize = "ItemKitGasUmbilical")] + #[strum(props(name = "Kit (Gas Umbilical)", desc = "", value = "-1867280568"))] + ItemKitGasUmbilical = -1867280568i32, + #[strum(serialize = "ItemBatteryCharger")] + #[strum( + props( + name = "Kit (Battery Charger)", + desc = "This kit produces a 5-slot Kit (Battery Charger).", + value = "-1866880307" + ) + )] + ItemBatteryCharger = -1866880307i32, + #[strum(serialize = "ItemMuffin")] + #[strum( + props( + name = "Muffin", + desc = "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.", + value = "-1864982322" + ) + )] + ItemMuffin = -1864982322i32, + #[strum(serialize = "ItemKitDynamicHydroponics")] + #[strum( + props(name = "Kit (Portable Hydroponics)", desc = "", value = "-1861154222") + )] + ItemKitDynamicHydroponics = -1861154222i32, + #[strum(serialize = "StructureWallLight")] + #[strum(props(name = "Wall Light", desc = "", value = "-1860064656"))] + StructureWallLight = -1860064656i32, + #[strum(serialize = "StructurePipeLiquidCorner")] + #[strum( + props( + name = "Liquid Pipe (Corner)", + desc = "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.", + value = "-1856720921" + ) + )] + StructurePipeLiquidCorner = -1856720921i32, + #[strum(serialize = "ItemGasCanisterWater")] + #[strum(props(name = "Liquid Canister (Water)", desc = "", value = "-1854861891"))] + ItemGasCanisterWater = -1854861891i32, + #[strum(serialize = "ItemKitLaunchMount")] + #[strum(props(name = "Kit (Launch Mount)", desc = "", value = "-1854167549"))] + ItemKitLaunchMount = -1854167549i32, + #[strum(serialize = "DeviceLfoVolume")] + #[strum( + props( + name = "Low frequency oscillator", + desc = "The low frequency oscillator (or LFO) makes everything sound dark, twisted and crunchy by altering the shape of the waves output by a Logic Step Sequencer.\n \nTo set up an LFO:\n\n1. Place the LFO unit\n2. Set the LFO output to a Passive Speaker\n2. Set a sequencers' output to LFO - so the sequencer's signal runs through the LFO to a speaker.\n3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO.\n4. Use another logic writer to write the BPM to the LFO.\n5. You are ready. This is the future. You're in space. Make it sound cool.\n\nFor more info, check out the music page.", + value = "-1844430312" + ) + )] + DeviceLfoVolume = -1844430312i32, + #[strum(serialize = "StructureCableCornerH3")] + #[strum( + props(name = "Heavy Cable (3-Way Corner)", desc = "", value = "-1843379322") + )] + StructureCableCornerH3 = -1843379322i32, + #[strum(serialize = "StructureCompositeCladdingAngledCornerInner")] + #[strum( + props( + name = "Composite Cladding (Angled Corner Inner)", + desc = "", + value = "-1841871763" + ) + )] + StructureCompositeCladdingAngledCornerInner = -1841871763i32, + #[strum(serialize = "StructureHydroponicsTrayData")] + #[strum( + props( + name = "Hydroponics Device", + desc = "The Agrizero hydroponics device is the ideal vessel for growing a range of plantlife. It must be supplied with Water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie. Note that unlike the Hydroponics Tray, these cannot be placed consecutively as they are considered devices rather than pure pipes. They do, however, allow data interrogation for logic systems.", + value = "-1841632400" + ) + )] + StructureHydroponicsTrayData = -1841632400i32, + #[strum(serialize = "ItemKitInsulatedPipeUtilityLiquid")] + #[strum( + props( + name = "Kit (Insulated Pipe Utility Liquid)", + desc = "", + value = "-1831558953" + ) + )] + ItemKitInsulatedPipeUtilityLiquid = -1831558953i32, + #[strum(serialize = "ItemKitWall")] + #[strum(props(name = "Kit (Wall)", desc = "", value = "-1826855889"))] + ItemKitWall = -1826855889i32, + #[strum(serialize = "ItemWreckageAirConditioner1")] + #[strum(props(name = "Wreckage", desc = "", value = "-1826023284"))] + ItemWreckageAirConditioner1 = -1826023284i32, + #[strum(serialize = "ItemKitStirlingEngine")] + #[strum(props(name = "Kit (Stirling Engine)", desc = "", value = "-1821571150"))] + ItemKitStirlingEngine = -1821571150i32, + #[strum(serialize = "StructureRoboticArmDock")] + #[strum( + props( + name = "LArRE Dock", + desc = "The Linear Articulated Rail Entity or LArRE can be used to plant, harvest and fertilize plants in plant trays. It can also grab items from a Chute Export Bin and drop them in a Chute Import Bin. LArRE can interact with plant trays or chute bins built under a linear rail station or built under its dock.", + value = "-1818718810" + ) + )] + StructureRoboticArmDock = -1818718810i32, + #[strum(serialize = "StructureGasUmbilicalMale")] + #[strum( + props( + name = "Umbilical (Gas)", + desc = "0.Left\n1.Center\n2.Right", + value = "-1814939203" + ) + )] + StructureGasUmbilicalMale = -1814939203i32, + #[strum(serialize = "StructureSleeperRight")] + #[strum( + props( + name = "Sleeper Right", + desc = "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", + value = "-1812330717" + ) + )] + StructureSleeperRight = -1812330717i32, + #[strum(serialize = "StructureManualHatch")] + #[strum( + props( + name = "Manual Hatch", + desc = "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.", + value = "-1808154199" + ) + )] + StructureManualHatch = -1808154199i32, + #[strum(serialize = "ItemOxite")] + #[strum( + props( + name = "Ice (Oxite)", + desc = "Oxite ice is largely composed of frozen Oxygen, and found on many planets in the Solar System. Highly valuable and sought after, not all planets a Stationeer visits will have some. \n\nHighly sensitive to temperature, oxite will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small. When melting, oxite produces a mixture of Oxygen and Nitrogen.", + value = "-1805394113" + ) + )] + ItemOxite = -1805394113i32, + #[strum(serialize = "ItemKitLiquidTurboVolumePump")] + #[strum( + props( + name = "Kit (Turbo Volume Pump - Liquid)", + desc = "", + value = "-1805020897" + ) + )] + ItemKitLiquidTurboVolumePump = -1805020897i32, + #[strum(serialize = "StructureLiquidUmbilicalMale")] + #[strum( + props( + name = "Umbilical (Liquid)", + desc = "0.Left\n1.Center\n2.Right", + value = "-1798420047" + ) + )] + StructureLiquidUmbilicalMale = -1798420047i32, + #[strum(serialize = "StructurePipeMeter")] + #[strum( + props( + name = "Pipe Meter", + desc = "While the Stationeers program has, thus far, inspired little in the way of classical poetry, the following haiku was found etched, ironically, on a piece of pipe wreckage found on Vulcan:\n\"Humble pipe meter\nspeaks the truth, transmits pressure\nwithin any pipe\"", + value = "-1798362329" + ) + )] + StructurePipeMeter = -1798362329i32, + #[strum(serialize = "ItemKitUprightWindTurbine")] + #[strum( + props(name = "Kit (Upright Wind Turbine)", desc = "", value = "-1798044015") + )] + ItemKitUprightWindTurbine = -1798044015i32, + #[strum(serialize = "ItemPipeRadiator")] + #[strum( + props( + name = "Kit (Radiator)", + desc = "This kit creates a Pipe Convection Radiator.", + value = "-1796655088" + ) + )] + ItemPipeRadiator = -1796655088i32, + #[strum(serialize = "StructureOverheadShortCornerLocker")] + #[strum(props(name = "Overhead Corner Locker", desc = "", value = "-1794932560"))] + StructureOverheadShortCornerLocker = -1794932560i32, + #[strum(serialize = "ItemCableAnalyser")] + #[strum(props(name = "Kit (Cable Analyzer)", desc = "", value = "-1792787349"))] + ItemCableAnalyser = -1792787349i32, + #[strum(serialize = "Landingpad_LiquidConnectorOutwardPiece")] + #[strum( + props( + name = "Landingpad Liquid Output", + desc = "Pumps liquid purchased from a trader out of the landing pad. You can increase the landing pad's liquid storage capacity by adding more Landingpad Gas Storage to the landing pad.", + value = "-1788929869" + ) + )] + LandingpadLiquidConnectorOutwardPiece = -1788929869i32, + #[strum(serialize = "StructureRoboticArmRailStraight")] + #[strum(props(name = "Linear Rail Straight", desc = "", value = "-1785844184"))] + StructureRoboticArmRailStraight = -1785844184i32, + #[strum(serialize = "StructurePipeCorner")] + #[strum( + props( + name = "Pipe (Corner)", + desc = "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.", + value = "-1785673561" + ) + )] + StructurePipeCorner = -1785673561i32, + #[strum(serialize = "ItemKitSensor")] + #[strum(props(name = "Kit (Sensors)", desc = "", value = "-1776897113"))] + ItemKitSensor = -1776897113i32, + #[strum(serialize = "ItemReusableFireExtinguisher")] + #[strum( + props( + name = "Fire Extinguisher (Reusable)", + desc = "Requires a canister filled with any inert liquid to opperate.", + value = "-1773192190" + ) + )] + ItemReusableFireExtinguisher = -1773192190i32, + #[strum(serialize = "CartridgeOreScanner")] + #[strum( + props( + name = "Cartridge (Ore Scanner)", + desc = "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.", + value = "-1768732546" + ) + )] + CartridgeOreScanner = -1768732546i32, + #[strum(serialize = "ItemPipeVolumePump")] + #[strum( + props( + name = "Kit (Volume Pump)", + desc = "This kit creates a Volume Pump.", + value = "-1766301997" + ) + )] + ItemPipeVolumePump = -1766301997i32, + #[strum(serialize = "StructureGrowLight")] + #[strum( + props( + name = "Grow Light", + desc = "Agrizero's leading hydroponic lighting system, the GrowUp UV light supplements sunshine in low light or sun-distant conditions. The unit adds growability over the space of a grid, so requires proximate placement to work. ", + value = "-1758710260" + ) + )] + StructureGrowLight = -1758710260i32, + #[strum(serialize = "ItemHardSuit")] + #[strum( + props( + name = "Hardsuit", + desc = "Connects to Logic Transmitter", + value = "-1758310454" + ) + )] + ItemHardSuit = -1758310454i32, + #[strum(serialize = "StructureRailing")] + #[strum( + props( + name = "Railing Industrial (Type 1)", + desc = "\"Safety third.\"", + value = "-1756913871" + ) + )] + StructureRailing = -1756913871i32, + #[strum(serialize = "StructureCableJunction4Burnt")] + #[strum( + props(name = "Burnt Cable (4-Way Junction)", desc = "", value = "-1756896811") + )] + StructureCableJunction4Burnt = -1756896811i32, + #[strum(serialize = "ItemCreditCard")] + #[strum(props(name = "Credit Card", desc = "", value = "-1756772618"))] + ItemCreditCard = -1756772618i32, + #[strum(serialize = "ItemKitBlastDoor")] + #[strum(props(name = "Kit (Blast Door)", desc = "", value = "-1755116240"))] + ItemKitBlastDoor = -1755116240i32, + #[strum(serialize = "ItemKitAutolathe")] + #[strum(props(name = "Kit (Autolathe)", desc = "", value = "-1753893214"))] + ItemKitAutolathe = -1753893214i32, + #[strum(serialize = "ItemKitPassiveLargeRadiatorGas")] + #[strum(props(name = "Kit (Medium Radiator)", desc = "", value = "-1752768283"))] + ItemKitPassiveLargeRadiatorGas = -1752768283i32, + #[strum(serialize = "StructurePictureFrameThinMountLandscapeSmall")] + #[strum( + props( + name = "Picture Frame Thin Landscape Small", + desc = "", + value = "-1752493889" + ) + )] + StructurePictureFrameThinMountLandscapeSmall = -1752493889i32, + #[strum(serialize = "ItemPipeHeater")] + #[strum( + props( + name = "Pipe Heater Kit (Gas)", + desc = "Creates a Pipe Heater (Gas).", + value = "-1751627006" + ) + )] + ItemPipeHeater = -1751627006i32, + #[strum(serialize = "ItemPureIceLiquidPollutant")] + #[strum( + props( + name = "Pure Ice Liquid Pollutant", + desc = "A frozen chunk of pure Liquid Pollutant", + value = "-1748926678" + ) + )] + ItemPureIceLiquidPollutant = -1748926678i32, + #[strum(serialize = "ItemKitDrinkingFountain")] + #[strum(props(name = "Kit (Drinking Fountain)", desc = "", value = "-1743663875"))] + ItemKitDrinkingFountain = -1743663875i32, + #[strum(serialize = "DynamicGasCanisterEmpty")] + #[strum( + props( + name = "Portable Gas Tank", + desc = "Portable gas tanks store gas. To refill one, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere.", + value = "-1741267161" + ) + )] + DynamicGasCanisterEmpty = -1741267161i32, + #[strum(serialize = "ItemSpaceCleaner")] + #[strum( + props( + name = "Space Cleaner", + desc = "There was a time when humanity really wanted to keep space clean. That time has passed.", + value = "-1737666461" + ) + )] + ItemSpaceCleaner = -1737666461i32, + #[strum(serialize = "ItemAuthoringToolRocketNetwork")] + #[strum( + props( + name = "", + desc = "", + value = "-1731627004" + ) + )] + ItemAuthoringToolRocketNetwork = -1731627004i32, + #[strum(serialize = "ItemSensorProcessingUnitMesonScanner")] + #[strum( + props( + name = "Sensor Processing Unit (T-Ray Scanner)", + desc = "The T-Ray Scanner Sensor Processing Unit can be inserted into the Sensor Lenses to show an overlay of pipes and cables. This can be useful when building behind walls or other structures.", + value = "-1730464583" + ) + )] + ItemSensorProcessingUnitMesonScanner = -1730464583i32, + #[strum(serialize = "ItemWaterWallCooler")] + #[strum(props(name = "Kit (Liquid Wall Cooler)", desc = "", value = "-1721846327"))] + ItemWaterWallCooler = -1721846327i32, + #[strum(serialize = "ItemPureIceLiquidCarbonDioxide")] + #[strum( + props( + name = "Pure Ice Liquid Carbon Dioxide", + desc = "A frozen chunk of pure Liquid Carbon Dioxide", + value = "-1715945725" + ) + )] + ItemPureIceLiquidCarbonDioxide = -1715945725i32, + #[strum(serialize = "AccessCardRed")] + #[strum(props(name = "Access Card (Red)", desc = "", value = "-1713748313"))] + AccessCardRed = -1713748313i32, + #[strum(serialize = "DynamicGasCanisterAir")] + #[strum( + props( + name = "Portable Gas Tank (Air)", + desc = "Portable gas tanks do one thing: store gas. But there's lots you can do with them. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere. They also attach to rovers and rockets. Alternatively, kick it over and practice barrel rolling. The possibilities are endless.", + value = "-1713611165" + ) + )] + DynamicGasCanisterAir = -1713611165i32, + #[strum(serialize = "StructureMotionSensor")] + #[strum( + props( + name = "Motion Sensor", + desc = "Originally developed to monitor dance marathons, the motion sensor can also be connected to Logic systems for security purposes, automatic lighting, doors and various other applications.\nThe sensor activates whenever a player enters the grid it is placed on.", + value = "-1713470563" + ) + )] + StructureMotionSensor = -1713470563i32, + #[strum(serialize = "ItemCookedPowderedEggs")] + #[strum( + props( + name = "Powdered Eggs", + desc = "A high-nutrient cooked food, which can be canned.", + value = "-1712264413" + ) + )] + ItemCookedPowderedEggs = -1712264413i32, + #[strum(serialize = "ItemGasCanisterNitrousOxide")] + #[strum(props(name = "Gas Canister (Sleeping)", desc = "", value = "-1712153401"))] + ItemGasCanisterNitrousOxide = -1712153401i32, + #[strum(serialize = "ItemKitHeatExchanger")] + #[strum(props(name = "Kit Heat Exchanger", desc = "", value = "-1710540039"))] + ItemKitHeatExchanger = -1710540039i32, + #[strum(serialize = "ItemPureIceNitrogen")] + #[strum( + props( + name = "Pure Ice Nitrogen", + desc = "A frozen chunk of pure Nitrogen", + value = "-1708395413" + ) + )] + ItemPureIceNitrogen = -1708395413i32, + #[strum(serialize = "ItemKitPipeRadiatorLiquid")] + #[strum( + props(name = "Kit (Pipe Radiator Liquid)", desc = "", value = "-1697302609") + )] + ItemKitPipeRadiatorLiquid = -1697302609i32, + #[strum(serialize = "StructureInLineTankGas1x1")] + #[strum( + props( + name = "In-Line Tank Small Gas", + desc = "A small expansion tank that increases the volume of a pipe network.", + value = "-1693382705" + ) + )] + StructureInLineTankGas1X1 = -1693382705i32, + #[strum(serialize = "SeedBag_Rice")] + #[strum( + props( + name = "Rice Seeds", + desc = "Grow some Rice.", + value = "-1691151239" + ) + )] + SeedBagRice = -1691151239i32, + #[strum(serialize = "StructurePictureFrameThickPortraitLarge")] + #[strum( + props( + name = "Picture Frame Thick Portrait Large", + desc = "", + value = "-1686949570" + ) + )] + StructurePictureFrameThickPortraitLarge = -1686949570i32, + #[strum(serialize = "ApplianceDeskLampLeft")] + #[strum(props(name = "Appliance Desk Lamp Left", desc = "", value = "-1683849799"))] + ApplianceDeskLampLeft = -1683849799i32, + #[strum(serialize = "ItemWreckageWallCooler1")] + #[strum(props(name = "Wreckage", desc = "", value = "-1682930158"))] + ItemWreckageWallCooler1 = -1682930158i32, + #[strum(serialize = "StructureGasUmbilicalFemale")] + #[strum(props(name = "Umbilical Socket (Gas)", desc = "", value = "-1680477930"))] + StructureGasUmbilicalFemale = -1680477930i32, + #[strum(serialize = "ItemGasFilterWaterInfinite")] + #[strum( + props( + name = "Catalytic Filter (Water)", + desc = "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + value = "-1678456554" + ) + )] + ItemGasFilterWaterInfinite = -1678456554i32, + #[strum(serialize = "StructurePassthroughHeatExchangerGasToGas")] + #[strum( + props( + name = "CounterFlow Heat Exchanger - Gas + Gas", + desc = "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", + value = "-1674187440" + ) + )] + StructurePassthroughHeatExchangerGasToGas = -1674187440i32, + #[strum(serialize = "StructureAutomatedOven")] + #[strum(props(name = "Automated Oven", desc = "", value = "-1672404896"))] + StructureAutomatedOven = -1672404896i32, + #[strum(serialize = "StructureElectrolyzer")] + #[strum( + props( + name = "Electrolyzer", + desc = "The Norsec-designed Electrolyzer splits Water into hydrogen and Oxygen. Employing unknown proprietary technology, the device uses water's latent heat as the energy to drive the electrosis process. If there is a downside to this near-miraculous fission, it's that the device is limited by the quantity of power available, which is used to maintain the temperature output. In other words, the machine works best with hot gas.", + value = "-1668992663" + ) + )] + StructureElectrolyzer = -1668992663i32, + #[strum(serialize = "MonsterEgg")] + #[strum( + props( + name = "", + desc = "", + value = "-1667675295" + ) + )] + MonsterEgg = -1667675295i32, + #[strum(serialize = "ItemMiningDrillHeavy")] + #[strum( + props( + name = "Mining Drill (Heavy)", + desc = "Sometimes mining trips require something a little bigger to bring home the goods. This scaled up version of the Recurso 'Topo' design Mining Drill can literally move mountains. The heavy mining drill will remove more ground and mine ore more quickly than the standard mining drill. The heavy mining drill is also resilient to temperature and pressure. So no matter what planet or extreme weather conditions may be present, the Recurso heavy mining drill will get the job done.", + value = "-1663349918" + ) + )] + ItemMiningDrillHeavy = -1663349918i32, + #[strum(serialize = "ItemAstroloySheets")] + #[strum(props(name = "Astroloy Sheets", desc = "", value = "-1662476145"))] + ItemAstroloySheets = -1662476145i32, + #[strum(serialize = "ItemWreckageTurbineGenerator1")] + #[strum(props(name = "Wreckage", desc = "", value = "-1662394403"))] + ItemWreckageTurbineGenerator1 = -1662394403i32, + #[strum(serialize = "ItemMiningBackPack")] + #[strum(props(name = "Mining Backpack", desc = "", value = "-1650383245"))] + ItemMiningBackPack = -1650383245i32, + #[strum(serialize = "ItemSprayCanGrey")] + #[strum( + props( + name = "Spray Paint (Grey)", + desc = "Arguably the most popular color in the universe, grey was invented so designers had something to do.", + value = "-1645266981" + ) + )] + ItemSprayCanGrey = -1645266981i32, + #[strum(serialize = "ItemReagentMix")] + #[strum( + props( + name = "Reagent Mix", + desc = "Reagent mix is pure potential. A slurry of undifferentiated ores, it is output by the Recycler and can be fed into the Centrifuge to separate and recover the individual materials. Reagent mix is also output by the Furnace when the current contents are ejected without smelting a specific ingot.", + value = "-1641500434" + ) + )] + ItemReagentMix = -1641500434i32, + #[strum(serialize = "CartridgeAccessController")] + #[strum( + props(name = "Cartridge (Access Controller)", desc = "", value = "-1634532552") + )] + CartridgeAccessController = -1634532552i32, + #[strum(serialize = "StructureRecycler")] + #[strum( + props( + name = "Recycler", + desc = "A device for collecting the raw resources while destroying an item. Produces Reagent Mix containing packages of reagents. Pass these through the Centrifuge to gain back the source ores. Plants and organic matter passed through will create Biomass, which when passed through the Centrifuge will produce Biomass.", + value = "-1633947337" + ) + )] + StructureRecycler = -1633947337i32, + #[strum(serialize = "StructureSmallTableBacklessDouble")] + #[strum( + props(name = "Small (Table Backless Double)", desc = "", value = "-1633000411") + )] + StructureSmallTableBacklessDouble = -1633000411i32, + #[strum(serialize = "ItemKitRocketGasFuelTank")] + #[strum( + props(name = "Kit (Rocket Gas Fuel Tank)", desc = "", value = "-1629347579") + )] + ItemKitRocketGasFuelTank = -1629347579i32, + #[strum(serialize = "StructureStairwellFrontPassthrough")] + #[strum( + props(name = "Stairwell (Front Passthrough)", desc = "", value = "-1625452928") + )] + StructureStairwellFrontPassthrough = -1625452928i32, + #[strum(serialize = "StructureCableJunctionBurnt")] + #[strum(props(name = "Burnt Cable (Junction)", desc = "", value = "-1620686196"))] + StructureCableJunctionBurnt = -1620686196i32, + #[strum(serialize = "ItemKitPipe")] + #[strum(props(name = "Kit (Pipe)", desc = "", value = "-1619793705"))] + ItemKitPipe = -1619793705i32, + #[strum(serialize = "ItemPureIce")] + #[strum( + props( + name = "Pure Ice Water", + desc = "A frozen chunk of pure Water", + value = "-1616308158" + ) + )] + ItemPureIce = -1616308158i32, + #[strum(serialize = "StructureBasketHoop")] + #[strum(props(name = "Basket Hoop", desc = "", value = "-1613497288"))] + StructureBasketHoop = -1613497288i32, + #[strum(serialize = "StructureWallPaddedThinNoBorder")] + #[strum( + props(name = "Wall (Padded Thin No Border)", desc = "", value = "-1611559100") + )] + StructureWallPaddedThinNoBorder = -1611559100i32, + #[strum(serialize = "StructureTankBig")] + #[strum(props(name = "Large Tank", desc = "", value = "-1606848156"))] + StructureTankBig = -1606848156i32, + #[strum(serialize = "StructureInsulatedTankConnectorLiquid")] + #[strum( + props(name = "Insulated Tank Connector Liquid", desc = "", value = "-1602030414") + )] + StructureInsulatedTankConnectorLiquid = -1602030414i32, + #[strum(serialize = "ItemKitTurbineGenerator")] + #[strum(props(name = "Kit (Turbine Generator)", desc = "", value = "-1590715731"))] + ItemKitTurbineGenerator = -1590715731i32, + #[strum(serialize = "ItemKitCrateMkII")] + #[strum(props(name = "Kit (Crate Mk II)", desc = "", value = "-1585956426"))] + ItemKitCrateMkIi = -1585956426i32, + #[strum(serialize = "StructureRefrigeratedVendingMachine")] + #[strum( + props( + name = "Refrigerated Vending Machine", + desc = "The refrigerated OmniKool vending machine is an advanced version of the standard Vending Machine, which maintains an optimum pressure and constant temperature of -130 degrees C, to prevent food spoilage. It can hold up to 100 stacks.\nThe OmniKool also has an in-built Stacker, allowing players to set the stack sizes of any items ADDED to the device. The unit's default stack size is 50.\nNOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. ", + value = "-1577831321" + ) + )] + StructureRefrigeratedVendingMachine = -1577831321i32, + #[strum(serialize = "ItemFlowerBlue")] + #[strum(props(name = "Flower (Blue)", desc = "", value = "-1573623434"))] + ItemFlowerBlue = -1573623434i32, + #[strum(serialize = "ItemWallCooler")] + #[strum( + props( + name = "Kit (Wall Cooler)", + desc = "This kit creates a Wall Cooler.", + value = "-1567752627" + ) + )] + ItemWallCooler = -1567752627i32, + #[strum(serialize = "StructureLarreDockCargo")] + #[strum(props(name = "LARrE Dock (Cargo)", desc = "", value = "-1555459562"))] + StructureLarreDockCargo = -1555459562i32, + #[strum(serialize = "StructureSolarPanel45")] + #[strum( + props( + name = "Solar Panel (Angled)", + desc = "Sinotai basic solar panels generate power from sunlight, sitting at 45 degrees to the ground. Their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", + value = "-1554349863" + ) + )] + StructureSolarPanel45 = -1554349863i32, + #[strum(serialize = "ItemGasCanisterPollutants")] + #[strum(props(name = "Canister (Pollutants)", desc = "", value = "-1552586384"))] + ItemGasCanisterPollutants = -1552586384i32, + #[strum(serialize = "CartridgeAtmosAnalyser")] + #[strum( + props( + name = "Cartridge (Atmos Analyzer)", + desc = "The Lorenz atmos analyzer is a multi-functional mass-spectrometer designed by ExMin for use with the OreCore Handheld Tablet. It displays the pressure, concentration and molar quantity of gas in rooms, tanks, or pipe networks.", + value = "-1550278665" + ) + )] + CartridgeAtmosAnalyser = -1550278665i32, + #[strum(serialize = "StructureWallPaddedArchLightsFittings")] + #[strum( + props( + name = "Wall (Padded Arch Lights Fittings)", + desc = "", + value = "-1546743960" + ) + )] + StructureWallPaddedArchLightsFittings = -1546743960i32, + #[strum(serialize = "StructureSolarPanelDualReinforced")] + #[strum( + props( + name = "Solar Panel (Heavy Dual)", + desc = "This solar panel is resistant to storm damage.", + value = "-1545574413" + ) + )] + StructureSolarPanelDualReinforced = -1545574413i32, + #[strum(serialize = "StructureCableCorner4")] + #[strum(props(name = "Cable (4-Way Corner)", desc = "", value = "-1542172466"))] + StructureCableCorner4 = -1542172466i32, + #[strum(serialize = "StructurePressurePlateSmall")] + #[strum(props(name = "Trigger Plate (Small)", desc = "", value = "-1536471028"))] + StructurePressurePlateSmall = -1536471028i32, + #[strum(serialize = "StructureFlashingLight")] + #[strum( + props( + name = "Flashing Light", + desc = "Few objects or ideas are as clearly and transparently named as the Flashing Light, although fans of scrupulous accuracy have been known to refer to it by its full, official title: 'Default Yellow Flashing Light'.", + value = "-1535893860" + ) + )] + StructureFlashingLight = -1535893860i32, + #[strum(serialize = "StructureFuselageTypeA2")] + #[strum(props(name = "Fuselage (Type A2)", desc = "", value = "-1533287054"))] + StructureFuselageTypeA2 = -1533287054i32, + #[strum(serialize = "ItemPipeDigitalValve")] + #[strum( + props( + name = "Kit (Digital Valve)", + desc = "This kit creates a Digital Valve.", + value = "-1532448832" + ) + )] + ItemPipeDigitalValve = -1532448832i32, + #[strum(serialize = "StructureCableJunctionH5")] + #[strum( + props(name = "Heavy Cable (5-Way Junction)", desc = "", value = "-1530571426") + )] + StructureCableJunctionH5 = -1530571426i32, + #[strum(serialize = "StructureFlagSmall")] + #[strum(props(name = "Small Flag", desc = "", value = "-1529819532"))] + StructureFlagSmall = -1529819532i32, + #[strum(serialize = "StopWatch")] + #[strum(props(name = "Stop Watch", desc = "", value = "-1527229051"))] + StopWatch = -1527229051i32, + #[strum(serialize = "ItemUraniumOre")] + #[strum( + props( + name = "Ore (Uranium)", + desc = "In 1934, Enrico Fermi noticed that bombarding uranium with neutrons produced a burst of beta rays, and a new material. This process was named 'nuclear fission', and resulted in cheap energy, the Cold War, and countless thousand deaths. While reasonably common throughout the Solar System, Stationeers are wary of the material.", + value = "-1516581844" + ) + )] + ItemUraniumOre = -1516581844i32, + #[strum(serialize = "Landingpad_ThreshholdPiece")] + #[strum(props(name = "Landingpad Threshhold", desc = "", value = "-1514298582"))] + LandingpadThreshholdPiece = -1514298582i32, + #[strum(serialize = "ItemFlowerGreen")] + #[strum(props(name = "Flower (Green)", desc = "", value = "-1513337058"))] + ItemFlowerGreen = -1513337058i32, + #[strum(serialize = "StructureCompositeCladdingAngled")] + #[strum( + props(name = "Composite Cladding (Angled)", desc = "", value = "-1513030150") + )] + StructureCompositeCladdingAngled = -1513030150i32, + #[strum(serialize = "StructureChairThickSingle")] + #[strum(props(name = "Chair (Thick Single)", desc = "", value = "-1510009608"))] + StructureChairThickSingle = -1510009608i32, + #[strum(serialize = "StructureInsulatedPipeCrossJunction5")] + #[strum( + props( + name = "Insulated Pipe (5-Way Junction)", + desc = "Insulated pipes greatly reduce heat loss from gases stored in them.", + value = "-1505147578" + ) + )] + StructureInsulatedPipeCrossJunction5 = -1505147578i32, + #[strum(serialize = "ItemNitrice")] + #[strum( + props( + name = "Ice (Nitrice)", + desc = "Nitrice is the nickname given to solid Nitrogen Ice, and found on many planets and moons in the Solar System. Given the inert nature of the Nitrogen it produces, the ice is useful when making breathable atmospheres with low flammability.\n\nHighly sensitive to temperature, nitrice will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small.", + value = "-1499471529" + ) + )] + ItemNitrice = -1499471529i32, + #[strum(serialize = "StructureCargoStorageSmall")] + #[strum(props(name = "Cargo Storage (Small)", desc = "", value = "-1493672123"))] + StructureCargoStorageSmall = -1493672123i32, + #[strum(serialize = "StructureLogicCompare")] + #[strum( + props( + name = "Logic Compare", + desc = "0.Equals\n1.Greater\n2.Less\n3.NotEquals", + value = "-1489728908" + ) + )] + StructureLogicCompare = -1489728908i32, + #[strum(serialize = "Landingpad_TaxiPieceStraight")] + #[strum(props(name = "Landingpad Taxi Straight", desc = "", value = "-1477941080"))] + LandingpadTaxiPieceStraight = -1477941080i32, + #[strum(serialize = "StructurePassthroughHeatExchangerLiquidToLiquid")] + #[strum( + props( + name = "CounterFlow Heat Exchanger - Liquid + Liquid", + desc = "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exchange of temperatures.", + value = "-1472829583" + ) + )] + StructurePassthroughHeatExchangerLiquidToLiquid = -1472829583i32, + #[strum(serialize = "ItemKitCompositeCladding")] + #[strum(props(name = "Kit (Cladding)", desc = "", value = "-1470820996"))] + ItemKitCompositeCladding = -1470820996i32, + #[strum(serialize = "StructureChuteInlet")] + #[strum( + props( + name = "Chute Inlet", + desc = "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute inlet is an aperture by which items can be introduced to import/export networks. Note that its origins in zero-gravity mining means chute inlets are unpowered and permanently open, rather than interactable, allowing objects to be thrown in. They can be connected to logic systems to monitor throughput.", + value = "-1469588766" + ) + )] + StructureChuteInlet = -1469588766i32, + #[strum(serialize = "StructureSleeper")] + #[strum(props(name = "Sleeper", desc = "", value = "-1467449329"))] + StructureSleeper = -1467449329i32, + #[strum(serialize = "CartridgeElectronicReader")] + #[strum(props(name = "Cartridge (eReader)", desc = "", value = "-1462180176"))] + CartridgeElectronicReader = -1462180176i32, + #[strum(serialize = "StructurePictureFrameThickMountPortraitLarge")] + #[strum( + props( + name = "Picture Frame Thick Mount Portrait Large", + desc = "", + value = "-1459641358" + ) + )] + StructurePictureFrameThickMountPortraitLarge = -1459641358i32, + #[strum(serialize = "ItemSteelFrames")] + #[strum( + props( + name = "Steel Frames", + desc = "An advanced and stronger version of Iron Frames, steel frames are placed by right-clicking. To complete construction, use Steel Sheets and a Welding Torch in your active hand.", + value = "-1448105779" + ) + )] + ItemSteelFrames = -1448105779i32, + #[strum(serialize = "StructureChuteFlipFlopSplitter")] + #[strum( + props( + name = "Chute Flip Flop Splitter", + desc = "A chute that toggles between two outputs", + value = "-1446854725" + ) + )] + StructureChuteFlipFlopSplitter = -1446854725i32, + #[strum(serialize = "StructurePictureFrameThickLandscapeLarge")] + #[strum( + props( + name = "Picture Frame Thick Landscape Large", + desc = "", + value = "-1434523206" + ) + )] + StructurePictureFrameThickLandscapeLarge = -1434523206i32, + #[strum(serialize = "ItemKitAdvancedComposter")] + #[strum(props(name = "Kit (Advanced Composter)", desc = "", value = "-1431998347"))] + ItemKitAdvancedComposter = -1431998347i32, + #[strum(serialize = "StructureLiquidTankBigInsulated")] + #[strum(props(name = "Insulated Liquid Tank Big", desc = "", value = "-1430440215"))] + StructureLiquidTankBigInsulated = -1430440215i32, + #[strum(serialize = "StructureEvaporationChamber")] + #[strum( + props( + name = "Evaporation Chamber", + desc = "A device for safely evaporating liquids into gasses. Liquids and Gasses will both exist safely inside the device. Lowering the pressure target of the in-built back pressure regulator using the setting wheel will change the boiling temperature of liquids inside.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Evaporation Chamber. \n Paired with Condensation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", + value = "-1429782576" + ) + )] + StructureEvaporationChamber = -1429782576i32, + #[strum(serialize = "StructureWallGeometryTMirrored")] + #[strum( + props(name = "Wall (Geometry T Mirrored)", desc = "", value = "-1427845483") + )] + StructureWallGeometryTMirrored = -1427845483i32, + #[strum(serialize = "KitchenTableShort")] + #[strum(props(name = "Kitchen Table (Short)", desc = "", value = "-1427415566"))] + KitchenTableShort = -1427415566i32, + #[strum(serialize = "StructureChairRectangleSingle")] + #[strum(props(name = "Chair (Rectangle Single)", desc = "", value = "-1425428917"))] + StructureChairRectangleSingle = -1425428917i32, + #[strum(serialize = "StructureTransformer")] + #[strum( + props( + name = "Transformer (Large)", + desc = "The large Norsec transformer is a critical component of extended electrical networks, controlling the maximum power that will flow down a cable. To prevent overloading, output can be set from 0 to 50,000W. \nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", + value = "-1423212473" + ) + )] + StructureTransformer = -1423212473i32, + #[strum(serialize = "StructurePictureFrameThinLandscapeLarge")] + #[strum( + props( + name = "Picture Frame Thin Landscape Large", + desc = "", + value = "-1418288625" + ) + )] + StructurePictureFrameThinLandscapeLarge = -1418288625i32, + #[strum(serialize = "StructureCompositeCladdingAngledCornerInnerLong")] + #[strum( + props( + name = "Composite Cladding (Angled Corner Inner Long)", + desc = "", + value = "-1417912632" + ) + )] + StructureCompositeCladdingAngledCornerInnerLong = -1417912632i32, + #[strum(serialize = "ItemPlantEndothermic_Genepool2")] + #[strum( + props( + name = "Winterspawn (Beta variant)", + desc = "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings when supplied with sufficient Nitrogen. The beta variant has a peak cooling and electrolysis capacity of 150Watts and is most efficient operating in air temperatures of 14 to 24 Degrees Celsius.", + value = "-1414203269" + ) + )] + ItemPlantEndothermicGenepool2 = -1414203269i32, + #[strum(serialize = "ItemFlowerOrange")] + #[strum(props(name = "Flower (Orange)", desc = "", value = "-1411986716"))] + ItemFlowerOrange = -1411986716i32, + #[strum(serialize = "AccessCardBlue")] + #[strum(props(name = "Access Card (Blue)", desc = "", value = "-1411327657"))] + AccessCardBlue = -1411327657i32, + #[strum(serialize = "StructureWallSmallPanelsOpen")] + #[strum(props(name = "Wall (Small Panels Open)", desc = "", value = "-1407480603"))] + StructureWallSmallPanelsOpen = -1407480603i32, + #[strum(serialize = "ItemNickelIngot")] + #[strum(props(name = "Ingot (Nickel)", desc = "", value = "-1406385572"))] + ItemNickelIngot = -1406385572i32, + #[strum(serialize = "StructurePipeCrossJunction")] + #[strum( + props( + name = "Pipe (Cross Junction)", + desc = "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.", + value = "-1405295588" + ) + )] + StructurePipeCrossJunction = -1405295588i32, + #[strum(serialize = "StructureCableJunction6")] + #[strum( + props( + name = "Cable (6-Way Junction)", + desc = "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer duty - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", + value = "-1404690610" + ) + )] + StructureCableJunction6 = -1404690610i32, + #[strum(serialize = "ItemPassiveVentInsulated")] + #[strum( + props(name = "Kit (Insulated Passive Vent)", desc = "", value = "-1397583760") + )] + ItemPassiveVentInsulated = -1397583760i32, + #[strum(serialize = "ItemKitChairs")] + #[strum(props(name = "Kit (Chairs)", desc = "", value = "-1394008073"))] + ItemKitChairs = -1394008073i32, + #[strum(serialize = "StructureBatteryLarge")] + #[strum( + props( + name = "Station Battery (Large)", + desc = "Providing even better large-scale, reliable power storage than the {THING;StructureBattery}, the Sinotai 'Da Dianchi' large station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 9000001 watts of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large). ", + value = "-1388288459" + ) + )] + StructureBatteryLarge = -1388288459i32, + #[strum(serialize = "ItemGasFilterNitrogenL")] + #[strum(props(name = "Heavy Filter (Nitrogen)", desc = "", value = "-1387439451"))] + ItemGasFilterNitrogenL = -1387439451i32, + #[strum(serialize = "KitchenTableTall")] + #[strum(props(name = "Kitchen Table (Tall)", desc = "", value = "-1386237782"))] + KitchenTableTall = -1386237782i32, + #[strum(serialize = "StructureCapsuleTankGas")] + #[strum(props(name = "Gas Capsule Tank Small", desc = "", value = "-1385712131"))] + StructureCapsuleTankGas = -1385712131i32, + #[strum(serialize = "StructureCryoTubeVertical")] + #[strum( + props( + name = "Cryo Tube Vertical", + desc = "The vertical variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", + value = "-1381321828" + ) + )] + StructureCryoTubeVertical = -1381321828i32, + #[strum(serialize = "StructureWaterWallCooler")] + #[strum(props(name = "Liquid Wall Cooler", desc = "", value = "-1369060582"))] + StructureWaterWallCooler = -1369060582i32, + #[strum(serialize = "ItemKitTables")] + #[strum(props(name = "Kit (Tables)", desc = "", value = "-1361598922"))] + ItemKitTables = -1361598922i32, + #[strum(serialize = "StructureLargeHangerDoor")] + #[strum( + props( + name = "Large Hangar Door", + desc = "1 x 3 modular door piece for building hangar doors.", + value = "-1351081801" + ) + )] + StructureLargeHangerDoor = -1351081801i32, + #[strum(serialize = "ItemGoldOre")] + #[strum( + props( + name = "Ore (Gold)", + desc = "Surprisingly common throughout the Solar System, Gold is thought to originate in the heart of supernovas, gathering as dust in the early stages of solar formation, then incorporating into the slowly accreting planetary bodies. Now a prized element in Stationeer construction, Gold is valued not for its beauty, but its reliability: inert, durable, conductive and highly stable, gold's strength is that it does nothing.", + value = "-1348105509" + ) + )] + ItemGoldOre = -1348105509i32, + #[strum(serialize = "ItemCannedMushroom")] + #[strum( + props( + name = "Canned Mushroom", + desc = "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Mushroom and a Empty Can, delicious mushroom soup is fairly high in nutrition, and does not decay.", + value = "-1344601965" + ) + )] + ItemCannedMushroom = -1344601965i32, + #[strum(serialize = "AppliancePaintMixer")] + #[strum(props(name = "Paint Mixer", desc = "", value = "-1339716113"))] + AppliancePaintMixer = -1339716113i32, + #[strum(serialize = "AccessCardGray")] + #[strum(props(name = "Access Card (Gray)", desc = "", value = "-1339479035"))] + AccessCardGray = -1339479035i32, + #[strum(serialize = "StructureChuteDigitalValveRight")] + #[strum( + props( + name = "Chute Digital Valve Right", + desc = "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", + value = "-1337091041" + ) + )] + StructureChuteDigitalValveRight = -1337091041i32, + #[strum(serialize = "ItemSugarCane")] + #[strum(props(name = "Sugarcane", desc = "", value = "-1335056202"))] + ItemSugarCane = -1335056202i32, + #[strum(serialize = "ItemKitSmallDirectHeatExchanger")] + #[strum( + props( + name = "Kit (Small Direct Heat Exchanger)", + desc = "", + value = "-1332682164" + ) + )] + ItemKitSmallDirectHeatExchanger = -1332682164i32, + #[strum(serialize = "AccessCardBlack")] + #[strum(props(name = "Access Card (Black)", desc = "", value = "-1330388999"))] + AccessCardBlack = -1330388999i32, + #[strum(serialize = "StructureLogicWriter")] + #[strum(props(name = "Logic Writer", desc = "", value = "-1326019434"))] + StructureLogicWriter = -1326019434i32, + #[strum(serialize = "StructureRoboticArmRailCorner")] + #[strum(props(name = "Linear Rail Corner", desc = "", value = "-1323992709"))] + StructureRoboticArmRailCorner = -1323992709i32, + #[strum(serialize = "StructureLogicWriterSwitch")] + #[strum(props(name = "Logic Writer Switch", desc = "", value = "-1321250424"))] + StructureLogicWriterSwitch = -1321250424i32, + #[strum(serialize = "StructureWallIron04")] + #[strum(props(name = "Iron Wall (Type 4)", desc = "", value = "-1309433134"))] + StructureWallIron04 = -1309433134i32, + #[strum(serialize = "ItemPureIceLiquidVolatiles")] + #[strum( + props( + name = "Pure Ice Liquid Volatiles", + desc = "A frozen chunk of pure Liquid Volatiles", + value = "-1306628937" + ) + )] + ItemPureIceLiquidVolatiles = -1306628937i32, + #[strum(serialize = "StructureWallLightBattery")] + #[strum(props(name = "Wall Light (Battery)", desc = "", value = "-1306415132"))] + StructureWallLightBattery = -1306415132i32, + #[strum(serialize = "AppliancePlantGeneticAnalyzer")] + #[strum( + props( + name = "Plant Genetic Analyzer", + desc = "The Genetic Analyzer can be used to process samples from the Plant Sampler. Once processed, the genetic information of the sampled plant can be viewed by clicking on the search button.\n\nIndividual Gene Value Widgets: \nMost gene values will appear as a sliding bar between a minimum value on the left and a maximum value on the right. The actual value of the gene is in the middle of the bar, in orange.\n\nMultiple Gene Value Widgets: \nFor temperature and pressure ranges, four genes appear on the same widget. The orange values underneath the bar are the minimum and maximum thresholds for growth. Outside of this range, the plant will stop growing and eventually die. The blue values underneath the bar are the minimum and maximum thresholds for ideal growth. Inside of this range, the plant will grow at maximum speed. The white values above the bar are the minimum and maximum achievable values for the growth threshold.", + value = "-1303038067" + ) + )] + AppliancePlantGeneticAnalyzer = -1303038067i32, + #[strum(serialize = "ItemIronIngot")] + #[strum( + props( + name = "Ingot (Iron)", + desc = "The most basic unit of construction available to Stationeer-kind, iron ingots are created by smelting Ore (Iron) in the Furnace and Arc Furnace, and used to create a variety of items.", + value = "-1301215609" + ) + )] + ItemIronIngot = -1301215609i32, + #[strum(serialize = "StructureSleeperVertical")] + #[strum( + props( + name = "Sleeper Vertical", + desc = "The vertical variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", + value = "-1300059018" + ) + )] + StructureSleeperVertical = -1300059018i32, + #[strum(serialize = "Landingpad_2x2CenterPiece01")] + #[strum( + props( + name = "Landingpad 2x2 Center Piece", + desc = "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors", + value = "-1295222317" + ) + )] + Landingpad2X2CenterPiece01 = -1295222317i32, + #[strum(serialize = "SeedBag_Corn")] + #[strum( + props( + name = "Corn Seeds", + desc = "Grow a Corn.", + value = "-1290755415" + ) + )] + SeedBagCorn = -1290755415i32, + #[strum(serialize = "StructureDigitalValve")] + #[strum( + props( + name = "Digital Valve", + desc = "The digital valve allows Stationeers to create logic-controlled valves and pipe networks.", + value = "-1280984102" + ) + )] + StructureDigitalValve = -1280984102i32, + #[strum(serialize = "StructureTankConnector")] + #[strum( + props( + name = "Tank Connector", + desc = "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.", + value = "-1276379454" + ) + )] + StructureTankConnector = -1276379454i32, + #[strum(serialize = "ItemSuitModCryogenicUpgrade")] + #[strum( + props( + name = "Cryogenic Suit Upgrade", + desc = "Enables suits with basic cooling functionality to work with cryogenic liquid.", + value = "-1274308304" + ) + )] + ItemSuitModCryogenicUpgrade = -1274308304i32, + #[strum(serialize = "ItemKitLandingPadWaypoint")] + #[strum(props(name = "Kit (Landing Pad Runway)", desc = "", value = "-1267511065"))] + ItemKitLandingPadWaypoint = -1267511065i32, + #[strum(serialize = "DynamicGasTankAdvancedOxygen")] + #[strum( + props( + name = "Portable Gas Tank Mk II (Oxygen)", + desc = "0.Mode0\n1.Mode1", + value = "-1264455519" + ) + )] + DynamicGasTankAdvancedOxygen = -1264455519i32, + #[strum(serialize = "ItemBasketBall")] + #[strum(props(name = "Basket Ball", desc = "", value = "-1262580790"))] + ItemBasketBall = -1262580790i32, + #[strum(serialize = "ItemSpacepack")] + #[strum( + props( + name = "Spacepack", + desc = "The basic CHAC spacepack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Jetpack Basic or Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", + value = "-1260618380" + ) + )] + ItemSpacepack = -1260618380i32, + #[strum(serialize = "ItemKitRocketDatalink")] + #[strum(props(name = "Kit (Rocket Datalink)", desc = "", value = "-1256996603"))] + ItemKitRocketDatalink = -1256996603i32, + #[strum(serialize = "StructureGasSensor")] + #[strum( + props( + name = "Gas Sensor", + desc = "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.", + value = "-1252983604" + ) + )] + StructureGasSensor = -1252983604i32, + #[strum(serialize = "ItemPureIceCarbonDioxide")] + #[strum( + props( + name = "Pure Ice Carbon Dioxide", + desc = "A frozen chunk of pure Carbon Dioxide", + value = "-1251009404" + ) + )] + ItemPureIceCarbonDioxide = -1251009404i32, + #[strum(serialize = "ItemKitTurboVolumePump")] + #[strum( + props(name = "Kit (Turbo Volume Pump - Gas)", desc = "", value = "-1248429712") + )] + ItemKitTurboVolumePump = -1248429712i32, + #[strum(serialize = "ItemGasFilterNitrousOxide")] + #[strum(props(name = "Filter (Nitrous Oxide)", desc = "", value = "-1247674305"))] + ItemGasFilterNitrousOxide = -1247674305i32, + #[strum(serialize = "StructureChairThickDouble")] + #[strum(props(name = "Chair (Thick Double)", desc = "", value = "-1245724402"))] + StructureChairThickDouble = -1245724402i32, + #[strum(serialize = "StructureWallPaddingArchVent")] + #[strum(props(name = "Wall (Padding Arch Vent)", desc = "", value = "-1243329828"))] + StructureWallPaddingArchVent = -1243329828i32, + #[strum(serialize = "ItemKitConsole")] + #[strum(props(name = "Kit (Consoles)", desc = "", value = "-1241851179"))] + ItemKitConsole = -1241851179i32, + #[strum(serialize = "ItemKitBeds")] + #[strum(props(name = "Kit (Beds)", desc = "", value = "-1241256797"))] + ItemKitBeds = -1241256797i32, + #[strum(serialize = "StructureFrameIron")] + #[strum(props(name = "Iron Frame", desc = "", value = "-1240951678"))] + StructureFrameIron = -1240951678i32, + #[strum(serialize = "ItemDirtyOre")] + #[strum( + props( + name = "Dirty Ore", + desc = "Ore mined from bedrock via the Deep Miner which then can be used in the Centrifuge, or Combustion Centrifuge. Once processed, it produces ore in a ratio similar to the average found on the planet's surface. ", + value = "-1234745580" + ) + )] + ItemDirtyOre = -1234745580i32, + #[strum(serialize = "StructureLargeDirectHeatExchangeGastoGas")] + #[strum( + props( + name = "Large Direct Heat Exchanger - Gas + Gas", + desc = "Direct Heat Exchangers equalize the temperature of the two input networks.", + value = "-1230658883" + ) + )] + StructureLargeDirectHeatExchangeGastoGas = -1230658883i32, + #[strum(serialize = "ItemKitRoboticArm")] + #[strum(props(name = "Kit (LArRE)", desc = "", value = "-1228287398"))] + ItemKitRoboticArm = -1228287398i32, + #[strum(serialize = "ItemSensorProcessingUnitOreScanner")] + #[strum( + props( + name = "Sensor Processing Unit (Ore Scanner)", + desc = "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.", + value = "-1219128491" + ) + )] + ItemSensorProcessingUnitOreScanner = -1219128491i32, + #[strum(serialize = "StructurePictureFrameThickPortraitSmall")] + #[strum( + props( + name = "Picture Frame Thick Portrait Small", + desc = "", + value = "-1218579821" + ) + )] + StructurePictureFrameThickPortraitSmall = -1218579821i32, + #[strum(serialize = "ItemGasFilterOxygenL")] + #[strum(props(name = "Heavy Filter (Oxygen)", desc = "", value = "-1217998945"))] + ItemGasFilterOxygenL = -1217998945i32, + #[strum(serialize = "Landingpad_LiquidConnectorInwardPiece")] + #[strum(props(name = "Landingpad Liquid Input", desc = "", value = "-1216167727"))] + LandingpadLiquidConnectorInwardPiece = -1216167727i32, + #[strum(serialize = "ItemWreckageStructureWeatherStation008")] + #[strum(props(name = "Wreckage", desc = "", value = "-1214467897"))] + ItemWreckageStructureWeatherStation008 = -1214467897i32, + #[strum(serialize = "ItemPlantThermogenic_Creative")] + #[strum( + props(name = "Thermogenic Plant Creative", desc = "", value = "-1208890208") + )] + ItemPlantThermogenicCreative = -1208890208i32, + #[strum(serialize = "ItemRocketScanningHead")] + #[strum(props(name = "Rocket Scanner Head", desc = "", value = "-1198702771"))] + ItemRocketScanningHead = -1198702771i32, + #[strum(serialize = "StructureCableStraightBurnt")] + #[strum(props(name = "Burnt Cable (Straight)", desc = "", value = "-1196981113"))] + StructureCableStraightBurnt = -1196981113i32, + #[strum(serialize = "ItemHydroponicTray")] + #[strum( + props( + name = "Kit (Hydroponic Tray)", + desc = "This kits creates a Hydroponics Tray for growing various plants.", + value = "-1193543727" + ) + )] + ItemHydroponicTray = -1193543727i32, + #[strum(serialize = "ItemCannedRicePudding")] + #[strum( + props( + name = "Canned Rice Pudding", + desc = "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Rice and an Empty Can, canned rice pudding is a sweet treat, fairly high in nutrition, and does not decay.", + value = "-1185552595" + ) + )] + ItemCannedRicePudding = -1185552595i32, + #[strum(serialize = "StructureInLineTankLiquid1x2")] + #[strum( + props( + name = "In-Line Tank Liquid", + desc = "A small expansion tank that increases the volume of a pipe network.", + value = "-1183969663" + ) + )] + StructureInLineTankLiquid1X2 = -1183969663i32, + #[strum(serialize = "StructureInteriorDoorTriangle")] + #[strum( + props( + name = "Interior Door Triangle", + desc = "0.Operate\n1.Logic", + value = "-1182923101" + ) + )] + StructureInteriorDoorTriangle = -1182923101i32, + #[strum(serialize = "ItemKitElectronicsPrinter")] + #[strum(props(name = "Kit (Electronics Printer)", desc = "", value = "-1181922382"))] + ItemKitElectronicsPrinter = -1181922382i32, + #[strum(serialize = "StructureWaterBottleFiller")] + #[strum(props(name = "Water Bottle Filler", desc = "", value = "-1178961954"))] + StructureWaterBottleFiller = -1178961954i32, + #[strum(serialize = "StructureWallVent")] + #[strum( + props( + name = "Wall Vent", + desc = "Used to mix atmospheres passively between two walls.", + value = "-1177469307" + ) + )] + StructureWallVent = -1177469307i32, + #[strum(serialize = "ItemSensorLenses")] + #[strum( + props( + name = "Sensor Lenses", + desc = "These Norsec glasses might not be the most fashionable thing, but when a Sensor Processing Unit (Ore Scanner) is inserted, Stationeers can use these handy glasses to x-ray the ground and find ores that are hidden beneath the surface.", + value = "-1176140051" + ) + )] + ItemSensorLenses = -1176140051i32, + #[strum(serialize = "ItemSoundCartridgeLeads")] + #[strum(props(name = "Sound Cartridge Leads", desc = "", value = "-1174735962"))] + ItemSoundCartridgeLeads = -1174735962i32, + #[strum(serialize = "StructureMediumConvectionRadiatorLiquid")] + #[strum( + props( + name = "Medium Convection Radiator Liquid", + desc = "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.", + value = "-1169014183" + ) + )] + StructureMediumConvectionRadiatorLiquid = -1169014183i32, + #[strum(serialize = "ItemKitFridgeBig")] + #[strum(props(name = "Kit (Fridge Large)", desc = "", value = "-1168199498"))] + ItemKitFridgeBig = -1168199498i32, + #[strum(serialize = "ItemKitPipeLiquid")] + #[strum(props(name = "Kit (Liquid Pipe)", desc = "", value = "-1166461357"))] + ItemKitPipeLiquid = -1166461357i32, + #[strum(serialize = "StructureWallFlatCornerTriangleFlat")] + #[strum( + props( + name = "Wall (Flat Corner Triangle Flat)", + desc = "", + value = "-1161662836" + ) + )] + StructureWallFlatCornerTriangleFlat = -1161662836i32, + #[strum(serialize = "StructureLogicMathUnary")] + #[strum( + props( + name = "Math Unary", + desc = "0.Ceil\n1.Floor\n2.Abs\n3.Log\n4.Exp\n5.Round\n6.Rand\n7.Sqrt\n8.Sin\n9.Cos\n10.Tan\n11.Asin\n12.Acos\n13.Atan\n14.Not", + value = "-1160020195" + ) + )] + StructureLogicMathUnary = -1160020195i32, + #[strum(serialize = "ItemPlantEndothermic_Creative")] + #[strum( + props(name = "Endothermic Plant Creative", desc = "", value = "-1159179557") + )] + ItemPlantEndothermicCreative = -1159179557i32, + #[strum(serialize = "ItemSensorProcessingUnitCelestialScanner")] + #[strum( + props( + name = "Sensor Processing Unit (Celestial Scanner)", + desc = "", + value = "-1154200014" + ) + )] + ItemSensorProcessingUnitCelestialScanner = -1154200014i32, + #[strum(serialize = "StructureChairRectangleDouble")] + #[strum(props(name = "Chair (Rectangle Double)", desc = "", value = "-1152812099"))] + StructureChairRectangleDouble = -1152812099i32, + #[strum(serialize = "ItemGasCanisterOxygen")] + #[strum(props(name = "Canister (Oxygen)", desc = "", value = "-1152261938"))] + ItemGasCanisterOxygen = -1152261938i32, + #[strum(serialize = "ItemPureIceOxygen")] + #[strum( + props( + name = "Pure Ice Oxygen", + desc = "A frozen chunk of pure Oxygen", + value = "-1150448260" + ) + )] + ItemPureIceOxygen = -1150448260i32, + #[strum(serialize = "StructureBackPressureRegulator")] + #[strum( + props( + name = "Back Pressure Regulator", + desc = "Unlike the Pressure Regulator, which closes when the input exceeds a given pressure, the back pressure regulator opens when input pressure reaches a given value.", + value = "-1149857558" + ) + )] + StructureBackPressureRegulator = -1149857558i32, + #[strum(serialize = "StructurePictureFrameThinMountLandscapeLarge")] + #[strum( + props( + name = "Picture Frame Thin Landscape Large", + desc = "", + value = "-1146760430" + ) + )] + StructurePictureFrameThinMountLandscapeLarge = -1146760430i32, + #[strum(serialize = "StructureMediumRadiatorLiquid")] + #[strum( + props( + name = "Medium Radiator Liquid", + desc = "A stand-alone liquid radiator unit optimized for radiating heat in vacuums.", + value = "-1141760613" + ) + )] + StructureMediumRadiatorLiquid = -1141760613i32, + #[strum(serialize = "ApplianceMicrowave")] + #[strum( + props( + name = "Microwave", + desc = "While countless 'better' ways of cooking Food have been invented in the last few hundred years, few are as durable or easy to fabricate as the OK-Zoomer microwave. Licensed from Xigo, the plans are based on a classic model from the mid-21st century, giving it a charmingly retro feel. But don't worry, it oscillates Water molecules more than adequately. \nJust bolt it to a Powered Bench using a Wrench to power it, follow the recipe, and you're cooking.", + value = "-1136173965" + ) + )] + ApplianceMicrowave = -1136173965i32, + #[strum(serialize = "ItemPipeGasMixer")] + #[strum( + props( + name = "Kit (Gas Mixer)", + desc = "This kit creates a Gas Mixer.", + value = "-1134459463" + ) + )] + ItemPipeGasMixer = -1134459463i32, + #[strum(serialize = "CircuitboardModeControl")] + #[strum( + props( + name = "Mode Control", + desc = "Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.", + value = "-1134148135" + ) + )] + CircuitboardModeControl = -1134148135i32, + #[strum(serialize = "StructureActiveVent")] + #[strum( + props( + name = "Active Vent", + desc = "The active vent is a powered device for maintaining gas pressure by pumping gas into (or out of) a pipe network. The vent has two modes: 'Outward' sets it to pump gas into a space until pressure is reached; 'Inward' sets it to pump gas out until pressure is reached. The pressure parameter can be set on a connected Console. Default pressure is 101kPa for Outward; 0kPa for Inward...", + value = "-1129453144" + ) + )] + StructureActiveVent = -1129453144i32, + #[strum(serialize = "StructureWallPaddedArchCorner")] + #[strum(props(name = "Wall (Padded Arch Corner)", desc = "", value = "-1126688298"))] + StructureWallPaddedArchCorner = -1126688298i32, + #[strum(serialize = "StructurePlanter")] + #[strum( + props( + name = "Planter", + desc = "A small planter for decorative or hydroponic purposes. Can be connected to Water, or watered manually using a Water Bottle or Liquid Canister (Water).", + value = "-1125641329" + ) + )] + StructurePlanter = -1125641329i32, + #[strum(serialize = "StructureBatteryMedium")] + #[strum( + props( + name = "Battery (Medium)", + desc = "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + value = "-1125305264" + ) + )] + StructureBatteryMedium = -1125305264i32, + #[strum(serialize = "ItemHorticultureBelt")] + #[strum(props(name = "Horticulture Belt", desc = "", value = "-1117581553"))] + ItemHorticultureBelt = -1117581553i32, + #[strum(serialize = "CartridgeMedicalAnalyser")] + #[strum( + props( + name = "Cartridge (Medical Analyzer)", + desc = "When added to the OreCore Handheld Tablet, Asura's's ReadyMed medical analyzer reveals the health, or otherwise, of users various organs. Due to a design flaw, older models were notorious for producing quasar-like levels of x-ray radiation. Recent advances in shielding have more than halved the risk to users.", + value = "-1116110181" + ) + )] + CartridgeMedicalAnalyser = -1116110181i32, + #[strum(serialize = "StructureCompositeFloorGrating3")] + #[strum( + props( + name = "Composite Floor Grating (Type 3)", + desc = "", + value = "-1113471627" + ) + )] + StructureCompositeFloorGrating3 = -1113471627i32, + #[strum(serialize = "ItemPlainCake")] + #[strum(props(name = "Cake", desc = "", value = "-1108244510"))] + ItemPlainCake = -1108244510i32, + #[strum(serialize = "ItemWreckageStructureWeatherStation004")] + #[strum(props(name = "Wreckage", desc = "", value = "-1104478996"))] + ItemWreckageStructureWeatherStation004 = -1104478996i32, + #[strum(serialize = "StructureCableFuse1k")] + #[strum(props(name = "Fuse (1kW)", desc = "", value = "-1103727120"))] + StructureCableFuse1K = -1103727120i32, + #[strum(serialize = "WeaponTorpedo")] + #[strum(props(name = "Torpedo", desc = "", value = "-1102977898"))] + WeaponTorpedo = -1102977898i32, + #[strum(serialize = "StructureWallPaddingThin")] + #[strum(props(name = "Wall (Padding Thin)", desc = "", value = "-1102403554"))] + StructureWallPaddingThin = -1102403554i32, + #[strum(serialize = "Landingpad_GasConnectorOutwardPiece")] + #[strum( + props( + name = "Landingpad Gas Output", + desc = "Pumps gas purchased from a trader out of the landing pad. You can increase the landing pad's gas storage capacity by adding more Landingpad Gas Storage to the landing pad.", + value = "-1100218307" + ) + )] + LandingpadGasConnectorOutwardPiece = -1100218307i32, + #[strum(serialize = "AppliancePlantGeneticSplicer")] + #[strum( + props( + name = "Plant Genetic Splicer", + desc = "The Genetic Splicer can be used to copy a single gene from one 'source' plant to another 'target' plant of the same type. After copying, the source plant will be destroyed.\n \nTo begin splicing, place a plant or seed bag in the left slot (source) and place another plant or seed bag of the same type in the right slot (target). You can select a gene using the arrow buttons. Close the sliding door and press the green activate button. Once splicing has begun, the device will be locked until the process has finished (which will take approximately twenty minutes). If you want to cancel splicing you can power off the bench or detach the appliance as a last resort.", + value = "-1094868323" + ) + )] + AppliancePlantGeneticSplicer = -1094868323i32, + #[strum(serialize = "StructureMediumRocketGasFuelTank")] + #[strum(props(name = "Gas Capsule Tank Medium", desc = "", value = "-1093860567"))] + StructureMediumRocketGasFuelTank = -1093860567i32, + #[strum(serialize = "StructureStairs4x2Rails")] + #[strum(props(name = "Stairs with Rails", desc = "", value = "-1088008720"))] + StructureStairs4X2Rails = -1088008720i32, + #[strum(serialize = "StructureShowerPowered")] + #[strum(props(name = "Shower (Powered)", desc = "", value = "-1081797501"))] + StructureShowerPowered = -1081797501i32, + #[strum(serialize = "ItemCookedMushroom")] + #[strum( + props( + name = "Cooked Mushroom", + desc = "A high-nutrient cooked food, which can be canned.", + value = "-1076892658" + ) + )] + ItemCookedMushroom = -1076892658i32, + #[strum(serialize = "ItemGlasses")] + #[strum(props(name = "Glasses", desc = "", value = "-1068925231"))] + ItemGlasses = -1068925231i32, + #[strum(serialize = "KitchenTableSimpleTall")] + #[strum( + props(name = "Kitchen Table (Simple Tall)", desc = "", value = "-1068629349") + )] + KitchenTableSimpleTall = -1068629349i32, + #[strum(serialize = "ItemKitLarreDockCargo")] + #[strum(props(name = "Kit (LArRE Dock Cargo)", desc = "", value = "-1067485367"))] + ItemKitLarreDockCargo = -1067485367i32, + #[strum(serialize = "ItemGasFilterOxygenM")] + #[strum(props(name = "Medium Filter (Oxygen)", desc = "", value = "-1067319543"))] + ItemGasFilterOxygenM = -1067319543i32, + #[strum(serialize = "StructureTransformerMedium")] + #[strum( + props( + name = "Transformer (Medium)", + desc = "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", + value = "-1065725831" + ) + )] + StructureTransformerMedium = -1065725831i32, + #[strum(serialize = "ItemKitDynamicCanister")] + #[strum(props(name = "Kit (Portable Gas Tank)", desc = "", value = "-1061945368"))] + ItemKitDynamicCanister = -1061945368i32, + #[strum(serialize = "ItemEmergencyPickaxe")] + #[strum(props(name = "Emergency Pickaxe", desc = "", value = "-1061510408"))] + ItemEmergencyPickaxe = -1061510408i32, + #[strum(serialize = "ItemWheat")] + #[strum( + props( + name = "Wheat", + desc = "A classical symbol of growth and new life, wheat takes a moderate time to grow. Its main use is to create flour using the Reagent Processor.", + value = "-1057658015" + ) + )] + ItemWheat = -1057658015i32, + #[strum(serialize = "ItemEmergencyArcWelder")] + #[strum(props(name = "Emergency Arc Welder", desc = "", value = "-1056029600"))] + ItemEmergencyArcWelder = -1056029600i32, + #[strum(serialize = "ItemGasFilterOxygenInfinite")] + #[strum( + props( + name = "Catalytic Filter (Oxygen)", + desc = "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + value = "-1055451111" + ) + )] + ItemGasFilterOxygenInfinite = -1055451111i32, + #[strum(serialize = "StructureLiquidTurboVolumePump")] + #[strum( + props( + name = "Turbo Volume Pump (Liquid)", + desc = "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.", + value = "-1051805505" + ) + )] + StructureLiquidTurboVolumePump = -1051805505i32, + #[strum(serialize = "ItemPureIceLiquidHydrogen")] + #[strum( + props( + name = "Pure Ice Liquid Hydrogen", + desc = "A frozen chunk of pure Liquid Hydrogen", + value = "-1044933269" + ) + )] + ItemPureIceLiquidHydrogen = -1044933269i32, + #[strum(serialize = "StructureCompositeCladdingAngledCornerInnerLongR")] + #[strum( + props( + name = "Composite Cladding (Angled Corner Inner Long R)", + desc = "", + value = "-1032590967" + ) + )] + StructureCompositeCladdingAngledCornerInnerLongR = -1032590967i32, + #[strum(serialize = "StructureAreaPowerControlReversed")] + #[strum( + props( + name = "Area Power Control", + desc = "An Area Power Control (APC) has three main functions. \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. \nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", + value = "-1032513487" + ) + )] + StructureAreaPowerControlReversed = -1032513487i32, + #[strum(serialize = "StructureChuteOutlet")] + #[strum( + props( + name = "Chute Outlet", + desc = "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute outlet is an aperture for exiting items from import/export networks. Note that the outlet's origins in zero-gravity mining means they are permanently open, rather than interactable, but can be connected to logic systems to monitor throughput.", + value = "-1022714809" + ) + )] + StructureChuteOutlet = -1022714809i32, + #[strum(serialize = "ItemKitHarvie")] + #[strum(props(name = "Kit (Harvie)", desc = "", value = "-1022693454"))] + ItemKitHarvie = -1022693454i32, + #[strum(serialize = "ItemGasCanisterFuel")] + #[strum(props(name = "Canister (Fuel)", desc = "", value = "-1014695176"))] + ItemGasCanisterFuel = -1014695176i32, + #[strum(serialize = "StructureCompositeWall04")] + #[strum(props(name = "Composite Wall (Type 4)", desc = "", value = "-1011701267"))] + StructureCompositeWall04 = -1011701267i32, + #[strum(serialize = "StructureSorter")] + #[strum( + props( + name = "Sorter", + desc = "No amount of automation is complete without some way of moving different items to different parts of a system. The Xigo A2B sorter can be programmed via a computer with a Sorter Motherboard to direct various items into different chute networks. Filtered items are always passed out the righthand side of the sorter, while non filtered items continue straight through.", + value = "-1009150565" + ) + )] + StructureSorter = -1009150565i32, + #[strum(serialize = "StructurePipeLabel")] + #[strum( + props( + name = "Pipe Label", + desc = "As its perspicacious name suggests, the pipe label is designed to be attached to a straight stretch of pipe. Users can then label the label with the Labeller.", + value = "-999721119" + ) + )] + StructurePipeLabel = -999721119i32, + #[strum(serialize = "ItemCannedEdamame")] + #[strum( + props( + name = "Canned Edamame", + desc = "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Soybean and an Empty Can, canned edamame beans are fairly high in nutrition, and do not decay.", + value = "-999714082" + ) + )] + ItemCannedEdamame = -999714082i32, + #[strum(serialize = "ItemTomato")] + #[strum( + props( + name = "Tomato", + desc = "Tomato plants are perennial, and will produce multiple harvests without needing to be replanted. Once the plant is mature, it will fruit at a moderate pace.", + value = "-998592080" + ) + )] + ItemTomato = -998592080i32, + #[strum(serialize = "ItemCobaltOre")] + #[strum( + props( + name = "Ore (Cobalt)", + desc = "Cobalt is a chemical element with the symbol \"Co\" and is typically found in only small deposits. Cobalt is a rare substance, but used create the Heal Pill and several alloys.", + value = "-983091249" + ) + )] + ItemCobaltOre = -983091249i32, + #[strum(serialize = "StructureCableCorner4HBurnt")] + #[strum( + props(name = "Burnt Heavy Cable (4-Way Corner)", desc = "", value = "-981223316") + )] + StructureCableCorner4HBurnt = -981223316i32, + #[strum(serialize = "Landingpad_StraightPiece01")] + #[strum( + props( + name = "Landingpad Straight", + desc = "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", + value = "-976273247" + ) + )] + LandingpadStraightPiece01 = -976273247i32, + #[strum(serialize = "StructureMediumRadiator")] + #[strum( + props( + name = "Medium Radiator", + desc = "A stand-alone radiator unit optimized for radiating heat in vacuums.", + value = "-975966237" + ) + )] + StructureMediumRadiator = -975966237i32, + #[strum(serialize = "ItemDynamicScrubber")] + #[strum(props(name = "Kit (Portable Scrubber)", desc = "", value = "-971920158"))] + ItemDynamicScrubber = -971920158i32, + #[strum(serialize = "ItemWaterBottlePackage")] + #[strum(props(name = "Water Bottle Package", desc = "", value = "-971586619"))] + ItemWaterBottlePackage = -971586619i32, + #[strum(serialize = "StructureCondensationValve")] + #[strum( + props( + name = "Condensation Valve", + desc = "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.", + value = "-965741795" + ) + )] + StructureCondensationValve = -965741795i32, + #[strum(serialize = "StructureChuteUmbilicalMale")] + #[strum( + props( + name = "Umbilical (Chute)", + desc = "0.Left\n1.Center\n2.Right", + value = "-958884053" + ) + )] + StructureChuteUmbilicalMale = -958884053i32, + #[strum(serialize = "ItemKitElevator")] + #[strum(props(name = "Kit (Elevator)", desc = "", value = "-945806652"))] + ItemKitElevator = -945806652i32, + #[strum(serialize = "ItemKitLarreDockBypass")] + #[strum(props(name = "Kit (LArRE Dock Bypass)", desc = "", value = "-940470326"))] + ItemKitLarreDockBypass = -940470326i32, + #[strum(serialize = "StructureSolarPanelReinforced")] + #[strum( + props( + name = "Solar Panel (Heavy)", + desc = "This solar panel is resistant to storm damage.", + value = "-934345724" + ) + )] + StructureSolarPanelReinforced = -934345724i32, + #[strum(serialize = "ItemKitRocketTransformerSmall")] + #[strum( + props(name = "Kit (Transformer Small (Rocket))", desc = "", value = "-932335800") + )] + ItemKitRocketTransformerSmall = -932335800i32, + #[strum(serialize = "CartridgeConfiguration")] + #[strum(props(name = "Cartridge (Configuration)", desc = "", value = "-932136011"))] + CartridgeConfiguration = -932136011i32, + #[strum(serialize = "ItemSilverIngot")] + #[strum(props(name = "Ingot (Silver)", desc = "", value = "-929742000"))] + ItemSilverIngot = -929742000i32, + #[strum(serialize = "ItemKitHydroponicAutomated")] + #[strum( + props(name = "Kit (Automated Hydroponics)", desc = "", value = "-927931558") + )] + ItemKitHydroponicAutomated = -927931558i32, + #[strum(serialize = "StructureSmallTableRectangleSingle")] + #[strum( + props(name = "Small (Table Rectangle Single)", desc = "", value = "-924678969") + )] + StructureSmallTableRectangleSingle = -924678969i32, + #[strum(serialize = "ItemWreckageStructureWeatherStation005")] + #[strum(props(name = "Wreckage", desc = "", value = "-919745414"))] + ItemWreckageStructureWeatherStation005 = -919745414i32, + #[strum(serialize = "ItemSilverOre")] + #[strum( + props( + name = "Ore (Silver)", + desc = "Silver is a chemical element with the symbol \"Ag\". Valued by many Stationeers for its attractive luster and sheen, it is also used in a variety of electronics components and alloys.", + value = "-916518678" + ) + )] + ItemSilverOre = -916518678i32, + #[strum(serialize = "StructurePipeTJunction")] + #[strum( + props( + name = "Pipe (T Junction)", + desc = "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.", + value = "-913817472" + ) + )] + StructurePipeTJunction = -913817472i32, + #[strum(serialize = "ItemPickaxe")] + #[strum( + props( + name = "Pickaxe", + desc = "When the sun sets and the Mining Drill runs dead, its batteries drained and your Solar Panel cold and lifeless, the Autolathe empty, the way forward unclear, one thing holds back the endless night of defeat: the trusty pickaxe.", + value = "-913649823" + ) + )] + ItemPickaxe = -913649823i32, + #[strum(serialize = "ItemPipeLiquidRadiator")] + #[strum( + props( + name = "Kit (Liquid Radiator)", + desc = "This kit creates a Liquid Pipe Convection Radiator.", + value = "-906521320" + ) + )] + ItemPipeLiquidRadiator = -906521320i32, + #[strum(serialize = "StructurePortablesConnector")] + #[strum(props(name = "Portables Connector", desc = "", value = "-899013427"))] + StructurePortablesConnector = -899013427i32, + #[strum(serialize = "StructureCompositeFloorGrating2")] + #[strum( + props( + name = "Composite Floor Grating (Type 2)", + desc = "", + value = "-895027741" + ) + )] + StructureCompositeFloorGrating2 = -895027741i32, + #[strum(serialize = "StructureTransformerSmall")] + #[strum( + props( + name = "Transformer (Small)", + desc = "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", + value = "-890946730" + ) + )] + StructureTransformerSmall = -890946730i32, + #[strum(serialize = "StructureCableCorner")] + #[strum( + props( + name = "Cable (Corner)", + desc = "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", + value = "-889269388" + ) + )] + StructureCableCorner = -889269388i32, + #[strum(serialize = "ItemKitChuteUmbilical")] + #[strum(props(name = "Kit (Chute Umbilical)", desc = "", value = "-876560854"))] + ItemKitChuteUmbilical = -876560854i32, + #[strum(serialize = "ItemPureIceSteam")] + #[strum( + props( + name = "Pure Ice Steam", + desc = "A frozen chunk of pure Steam", + value = "-874791066" + ) + )] + ItemPureIceSteam = -874791066i32, + #[strum(serialize = "ItemBeacon")] + #[strum(props(name = "Tracking Beacon", desc = "", value = "-869869491"))] + ItemBeacon = -869869491i32, + #[strum(serialize = "ItemKitWindTurbine")] + #[strum(props(name = "Kit (Wind Turbine)", desc = "", value = "-868916503"))] + ItemKitWindTurbine = -868916503i32, + #[strum(serialize = "ItemKitRocketMiner")] + #[strum(props(name = "Kit (Rocket Miner)", desc = "", value = "-867969909"))] + ItemKitRocketMiner = -867969909i32, + #[strum(serialize = "StructureStairwellBackPassthrough")] + #[strum( + props(name = "Stairwell (Back Passthrough)", desc = "", value = "-862048392") + )] + StructureStairwellBackPassthrough = -862048392i32, + #[strum(serialize = "StructureWallArch")] + #[strum(props(name = "Wall (Arch)", desc = "", value = "-858143148"))] + StructureWallArch = -858143148i32, + #[strum(serialize = "HumanSkull")] + #[strum(props(name = "Human Skull", desc = "", value = "-857713709"))] + HumanSkull = -857713709i32, + #[strum(serialize = "StructureLogicMemory")] + #[strum(props(name = "Logic Memory", desc = "", value = "-851746783"))] + StructureLogicMemory = -851746783i32, + #[strum(serialize = "StructureChuteBin")] + #[strum( + props( + name = "Chute Import Bin", + desc = "The Stationeer's goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nLike most Recurso-designed systems, chute bins are simple and robust powered items, allowing items to be manually passed into chute networks by pulling a lever. They can also be programmed with logic to operate automatically, although full automation requires the use items such as a SDB Hopper.", + value = "-850484480" + ) + )] + StructureChuteBin = -850484480i32, + #[strum(serialize = "ItemKitWallFlat")] + #[strum(props(name = "Kit (Flat Wall)", desc = "", value = "-846838195"))] + ItemKitWallFlat = -846838195i32, + #[strum(serialize = "ItemActiveVent")] + #[strum( + props( + name = "Kit (Active Vent)", + desc = "When constructed, this kit places an Active Vent on any support structure.", + value = "-842048328" + ) + )] + ItemActiveVent = -842048328i32, + #[strum(serialize = "ItemFlashlight")] + #[strum( + props( + name = "Flashlight", + desc = "A flashlight with a narrow and wide beam options.", + value = "-838472102" + ) + )] + ItemFlashlight = -838472102i32, + #[strum(serialize = "ItemWreckageStructureWeatherStation001")] + #[strum(props(name = "Wreckage", desc = "", value = "-834664349"))] + ItemWreckageStructureWeatherStation001 = -834664349i32, + #[strum(serialize = "ItemBiomass")] + #[strum( + props( + name = "Biomass", + desc = "Diced organic material that is returned when food and organic matter is passed through the Recycler and Centrifuge. Can be burned in a Furnace into Charcoal for use in the Generator (Solid Fuel).", + value = "-831480639" + ) + )] + ItemBiomass = -831480639i32, + #[strum(serialize = "ItemKitPowerTransmitterOmni")] + #[strum( + props(name = "Kit (Power Transmitter Omni)", desc = "", value = "-831211676") + )] + ItemKitPowerTransmitterOmni = -831211676i32, + #[strum(serialize = "StructureKlaxon")] + #[strum( + props( + name = "Klaxon Speaker", + desc = "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.", + value = "-828056979" + ) + )] + StructureKlaxon = -828056979i32, + #[strum(serialize = "StructureElevatorLevelFront")] + #[strum(props(name = "Elevator Level (Cabled)", desc = "", value = "-827912235"))] + StructureElevatorLevelFront = -827912235i32, + #[strum(serialize = "ItemKitPipeOrgan")] + #[strum(props(name = "Kit (Pipe Organ)", desc = "", value = "-827125300"))] + ItemKitPipeOrgan = -827125300i32, + #[strum(serialize = "ItemKitWallPadded")] + #[strum(props(name = "Kit (Padded Wall)", desc = "", value = "-821868990"))] + ItemKitWallPadded = -821868990i32, + #[strum(serialize = "DynamicGasCanisterFuel")] + #[strum( + props( + name = "Portable Gas Tank (Fuel)", + desc = "Portable tanks store gas. They're good at it. If you need to refill a tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or things get messy. You can refill a Canister (Fuel) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later. It's really up to you.", + value = "-817051527" + ) + )] + DynamicGasCanisterFuel = -817051527i32, + #[strum(serialize = "StructureReinforcedCompositeWindowSteel")] + #[strum( + props( + name = "Reinforced Window (Composite Steel)", + desc = "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", + value = "-816454272" + ) + )] + StructureReinforcedCompositeWindowSteel = -816454272i32, + #[strum(serialize = "StructureConsoleLED5")] + #[strum( + props( + name = "LED Display (Small)", + desc = "0.Default\n1.Percent\n2.Power", + value = "-815193061" + ) + )] + StructureConsoleLed5 = -815193061i32, + #[strum(serialize = "StructureInsulatedInLineTankLiquid1x1")] + #[strum( + props( + name = "Insulated In-Line Tank Small Liquid", + desc = "", + value = "-813426145" + ) + )] + StructureInsulatedInLineTankLiquid1X1 = -813426145i32, + #[strum(serialize = "StructureChuteDigitalFlipFlopSplitterLeft")] + #[strum( + props( + name = "Chute Digital Flip Flop Splitter Left", + desc = "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", + value = "-810874728" + ) + )] + StructureChuteDigitalFlipFlopSplitterLeft = -810874728i32, + #[strum(serialize = "MotherboardRockets")] + #[strum(props(name = "Rocket Control Motherboard", desc = "", value = "-806986392"))] + MotherboardRockets = -806986392i32, + #[strum(serialize = "ItemKitFurnace")] + #[strum(props(name = "Kit (Furnace)", desc = "", value = "-806743925"))] + ItemKitFurnace = -806743925i32, + #[strum(serialize = "ItemTropicalPlant")] + #[strum( + props( + name = "Tropical Lily", + desc = "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.", + value = "-800947386" + ) + )] + ItemTropicalPlant = -800947386i32, + #[strum(serialize = "ItemKitLiquidTank")] + #[strum(props(name = "Kit (Liquid Tank)", desc = "", value = "-799849305"))] + ItemKitLiquidTank = -799849305i32, + #[strum(serialize = "StructureCompositeDoor")] + #[strum( + props( + name = "Composite Door", + desc = "Recurso's composite doors are rated to 300kPa, which is more than sufficient for most purposes they were designed for. However, steep pressure differentials are not your friend.", + value = "-793837322" + ) + )] + StructureCompositeDoor = -793837322i32, + #[strum(serialize = "StructureStorageLocker")] + #[strum(props(name = "Locker", desc = "", value = "-793623899"))] + StructureStorageLocker = -793623899i32, + #[strum(serialize = "RespawnPoint")] + #[strum( + props( + name = "Respawn Point", + desc = "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.", + value = "-788672929" + ) + )] + RespawnPoint = -788672929i32, + #[strum(serialize = "ItemInconelIngot")] + #[strum(props(name = "Ingot (Inconel)", desc = "", value = "-787796599"))] + ItemInconelIngot = -787796599i32, + #[strum(serialize = "StructurePoweredVentLarge")] + #[strum( + props( + name = "Powered Vent Large", + desc = "For building large scale airlock systems and pressurised hangers, a bigger and bolder version of the Powered Vent that can effeciently pull a vacuum in large room.", + value = "-785498334" + ) + )] + StructurePoweredVentLarge = -785498334i32, + #[strum(serialize = "ItemKitWallGeometry")] + #[strum(props(name = "Kit (Geometric Wall)", desc = "", value = "-784733231"))] + ItemKitWallGeometry = -784733231i32, + #[strum(serialize = "StructureInsulatedPipeCrossJunction4")] + #[strum( + props( + name = "Insulated Pipe (4-Way Junction)", + desc = "Insulated pipes greatly reduce heat loss from gases stored in them.", + value = "-783387184" + ) + )] + StructureInsulatedPipeCrossJunction4 = -783387184i32, + #[strum(serialize = "StructurePowerConnector")] + #[strum( + props( + name = "Power Connector", + desc = "Attaches a Kit (Portable Generator) to a power network.", + value = "-782951720" + ) + )] + StructurePowerConnector = -782951720i32, + #[strum(serialize = "StructureWallLargePanelArrow")] + #[strum(props(name = "Wall (Large Panel Arrow)", desc = "", value = "-776581573"))] + StructureWallLargePanelArrow = -776581573i32, + #[strum(serialize = "StructureShower")] + #[strum(props(name = "Shower", desc = "", value = "-775128944"))] + StructureShower = -775128944i32, + #[strum(serialize = "ItemChemLightBlue")] + #[strum( + props( + name = "Chem Light (Blue)", + desc = "A safe and slightly rave-some source of blue light. Snap to activate.", + value = "-772542081" + ) + )] + ItemChemLightBlue = -772542081i32, + #[strum(serialize = "StructureLogicSlotReader")] + #[strum(props(name = "Slot Reader", desc = "", value = "-767867194"))] + StructureLogicSlotReader = -767867194i32, + #[strum(serialize = "ItemGasCanisterCarbonDioxide")] + #[strum(props(name = "Canister (CO2)", desc = "", value = "-767685874"))] + ItemGasCanisterCarbonDioxide = -767685874i32, + #[strum(serialize = "ItemPipeAnalyizer")] + #[strum( + props( + name = "Kit (Pipe Analyzer)", + desc = "This kit creates a Pipe Analyzer.", + value = "-767597887" + ) + )] + ItemPipeAnalyizer = -767597887i32, + #[strum(serialize = "StructureBatteryChargerSmall")] + #[strum(props(name = "Battery Charger Small", desc = "", value = "-761772413"))] + StructureBatteryChargerSmall = -761772413i32, + #[strum(serialize = "StructureWaterBottleFillerPowered")] + #[strum(props(name = "Waterbottle Filler", desc = "", value = "-756587791"))] + StructureWaterBottleFillerPowered = -756587791i32, + #[strum(serialize = "ItemKitRobotArmDoor")] + #[strum(props(name = "Kit (Linear Rail Door)", desc = "", value = "-753675589"))] + ItemKitRobotArmDoor = -753675589i32, + #[strum(serialize = "AppliancePackagingMachine")] + #[strum( + props( + name = "Basic Packaging Machine", + desc = "The Xigo Cannifier requires Empty Can and cooked food to create long-lasting, easily stored sustenance. Note that the Cannifier must be bolted to a Powered Bench for power, and only accepts cooked food and tin cans.\n\nOPERATION\n\n1. Add the correct ingredients to the device via the hopper in the TOP.\n\n2. Close the device using the dropdown handle.\n\n3. Activate the device.\n\n4. Remove canned goods from the outlet in the FRONT.\n\nNote: the Cannifier will flash an error on its activation switch if you attempt to activate it before closing it.\n\n\n ", + value = "-749191906" + ) + )] + AppliancePackagingMachine = -749191906i32, + #[strum(serialize = "ItemIntegratedCircuit10")] + #[strum(props(name = "Integrated Circuit (IC10)", desc = "", value = "-744098481"))] + ItemIntegratedCircuit10 = -744098481i32, + #[strum(serialize = "ItemLabeller")] + #[strum( + props( + name = "Labeller", + desc = "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.", + value = "-743968726" + ) + )] + ItemLabeller = -743968726i32, + #[strum(serialize = "StructureCableJunctionH4")] + #[strum( + props(name = "Heavy Cable (4-Way Junction)", desc = "", value = "-742234680") + )] + StructureCableJunctionH4 = -742234680i32, + #[strum(serialize = "StructureWallCooler")] + #[strum( + props( + name = "Wall Cooler", + desc = "The Xigo Freezy Boi wall cooler complements the wall heater, which can only raise the temperature. The wall cooler functions by drawing heat from the surrounding atmosphere and adding that heat into its pipe network.\nIn order to run the wall cooler properly, you will need to connect pipes to the wall cooler and fill the connected pipe network with any type of gas. The gas's heat capacity and volume will determine how fast it reacts to temperature changes.\n\nEFFICIENCY\nThe higher the difference in temperature between the gas stored in the pipes and the room, the less efficient the wall cooler will be. So to keep the wall cooler running at an acceptable efficiency you will need to get rid of the heat that accumulates in the pipes connected to it. A common practice would be to run the pipes to the outside and use radiators on the outside section of the pipes to get rid of the heat.\nThe less efficient the wall cooler, the less power it consumes. It will consume 1010W at max efficiency. The wall cooler can be controlled by logic chips to run when the temperature hits a certain degree.\nERRORS\nIf the wall cooler is flashing an error then it is missing one of the following:\n\n- Pipe connection to the wall cooler.\n- Gas in the connected pipes, or pressure is too low.\n- Atmosphere in the surrounding environment or pressure is too low.\n\nFor more information about how to control temperatures, consult the temperature control Guides page.", + value = "-739292323" + ) + )] + StructureWallCooler = -739292323i32, + #[strum(serialize = "StructurePurgeValve")] + #[strum( + props( + name = "Purge Valve", + desc = "Allows for removal of pressurant gas and evaporated liquids from a liquid pipe. Similar in function to a Back Pressure Regulator the Purge Valve moves gas from the input liquid pipe to the output gas pipe aiming to keep the pressure of the input at the target setting.", + value = "-737232128" + ) + )] + StructurePurgeValve = -737232128i32, + #[strum(serialize = "StructureCrateMount")] + #[strum(props(name = "Container Mount", desc = "", value = "-733500083"))] + StructureCrateMount = -733500083i32, + #[strum(serialize = "ItemKitDynamicGenerator")] + #[strum(props(name = "Kit (Portable Generator)", desc = "", value = "-732720413"))] + ItemKitDynamicGenerator = -732720413i32, + #[strum(serialize = "StructureConsoleDual")] + #[strum( + props( + name = "Console Dual", + desc = "This Norsec-designed control box manages devices such as the Active Vent, Gas Sensor, Composite Door and others, depending on which circuitboard is inserted into the unit. It has separate data and power ports.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", + value = "-722284333" + ) + )] + StructureConsoleDual = -722284333i32, + #[strum(serialize = "ItemGasFilterOxygen")] + #[strum( + props( + name = "Filter (Oxygen)", + desc = "Sinotai have cornered the market in filter design. Their trademarked templates are simple to print and highly efficient at capturing various gases, which can be disposed of or used elsewhere. Oxygen is a common byproduct of smelting various ores, but must be filtered of such impurities as Nitrogen using this filter and various devices, such as the Kit (Portable Scrubber).", + value = "-721824748" + ) + )] + ItemGasFilterOxygen = -721824748i32, + #[strum(serialize = "ItemCookedTomato")] + #[strum( + props( + name = "Cooked Tomato", + desc = "A high-nutrient cooked food, which can be canned.", + value = "-709086714" + ) + )] + ItemCookedTomato = -709086714i32, + #[strum(serialize = "ItemCopperOre")] + #[strum( + props( + name = "Ore (Copper)", + desc = "Copper is a chemical element with the symbol \"Cu\". This common and highly conductive material is found on most astronomical bodies and is used in a variety of manufacturing processes including electronic components, alloys, and wires.", + value = "-707307845" + ) + )] + ItemCopperOre = -707307845i32, + #[strum(serialize = "StructureLogicTransmitter")] + #[strum( + props( + name = "Logic Transmitter", + desc = "Connects to Logic Transmitter", + value = "-693235651" + ) + )] + StructureLogicTransmitter = -693235651i32, + #[strum(serialize = "StructureValve")] + #[strum(props(name = "Valve (Gas)", desc = "", value = "-692036078"))] + StructureValve = -692036078i32, + #[strum(serialize = "StructureCompositeWindowIron")] + #[strum(props(name = "Iron Window", desc = "", value = "-688284639"))] + StructureCompositeWindowIron = -688284639i32, + #[strum(serialize = "ItemSprayCanBlack")] + #[strum( + props( + name = "Spray Paint (Black)", + desc = "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.", + value = "-688107795" + ) + )] + ItemSprayCanBlack = -688107795i32, + #[strum(serialize = "ItemRocketMiningDrillHeadLongTerm")] + #[strum( + props(name = "Mining-Drill Head (Long Term)", desc = "", value = "-684020753") + )] + ItemRocketMiningDrillHeadLongTerm = -684020753i32, + #[strum(serialize = "ItemMiningBelt")] + #[strum( + props( + name = "Mining Belt", + desc = "Originally developed by Recurso Espaciais for asteroid mining, the Stationeer's mining belt has room for two tools and eight ore stacks. While wearing the belt, ore is automatically stored there when mined. Volatile and temperature-dependent remain stable in the environmentally controlled unit.", + value = "-676435305" + ) + )] + ItemMiningBelt = -676435305i32, + #[strum(serialize = "ItemGasCanisterSmart")] + #[strum( + props( + name = "Gas Canister (Smart)", + desc = "0.Mode0\n1.Mode1", + value = "-668314371" + ) + )] + ItemGasCanisterSmart = -668314371i32, + #[strum(serialize = "ItemFlour")] + #[strum( + props( + name = "Flour", + desc = "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).", + value = "-665995854" + ) + )] + ItemFlour = -665995854i32, + #[strum(serialize = "StructureSmallTableRectangleDouble")] + #[strum( + props(name = "Small (Table Rectangle Double)", desc = "", value = "-660451023") + )] + StructureSmallTableRectangleDouble = -660451023i32, + #[strum(serialize = "StructureChuteUmbilicalFemaleSide")] + #[strum( + props(name = "Umbilical Socket Angle (Chute)", desc = "", value = "-659093969") + )] + StructureChuteUmbilicalFemaleSide = -659093969i32, + #[strum(serialize = "ItemSteelIngot")] + #[strum( + props( + name = "Ingot (Steel)", + desc = "Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1.\nIt may not be elegant, but Ice (Oxite) and Ice (Volatiles) can be combined at a ratio of 1:2 in a furnace to create the necessary gas mixture for smelting.", + value = "-654790771" + ) + )] + ItemSteelIngot = -654790771i32, + #[strum(serialize = "SeedBag_Wheet")] + #[strum( + props( + name = "Wheat Seeds", + desc = "Grow some Wheat.", + value = "-654756733" + ) + )] + SeedBagWheet = -654756733i32, + #[strum(serialize = "StructureRocketTower")] + #[strum(props(name = "Launch Tower", desc = "", value = "-654619479"))] + StructureRocketTower = -654619479i32, + #[strum(serialize = "StructureGasUmbilicalFemaleSide")] + #[strum( + props(name = "Umbilical Socket Angle (Gas)", desc = "", value = "-648683847") + )] + StructureGasUmbilicalFemaleSide = -648683847i32, + #[strum(serialize = "StructureLockerSmall")] + #[strum(props(name = "Locker (Small)", desc = "", value = "-647164662"))] + StructureLockerSmall = -647164662i32, + #[strum(serialize = "StructureSecurityPrinter")] + #[strum( + props( + name = "Security Printer", + desc = "Any Stationeer concerned about security needs the Harkwell-designed Vigilant-E security printer. Use the Vigilant-E to create a Cartridge (Access Controller), in order to restrict access to different parts of your base via keycards like the Access Card (Blue). The printer also makes a variety of weapons and ammunitions to defend your base against any hostile, aggressive or just slightly rude entites you encounter as you explore the Solar System.\n", + value = "-641491515" + ) + )] + StructureSecurityPrinter = -641491515i32, + #[strum(serialize = "StructureWallSmallPanelsArrow")] + #[strum(props(name = "Wall (Small Panels Arrow)", desc = "", value = "-639306697"))] + StructureWallSmallPanelsArrow = -639306697i32, + #[strum(serialize = "ItemKitDynamicMKIILiquidCanister")] + #[strum( + props(name = "Kit (Portable Liquid Tank Mk II)", desc = "", value = "-638019974") + )] + ItemKitDynamicMkiiLiquidCanister = -638019974i32, + #[strum(serialize = "ItemKitRocketManufactory")] + #[strum(props(name = "Kit (Rocket Manufactory)", desc = "", value = "-636127860"))] + ItemKitRocketManufactory = -636127860i32, + #[strum(serialize = "ItemPureIceVolatiles")] + #[strum( + props( + name = "Pure Ice Volatiles", + desc = "A frozen chunk of pure Volatiles", + value = "-633723719" + ) + )] + ItemPureIceVolatiles = -633723719i32, + #[strum(serialize = "ItemGasFilterNitrogenM")] + #[strum(props(name = "Medium Filter (Nitrogen)", desc = "", value = "-632657357"))] + ItemGasFilterNitrogenM = -632657357i32, + #[strum(serialize = "StructureCableFuse5k")] + #[strum(props(name = "Fuse (5kW)", desc = "", value = "-631590668"))] + StructureCableFuse5K = -631590668i32, + #[strum(serialize = "StructureCableJunction6Burnt")] + #[strum( + props(name = "Burnt Cable (6-Way Junction)", desc = "", value = "-628145954") + )] + StructureCableJunction6Burnt = -628145954i32, + #[strum(serialize = "StructureComputer")] + #[strum( + props( + name = "Computer (Modern)", + desc = "This unit operates with a wide range of motherboards.", + value = "-626563514" + ) + )] + StructureComputer = -626563514i32, + #[strum(serialize = "StructurePressureFedGasEngine")] + #[strum( + props( + name = "Pressure Fed Gas Engine", + desc = "Inefficient but very powerful, the Pressure Fed Gas Engine moves gas from each of its two inputs based on the pressure of the input pipes. Control the mixing ratio of fuels by tweaking the input pressures to target a 2:1 mix of Volatiles to Oxygen gas. Chilling propellant gasses or using Nitrous Oxide as an oxydizer will result in even higher thrust outputs.", + value = "-624011170" + ) + )] + StructurePressureFedGasEngine = -624011170i32, + #[strum(serialize = "StructureGroundBasedTelescope")] + #[strum( + props( + name = "Telescope", + desc = "A telescope that can be oriented to observe Celestial Bodies. When within full alignment will show orbital information for that celestial object. Atmospheric conditions may disrupt the ability to observe some objects at some times of day. To collect Horizontal and Vertical values you can use a Rocket Celestial Tracker while it is in orbit, or a Daylight Sensor for primary body data.", + value = "-619745681" + ) + )] + StructureGroundBasedTelescope = -619745681i32, + #[strum(serialize = "ItemKitAdvancedFurnace")] + #[strum(props(name = "Kit (Advanced Furnace)", desc = "", value = "-616758353"))] + ItemKitAdvancedFurnace = -616758353i32, + #[strum(serialize = "StructureHeatExchangerLiquidtoLiquid")] + #[strum( + props( + name = "Heat Exchanger - Liquid", + desc = "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two liquid networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to liquid management devices like a Liquid Volume Pump or a Liquid Back Volume Regulator.\n", + value = "-613784254" + ) + )] + StructureHeatExchangerLiquidtoLiquid = -613784254i32, + #[strum(serialize = "StructureChuteJunction")] + #[strum( + props( + name = "Chute (Junction)", + desc = "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute junctions are fundamental components of chute networks, allowing merging or splitting of these networks. When combined with a programmed Sorter, items can be sent down different paths to various machines with import/export slots.", + value = "-611232514" + ) + )] + StructureChuteJunction = -611232514i32, + #[strum(serialize = "StructureChuteWindow")] + #[strum( + props( + name = "Chute (Window)", + desc = "Chute's with windows let you see what's passing through your import/export network. But be warned, they are not insulated as other chutes are. Ices will melt.", + value = "-607241919" + ) + )] + StructureChuteWindow = -607241919i32, + #[strum(serialize = "ItemWearLamp")] + #[strum(props(name = "Headlamp", desc = "", value = "-598730959"))] + ItemWearLamp = -598730959i32, + #[strum(serialize = "ItemKitAdvancedPackagingMachine")] + #[strum( + props(name = "Kit (Advanced Packaging Machine)", desc = "", value = "-598545233") + )] + ItemKitAdvancedPackagingMachine = -598545233i32, + #[strum(serialize = "ItemChemLightGreen")] + #[strum( + props( + name = "Chem Light (Green)", + desc = "Enliven the dreariest, airless rock with this glowy green light. Snap to activate.", + value = "-597479390" + ) + )] + ItemChemLightGreen = -597479390i32, + #[strum(serialize = "EntityRoosterBrown")] + #[strum( + props( + name = "Entity Rooster Brown", + desc = "The common brown rooster. Don't let it hear you say that.", + value = "-583103395" + ) + )] + EntityRoosterBrown = -583103395i32, + #[strum(serialize = "StructureLargeExtendableRadiator")] + #[strum( + props( + name = "Large Extendable Radiator", + desc = "Omptimised for radiating heat in vacuum and low pressure environments. If pointed at the sun it will heat its contents rapidly via solar heating. The panels can fold away to stop all heat radiation/solar heating and protect them from storms.", + value = "-566775170" + ) + )] + StructureLargeExtendableRadiator = -566775170i32, + #[strum(serialize = "StructureMediumHangerDoor")] + #[strum( + props( + name = "Medium Hangar Door", + desc = "1 x 2 modular door piece for building hangar doors.", + value = "-566348148" + ) + )] + StructureMediumHangerDoor = -566348148i32, + #[strum(serialize = "StructureLaunchMount")] + #[strum( + props( + name = "Launch Mount", + desc = "The first piece to place whern building a rocket. Rockets can be constructed and/or landed here. Each Launch Mount will be allocated a slot on the Space Map and assigned a Location Code.", + value = "-558953231" + ) + )] + StructureLaunchMount = -558953231i32, + #[strum(serialize = "StructureShortLocker")] + #[strum(props(name = "Short Locker", desc = "", value = "-554553467"))] + StructureShortLocker = -554553467i32, + #[strum(serialize = "ItemKitCrateMount")] + #[strum(props(name = "Kit (Container Mount)", desc = "", value = "-551612946"))] + ItemKitCrateMount = -551612946i32, + #[strum(serialize = "ItemKitCryoTube")] + #[strum(props(name = "Kit (Cryo Tube)", desc = "", value = "-545234195"))] + ItemKitCryoTube = -545234195i32, + #[strum(serialize = "StructureSolarPanelDual")] + #[strum( + props( + name = "Solar Panel (Dual)", + desc = "Sinotai dual solar panels are used for generating power from sunlight, with dedicated data and power ports. They can be connected to {Logic systems, in order to track sunlight, but their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", + value = "-539224550" + ) + )] + StructureSolarPanelDual = -539224550i32, + #[strum(serialize = "ItemPlantSwitchGrass")] + #[strum(props(name = "Switch Grass", desc = "", value = "-532672323"))] + ItemPlantSwitchGrass = -532672323i32, + #[strum(serialize = "StructureInsulatedPipeLiquidTJunction")] + #[strum( + props( + name = "Insulated Liquid Pipe (T Junction)", + desc = "Liquid piping with very low temperature loss or gain.", + value = "-532384855" + ) + )] + StructureInsulatedPipeLiquidTJunction = -532384855i32, + #[strum(serialize = "ItemKitSolarPanelBasicReinforced")] + #[strum( + props(name = "Kit (Solar Panel Basic Heavy)", desc = "", value = "-528695432") + )] + ItemKitSolarPanelBasicReinforced = -528695432i32, + #[strum(serialize = "ItemChemLightRed")] + #[strum( + props( + name = "Chem Light (Red)", + desc = "A red glowstick. Snap to activate. Then reach for the lasers.", + value = "-525810132" + ) + )] + ItemChemLightRed = -525810132i32, + #[strum(serialize = "ItemKitWallIron")] + #[strum(props(name = "Kit (Iron Wall)", desc = "", value = "-524546923"))] + ItemKitWallIron = -524546923i32, + #[strum(serialize = "ItemEggCarton")] + #[strum( + props( + name = "Egg Carton", + desc = "Within, eggs reside in mysterious, marmoreal silence.", + value = "-524289310" + ) + )] + ItemEggCarton = -524289310i32, + #[strum(serialize = "StructurePipeLiquidOneWayValveLever")] + #[strum(props(name = "One Way Valve (Liquid)", desc = "", value = "-523832822"))] + StructurePipeLiquidOneWayValveLever = -523832822i32, + #[strum(serialize = "StructureLarreDockCollector")] + #[strum( + props( + name = "LARrE Dock (Collector)", + desc = "0.Outward\n1.Inward", + value = "-522428667" + ) + )] + StructureLarreDockCollector = -522428667i32, + #[strum(serialize = "StructureWaterDigitalValve")] + #[strum(props(name = "Liquid Digital Valve", desc = "", value = "-517628750"))] + StructureWaterDigitalValve = -517628750i32, + #[strum(serialize = "StructureSmallDirectHeatExchangeLiquidtoLiquid")] + #[strum( + props( + name = "Small Direct Heat Exchanger - Liquid + Liquid", + desc = "Direct Heat Exchangers equalize the temperature of the two input networks.", + value = "-507770416" + ) + )] + StructureSmallDirectHeatExchangeLiquidtoLiquid = -507770416i32, + #[strum(serialize = "ItemWirelessBatteryCellExtraLarge")] + #[strum( + props( + name = "Wireless Battery Cell Extra Large", + desc = "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + value = "-504717121" + ) + )] + ItemWirelessBatteryCellExtraLarge = -504717121i32, + #[strum(serialize = "ItemGasFilterPollutantsInfinite")] + #[strum( + props( + name = "Catalytic Filter (Pollutants)", + desc = "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + value = "-503738105" + ) + )] + ItemGasFilterPollutantsInfinite = -503738105i32, + #[strum(serialize = "ItemSprayCanBlue")] + #[strum( + props( + name = "Spray Paint (Blue)", + desc = "What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'", + value = "-498464883" + ) + )] + ItemSprayCanBlue = -498464883i32, + #[strum(serialize = "RespawnPointWallMounted")] + #[strum(props(name = "Respawn Point (Mounted)", desc = "", value = "-491247370"))] + RespawnPointWallMounted = -491247370i32, + #[strum(serialize = "ItemIronSheets")] + #[strum(props(name = "Iron Sheets", desc = "", value = "-487378546"))] + ItemIronSheets = -487378546i32, + #[strum(serialize = "StructureReinforcedWall")] + #[strum(props(name = "Reinforced Wall", desc = "", value = "-475746988"))] + StructureReinforcedWall = -475746988i32, + #[strum(serialize = "ItemGasCanisterVolatiles")] + #[strum(props(name = "Canister (Volatiles)", desc = "", value = "-472094806"))] + ItemGasCanisterVolatiles = -472094806i32, + #[strum(serialize = "ItemCableCoil")] + #[strum( + props( + name = "Cable Coil", + desc = "Bodily metaphors are tired and anthropocentric, but it was Frida Stuppen, the first ODA Administrator, who said, 'Let the cabling be as the nerve and the vessel, transmitting power and data alike through systems we forge among the stars.' Later commentators suggested that she was simply putting a romantic gloss on a piece of dubious economy. Whatever the case, standard cabling is where any Stationeer's network begins. \nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", + value = "-466050668" + ) + )] + ItemCableCoil = -466050668i32, + #[strum(serialize = "StructureToolManufactory")] + #[strum( + props( + name = "Tool Manufactory", + desc = "No mission can be completed without the proper tools. The Norsec ThuulDek manufactory can fabricate almost any tool or hand-held device a Stationeer may need to complete their mission, as well as a variety of delightful paints.\nUpgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds.", + value = "-465741100" + ) + )] + StructureToolManufactory = -465741100i32, + #[strum(serialize = "StructureAdvancedPackagingMachine")] + #[strum( + props( + name = "Advanced Packaging Machine", + desc = "The Xigo Advanced Cannifier Multi-Plus Pro is an automateable packaging machine that uses Empty Cans and cooked food to create canned sustenance that does not decay. Note that the ACMPP only accepts cooked food and tin cans.", + value = "-463037670" + ) + )] + StructureAdvancedPackagingMachine = -463037670i32, + #[strum(serialize = "Battery_Wireless_cell")] + #[strum( + props( + name = "Battery Wireless Cell", + desc = "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + value = "-462415758" + ) + )] + BatteryWirelessCell = -462415758i32, + #[strum(serialize = "ItemBatteryCellLarge")] + #[strum( + props( + name = "Battery Cell (Large)", + desc = "First mass-produced by Xigo in 2155 on the basis of a unattributed prototype, the classic silicon anode solid-state design extends its optimum temperature range.\n\nPOWER OUTPUT\nThe large power cell can discharge 288kW of power. \n", + value = "-459827268" + ) + )] + ItemBatteryCellLarge = -459827268i32, + #[strum(serialize = "StructureLiquidVolumePump")] + #[strum(props(name = "Liquid Volume Pump", desc = "", value = "-454028979"))] + StructureLiquidVolumePump = -454028979i32, + #[strum(serialize = "ItemKitTransformer")] + #[strum(props(name = "Kit (Transformer Large)", desc = "", value = "-453039435"))] + ItemKitTransformer = -453039435i32, + #[strum(serialize = "StructureVendingMachine")] + #[strum( + props( + name = "Vending Machine", + desc = "The Xigo-designed 'Slot Mate' vending machine allows storage of almost any item, while also operating as a distribution point for working with Traders. You cannot trade without a vending machine, or its more advanced equivalent, the Refrigerated Vending Machine. Each vending machine can hold up to 100 stacks.", + value = "-443130773" + ) + )] + StructureVendingMachine = -443130773i32, + #[strum(serialize = "ItemKitLinearRail")] + #[strum(props(name = "Kit (Linear Rail)", desc = "", value = "-441759975"))] + ItemKitLinearRail = -441759975i32, + #[strum(serialize = "StructurePipeHeater")] + #[strum( + props( + name = "Pipe Heater (Gas)", + desc = "Adds 1000 joules of heat per tick to the contents of your pipe network.", + value = "-419758574" + ) + )] + StructurePipeHeater = -419758574i32, + #[strum(serialize = "StructurePipeCrossJunction4")] + #[strum( + props( + name = "Pipe (4-Way Junction)", + desc = "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + value = "-417629293" + ) + )] + StructurePipeCrossJunction4 = -417629293i32, + #[strum(serialize = "StructureLadder")] + #[strum(props(name = "Ladder", desc = "", value = "-415420281"))] + StructureLadder = -415420281i32, + #[strum(serialize = "ItemHardJetpack")] + #[strum( + props( + name = "Hardsuit Jetpack", + desc = "The Norsec jetpack isn't 'technically' a jetpack at all, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nThe hardsuit jetpack is capable of much higher speeds than the Jetpack Basic - up to 15m/s. Indispensable for building, mining and general movement, it has fourteen storage slots.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", + value = "-412551656" + ) + )] + ItemHardJetpack = -412551656i32, + #[strum(serialize = "CircuitboardCameraDisplay")] + #[strum( + props( + name = "Camera Display", + desc = "Surveillance is sometimes necessary when building bases in highly hostile environments. The camera display circuit board allows wary Stationeers to turn a Console into a security display when connected to a Camera.", + value = "-412104504" + ) + )] + CircuitboardCameraDisplay = -412104504i32, + #[strum(serialize = "StructureComputerUpright")] + #[strum( + props( + name = "Computer (Retro)", + desc = "This unit operates with a wide range of motherboards.", + value = "-405593895" + ) + )] + StructureComputerUpright = -405593895i32, + #[strum(serialize = "ItemCopperIngot")] + #[strum( + props( + name = "Ingot (Copper)", + desc = "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.", + value = "-404336834" + ) + )] + ItemCopperIngot = -404336834i32, + #[strum(serialize = "ItemCerealBarBox")] + #[strum(props(name = "Cereal Bar Box", desc = "", value = "-401648353"))] + ItemCerealBarBox = -401648353i32, + #[strum(serialize = "ReagentColorOrange")] + #[strum(props(name = "Color Dye (Orange)", desc = "", value = "-400696159"))] + ReagentColorOrange = -400696159i32, + #[strum(serialize = "StructureBattery")] + #[strum( + props( + name = "Station Battery", + desc = "Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 3600000W of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large).", + value = "-400115994" + ) + )] + StructureBattery = -400115994i32, + #[strum(serialize = "StructurePipeRadiatorFlat")] + #[strum( + props( + name = "Pipe Radiator", + desc = "A pipe mounted radiator optimized for radiating heat in vacuums.", + value = "-399883995" + ) + )] + StructurePipeRadiatorFlat = -399883995i32, + #[strum(serialize = "StructureCompositeCladdingAngledLong")] + #[strum( + props(name = "Composite Cladding (Long Angled)", desc = "", value = "-387546514") + )] + StructureCompositeCladdingAngledLong = -387546514i32, + #[strum(serialize = "DynamicGasTankAdvanced")] + #[strum( + props(name = "Gas Tank Mk II", desc = "0.Mode0\n1.Mode1", value = "-386375420") + )] + DynamicGasTankAdvanced = -386375420i32, + #[strum(serialize = "WeaponPistolEnergy")] + #[strum( + props(name = "Energy Pistol", desc = "0.Stun\n1.Kill", value = "-385323479") + )] + WeaponPistolEnergy = -385323479i32, + #[strum(serialize = "ItemFertilizedEgg")] + #[strum( + props( + name = "Egg", + desc = "To hatch it requires an incubation temperature of between 35 and 45 degrees Celsius and will hatch into a Chick. If the egg is exposed to tepratures below 10 degrees it will no longer be viable.", + value = "-383972371" + ) + )] + ItemFertilizedEgg = -383972371i32, + #[strum(serialize = "ItemRocketMiningDrillHeadIce")] + #[strum(props(name = "Mining-Drill Head (Ice)", desc = "", value = "-380904592"))] + ItemRocketMiningDrillHeadIce = -380904592i32, + #[strum(serialize = "Flag_ODA_8m")] + #[strum(props(name = "Flag (ODA 8m)", desc = "", value = "-375156130"))] + FlagOda8M = -375156130i32, + #[strum(serialize = "AccessCardGreen")] + #[strum(props(name = "Access Card (Green)", desc = "", value = "-374567952"))] + AccessCardGreen = -374567952i32, + #[strum(serialize = "StructureChairBoothCornerLeft")] + #[strum(props(name = "Chair (Booth Corner Left)", desc = "", value = "-367720198"))] + StructureChairBoothCornerLeft = -367720198i32, + #[strum(serialize = "ItemKitFuselage")] + #[strum(props(name = "Kit (Fuselage)", desc = "", value = "-366262681"))] + ItemKitFuselage = -366262681i32, + #[strum(serialize = "ItemSolidFuel")] + #[strum(props(name = "Solid Fuel (Hydrocarbon)", desc = "", value = "-365253871"))] + ItemSolidFuel = -365253871i32, + #[strum(serialize = "ItemKitSolarPanelReinforced")] + #[strum(props(name = "Kit (Solar Panel Heavy)", desc = "", value = "-364868685"))] + ItemKitSolarPanelReinforced = -364868685i32, + #[strum(serialize = "ItemToolBelt")] + #[strum( + props( + name = "Tool Belt", + desc = "If there's one piece of equipment that embodies Stationeer life above all else, it's the humble toolbelt (Editor's note: a recent ODA survey of iconic Stationeer equipment also rated the smoking, toxic ruins of an over-pressurized Furnace lying amid the charred remains of your latest base very highly).\nDesigned to meet the most strict-ish ODA safety standards, the toolbelt's eight slots hold one thing: tools, and Cable Coil. Not to be confused with the Mining Belt.", + value = "-355127880" + ) + )] + ItemToolBelt = -355127880i32, + #[strum(serialize = "ItemEmergencyAngleGrinder")] + #[strum(props(name = "Emergency Angle Grinder", desc = "", value = "-351438780"))] + ItemEmergencyAngleGrinder = -351438780i32, + #[strum(serialize = "StructureCableFuse50k")] + #[strum(props(name = "Fuse (50kW)", desc = "", value = "-349716617"))] + StructureCableFuse50K = -349716617i32, + #[strum(serialize = "StructureCompositeCladdingAngledCornerLongR")] + #[strum( + props( + name = "Composite Cladding (Long Angled Mirrored Corner)", + desc = "", + value = "-348918222" + ) + )] + StructureCompositeCladdingAngledCornerLongR = -348918222i32, + #[strum(serialize = "StructureFiltration")] + #[strum( + props( + name = "Filtration", + desc = "The Filtration Unit is based on a long-standing ExMin system, itself based on older designs of uncertain provenance. It is available in the Kit (Atmospherics).\nThe device has nonetheless proven indispensable for Stationeer atmospheric systems, as it can filter two gases simultaneously from a single pipe network using a dual filter array. The unit has an input, and a filter output as well as an unfiltered outlet for any residual gases.\n", + value = "-348054045" + ) + )] + StructureFiltration = -348054045i32, + #[strum(serialize = "StructureLogicReader")] + #[strum(props(name = "Logic Reader", desc = "", value = "-345383640"))] + StructureLogicReader = -345383640i32, + #[strum(serialize = "ItemKitMotherShipCore")] + #[strum(props(name = "Kit (Mothership)", desc = "", value = "-344968335"))] + ItemKitMotherShipCore = -344968335i32, + #[strum(serialize = "StructureCamera")] + #[strum( + props( + name = "Camera", + desc = "Nothing says 'I care' like a security camera that's been linked a Motion Sensor and a Console fitted with a Camera Display.\nBe there, even when you're not.", + value = "-342072665" + ) + )] + StructureCamera = -342072665i32, + #[strum(serialize = "StructureCableJunctionHBurnt")] + #[strum(props(name = "Burnt Cable (Junction)", desc = "", value = "-341365649"))] + StructureCableJunctionHBurnt = -341365649i32, + #[strum(serialize = "MotherboardComms")] + #[strum( + props( + name = "Communications Motherboard", + desc = "When placed in a Computer (Modern) and connected to a Landingpad Data And Power, a Medium Satellite Dish, and a Vending Machine allows Stationeers to trade with suppliers. Adjust the horizontal and vertical attributes of the Medium Satellite Dish either directly or through logic. You need a communications signal of 95% or above to establish reliable communications with a trader. A minimum of a 3x3 clear pad area with a Landingpad Center at the center is required for a trader to land.", + value = "-337075633" + ) + )] + MotherboardComms = -337075633i32, + #[strum(serialize = "AccessCardOrange")] + #[strum(props(name = "Access Card (Orange)", desc = "", value = "-332896929"))] + AccessCardOrange = -332896929i32, + #[strum(serialize = "StructurePowerTransmitterOmni")] + #[strum(props(name = "Power Transmitter Omni", desc = "", value = "-327468845"))] + StructurePowerTransmitterOmni = -327468845i32, + #[strum(serialize = "StructureGlassDoor")] + #[strum( + props(name = "Glass Door", desc = "0.Operate\n1.Logic", value = "-324331872") + )] + StructureGlassDoor = -324331872i32, + #[strum(serialize = "DynamicGasCanisterCarbonDioxide")] + #[strum( + props( + name = "Portable Gas Tank (CO2)", + desc = "Portable gas tanks do one thing: store gas. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or... boom. Once it's full, you can refill a Canister (CO2) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere... of sorts.", + value = "-322413931" + ) + )] + DynamicGasCanisterCarbonDioxide = -322413931i32, + #[strum(serialize = "StructureVolumePump")] + #[strum( + props( + name = "Volume Pump", + desc = "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.", + value = "-321403609" + ) + )] + StructureVolumePump = -321403609i32, + #[strum(serialize = "DynamicMKIILiquidCanisterWater")] + #[strum( + props( + name = "Portable Liquid Tank Mk II (Water)", + desc = "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.", + value = "-319510386" + ) + )] + DynamicMkiiLiquidCanisterWater = -319510386i32, + #[strum(serialize = "ItemKitRocketBattery")] + #[strum(props(name = "Kit (Rocket Battery)", desc = "", value = "-314072139"))] + ItemKitRocketBattery = -314072139i32, + #[strum(serialize = "ElectronicPrinterMod")] + #[strum( + props( + name = "Electronic Printer Mod", + desc = "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + value = "-311170652" + ) + )] + ElectronicPrinterMod = -311170652i32, + #[strum(serialize = "ItemWreckageHydroponicsTray1")] + #[strum(props(name = "Wreckage", desc = "", value = "-310178617"))] + ItemWreckageHydroponicsTray1 = -310178617i32, + #[strum(serialize = "ItemKitRocketCelestialTracker")] + #[strum( + props(name = "Kit (Rocket Celestial Tracker)", desc = "", value = "-303008602") + )] + ItemKitRocketCelestialTracker = -303008602i32, + #[strum(serialize = "StructureFrameSide")] + #[strum( + props( + name = "Steel Frame (Side)", + desc = "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.", + value = "-302420053" + ) + )] + StructureFrameSide = -302420053i32, + #[strum(serialize = "ItemInvarIngot")] + #[strum(props(name = "Ingot (Invar)", desc = "", value = "-297990285"))] + ItemInvarIngot = -297990285i32, + #[strum(serialize = "StructureSmallTableThickSingle")] + #[strum(props(name = "Small Table (Thick Single)", desc = "", value = "-291862981"))] + StructureSmallTableThickSingle = -291862981i32, + #[strum(serialize = "ItemSiliconIngot")] + #[strum(props(name = "Ingot (Silicon)", desc = "", value = "-290196476"))] + ItemSiliconIngot = -290196476i32, + #[strum(serialize = "StructureLiquidPipeHeater")] + #[strum( + props( + name = "Pipe Heater (Liquid)", + desc = "Adds 1000 joules of heat per tick to the contents of your pipe network.", + value = "-287495560" + ) + )] + StructureLiquidPipeHeater = -287495560i32, + #[strum(serialize = "StructureRoboticArmRailInnerCorner")] + #[strum(props(name = "Linear Rail Inner Corner", desc = "", value = "-267108827"))] + StructureRoboticArmRailInnerCorner = -267108827i32, + #[strum(serialize = "ItemChocolateCake")] + #[strum(props(name = "Chocolate Cake", desc = "", value = "-261575861"))] + ItemChocolateCake = -261575861i32, + #[strum(serialize = "StructureStirlingEngine")] + #[strum( + props( + name = "Stirling Engine", + desc = "Harnessing an ancient thermal exploit, the Recurso 'Libra' Stirling Engine generates power via the expansion and contraction of a working gas to drive pistons operating an electrical generator.\n \nWhen high pressure hot gas is supplied into the input pipe, this gas will heat the hot side of the unit, then pass into the output pipe. The cooler side uses the room's ambient atmosphere, which must be kept at a lower temperature and pressure in order to create a differential. Add a working gas by inserting a Gas Canister. The unit must be deactivated when adding or removing canisters, or the working gas may leak into the surrounding atmosphere.\n \nGases with a low molecular mass make the most efficient working gases. Increasing the moles of working gas can result in a greater potential power output. However, overpressuring the unit may have... sub-optimal results.", + value = "-260316435" + ) + )] + StructureStirlingEngine = -260316435i32, + #[strum(serialize = "StructureCompositeCladdingRounded")] + #[strum( + props(name = "Composite Cladding (Rounded)", desc = "", value = "-259357734") + )] + StructureCompositeCladdingRounded = -259357734i32, + #[strum(serialize = "SMGMagazine")] + #[strum(props(name = "SMG Magazine", desc = "", value = "-256607540"))] + SmgMagazine = -256607540i32, + #[strum(serialize = "ItemLiquidPipeHeater")] + #[strum( + props( + name = "Pipe Heater Kit (Liquid)", + desc = "Creates a Pipe Heater (Liquid).", + value = "-248475032" + ) + )] + ItemLiquidPipeHeater = -248475032i32, + #[strum(serialize = "StructureArcFurnace")] + #[strum( + props( + name = "Arc Furnace", + desc = "The simplest smelting system available to the average Stationeer, Recurso's arc furnace was forged itself in the depths of the Solar System to help explorational geologists determine the purity of potential asteroidal mining targets.\nCo-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources.\nThe smelting process also releases a range of by product gases, principally Nitrogen, Carbon Dioxide, Volatiles and Oxygen in differing ratios. These can be recaptured from the atmosphere by filtering, but also make the arc furnace a risk in closed environments. \nUnlike the more advanced Furnace, the arc furnace cannot create alloys.", + value = "-247344692" + ) + )] + StructureArcFurnace = -247344692i32, + #[strum(serialize = "ItemTablet")] + #[strum( + props( + name = "Handheld Tablet", + desc = "The Xigo handheld 'Padi' tablet is an all-purpose data platform, provided as standard issue to all Stationeers. A dynamic multi-tool that accepts a range of cartridges, the Padi becomes an Cartridge (Atmos Analyzer) or Cartridge (Tracker), Cartridge (Medical Analyzer), Cartridge (Ore Scanner), Cartridge (eReader), and various other functions.", + value = "-229808600" + ) + )] + ItemTablet = -229808600i32, + #[strum(serialize = "StructureGovernedGasEngine")] + #[strum( + props( + name = "Pumped Gas Engine", + desc = "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.", + value = "-214232602" + ) + )] + StructureGovernedGasEngine = -214232602i32, + #[strum(serialize = "StructureStairs4x2RailR")] + #[strum(props(name = "Stairs with Rail (Right)", desc = "", value = "-212902482"))] + StructureStairs4X2RailR = -212902482i32, + #[strum(serialize = "ItemLeadOre")] + #[strum( + props( + name = "Ore (Lead)", + desc = "Lead is a chemical element with the symbol \"Pb\". It is a dense, heavy metal with a low melting point. Lead is a used to make a variety of things such as alloys like Ingot (Solder) and munitions.", + value = "-190236170" + ) + )] + ItemLeadOre = -190236170i32, + #[strum(serialize = "StructureBeacon")] + #[strum(props(name = "Beacon", desc = "", value = "-188177083"))] + StructureBeacon = -188177083i32, + #[strum(serialize = "ItemGasFilterCarbonDioxideInfinite")] + #[strum( + props( + name = "Catalytic Filter (Carbon Dioxide)", + desc = "A filter that selectively targets Carbon Dioxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + value = "-185568964" + ) + )] + ItemGasFilterCarbonDioxideInfinite = -185568964i32, + #[strum(serialize = "ItemLiquidCanisterEmpty")] + #[strum(props(name = "Liquid Canister", desc = "", value = "-185207387"))] + ItemLiquidCanisterEmpty = -185207387i32, + #[strum(serialize = "ItemMKIIWireCutters")] + #[strum( + props( + name = "Mk II Wire Cutters", + desc = "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools.", + value = "-178893251" + ) + )] + ItemMkiiWireCutters = -178893251i32, + #[strum(serialize = "ItemPlantThermogenic_Genepool1")] + #[strum( + props( + name = "Hades Flower (Alpha strain)", + desc = "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant.", + value = "-177792789" + ) + )] + ItemPlantThermogenicGenepool1 = -177792789i32, + #[strum(serialize = "StructureInsulatedInLineTankGas1x2")] + #[strum(props(name = "Insulated In-Line Tank Gas", desc = "", value = "-177610944"))] + StructureInsulatedInLineTankGas1X2 = -177610944i32, + #[strum(serialize = "StructureCableCornerBurnt")] + #[strum(props(name = "Burnt Cable (Corner)", desc = "", value = "-177220914"))] + StructureCableCornerBurnt = -177220914i32, + #[strum(serialize = "StructureCableJunction")] + #[strum( + props( + name = "Cable (Junction)", + desc = "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", + value = "-175342021" + ) + )] + StructureCableJunction = -175342021i32, + #[strum(serialize = "ItemKitLaunchTower")] + #[strum(props(name = "Kit (Rocket Launch Tower)", desc = "", value = "-174523552"))] + ItemKitLaunchTower = -174523552i32, + #[strum(serialize = "StructureBench3")] + #[strum(props(name = "Bench (Frame Style)", desc = "", value = "-164622691"))] + StructureBench3 = -164622691i32, + #[strum(serialize = "MotherboardProgrammableChip")] + #[strum( + props( + name = "IC Editor Motherboard", + desc = "When placed in a Computer (Modern), the IC Editor allows players to write and edit IC code, which can then be uploaded to a Integrated Circuit (IC10) if housed in an IC Housing.", + value = "-161107071" + ) + )] + MotherboardProgrammableChip = -161107071i32, + #[strum(serialize = "ItemSprayCanOrange")] + #[strum( + props( + name = "Spray Paint (Orange)", + desc = "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.", + value = "-158007629" + ) + )] + ItemSprayCanOrange = -158007629i32, + #[strum(serialize = "StructureWallPaddedCorner")] + #[strum(props(name = "Wall (Padded Corner)", desc = "", value = "-155945899"))] + StructureWallPaddedCorner = -155945899i32, + #[strum(serialize = "StructureCableStraightH")] + #[strum(props(name = "Heavy Cable (Straight)", desc = "", value = "-146200530"))] + StructureCableStraightH = -146200530i32, + #[strum(serialize = "StructureDockPortSide")] + #[strum(props(name = "Dock (Port Side)", desc = "", value = "-137465079"))] + StructureDockPortSide = -137465079i32, + #[strum(serialize = "StructureCircuitHousing")] + #[strum(props(name = "IC Housing", desc = "", value = "-128473777"))] + StructureCircuitHousing = -128473777i32, + #[strum(serialize = "MotherboardMissionControl")] + #[strum( + props( + name = "", + desc = "", + value = "-127121474" + ) + )] + MotherboardMissionControl = -127121474i32, + #[strum(serialize = "ItemKitSpeaker")] + #[strum(props(name = "Kit (Speaker)", desc = "", value = "-126038526"))] + ItemKitSpeaker = -126038526i32, + #[strum(serialize = "StructureLogicReagentReader")] + #[strum(props(name = "Reagent Reader", desc = "", value = "-124308857"))] + StructureLogicReagentReader = -124308857i32, + #[strum(serialize = "ItemGasFilterNitrousOxideInfinite")] + #[strum( + props( + name = "Catalytic Filter (Nitrous Oxide)", + desc = "A filter that selectively targets Nitrous Oxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + value = "-123934842" + ) + )] + ItemGasFilterNitrousOxideInfinite = -123934842i32, + #[strum(serialize = "ItemKitPressureFedGasEngine")] + #[strum( + props(name = "Kit (Pressure Fed Gas Engine)", desc = "", value = "-121514007") + )] + ItemKitPressureFedGasEngine = -121514007i32, + #[strum(serialize = "StructureCableJunction4HBurnt")] + #[strum( + props(name = "Burnt Cable (4-Way Junction)", desc = "", value = "-115809132") + )] + StructureCableJunction4HBurnt = -115809132i32, + #[strum(serialize = "ElevatorCarrage")] + #[strum(props(name = "Elevator", desc = "", value = "-110788403"))] + ElevatorCarrage = -110788403i32, + #[strum(serialize = "StructureFairingTypeA2")] + #[strum(props(name = "Fairing (Type A2)", desc = "", value = "-104908736"))] + StructureFairingTypeA2 = -104908736i32, + #[strum(serialize = "ItemKitPressureFedLiquidEngine")] + #[strum( + props(name = "Kit (Pressure Fed Liquid Engine)", desc = "", value = "-99091572") + )] + ItemKitPressureFedLiquidEngine = -99091572i32, + #[strum(serialize = "Meteorite")] + #[strum(props(name = "Meteorite", desc = "", value = "-99064335"))] + Meteorite = -99064335i32, + #[strum(serialize = "ItemKitArcFurnace")] + #[strum(props(name = "Kit (Arc Furnace)", desc = "", value = "-98995857"))] + ItemKitArcFurnace = -98995857i32, + #[strum(serialize = "StructureInsulatedPipeCrossJunction")] + #[strum( + props( + name = "Insulated Pipe (Cross Junction)", + desc = "Insulated pipes greatly reduce heat loss from gases stored in them.", + value = "-92778058" + ) + )] + StructureInsulatedPipeCrossJunction = -92778058i32, + #[strum(serialize = "ItemWaterPipeMeter")] + #[strum(props(name = "Kit (Liquid Pipe Meter)", desc = "", value = "-90898877"))] + ItemWaterPipeMeter = -90898877i32, + #[strum(serialize = "FireArmSMG")] + #[strum( + props(name = "Fire Arm SMG", desc = "0.Single\n1.Auto", value = "-86315541") + )] + FireArmSmg = -86315541i32, + #[strum(serialize = "ItemHardsuitHelmet")] + #[strum( + props( + name = "Hardsuit Helmet", + desc = "The Hardsuit Helmet is similar to the Space Helmet, but can withstand higher temperatures and pressures. It's perfect for enduring harsh environments like Venus and Vulcan.", + value = "-84573099" + ) + )] + ItemHardsuitHelmet = -84573099i32, + #[strum(serialize = "ItemSolderIngot")] + #[strum(props(name = "Ingot (Solder)", desc = "", value = "-82508479"))] + ItemSolderIngot = -82508479i32, + #[strum(serialize = "CircuitboardGasDisplay")] + #[strum( + props( + name = "Gas Display", + desc = "Information is power. Place this circuitboard into a Console to create a display that shows gas pressure or temperature of any connected tank, storage cannister, Kit (Pipe Analyzer) or Kit (Gas Sensor).", + value = "-82343730" + ) + )] + CircuitboardGasDisplay = -82343730i32, + #[strum(serialize = "DynamicGenerator")] + #[strum( + props( + name = "Portable Generator", + desc = "Every Stationeer's best friend, the portable generator gets you up and running, fast. Fill it with a Canister (Fuel) to power up and charge a Battery Cell (Small), or attach it to a Power Connector to link it into your electrical network. It's pressure driven, so functions more efficiently at lower temperatures, and REALLY efficiently if supercooled. Perfecting your fuel mix also makes a big difference.", + value = "-82087220" + ) + )] + DynamicGenerator = -82087220i32, + #[strum(serialize = "ItemFlowerRed")] + #[strum(props(name = "Flower (Red)", desc = "", value = "-81376085"))] + ItemFlowerRed = -81376085i32, + #[strum(serialize = "KitchenTableSimpleShort")] + #[strum( + props(name = "Kitchen Table (Simple Short)", desc = "", value = "-78099334") + )] + KitchenTableSimpleShort = -78099334i32, + #[strum(serialize = "ItemCerealBarBag")] + #[strum(props(name = "Cereal Bar Bag", desc = "", value = "-75205276"))] + ItemCerealBarBag = -75205276i32, + #[strum(serialize = "ImGuiCircuitboardAirlockControl")] + #[strum(props(name = "Airlock (Experimental)", desc = "", value = "-73796547"))] + ImGuiCircuitboardAirlockControl = -73796547i32, + #[strum(serialize = "StructureInsulatedPipeLiquidCrossJunction6")] + #[strum( + props( + name = "Insulated Liquid Pipe (6-Way Junction)", + desc = "Liquid piping with very low temperature loss or gain.", + value = "-72748982" + ) + )] + StructureInsulatedPipeLiquidCrossJunction6 = -72748982i32, + #[strum(serialize = "StructureCompositeCladdingAngledCorner")] + #[strum( + props( + name = "Composite Cladding (Angled Corner)", + desc = "", + value = "-69685069" + ) + )] + StructureCompositeCladdingAngledCorner = -69685069i32, + #[strum(serialize = "StructurePowerTransmitter")] + #[strum( + props( + name = "Microwave Power Transmitter", + desc = "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.", + value = "-65087121" + ) + )] + StructurePowerTransmitter = -65087121i32, + #[strum(serialize = "ItemFrenchFries")] + #[strum( + props( + name = "Canned French Fries", + desc = "Because space would suck without 'em.", + value = "-57608687" + ) + )] + ItemFrenchFries = -57608687i32, + #[strum(serialize = "StructureConsoleLED1x2")] + #[strum( + props( + name = "LED Display (Medium)", + desc = "0.Default\n1.Percent\n2.Power", + value = "-53151617" + ) + )] + StructureConsoleLed1X2 = -53151617i32, + #[strum(serialize = "UniformMarine")] + #[strum(props(name = "Marine Uniform", desc = "", value = "-48342840"))] + UniformMarine = -48342840i32, + #[strum(serialize = "Battery_Wireless_cell_Big")] + #[strum( + props( + name = "Battery Wireless Cell (Big)", + desc = "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", + value = "-41519077" + ) + )] + BatteryWirelessCellBig = -41519077i32, + #[strum(serialize = "StructureCableCornerH")] + #[strum(props(name = "Heavy Cable (Corner)", desc = "", value = "-39359015"))] + StructureCableCornerH = -39359015i32, + #[strum(serialize = "ItemPipeCowl")] + #[strum( + props( + name = "Pipe Cowl", + desc = "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.", + value = "-38898376" + ) + )] + ItemPipeCowl = -38898376i32, + #[strum(serialize = "StructureStairwellFrontLeft")] + #[strum(props(name = "Stairwell (Front Left)", desc = "", value = "-37454456"))] + StructureStairwellFrontLeft = -37454456i32, + #[strum(serialize = "StructureWallPaddedWindowThin")] + #[strum(props(name = "Wall (Padded Window Thin)", desc = "", value = "-37302931"))] + StructureWallPaddedWindowThin = -37302931i32, + #[strum(serialize = "StructureRoboticArmRailOuterCorner")] + #[strum(props(name = "Linear Rail Outer Corner", desc = "", value = "-33470826"))] + StructureRoboticArmRailOuterCorner = -33470826i32, + #[strum(serialize = "StructureInsulatedTankConnector")] + #[strum(props(name = "Insulated Tank Connector", desc = "", value = "-31273349"))] + StructureInsulatedTankConnector = -31273349i32, + #[strum(serialize = "ItemKitInsulatedPipeUtility")] + #[strum( + props(name = "Kit (Insulated Pipe Utility Gas)", desc = "", value = "-27284803") + )] + ItemKitInsulatedPipeUtility = -27284803i32, + #[strum(serialize = "DynamicLight")] + #[strum( + props( + name = "Portable Light", + desc = "Philippe Starck might not applaud, but this battery-powered light source undarkens the corners when illumination's lacking. Powered by any battery, it's a 'no-frills' Xigo design that can be cheaply fabricated with the minimum of fuss. Unless you like fuss. In which case, fuss all you like.", + value = "-21970188" + ) + )] + DynamicLight = -21970188i32, + #[strum(serialize = "ItemKitBatteryLarge")] + #[strum(props(name = "Kit (Battery Large)", desc = "", value = "-21225041"))] + ItemKitBatteryLarge = -21225041i32, + #[strum(serialize = "StructureSmallTableThickDouble")] + #[strum(props(name = "Small (Table Thick Double)", desc = "", value = "-19246131"))] + StructureSmallTableThickDouble = -19246131i32, + #[strum(serialize = "ItemAmmoBox")] + #[strum(props(name = "Ammo Box", desc = "", value = "-9559091"))] + ItemAmmoBox = -9559091i32, + #[strum(serialize = "StructurePipeLiquidCrossJunction4")] + #[strum( + props( + name = "Liquid Pipe (4-Way Junction)", + desc = "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + value = "-9555593" + ) + )] + StructurePipeLiquidCrossJunction4 = -9555593i32, + #[strum(serialize = "DynamicGasCanisterRocketFuel")] + #[strum( + props(name = "Dynamic Gas Canister Rocket Fuel", desc = "", value = "-8883951") + )] + DynamicGasCanisterRocketFuel = -8883951i32, + #[strum(serialize = "ItemPureIcePollutant")] + #[strum( + props( + name = "Pure Ice Pollutant", + desc = "A frozen chunk of pure Pollutant", + value = "-1755356" + ) + )] + ItemPureIcePollutant = -1755356i32, + #[strum(serialize = "ItemWreckageLargeExtendableRadiator01")] + #[strum(props(name = "Wreckage", desc = "", value = "-997763"))] + ItemWreckageLargeExtendableRadiator01 = -997763i32, + #[strum(serialize = "StructureSingleBed")] + #[strum(props(name = "Single Bed", desc = "", value = "-492611"))] + StructureSingleBed = -492611i32, + #[strum(serialize = "StructureCableCorner3HBurnt")] + #[strum( + props( + name = "", + desc = "", + value = "2393826" + ) + )] + StructureCableCorner3HBurnt = 2393826i32, + #[strum(serialize = "StructureAutoMinerSmall")] + #[strum( + props( + name = "Autominer (Small)", + desc = "The Recurso SquareDig autominer is a structure that when built will mine a vertical 2x2 shaft until it hits bedrock. The autominer can be connected to a chute system, and is controllable by a logic network. Note that the autominer outputs more ore than a conventional Mining Drill over the same area.", + value = "7274344" + ) + )] + StructureAutoMinerSmall = 7274344i32, + #[strum(serialize = "CrateMkII")] + #[strum( + props( + name = "Crate Mk II", + desc = "A more heavily reinforced version of the iconic Dynamic Crate, the Crate Mk II is resistant to incredibly high pressures and temperatures. Short of disposing of it in a black hole, the Mk II is about as safe as luggage gets.", + value = "8709219" + ) + )] + CrateMkIi = 8709219i32, + #[strum(serialize = "ItemGasFilterWaterM")] + #[strum(props(name = "Medium Filter (Water)", desc = "", value = "8804422"))] + ItemGasFilterWaterM = 8804422i32, + #[strum(serialize = "StructureWallPaddedNoBorder")] + #[strum(props(name = "Wall (Padded No Border)", desc = "", value = "8846501"))] + StructureWallPaddedNoBorder = 8846501i32, + #[strum(serialize = "ItemGasFilterVolatiles")] + #[strum( + props( + name = "Filter (Volatiles)", + desc = "Filters are used to capture various gases, which can be disposed of or used elsewhere. Volatiles are created by exposing Ice (Volatiles) to heat. The product can then be collected and combined with Oxygen to create fuel, or used within a Furnace to smelt ores and create alloys.", + value = "15011598" + ) + )] + ItemGasFilterVolatiles = 15011598i32, + #[strum(serialize = "ItemMiningCharge")] + #[strum( + props( + name = "Mining Charge", + desc = "A low cost, high yield explosive with a 10 second timer.", + value = "15829510" + ) + )] + ItemMiningCharge = 15829510i32, + #[strum(serialize = "ItemKitEngineSmall")] + #[strum(props(name = "Kit (Engine Small)", desc = "", value = "19645163"))] + ItemKitEngineSmall = 19645163i32, + #[strum(serialize = "StructureHeatExchangerGastoGas")] + #[strum( + props( + name = "Heat Exchanger - Gas", + desc = "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to gas management devices like a Volume Pump or a Back Pressure Regulator.", + value = "21266291" + ) + )] + StructureHeatExchangerGastoGas = 21266291i32, + #[strum(serialize = "StructurePressurantValve")] + #[strum( + props( + name = "Pressurant Valve", + desc = "Pumps gas into a liquid pipe in order to raise the pressure", + value = "23052817" + ) + )] + StructurePressurantValve = 23052817i32, + #[strum(serialize = "StructureWallHeater")] + #[strum( + props( + name = "Wall Heater", + desc = "The Xigo wall heater is a simple device that can be installed on a wall or frame and connected to power. When switched on, it will start heating the surrounding environment. It consumes 1010W of power and can be controlled by logic chips to run when the temperature hits a certain level.", + value = "24258244" + ) + )] + StructureWallHeater = 24258244i32, + #[strum(serialize = "StructurePassiveLargeRadiatorLiquid")] + #[strum( + props( + name = "Medium Convection Radiator Liquid", + desc = "Has been replaced by Medium Convection Radiator Liquid.", + value = "24786172" + ) + )] + StructurePassiveLargeRadiatorLiquid = 24786172i32, + #[strum(serialize = "StructureWallPlating")] + #[strum(props(name = "Wall (Plating)", desc = "", value = "26167457"))] + StructureWallPlating = 26167457i32, + #[strum(serialize = "ItemSprayCanPurple")] + #[strum( + props( + name = "Spray Paint (Purple)", + desc = "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.", + value = "30686509" + ) + )] + ItemSprayCanPurple = 30686509i32, + #[strum(serialize = "DynamicGasCanisterNitrousOxide")] + #[strum( + props(name = "Portable Gas Tank (Nitrous Oxide)", desc = "", value = "30727200") + )] + DynamicGasCanisterNitrousOxide = 30727200i32, + #[strum(serialize = "StructureInLineTankGas1x2")] + #[strum( + props( + name = "In-Line Tank Gas", + desc = "A small expansion tank that increases the volume of a pipe network.", + value = "35149429" + ) + )] + StructureInLineTankGas1X2 = 35149429i32, + #[strum(serialize = "ItemSteelSheets")] + #[strum( + props( + name = "Steel Sheets", + desc = "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.", + value = "38555961" + ) + )] + ItemSteelSheets = 38555961i32, + #[strum(serialize = "ItemGasCanisterEmpty")] + #[strum(props(name = "Canister", desc = "", value = "42280099"))] + ItemGasCanisterEmpty = 42280099i32, + #[strum(serialize = "ItemWreckageWallCooler2")] + #[strum(props(name = "Wreckage", desc = "", value = "45733800"))] + ItemWreckageWallCooler2 = 45733800i32, + #[strum(serialize = "ItemPumpkinPie")] + #[strum(props(name = "Pumpkin Pie", desc = "", value = "62768076"))] + ItemPumpkinPie = 62768076i32, + #[strum(serialize = "ItemGasFilterPollutantsM")] + #[strum(props(name = "Medium Filter (Pollutants)", desc = "", value = "63677771"))] + ItemGasFilterPollutantsM = 63677771i32, + #[strum(serialize = "StructurePipeStraight")] + #[strum( + props( + name = "Pipe (Straight)", + desc = "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.", + value = "73728932" + ) + )] + StructurePipeStraight = 73728932i32, + #[strum(serialize = "ItemKitDockingPort")] + #[strum(props(name = "Kit (Docking Port)", desc = "", value = "77421200"))] + ItemKitDockingPort = 77421200i32, + #[strum(serialize = "CartridgeTracker")] + #[strum(props(name = "Cartridge (Tracker)", desc = "", value = "81488783"))] + CartridgeTracker = 81488783i32, + #[strum(serialize = "StructureLarreDockHydroponics")] + #[strum(props(name = "LARrE Dock (Hydroponics)", desc = "", value = "85133079"))] + StructureLarreDockHydroponics = 85133079i32, + #[strum(serialize = "ToyLuna")] + #[strum(props(name = "Toy Luna", desc = "", value = "94730034"))] + ToyLuna = 94730034i32, + #[strum(serialize = "ItemWreckageTurbineGenerator2")] + #[strum(props(name = "Wreckage", desc = "", value = "98602599"))] + ItemWreckageTurbineGenerator2 = 98602599i32, + #[strum(serialize = "StructurePowerUmbilicalFemale")] + #[strum(props(name = "Umbilical Socket (Power)", desc = "", value = "101488029"))] + StructurePowerUmbilicalFemale = 101488029i32, + #[strum(serialize = "DynamicSkeleton")] + #[strum(props(name = "Skeleton", desc = "", value = "106953348"))] + DynamicSkeleton = 106953348i32, + #[strum(serialize = "ItemWaterBottle")] + #[strum( + props( + name = "Water Bottle", + desc = "Delicious and pure H20, refined from local sources as varied as Venusian ice and trans-Solar comets. Empty bottles can be refilled using the Water Bottle Filler.", + value = "107741229" + ) + )] + ItemWaterBottle = 107741229i32, + #[strum(serialize = "DynamicGasCanisterVolatiles")] + #[strum( + props( + name = "Portable Gas Tank (Volatiles)", + desc = "Portable tanks store gas. To refill one, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Don't fill it above 10 MPa, unless you're the sort who loves complicated, flammable emergencies. You can refill a Canister (Volatiles) by attaching it to the tank's striped section. Or you could use a Wrench to attach to a rocket and show it around the Solar System.", + value = "108086870" + ) + )] + DynamicGasCanisterVolatiles = 108086870i32, + #[strum(serialize = "StructureCompositeCladdingRoundedCornerInner")] + #[strum( + props( + name = "Composite Cladding (Rounded Corner Inner)", + desc = "", + value = "110184667" + ) + )] + StructureCompositeCladdingRoundedCornerInner = 110184667i32, + #[strum(serialize = "ItemTerrainManipulator")] + #[strum( + props( + name = "Terrain Manipulator", + desc = "0.Mode0\n1.Mode1", + value = "111280987" + ) + )] + ItemTerrainManipulator = 111280987i32, + #[strum(serialize = "FlareGun")] + #[strum(props(name = "Flare Gun", desc = "", value = "118685786"))] + FlareGun = 118685786i32, + #[strum(serialize = "ItemKitPlanter")] + #[strum(props(name = "Kit (Planter)", desc = "", value = "119096484"))] + ItemKitPlanter = 119096484i32, + #[strum(serialize = "ReagentColorGreen")] + #[strum(props(name = "Color Dye (Green)", desc = "", value = "120807542"))] + ReagentColorGreen = 120807542i32, + #[strum(serialize = "DynamicGasCanisterNitrogen")] + #[strum( + props( + name = "Portable Gas Tank (Nitrogen)", + desc = "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll end up with Nitrogen in places you weren't expecting. You can refill a Canister (Nitrogen) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later.", + value = "121951301" + ) + )] + DynamicGasCanisterNitrogen = 121951301i32, + #[strum(serialize = "ItemKitPressurePlate")] + #[strum(props(name = "Kit (Trigger Plate)", desc = "", value = "123504691"))] + ItemKitPressurePlate = 123504691i32, + #[strum(serialize = "ItemKitLogicSwitch")] + #[strum(props(name = "Kit (Logic Switch)", desc = "", value = "124499454"))] + ItemKitLogicSwitch = 124499454i32, + #[strum(serialize = "StructureCompositeCladdingSpherical")] + #[strum( + props(name = "Composite Cladding (Spherical)", desc = "", value = "139107321") + )] + StructureCompositeCladdingSpherical = 139107321i32, + #[strum(serialize = "ItemLaptop")] + #[strum( + props( + name = "Laptop", + desc = "The Laptop functions as a portable IC editor. To operate the Laptop it must be powered with a battery, have a IC Editor Motherboard in the motherboard slot, and an Integrated Circuit (IC10) in the Programmable Chip Slot.\n\nYou must place the laptop down to interact with the onsreen UI.\n \nConnects to Logic Transmitter", + value = "141535121" + ) + )] + ItemLaptop = 141535121i32, + #[strum(serialize = "ApplianceSeedTray")] + #[strum( + props( + name = "Appliance Seed Tray", + desc = "The seed tray can hold up to twelve plants or seeds and can be used to facilitate fast experimentation and testing of plant genetics.", + value = "142831994" + ) + )] + ApplianceSeedTray = 142831994i32, + #[strum(serialize = "Landingpad_TaxiPieceHold")] + #[strum(props(name = "Landingpad Taxi Hold", desc = "", value = "146051619"))] + LandingpadTaxiPieceHold = 146051619i32, + #[strum(serialize = "StructureFuselageTypeC5")] + #[strum(props(name = "Fuselage (Type C5)", desc = "", value = "147395155"))] + StructureFuselageTypeC5 = 147395155i32, + #[strum(serialize = "ItemKitBasket")] + #[strum(props(name = "Kit (Basket)", desc = "", value = "148305004"))] + ItemKitBasket = 148305004i32, + #[strum(serialize = "StructureRocketCircuitHousing")] + #[strum(props(name = "Rocket Circuit Housing", desc = "", value = "150135861"))] + StructureRocketCircuitHousing = 150135861i32, + #[strum(serialize = "StructurePipeCrossJunction6")] + #[strum( + props( + name = "Pipe (6-Way Junction)", + desc = "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + value = "152378047" + ) + )] + StructurePipeCrossJunction6 = 152378047i32, + #[strum(serialize = "ItemGasFilterNitrogenInfinite")] + #[strum( + props( + name = "Catalytic Filter (Nitrogen)", + desc = "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", + value = "152751131" + ) + )] + ItemGasFilterNitrogenInfinite = 152751131i32, + #[strum(serialize = "StructureStairs4x2RailL")] + #[strum(props(name = "Stairs with Rail (Left)", desc = "", value = "155214029"))] + StructureStairs4X2RailL = 155214029i32, + #[strum(serialize = "NpcChick")] + #[strum(props(name = "Chick", desc = "", value = "155856647"))] + NpcChick = 155856647i32, + #[strum(serialize = "ItemWaspaloyIngot")] + #[strum(props(name = "Ingot (Waspaloy)", desc = "", value = "156348098"))] + ItemWaspaloyIngot = 156348098i32, + #[strum(serialize = "StructureReinforcedWallPaddedWindowThin")] + #[strum( + props( + name = "Reinforced Window (Thin)", + desc = "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", + value = "158502707" + ) + )] + StructureReinforcedWallPaddedWindowThin = 158502707i32, + #[strum(serialize = "ItemKitWaterBottleFiller")] + #[strum(props(name = "Kit (Water Bottle Filler)", desc = "", value = "159886536"))] + ItemKitWaterBottleFiller = 159886536i32, + #[strum(serialize = "ItemEmergencyWrench")] + #[strum(props(name = "Emergency Wrench", desc = "", value = "162553030"))] + ItemEmergencyWrench = 162553030i32, + #[strum(serialize = "StructureChuteDigitalFlipFlopSplitterRight")] + #[strum( + props( + name = "Chute Digital Flip Flop Splitter Right", + desc = "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", + value = "163728359" + ) + )] + StructureChuteDigitalFlipFlopSplitterRight = 163728359i32, + #[strum(serialize = "StructureChuteStraight")] + #[strum( + props( + name = "Chute (Straight)", + desc = "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChutes are fundamental components of chute networks, which allow the transport of items between any machine or device with an import/export slot.", + value = "168307007" + ) + )] + StructureChuteStraight = 168307007i32, + #[strum(serialize = "ItemKitDoor")] + #[strum(props(name = "Kit (Door)", desc = "", value = "168615924"))] + ItemKitDoor = 168615924i32, + #[strum(serialize = "ItemWreckageAirConditioner2")] + #[strum(props(name = "Wreckage", desc = "", value = "169888054"))] + ItemWreckageAirConditioner2 = 169888054i32, + #[strum(serialize = "Landingpad_GasCylinderTankPiece")] + #[strum( + props( + name = "Landingpad Gas Storage", + desc = "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.", + value = "170818567" + ) + )] + LandingpadGasCylinderTankPiece = 170818567i32, + #[strum(serialize = "ItemKitStairs")] + #[strum(props(name = "Kit (Stairs)", desc = "", value = "170878959"))] + ItemKitStairs = 170878959i32, + #[strum(serialize = "ItemPlantSampler")] + #[strum( + props( + name = "Plant Sampler", + desc = "The Plant Sampler allows you to take a gene sample of a growing plant. The sampler can then be placed in the Plant Genetic Analyzer to attain and interpret the results.", + value = "173023800" + ) + )] + ItemPlantSampler = 173023800i32, + #[strum(serialize = "ItemAlienMushroom")] + #[strum(props(name = "Alien Mushroom", desc = "", value = "176446172"))] + ItemAlienMushroom = 176446172i32, + #[strum(serialize = "ItemKitSatelliteDish")] + #[strum(props(name = "Kit (Medium Satellite Dish)", desc = "", value = "178422810"))] + ItemKitSatelliteDish = 178422810i32, + #[strum(serialize = "StructureRocketEngineTiny")] + #[strum(props(name = "Rocket Engine (Tiny)", desc = "", value = "178472613"))] + StructureRocketEngineTiny = 178472613i32, + #[strum(serialize = "StructureWallPaddedNoBorderCorner")] + #[strum( + props(name = "Wall (Padded No Border Corner)", desc = "", value = "179694804") + )] + StructureWallPaddedNoBorderCorner = 179694804i32, + #[strum(serialize = "StructureShelfMedium")] + #[strum( + props( + name = "Shelf Medium", + desc = "A shelf for putting things on, so you can see them.", + value = "182006674" + ) + )] + StructureShelfMedium = 182006674i32, + #[strum(serialize = "StructureExpansionValve")] + #[strum( + props( + name = "Expansion Valve", + desc = "Allows for moving liquids from a liquid pipe into a gas pipe. Only allows liquids to pass in one direction. Typically this is done to allow the liquid to evaporate into a gas as part of an airconditioning loop.", + value = "195298587" + ) + )] + StructureExpansionValve = 195298587i32, + #[strum(serialize = "ItemCableFuse")] + #[strum(props(name = "Kit (Cable Fuses)", desc = "", value = "195442047"))] + ItemCableFuse = 195442047i32, + #[strum(serialize = "ItemKitRoverMKI")] + #[strum(props(name = "Kit (Rover Mk I)", desc = "", value = "197243872"))] + ItemKitRoverMki = 197243872i32, + #[strum(serialize = "DynamicGasCanisterWater")] + #[strum( + props( + name = "Portable Liquid Tank (Water)", + desc = "This portable tank stores liquid, and liquid only. You just have to fill it up. To do this, bolt one to a Kit (Tank Connector) using a Wrench, then connect it to Liquid Pipe (Straight) to supply liquid to a network. \nTry to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun.\nYou can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", + value = "197293625" + ) + )] + DynamicGasCanisterWater = 197293625i32, + #[strum(serialize = "ItemAngleGrinder")] + #[strum( + props( + name = "Angle Grinder", + desc = "Angles-be-gone with the trusty angle grinder.", + value = "201215010" + ) + )] + ItemAngleGrinder = 201215010i32, + #[strum(serialize = "StructureCableCornerH4")] + #[strum(props(name = "Heavy Cable (4-Way Corner)", desc = "", value = "205837861"))] + StructureCableCornerH4 = 205837861i32, + #[strum(serialize = "ItemEmergencySpaceHelmet")] + #[strum(props(name = "Emergency Space Helmet", desc = "", value = "205916793"))] + ItemEmergencySpaceHelmet = 205916793i32, + #[strum(serialize = "ItemKitGovernedGasRocketEngine")] + #[strum( + props(name = "Kit (Pumped Gas Rocket Engine)", desc = "", value = "206848766") + )] + ItemKitGovernedGasRocketEngine = 206848766i32, + #[strum(serialize = "StructurePressureRegulator")] + #[strum( + props( + name = "Pressure Regulator", + desc = "Controlling the flow of gas between two pipe networks, pressure regulators shift gas until a set pressure on the outlet side is achieved, or the gas supply is exhausted. The back pressure regulator, by contrast, will only operate when pressure on the intake side exceeds the set value. With a max pressure of over 20,000kPa, it requires power to operate.", + value = "209854039" + ) + )] + StructurePressureRegulator = 209854039i32, + #[strum(serialize = "StructureCompositeCladdingCylindrical")] + #[strum( + props(name = "Composite Cladding (Cylindrical)", desc = "", value = "212919006") + )] + StructureCompositeCladdingCylindrical = 212919006i32, + #[strum(serialize = "ItemCropHay")] + #[strum(props(name = "Hay", desc = "", value = "215486157"))] + ItemCropHay = 215486157i32, + #[strum(serialize = "ItemKitLogicProcessor")] + #[strum(props(name = "Kit (Logic Processor)", desc = "", value = "220644373"))] + ItemKitLogicProcessor = 220644373i32, + #[strum(serialize = "AutolathePrinterMod")] + #[strum( + props( + name = "Autolathe Printer Mod", + desc = "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + value = "221058307" + ) + )] + AutolathePrinterMod = 221058307i32, + #[strum(serialize = "StructureChuteOverflow")] + #[strum( + props( + name = "Chute Overflow", + desc = "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.", + value = "225377225" + ) + )] + StructureChuteOverflow = 225377225i32, + #[strum(serialize = "ItemLiquidPipeAnalyzer")] + #[strum(props(name = "Kit (Liquid Pipe Analyzer)", desc = "", value = "226055671"))] + ItemLiquidPipeAnalyzer = 226055671i32, + #[strum(serialize = "ItemGoldIngot")] + #[strum( + props( + name = "Ingot (Gold)", + desc = "There is an enduring paradox at the heart of the Stationeers project: An initiative conceived as 'cut-price space exploration' uses Gold as a fundamental ingredient in fabricating so much of its equipment and materiel. ", + value = "226410516" + ) + )] + ItemGoldIngot = 226410516i32, + #[strum(serialize = "KitStructureCombustionCentrifuge")] + #[strum(props(name = "Kit (Combustion Centrifuge)", desc = "", value = "231903234"))] + KitStructureCombustionCentrifuge = 231903234i32, + #[strum(serialize = "ItemChocolateBar")] + #[strum(props(name = "Chocolate Bar", desc = "", value = "234601764"))] + ItemChocolateBar = 234601764i32, + #[strum(serialize = "ItemExplosive")] + #[strum(props(name = "Demolition Charge", desc = "", value = "235361649"))] + ItemExplosive = 235361649i32, + #[strum(serialize = "StructureConsole")] + #[strum( + props( + name = "Console", + desc = "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", + value = "235638270" + ) + )] + StructureConsole = 235638270i32, + #[strum(serialize = "ItemPassiveVent")] + #[strum( + props( + name = "Kit (Passive Vent)", + desc = "This kit creates a Kit (Passive Vent) among other variants.", + value = "238631271" + ) + )] + ItemPassiveVent = 238631271i32, + #[strum(serialize = "ItemMKIIAngleGrinder")] + #[strum( + props( + name = "Mk II Angle Grinder", + desc = "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.", + value = "240174650" + ) + )] + ItemMkiiAngleGrinder = 240174650i32, + #[strum(serialize = "Handgun")] + #[strum(props(name = "Handgun", desc = "", value = "247238062"))] + Handgun = 247238062i32, + #[strum(serialize = "PassiveSpeaker")] + #[strum(props(name = "Passive Speaker", desc = "", value = "248893646"))] + PassiveSpeaker = 248893646i32, + #[strum(serialize = "ItemKitBeacon")] + #[strum(props(name = "Kit (Beacon)", desc = "", value = "249073136"))] + ItemKitBeacon = 249073136i32, + #[strum(serialize = "ItemCharcoal")] + #[strum( + props( + name = "Charcoal", + desc = "Charcoal is a lightweight, black carbon residue produced by heating Biomass in a Arc Furnace. It contains less energy potential than Ore (Coal), but can be used as a basic fuel source. Charcoal can also be substituted for coal in alloy recipes.", + value = "252561409" + ) + )] + ItemCharcoal = 252561409i32, + #[strum(serialize = "StructureSuitStorage")] + #[strum( + props( + name = "Suit Storage", + desc = "As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic.\nWhen powered and connected to and , it will recharge the suit's batteries, refill the Canister (Oxygen) and your Filter (Nitrogen) Gas Canister. The wastetank will be pumped out to the pipe connected to the waste outlet.\nAll the rack's pipes must be connected or the unit will show an error state, but it will still charge the battery.", + value = "255034731" + ) + )] + StructureSuitStorage = 255034731i32, + #[strum(serialize = "ItemCorn")] + #[strum( + props( + name = "Corn", + desc = "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.", + value = "258339687" + ) + )] + ItemCorn = 258339687i32, + #[strum(serialize = "StructurePipeLiquidTJunction")] + #[strum( + props( + name = "Liquid Pipe (T Junction)", + desc = "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + value = "262616717" + ) + )] + StructurePipeLiquidTJunction = 262616717i32, + #[strum(serialize = "StructureLogicBatchReader")] + #[strum(props(name = "Batch Reader", desc = "", value = "264413729"))] + StructureLogicBatchReader = 264413729i32, + #[strum(serialize = "StructureDeepMiner")] + #[strum( + props( + name = "Deep Miner", + desc = "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s", + value = "265720906" + ) + )] + StructureDeepMiner = 265720906i32, + #[strum(serialize = "ItemEmergencyScrewdriver")] + #[strum(props(name = "Emergency Screwdriver", desc = "", value = "266099983"))] + ItemEmergencyScrewdriver = 266099983i32, + #[strum(serialize = "ItemFilterFern")] + #[strum( + props( + name = "Darga Fern", + desc = "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.", + value = "266654416" + ) + )] + ItemFilterFern = 266654416i32, + #[strum(serialize = "StructureCableCorner4Burnt")] + #[strum(props(name = "Burnt Cable (4-Way Corner)", desc = "", value = "268421361"))] + StructureCableCorner4Burnt = 268421361i32, + #[strum(serialize = "StructureFrameCornerCut")] + #[strum( + props( + name = "Steel Frame (Corner Cut)", + desc = "0.Mode0\n1.Mode1", + value = "271315669" + ) + )] + StructureFrameCornerCut = 271315669i32, + #[strum(serialize = "StructureTankSmallInsulated")] + #[strum(props(name = "Tank Small (Insulated)", desc = "", value = "272136332"))] + StructureTankSmallInsulated = 272136332i32, + #[strum(serialize = "StructureCableFuse100k")] + #[strum(props(name = "Fuse (100kW)", desc = "", value = "281380789"))] + StructureCableFuse100K = 281380789i32, + #[strum(serialize = "ItemKitIceCrusher")] + #[strum(props(name = "Kit (Ice Crusher)", desc = "", value = "288111533"))] + ItemKitIceCrusher = 288111533i32, + #[strum(serialize = "ItemKitPowerTransmitter")] + #[strum(props(name = "Kit (Power Transmitter)", desc = "", value = "291368213"))] + ItemKitPowerTransmitter = 291368213i32, + #[strum(serialize = "StructurePipeLiquidCrossJunction6")] + #[strum( + props( + name = "Liquid Pipe (6-Way Junction)", + desc = "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + value = "291524699" + ) + )] + StructurePipeLiquidCrossJunction6 = 291524699i32, + #[strum(serialize = "ItemKitLandingPadBasic")] + #[strum(props(name = "Kit (Landing Pad Basic)", desc = "", value = "293581318"))] + ItemKitLandingPadBasic = 293581318i32, + #[strum(serialize = "StructureInsulatedPipeLiquidStraight")] + #[strum( + props( + name = "Insulated Liquid Pipe (Straight)", + desc = "Liquid piping with very low temperature loss or gain.", + value = "295678685" + ) + )] + StructureInsulatedPipeLiquidStraight = 295678685i32, + #[strum(serialize = "StructureWallFlatCornerSquare")] + #[strum(props(name = "Wall (Flat Corner Square)", desc = "", value = "298130111"))] + StructureWallFlatCornerSquare = 298130111i32, + #[strum(serialize = "ItemHat")] + #[strum( + props( + name = "Hat", + desc = "As the name suggests, this is a hat.", + value = "299189339" + ) + )] + ItemHat = 299189339i32, + #[strum(serialize = "ItemWaterPipeDigitalValve")] + #[strum(props(name = "Kit (Liquid Digital Valve)", desc = "", value = "309693520"))] + ItemWaterPipeDigitalValve = 309693520i32, + #[strum(serialize = "SeedBag_Mushroom")] + #[strum( + props( + name = "Mushroom Seeds", + desc = "Grow a Mushroom.", + value = "311593418" + ) + )] + SeedBagMushroom = 311593418i32, + #[strum(serialize = "StructureCableCorner3Burnt")] + #[strum(props(name = "Burnt Cable (3-Way Corner)", desc = "", value = "318437449"))] + StructureCableCorner3Burnt = 318437449i32, + #[strum(serialize = "StructureLogicSwitch2")] + #[strum(props(name = "Switch", desc = "", value = "321604921"))] + StructureLogicSwitch2 = 321604921i32, + #[strum(serialize = "StructureOccupancySensor")] + #[strum( + props( + name = "Occupancy Sensor", + desc = "Will be triggered if there is a player in the same room as the sensor. The quantity variable will show the number of players. You can use configure it to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet. This sensor only works when placed in a room.", + value = "322782515" + ) + )] + StructureOccupancySensor = 322782515i32, + #[strum(serialize = "ItemKitSDBHopper")] + #[strum(props(name = "Kit (SDB Hopper)", desc = "", value = "323957548"))] + ItemKitSdbHopper = 323957548i32, + #[strum(serialize = "ItemMKIIDrill")] + #[strum( + props( + name = "Mk II Drill", + desc = "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", + value = "324791548" + ) + )] + ItemMkiiDrill = 324791548i32, + #[strum(serialize = "StructureCompositeFloorGrating")] + #[strum( + props( + name = "Composite Floor Grating", + desc = "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.", + value = "324868581" + ) + )] + StructureCompositeFloorGrating = 324868581i32, + #[strum(serialize = "ItemKitSleeper")] + #[strum(props(name = "Kit (Sleeper)", desc = "", value = "326752036"))] + ItemKitSleeper = 326752036i32, + #[strum(serialize = "EntityChickenBrown")] + #[strum( + props( + name = "Entity Chicken Brown", + desc = "Like so many of its brethren, this is a chicken. A brown one. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", + value = "334097180" + ) + )] + EntityChickenBrown = 334097180i32, + #[strum(serialize = "StructurePassiveVent")] + #[strum( + props( + name = "Passive Vent", + desc = "Passive vents allow gases to move into and out of pipe networks, which are closed systems unless connected to a device or structure. Passive vents are not powered, merely an aperture, essentially turning an enclosed space into part of the pipe network. ", + value = "335498166" + ) + )] + StructurePassiveVent = 335498166i32, + #[strum(serialize = "StructureAutolathe")] + #[strum( + props( + name = "Autolathe", + desc = "The foundation of most Stationeer fabrication systems, the ExMin autolathe is a multi-axis molecular compositional system. Its complexity demands considerable time to assemble, but it remains an indispensable creation tool. Upgrade the device using a Autolathe Printer Mod for additional recipes and faster processing speeds.\n\t ", + value = "336213101" + ) + )] + StructureAutolathe = 336213101i32, + #[strum(serialize = "AccessCardKhaki")] + #[strum(props(name = "Access Card (Khaki)", desc = "", value = "337035771"))] + AccessCardKhaki = 337035771i32, + #[strum(serialize = "StructureBlastDoor")] + #[strum( + props( + name = "Blast Door", + desc = "Airtight and almost undamageable, the original 'Millmar' series of blast door was designed by off-world mining giant Recurso to protect asteroid-mining facilities from nuclear-incident-level explosive decompression.\nShort of a pocket-sized singularity blinking into the local space-time frame, there is effectively no limit to the pressure these blast doors can contain - ideal for constructing airlocks in pressure-sensitive environments.", + value = "337416191" + ) + )] + StructureBlastDoor = 337416191i32, + #[strum(serialize = "ItemKitWeatherStation")] + #[strum(props(name = "Kit (Weather Station)", desc = "", value = "337505889"))] + ItemKitWeatherStation = 337505889i32, + #[strum(serialize = "StructureStairwellFrontRight")] + #[strum(props(name = "Stairwell (Front Right)", desc = "", value = "340210934"))] + StructureStairwellFrontRight = 340210934i32, + #[strum(serialize = "ItemKitGrowLight")] + #[strum(props(name = "Kit (Grow Light)", desc = "", value = "341030083"))] + ItemKitGrowLight = 341030083i32, + #[strum(serialize = "StructurePictureFrameThickMountLandscapeSmall")] + #[strum( + props( + name = "Picture Frame Thick Landscape Small", + desc = "", + value = "347154462" + ) + )] + StructurePictureFrameThickMountLandscapeSmall = 347154462i32, + #[strum(serialize = "ItemKitLarreDockCollector")] + #[strum(props(name = "Kit (LArRE Dock Collector)", desc = "", value = "347658127"))] + ItemKitLarreDockCollector = 347658127i32, + #[strum(serialize = "RoverCargo")] + #[strum( + props( + name = "Rover (Cargo)", + desc = "Connects to Logic Transmitter", + value = "350726273" + ) + )] + RoverCargo = 350726273i32, + #[strum(serialize = "StructureInsulatedPipeLiquidCrossJunction4")] + #[strum( + props( + name = "Insulated Liquid Pipe (4-Way Junction)", + desc = "Liquid piping with very low temperature loss or gain.", + value = "363303270" + ) + )] + StructureInsulatedPipeLiquidCrossJunction4 = 363303270i32, + #[strum(serialize = "ItemHardBackpack")] + #[strum( + props( + name = "Hardsuit Backpack", + desc = "This backpack can be useful when you are working inside and don't need to fly around.", + value = "374891127" + ) + )] + ItemHardBackpack = 374891127i32, + #[strum(serialize = "ItemKitDynamicLiquidCanister")] + #[strum(props(name = "Kit (Portable Liquid Tank)", desc = "", value = "375541286"))] + ItemKitDynamicLiquidCanister = 375541286i32, + #[strum(serialize = "ItemKitGasGenerator")] + #[strum(props(name = "Kit (Gas Fuel Generator)", desc = "", value = "377745425"))] + ItemKitGasGenerator = 377745425i32, + #[strum(serialize = "StructureBlocker")] + #[strum(props(name = "Blocker", desc = "", value = "378084505"))] + StructureBlocker = 378084505i32, + #[strum(serialize = "StructurePressureFedLiquidEngine")] + #[strum( + props( + name = "Pressure Fed Liquid Engine", + desc = "Highly efficient and powerful, the Pressure Fed Liquid Engine is a challenging engine to run in a stable configuration. Liquid is pulled from the input into the engine based on the input gas pressure. Some gas is also moved in this process so Stationeers will need to devise a system to maintain a high gas pressure in the liquid input pipe. The second liquid pipe connection is an optional heat-exchanger connection which exchanges heat between the pipes contents and the engine bell, the Setting variable drives the effectiveness of the heat-exchanger.", + value = "379750958" + ) + )] + StructurePressureFedLiquidEngine = 379750958i32, + #[strum(serialize = "ItemMiningPackage")] + #[strum(props(name = "Mining Supplies Package", desc = "", value = "384478267"))] + ItemMiningPackage = 384478267i32, + #[strum(serialize = "ItemKitLarreDockAtmos")] + #[strum(props(name = "Kit (LArRE Dock Atmos)", desc = "", value = "385528206"))] + ItemKitLarreDockAtmos = 385528206i32, + #[strum(serialize = "ItemPureIceNitrous")] + #[strum( + props( + name = "Pure Ice NitrousOxide", + desc = "A frozen chunk of pure Nitrous Oxide", + value = "386754635" + ) + )] + ItemPureIceNitrous = 386754635i32, + #[strum(serialize = "StructureWallSmallPanelsMonoChrome")] + #[strum( + props(name = "Wall (Small Panels Mono Chrome)", desc = "", value = "386820253") + )] + StructureWallSmallPanelsMonoChrome = 386820253i32, + #[strum(serialize = "ItemMKIIDuctTape")] + #[strum( + props( + name = "Mk II Duct Tape", + desc = "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage.", + value = "388774906" + ) + )] + ItemMkiiDuctTape = 388774906i32, + #[strum(serialize = "ItemWreckageStructureRTG1")] + #[strum(props(name = "Wreckage", desc = "", value = "391453348"))] + ItemWreckageStructureRtg1 = 391453348i32, + #[strum(serialize = "ItemPipeLabel")] + #[strum( + props( + name = "Kit (Pipe Label)", + desc = "This kit creates a Pipe Label.", + value = "391769637" + ) + )] + ItemPipeLabel = 391769637i32, + #[strum(serialize = "DynamicGasCanisterPollutants")] + #[strum( + props(name = "Portable Gas Tank (Pollutants)", desc = "", value = "396065382") + )] + DynamicGasCanisterPollutants = 396065382i32, + #[strum(serialize = "NpcChicken")] + #[strum(props(name = "Chicken", desc = "", value = "399074198"))] + NpcChicken = 399074198i32, + #[strum(serialize = "RailingElegant01")] + #[strum(props(name = "Railing Elegant (Type 1)", desc = "", value = "399661231"))] + RailingElegant01 = 399661231i32, + #[strum(serialize = "StructureBench1")] + #[strum(props(name = "Bench (Counter Style)", desc = "", value = "406745009"))] + StructureBench1 = 406745009i32, + #[strum(serialize = "ItemAstroloyIngot")] + #[strum( + props( + name = "Ingot (Astroloy)", + desc = "Due to the original Stationeer manual collapsing into a singularity, Astroloy recipes have been warped by spacetime contortions. The correct Astroloy recipe, as memorialized for all time in a series of charming plastic icons, is 1.0 Copper, 1.0 Cobalt, and 2.0 Steel.", + value = "412924554" + ) + )] + ItemAstroloyIngot = 412924554i32, + #[strum(serialize = "ItemGasFilterCarbonDioxideM")] + #[strum( + props(name = "Medium Filter (Carbon Dioxide)", desc = "", value = "416897318") + )] + ItemGasFilterCarbonDioxideM = 416897318i32, + #[strum(serialize = "ItemPillStun")] + #[strum( + props( + name = "Pill (Paralysis)", + desc = "Through rarely publicized, the existence of this pill is an open secret. For use when all else has failed, the Sayonara Suppository immobilizes and rapidly ends the average Stationeer. The delivery mode ensures that if a Stationeer chooses to take this pill, they really have to want it.", + value = "418958601" + ) + )] + ItemPillStun = 418958601i32, + #[strum(serialize = "ItemKitCrate")] + #[strum(props(name = "Kit (Crate)", desc = "", value = "429365598"))] + ItemKitCrate = 429365598i32, + #[strum(serialize = "AccessCardPink")] + #[strum(props(name = "Access Card (Pink)", desc = "", value = "431317557"))] + AccessCardPink = 431317557i32, + #[strum(serialize = "StructureWaterPipeMeter")] + #[strum(props(name = "Liquid Pipe Meter", desc = "", value = "433184168"))] + StructureWaterPipeMeter = 433184168i32, + #[strum(serialize = "Robot")] + #[strum( + props( + name = "AIMeE Bot", + desc = "Designed by - presumably drunk - Norsec roboticists, AIMeE (or Automated Independent Mechanical Entity) can be a Stationeer's best friend, or tiresome nemesis, or both several times in the same day. \n \nIntended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard.\n\nAIMEe has 7 modes:\n\nRobotMode.None = 0 = Do nothing\nRobotMode.None = 1 = Follow nearest player\nRobotMode.None = 2 = Move to target in straight line\nRobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius\nRobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids\nRobotMode.None = 5 = Path(find) to target\nRobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter", + value = "434786784" + ) + )] + Robot = 434786784i32, + #[strum(serialize = "StructureChuteValve")] + #[strum( + props( + name = "Chute Valve", + desc = "The Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute.", + value = "434875271" + ) + )] + StructureChuteValve = 434875271i32, + #[strum(serialize = "StructurePipeAnalysizer")] + #[strum( + props( + name = "Pipe Analyzer", + desc = "Allegedly the outcome of a weekend father-daughter electronics project by an overzealous {ExMin engineer, the pipe analyzer is essentially a more advanced version of the Pipe Meter.\nDisplaying the internal pressure of pipe networks, it also reads out temperature and gas contents, and can be connected to a Console or Computer (Modern) via a {Logic system.", + value = "435685051" + ) + )] + StructurePipeAnalysizer = 435685051i32, + #[strum(serialize = "StructureLogicBatchSlotReader")] + #[strum(props(name = "Batch Slot Reader", desc = "", value = "436888930"))] + StructureLogicBatchSlotReader = 436888930i32, + #[strum(serialize = "StructureSatelliteDish")] + #[strum( + props( + name = "Medium Satellite Dish", + desc = "This medium communications unit can be used to communicate with nearby trade vessels.\n \nWhen connected to a Computer (Modern) containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", + value = "439026183" + ) + )] + StructureSatelliteDish = 439026183i32, + #[strum(serialize = "StructureIceCrusher")] + #[strum( + props( + name = "Ice Crusher", + desc = "The Recurso KoolAuger converts various ices into their respective gases and liquids.\nA remarkably smart and compact sublimation-melting unit, it produces gas or liquid depending on the ice being processed. The upper outlet is gas, the lower for liquid, and while you can attach any pipe you like to either outlet, it will only function if the correct network is attached. It will also only pass gas or liquid into a network if it is powered and turned on.\nIf the KoolAuger is full, it will not accept any further ice until the gas or liquid contents is drained. In this state, it will flash a yellow error state on the activation switch.", + value = "443849486" + ) + )] + StructureIceCrusher = 443849486i32, + #[strum(serialize = "PipeBenderMod")] + #[strum( + props( + name = "Pipe Bender Mod", + desc = "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + value = "443947415" + ) + )] + PipeBenderMod = 443947415i32, + #[strum(serialize = "StructureAdvancedComposter")] + #[strum( + props( + name = "Advanced Composter", + desc = "The advanced composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires Water and power to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat. \n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times\n", + value = "446212963" + ) + )] + StructureAdvancedComposter = 446212963i32, + #[strum(serialize = "ItemKitLargeDirectHeatExchanger")] + #[strum( + props(name = "Kit (Large Direct Heat Exchanger)", desc = "", value = "450164077") + )] + ItemKitLargeDirectHeatExchanger = 450164077i32, + #[strum(serialize = "ItemKitInsulatedPipe")] + #[strum(props(name = "Kit (Insulated Pipe)", desc = "", value = "452636699"))] + ItemKitInsulatedPipe = 452636699i32, + #[strum(serialize = "ItemCocoaPowder")] + #[strum(props(name = "Cocoa Powder", desc = "", value = "457286516"))] + ItemCocoaPowder = 457286516i32, + #[strum(serialize = "AccessCardPurple")] + #[strum(props(name = "Access Card (Purple)", desc = "", value = "459843265"))] + AccessCardPurple = 459843265i32, + #[strum(serialize = "ItemGasFilterNitrousOxideL")] + #[strum( + props(name = "Heavy Filter (Nitrous Oxide)", desc = "", value = "465267979") + )] + ItemGasFilterNitrousOxideL = 465267979i32, + #[strum(serialize = "StructurePipeCowl")] + #[strum(props(name = "Pipe Cowl", desc = "", value = "465816159"))] + StructurePipeCowl = 465816159i32, + #[strum(serialize = "StructureSDBHopperAdvanced")] + #[strum(props(name = "SDB Hopper Advanced", desc = "", value = "467225612"))] + StructureSdbHopperAdvanced = 467225612i32, + #[strum(serialize = "StructureCableJunctionH")] + #[strum( + props(name = "Heavy Cable (3-Way Junction)", desc = "", value = "469451637") + )] + StructureCableJunctionH = 469451637i32, + #[strum(serialize = "ItemHEMDroidRepairKit")] + #[strum( + props( + name = "HEMDroid Repair Kit", + desc = "Repairs damaged HEM-Droids to full health.", + value = "470636008" + ) + )] + ItemHemDroidRepairKit = 470636008i32, + #[strum(serialize = "ItemKitRocketCargoStorage")] + #[strum(props(name = "Kit (Rocket Cargo Storage)", desc = "", value = "479850239"))] + ItemKitRocketCargoStorage = 479850239i32, + #[strum(serialize = "StructureLiquidPressureRegulator")] + #[strum( + props( + name = "Liquid Volume Regulator", + desc = "Regulates the volume ratio of liquid in the output Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", + value = "482248766" + ) + )] + StructureLiquidPressureRegulator = 482248766i32, + #[strum(serialize = "SeedBag_Switchgrass")] + #[strum(props(name = "Switchgrass Seed", desc = "", value = "488360169"))] + SeedBagSwitchgrass = 488360169i32, + #[strum(serialize = "ItemKitLadder")] + #[strum(props(name = "Kit (Ladder)", desc = "", value = "489494578"))] + ItemKitLadder = 489494578i32, + #[strum(serialize = "StructureLogicButton")] + #[strum(props(name = "Button", desc = "", value = "491845673"))] + StructureLogicButton = 491845673i32, + #[strum(serialize = "ItemRTG")] + #[strum( + props( + name = "Kit (Creative RTG)", + desc = "This kit creates that miracle of modern science, a Kit (Creative RTG).", + value = "495305053" + ) + )] + ItemRtg = 495305053i32, + #[strum(serialize = "ItemKitAIMeE")] + #[strum(props(name = "Kit (AIMeE)", desc = "", value = "496830914"))] + ItemKitAiMeE = 496830914i32, + #[strum(serialize = "ItemSprayCanWhite")] + #[strum( + props( + name = "Spray Paint (White)", + desc = "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.", + value = "498481505" + ) + )] + ItemSprayCanWhite = 498481505i32, + #[strum(serialize = "ItemElectrumIngot")] + #[strum(props(name = "Ingot (Electrum)", desc = "", value = "502280180"))] + ItemElectrumIngot = 502280180i32, + #[strum(serialize = "MotherboardLogic")] + #[strum( + props( + name = "Logic Motherboard", + desc = "Motherboards are connected to Computer (Modern)s to perform various technical functions.\nThe Norsec-designed K-cops logic motherboard allows Stationeers to set variables and actions on specific logic-controlled items.", + value = "502555944" + ) + )] + MotherboardLogic = 502555944i32, + #[strum(serialize = "StructureStairwellBackLeft")] + #[strum(props(name = "Stairwell (Back Left)", desc = "", value = "505924160"))] + StructureStairwellBackLeft = 505924160i32, + #[strum(serialize = "ItemResidentialPackage")] + #[strum( + props(name = "Residential Supplies Package", desc = "", value = "509629504") + )] + ItemResidentialPackage = 509629504i32, + #[strum(serialize = "ItemKitAccessBridge")] + #[strum(props(name = "Kit (Access Bridge)", desc = "", value = "513258369"))] + ItemKitAccessBridge = 513258369i32, + #[strum(serialize = "StructureRocketTransformerSmall")] + #[strum(props(name = "Transformer Small (Rocket)", desc = "", value = "518925193"))] + StructureRocketTransformerSmall = 518925193i32, + #[strum(serialize = "DynamicAirConditioner")] + #[strum( + props( + name = "Portable Air Conditioner", + desc = "The Sinotai-designed Huxi portable air conditioner cools by drawing heat from the atmosphere and storing it, or adding heat to the atmosphere from its internal tank. With a max internal pressure of 8106kPa, its capacity is relatively limited, physics being clear on this subject. To extend its temperature storage ability, bolt the Huxi to a Tank Connector, then connect it to a pipe network supplying hot or cold gases.", + value = "519913639" + ) + )] + DynamicAirConditioner = 519913639i32, + #[strum(serialize = "ItemKitToolManufactory")] + #[strum(props(name = "Kit (Tool Manufactory)", desc = "", value = "529137748"))] + ItemKitToolManufactory = 529137748i32, + #[strum(serialize = "ItemKitSign")] + #[strum(props(name = "Kit (Sign)", desc = "", value = "529996327"))] + ItemKitSign = 529996327i32, + #[strum(serialize = "StructureCompositeCladdingSphericalCap")] + #[strum( + props( + name = "Composite Cladding (Spherical Cap)", + desc = "", + value = "534213209" + ) + )] + StructureCompositeCladdingSphericalCap = 534213209i32, + #[strum(serialize = "ItemPureIceLiquidOxygen")] + #[strum( + props( + name = "Pure Ice Liquid Oxygen", + desc = "A frozen chunk of pure Liquid Oxygen", + value = "541621589" + ) + )] + ItemPureIceLiquidOxygen = 541621589i32, + #[strum(serialize = "ItemWreckageStructureWeatherStation003")] + #[strum(props(name = "Wreckage", desc = "", value = "542009679"))] + ItemWreckageStructureWeatherStation003 = 542009679i32, + #[strum(serialize = "StructureInLineTankLiquid1x1")] + #[strum( + props( + name = "In-Line Tank Small Liquid", + desc = "A small expansion tank that increases the volume of a pipe network.", + value = "543645499" + ) + )] + StructureInLineTankLiquid1X1 = 543645499i32, + #[strum(serialize = "ItemBatteryCellNuclear")] + #[strum( + props( + name = "Battery Cell (Nuclear)", + desc = "Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld.\n\nPOWER OUTPUT\nPushing the power-weight balance to its limits, the 'nuke' has a 2.3 megawatt charge (2304000W), reflecting its reliance on exotic superalloys.", + value = "544617306" + ) + )] + ItemBatteryCellNuclear = 544617306i32, + #[strum(serialize = "ItemCornSoup")] + #[strum( + props( + name = "Corn Soup", + desc = "Made using Cooked Corn and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Faily high in nutrition, canned food does not decay.", + value = "545034114" + ) + )] + ItemCornSoup = 545034114i32, + #[strum(serialize = "StructureAdvancedFurnace")] + #[strum( + props( + name = "Advanced Furnace", + desc = "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.", + value = "545937711" + ) + )] + StructureAdvancedFurnace = 545937711i32, + #[strum(serialize = "StructureLogicRocketUplink")] + #[strum(props(name = "Logic Uplink", desc = "", value = "546002924"))] + StructureLogicRocketUplink = 546002924i32, + #[strum(serialize = "StructureLogicDial")] + #[strum( + props( + name = "Dial", + desc = "An assignable dial with up to 1000 modes.", + value = "554524804" + ) + )] + StructureLogicDial = 554524804i32, + #[strum(serialize = "StructureLightLongWide")] + #[strum(props(name = "Wall Light (Long Wide)", desc = "", value = "555215790"))] + StructureLightLongWide = 555215790i32, + #[strum(serialize = "StructureProximitySensor")] + #[strum( + props( + name = "Proximity Sensor", + desc = "Will be triggered if there is a player in the range of the sensor (as defined by the setting dial). The quantity variable will show the number of players. You can configure the sensor to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet.", + value = "568800213" + ) + )] + StructureProximitySensor = 568800213i32, + #[strum(serialize = "AccessCardYellow")] + #[strum(props(name = "Access Card (Yellow)", desc = "", value = "568932536"))] + AccessCardYellow = 568932536i32, + #[strum(serialize = "StructureDiodeSlide")] + #[strum(props(name = "Diode Slide", desc = "", value = "576516101"))] + StructureDiodeSlide = 576516101i32, + #[strum(serialize = "ItemKitSecurityPrinter")] + #[strum(props(name = "Kit (Security Printer)", desc = "", value = "578078533"))] + ItemKitSecurityPrinter = 578078533i32, + #[strum(serialize = "ItemKitCentrifuge")] + #[strum(props(name = "Kit (Centrifuge)", desc = "", value = "578182956"))] + ItemKitCentrifuge = 578182956i32, + #[strum(serialize = "DynamicHydroponics")] + #[strum(props(name = "Portable Hydroponics", desc = "", value = "587726607"))] + DynamicHydroponics = 587726607i32, + #[strum(serialize = "ItemKitPipeUtilityLiquid")] + #[strum(props(name = "Kit (Pipe Utility Liquid)", desc = "", value = "595478589"))] + ItemKitPipeUtilityLiquid = 595478589i32, + #[strum(serialize = "StructureCompositeFloorGrating4")] + #[strum( + props(name = "Composite Floor Grating (Type 4)", desc = "", value = "600133846") + )] + StructureCompositeFloorGrating4 = 600133846i32, + #[strum(serialize = "StructureCableStraight")] + #[strum( + props( + name = "Cable (Straight)", + desc = "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool'.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", + value = "605357050" + ) + )] + StructureCableStraight = 605357050i32, + #[strum(serialize = "StructureLiquidTankSmallInsulated")] + #[strum(props(name = "Insulated Liquid Tank Small", desc = "", value = "608607718"))] + StructureLiquidTankSmallInsulated = 608607718i32, + #[strum(serialize = "ItemKitWaterPurifier")] + #[strum(props(name = "Kit (Water Purifier)", desc = "", value = "611181283"))] + ItemKitWaterPurifier = 611181283i32, + #[strum(serialize = "ItemKitLiquidTankInsulated")] + #[strum(props(name = "Kit (Insulated Liquid Tank)", desc = "", value = "617773453"))] + ItemKitLiquidTankInsulated = 617773453i32, + #[strum(serialize = "StructureWallSmallPanelsAndHatch")] + #[strum( + props(name = "Wall (Small Panels And Hatch)", desc = "", value = "619828719") + )] + StructureWallSmallPanelsAndHatch = 619828719i32, + #[strum(serialize = "ItemGasFilterNitrogen")] + #[strum( + props( + name = "Filter (Nitrogen)", + desc = "Filters are used to capture various gases, which can be disposed of or used elsewhere. Nitrogen is a byproduct of smelting various ores, notably Ice (Nitrice), which may be combined with Oxygen to make a breathable - and considerably less flammable - atmosphere.", + value = "632853248" + ) + )] + ItemGasFilterNitrogen = 632853248i32, + #[strum(serialize = "ReagentColorYellow")] + #[strum(props(name = "Color Dye (Yellow)", desc = "", value = "635208006"))] + ReagentColorYellow = 635208006i32, + #[strum(serialize = "StructureWallPadding")] + #[strum(props(name = "Wall (Padding)", desc = "", value = "635995024"))] + StructureWallPadding = 635995024i32, + #[strum(serialize = "ItemKitPassthroughHeatExchanger")] + #[strum( + props(name = "Kit (CounterFlow Heat Exchanger)", desc = "", value = "636112787") + )] + ItemKitPassthroughHeatExchanger = 636112787i32, + #[strum(serialize = "StructureChuteDigitalValveLeft")] + #[strum( + props( + name = "Chute Digital Valve Left", + desc = "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", + value = "648608238" + ) + )] + StructureChuteDigitalValveLeft = 648608238i32, + #[strum(serialize = "ItemRocketMiningDrillHeadHighSpeedIce")] + #[strum( + props( + name = "Mining-Drill Head (High Speed Ice)", + desc = "", + value = "653461728" + ) + )] + ItemRocketMiningDrillHeadHighSpeedIce = 653461728i32, + #[strum(serialize = "ItemKitLarreDockHydroponics")] + #[strum( + props(name = "Kit (LArRE Dock Hydroponics)", desc = "", value = "656181408") + )] + ItemKitLarreDockHydroponics = 656181408i32, + #[strum(serialize = "ItemWreckageStructureWeatherStation007")] + #[strum(props(name = "Wreckage", desc = "", value = "656649558"))] + ItemWreckageStructureWeatherStation007 = 656649558i32, + #[strum(serialize = "ItemRice")] + #[strum( + props( + name = "Rice", + desc = "Rice grows at a moderate rate as long as its supplied with plenty of water. Being more dependant on water, rice plants can easily die during periods of drought.", + value = "658916791" + ) + )] + ItemRice = 658916791i32, + #[strum(serialize = "ItemPlasticSheets")] + #[strum(props(name = "Plastic Sheets", desc = "", value = "662053345"))] + ItemPlasticSheets = 662053345i32, + #[strum(serialize = "ItemKitTransformerSmall")] + #[strum(props(name = "Kit (Transformer Small)", desc = "", value = "665194284"))] + ItemKitTransformerSmall = 665194284i32, + #[strum(serialize = "StructurePipeLiquidStraight")] + #[strum( + props( + name = "Liquid Pipe (Straight)", + desc = "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.", + value = "667597982" + ) + )] + StructurePipeLiquidStraight = 667597982i32, + #[strum(serialize = "ItemSpaceIce")] + #[strum(props(name = "Space Ice", desc = "", value = "675686937"))] + ItemSpaceIce = 675686937i32, + #[strum(serialize = "ItemRemoteDetonator")] + #[strum( + props(name = "Remote Detonator", desc = "0.Mode0\n1.Mode1", value = "678483886") + )] + ItemRemoteDetonator = 678483886i32, + #[strum(serialize = "ItemCocoaTree")] + #[strum(props(name = "Cocoa", desc = "", value = "680051921"))] + ItemCocoaTree = 680051921i32, + #[strum(serialize = "ItemKitAirlockGate")] + #[strum(props(name = "Kit (Hangar Door)", desc = "", value = "682546947"))] + ItemKitAirlockGate = 682546947i32, + #[strum(serialize = "ItemScrewdriver")] + #[strum( + props( + name = "Screwdriver", + desc = "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units.", + value = "687940869" + ) + )] + ItemScrewdriver = 687940869i32, + #[strum(serialize = "ItemTomatoSoup")] + #[strum( + props( + name = "Tomato Soup", + desc = "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.", + value = "688734890" + ) + )] + ItemTomatoSoup = 688734890i32, + #[strum(serialize = "StructureCentrifuge")] + #[strum( + props( + name = "Centrifuge", + desc = "If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. \n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. \n Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. \n If openned while powered on, the centrifuge will enter an errored state and reduce its rpm to 0 and then export any items.", + value = "690945935" + ) + )] + StructureCentrifuge = 690945935i32, + #[strum(serialize = "StructureBlockBed")] + #[strum(props(name = "Block Bed", desc = "", value = "697908419"))] + StructureBlockBed = 697908419i32, + #[strum(serialize = "ItemBatteryCell")] + #[strum( + props( + name = "Battery Cell (Small)", + desc = "Harnessing a design pioneered in the early 21st century, the small battery cell is the Stationeer's basic unit of portable electrical power. While it lacks the charge of a Battery Cell (Large) or Battery Cell (Nuclear), it has the humble advantage of being fabricated from basic resources.\n\nPOWER OUTPUT\nThe small cell stores up to 36000 watts of power.", + value = "700133157" + ) + )] + ItemBatteryCell = 700133157i32, + #[strum(serialize = "ItemSpaceHelmet")] + #[strum( + props( + name = "Space Helmet", + desc = "The basic space helmet insulates Stationeers against everything from hard vacuum to weird cooking smells. Providing a pressure-controlled, breathable atmosphere, it comes with a built-in light powered by your Eva Suit Battery Cell (Small).\nIt also incorporates a lock/unlock feature to avoid accidental opening, as well as a flush function to expel and replace the internal atmosphere. If damaged, use Duct Tape to fix it, or paint it any color you like using the Paint Mixer.", + value = "714830451" + ) + )] + ItemSpaceHelmet = 714830451i32, + #[strum(serialize = "StructureCompositeWall02")] + #[strum(props(name = "Composite Wall (Type 2)", desc = "", value = "718343384"))] + StructureCompositeWall02 = 718343384i32, + #[strum(serialize = "ItemKitRocketCircuitHousing")] + #[strum( + props(name = "Kit (Rocket Circuit Housing)", desc = "", value = "721251202") + )] + ItemKitRocketCircuitHousing = 721251202i32, + #[strum(serialize = "ItemKitResearchMachine")] + #[strum(props(name = "Kit Research Machine", desc = "", value = "724776762"))] + ItemKitResearchMachine = 724776762i32, + #[strum(serialize = "ItemElectronicParts")] + #[strum(props(name = "Electronic Parts", desc = "", value = "731250882"))] + ItemElectronicParts = 731250882i32, + #[strum(serialize = "ItemKitShower")] + #[strum(props(name = "Kit (Shower)", desc = "", value = "735858725"))] + ItemKitShower = 735858725i32, + #[strum(serialize = "StructureUnloader")] + #[strum( + props( + name = "Unloader", + desc = "The Xigo Re:Gurge is a handy unit for unloading any items inserted into it, and feeding them into a chute network. For instance, if you add a full Mining Belt, the Re:Gurge will empty a mining belt of its contents, insert them into the chute network, then insert the mining belt itself. A Sorter is recommended to reclaim the mining belt.\n\nOutput = 0 exporting the main item\nOutput = 1 exporting items inside and eventually the main item.", + value = "750118160" + ) + )] + StructureUnloader = 750118160i32, + #[strum(serialize = "ItemKitRailing")] + #[strum(props(name = "Kit (Railing)", desc = "", value = "750176282"))] + ItemKitRailing = 750176282i32, + #[strum(serialize = "StructureFridgeSmall")] + #[strum( + props( + name = "Fridge Small", + desc = "Essentially a heavily insulated box that allows users to pipe in any desired atmosphere, the Recurso Minibar fridge was a simple solution to the problem of food decay. It stores a small number of items, at any temperature you can muster.\n \n For more information about food preservation, visit the food decay section of the Stationpedia.", + value = "751887598" + ) + )] + StructureFridgeSmall = 751887598i32, + #[strum(serialize = "DynamicScrubber")] + #[strum( + props( + name = "Portable Air Scrubber", + desc = "A portable scrubber does just what it sounds like: removes specific substances from the air. For instance, attaching a Filter (Carbon Dioxide) will pull Carbon Dioxide from the surrounding atmosphere. Note that the scrubber has room for one battery and two filters, which will double its operating speed. Neat. When it reaches an internal pressure of 8106kPA, an error signal will flash on the switch, indicating it needs to be emptied. Either vent it directly, or attach it to a pipe network via a Kit (Tank Connector) and a Wrench.", + value = "755048589" + ) + )] + DynamicScrubber = 755048589i32, + #[strum(serialize = "ItemKitEngineLarge")] + #[strum(props(name = "Kit (Engine Large)", desc = "", value = "755302726"))] + ItemKitEngineLarge = 755302726i32, + #[strum(serialize = "ItemKitTank")] + #[strum(props(name = "Kit (Tank)", desc = "", value = "771439840"))] + ItemKitTank = 771439840i32, + #[strum(serialize = "ItemLiquidCanisterSmart")] + #[strum( + props( + name = "Liquid Canister (Smart)", + desc = "0.Mode0\n1.Mode1", + value = "777684475" + ) + )] + ItemLiquidCanisterSmart = 777684475i32, + #[strum(serialize = "StructureWallArchTwoTone")] + #[strum(props(name = "Wall (Arch Two Tone)", desc = "", value = "782529714"))] + StructureWallArchTwoTone = 782529714i32, + #[strum(serialize = "ItemAuthoringTool")] + #[strum(props(name = "Authoring Tool", desc = "", value = "789015045"))] + ItemAuthoringTool = 789015045i32, + #[strum(serialize = "WeaponEnergy")] + #[strum(props(name = "Weapon Energy", desc = "", value = "789494694"))] + WeaponEnergy = 789494694i32, + #[strum(serialize = "StructureCompositeWindowShutterConnector")] + #[strum( + props( + name = "Composite Window Shutter Connector", + desc = "", + value = "791407452" + ) + )] + StructureCompositeWindowShutterConnector = 791407452i32, + #[strum(serialize = "ItemCerealBar")] + #[strum( + props( + name = "Cereal Bar", + desc = "Sustains, without decay. If only all our relationships were so well balanced.", + value = "791746840" + ) + )] + ItemCerealBar = 791746840i32, + #[strum(serialize = "StructureLargeDirectHeatExchangeLiquidtoLiquid")] + #[strum( + props( + name = "Large Direct Heat Exchange - Liquid + Liquid", + desc = "Direct Heat Exchangers equalize the temperature of the two input networks.", + value = "792686502" + ) + )] + StructureLargeDirectHeatExchangeLiquidtoLiquid = 792686502i32, + #[strum(serialize = "StructureLightLong")] + #[strum(props(name = "Wall Light (Long)", desc = "", value = "797794350"))] + StructureLightLong = 797794350i32, + #[strum(serialize = "StructureWallIron03")] + #[strum(props(name = "Iron Wall (Type 3)", desc = "", value = "798439281"))] + StructureWallIron03 = 798439281i32, + #[strum(serialize = "ItemPipeValve")] + #[strum( + props( + name = "Kit (Pipe Valve)", + desc = "This kit creates a Valve (Gas).", + value = "799323450" + ) + )] + ItemPipeValve = 799323450i32, + #[strum(serialize = "StructureConsoleMonitor")] + #[strum( + props( + name = "Console Monitor", + desc = "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor, Security Camera and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port, and a charming sloped interface.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", + value = "801677497" + ) + )] + StructureConsoleMonitor = 801677497i32, + #[strum(serialize = "StructureRover")] + #[strum(props(name = "Rover Frame", desc = "", value = "806513938"))] + StructureRover = 806513938i32, + #[strum(serialize = "StructureRocketAvionics")] + #[strum(props(name = "Rocket Avionics", desc = "", value = "808389066"))] + StructureRocketAvionics = 808389066i32, + #[strum(serialize = "UniformOrangeJumpSuit")] + #[strum(props(name = "Jump Suit (Orange)", desc = "", value = "810053150"))] + UniformOrangeJumpSuit = 810053150i32, + #[strum(serialize = "StructureSolidFuelGenerator")] + #[strum( + props( + name = "Generator (Solid Fuel)", + desc = "The mainstay of power generation for Stationeers, this device provides 20kW of power. Multiple solid resources can be loaded. While operating, the device will output its maximum power regardless of whether you have captured it or not. Watch for blown wires! It will output much more power than your regular Cable Coil can handle.", + value = "813146305" + ) + )] + StructureSolidFuelGenerator = 813146305i32, + #[strum(serialize = "Landingpad_GasConnectorInwardPiece")] + #[strum(props(name = "Landingpad Gas Input", desc = "", value = "817945707"))] + LandingpadGasConnectorInwardPiece = 817945707i32, + #[strum(serialize = "StructureElevatorShaft")] + #[strum(props(name = "Elevator Shaft (Cabled)", desc = "", value = "826144419"))] + StructureElevatorShaft = 826144419i32, + #[strum(serialize = "StructureTransformerMediumReversed")] + #[strum( + props( + name = "Transformer Reversed (Medium)", + desc = "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", + value = "833912764" + ) + )] + StructureTransformerMediumReversed = 833912764i32, + #[strum(serialize = "StructureFlatBench")] + #[strum(props(name = "Bench (Flat)", desc = "", value = "839890807"))] + StructureFlatBench = 839890807i32, + #[strum(serialize = "ItemPowerConnector")] + #[strum( + props( + name = "Kit (Power Connector)", + desc = "This kit creates a Power Connector.", + value = "839924019" + ) + )] + ItemPowerConnector = 839924019i32, + #[strum(serialize = "ItemKitHorizontalAutoMiner")] + #[strum(props(name = "Kit (OGRE)", desc = "", value = "844391171"))] + ItemKitHorizontalAutoMiner = 844391171i32, + #[strum(serialize = "ItemKitSolarPanelBasic")] + #[strum(props(name = "Kit (Solar Panel Basic)", desc = "", value = "844961456"))] + ItemKitSolarPanelBasic = 844961456i32, + #[strum(serialize = "ItemSprayCanBrown")] + #[strum( + props( + name = "Spray Paint (Brown)", + desc = "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.", + value = "845176977" + ) + )] + ItemSprayCanBrown = 845176977i32, + #[strum(serialize = "ItemKitLargeExtendableRadiator")] + #[strum( + props(name = "Kit (Large Extendable Radiator)", desc = "", value = "847430620") + )] + ItemKitLargeExtendableRadiator = 847430620i32, + #[strum(serialize = "StructureInteriorDoorPadded")] + #[strum( + props( + name = "Interior Door Padded", + desc = "0.Operate\n1.Logic", + value = "847461335" + ) + )] + StructureInteriorDoorPadded = 847461335i32, + #[strum(serialize = "ItemKitRecycler")] + #[strum(props(name = "Kit (Recycler)", desc = "", value = "849148192"))] + ItemKitRecycler = 849148192i32, + #[strum(serialize = "StructureCompositeCladdingAngledCornerLong")] + #[strum( + props( + name = "Composite Cladding (Long Angled Corner)", + desc = "", + value = "850558385" + ) + )] + StructureCompositeCladdingAngledCornerLong = 850558385i32, + #[strum(serialize = "ItemEmergencySuppliesBox")] + #[strum(props(name = "Emergency Supplies", desc = "", value = "851103794"))] + ItemEmergencySuppliesBox = 851103794i32, + #[strum(serialize = "ItemPlantEndothermic_Genepool1")] + #[strum( + props( + name = "Winterspawn (Alpha variant)", + desc = "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings, when supplied with sufficient Nitrogen. The alpha variant has a peak cooling and electrolysis capacity of 90Watts and is most efficient operating in air temperatures of 0 to 40 Degrees Celsius.", + value = "851290561" + ) + )] + ItemPlantEndothermicGenepool1 = 851290561i32, + #[strum(serialize = "CircuitboardDoorControl")] + #[strum( + props( + name = "Door Control", + desc = "A basic tool of Stationeer base construction, this circuit board provides a way to open and close a Composite Door, Blast Door or Glass Door remotely, when connected to a Console. This system can be further linked to Motion Sensor to create automatic doors.", + value = "855694771" + ) + )] + CircuitboardDoorControl = 855694771i32, + #[strum(serialize = "ItemCrowbar")] + #[strum( + props( + name = "Crowbar", + desc = "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise.", + value = "856108234" + ) + )] + ItemCrowbar = 856108234i32, + #[strum(serialize = "ItemChocolateCerealBar")] + #[strum(props(name = "Chocolate Cereal Bar", desc = "", value = "860793245"))] + ItemChocolateCerealBar = 860793245i32, + #[strum(serialize = "Rover_MkI_build_states")] + #[strum(props(name = "Rover MKI", desc = "", value = "861674123"))] + RoverMkIBuildStates = 861674123i32, + #[strum(serialize = "AppliancePlantGeneticStabilizer")] + #[strum( + props( + name = "Plant Genetic Stabilizer", + desc = "The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize.\nStabilize: Increases all genes stability by 50%.\nDestabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%.\n ", + value = "871432335" + ) + )] + AppliancePlantGeneticStabilizer = 871432335i32, + #[strum(serialize = "ItemRoadFlare")] + #[strum( + props( + name = "Road Flare", + desc = "Designed to burn anywhere in the Solar System, the EZC magnesium fusee supplies its own oxygen to fuel combustion, and dispel the eternal night of space.", + value = "871811564" + ) + )] + ItemRoadFlare = 871811564i32, + #[strum(serialize = "CartridgeGuide")] + #[strum(props(name = "Cartridge (Guide)", desc = "", value = "872720793"))] + CartridgeGuide = 872720793i32, + #[strum(serialize = "StructureLogicSorter")] + #[strum( + props( + name = "Logic Sorter", + desc = "Contains an Internal Memory which is assessed to check whether something should be sorted. When an item is in the Import Slot, the stack is checked and if result is true the thing is moved to the Export 2 slot, otherwise it is moved to the Export slot. The Mode is used in how the stack is assessed, by default the mode is ALL, so every instruction in the stack would need to return true.", + value = "873418029" + ) + )] + StructureLogicSorter = 873418029i32, + #[strum(serialize = "StructureLogicRocketDownlink")] + #[strum(props(name = "Logic Rocket Downlink", desc = "", value = "876108549"))] + StructureLogicRocketDownlink = 876108549i32, + #[strum(serialize = "StructureSign1x1")] + #[strum(props(name = "Sign 1x1", desc = "", value = "879058460"))] + StructureSign1X1 = 879058460i32, + #[strum(serialize = "ItemKitLocker")] + #[strum(props(name = "Kit (Locker)", desc = "", value = "882301399"))] + ItemKitLocker = 882301399i32, + #[strum(serialize = "StructureCompositeFloorGratingOpenRotated")] + #[strum( + props( + name = "Composite Floor Grating Open Rotated", + desc = "", + value = "882307910" + ) + )] + StructureCompositeFloorGratingOpenRotated = 882307910i32, + #[strum(serialize = "StructureWaterPurifier")] + #[strum( + props( + name = "Water Purifier", + desc = "Cleans Polluted Water and outputs Water. The purification process requires Charcoal which can be added to the machine via the import bin. The procesing throughput can be improved by increasing the gas pressure of the input pipe relative to the gas pressure of the output pipe.", + value = "887383294" + ) + )] + StructureWaterPurifier = 887383294i32, + #[strum(serialize = "ItemIgniter")] + #[strum( + props( + name = "Kit (Igniter)", + desc = "This kit creates an Kit (Igniter) unit.", + value = "890106742" + ) + )] + ItemIgniter = 890106742i32, + #[strum(serialize = "ItemFern")] + #[strum( + props( + name = "Fern", + desc = "There was a time, when Stationeers had to make Fenoxitone Powder using the Reagent Processor. Recent advances in technology allow you to use equivalent quantities of fern directly in recipes.", + value = "892110467" + ) + )] + ItemFern = 892110467i32, + #[strum(serialize = "ItemBreadLoaf")] + #[strum(props(name = "Bread Loaf", desc = "", value = "893514943"))] + ItemBreadLoaf = 893514943i32, + #[strum(serialize = "StructureCableJunction5")] + #[strum(props(name = "Cable (5-Way Junction)", desc = "", value = "894390004"))] + StructureCableJunction5 = 894390004i32, + #[strum(serialize = "ItemInsulation")] + #[strum( + props( + name = "Insulation", + desc = "Mysterious in the extreme, the function of this item is lost to the ages.", + value = "897176943" + ) + )] + ItemInsulation = 897176943i32, + #[strum(serialize = "StructureWallFlatCornerRound")] + #[strum(props(name = "Wall (Flat Corner Round)", desc = "", value = "898708250"))] + StructureWallFlatCornerRound = 898708250i32, + #[strum(serialize = "ItemHardMiningBackPack")] + #[strum(props(name = "Hard Mining Backpack", desc = "", value = "900366130"))] + ItemHardMiningBackPack = 900366130i32, + #[strum(serialize = "ItemDirtCanister")] + #[strum( + props( + name = "Dirt Canister", + desc = "A container the will fill with Dirt when using a Mining Drill when placed inside a Mining Belt. You can then use this Dirt Canister with the Terrain Manipulator to adjust the terrain to suit your needs.", + value = "902565329" + ) + )] + ItemDirtCanister = 902565329i32, + #[strum(serialize = "StructureSign2x1")] + #[strum(props(name = "Sign 2x1", desc = "", value = "908320837"))] + StructureSign2X1 = 908320837i32, + #[strum(serialize = "CircuitboardAirlockControl")] + #[strum( + props( + name = "Airlock", + desc = "Rumored to have been first sketched on a Norsec toilet wall by a disgruntled engineer, the Exgress airlock control circuit board’s versatility and ease of fabrication has made it the Stationeers control system of choice for Airlock cycling protocols. \n\nTo enter setup mode, insert the board into a Console along with a data disk. In this mode, you can see all data-accessible objects currently connected to the Console. Doors, lights, gas sensors and slave consoles can be selected (highlighted green), and will be controlled once the data disk is removed.", + value = "912176135" + ) + )] + CircuitboardAirlockControl = 912176135i32, + #[strum(serialize = "Landingpad_BlankPiece")] + #[strum(props(name = "Landingpad", desc = "", value = "912453390"))] + LandingpadBlankPiece = 912453390i32, + #[strum(serialize = "ItemKitPipeRadiator")] + #[strum(props(name = "Kit (Pipe Radiator)", desc = "", value = "920411066"))] + ItemKitPipeRadiator = 920411066i32, + #[strum(serialize = "StructureLogicMinMax")] + #[strum( + props(name = "Logic Min/Max", desc = "0.Greater\n1.Less", value = "929022276") + )] + StructureLogicMinMax = 929022276i32, + #[strum(serialize = "StructureSolarPanel45Reinforced")] + #[strum( + props( + name = "Solar Panel (Heavy Angled)", + desc = "This solar panel is resistant to storm damage.", + value = "930865127" + ) + )] + StructureSolarPanel45Reinforced = 930865127i32, + #[strum(serialize = "StructurePoweredVent")] + #[strum( + props( + name = "Powered Vent", + desc = "Great for moving large quantities of air into a pipe network. Its primary purpose is for the creation of multi-grid airlocks. It can effeciently pull a vacuum on a small to medium sized room.", + value = "938836756" + ) + )] + StructurePoweredVent = 938836756i32, + #[strum(serialize = "ItemPureIceHydrogen")] + #[strum( + props( + name = "Pure Ice Hydrogen", + desc = "A frozen chunk of pure Hydrogen", + value = "944530361" + ) + )] + ItemPureIceHydrogen = 944530361i32, + #[strum(serialize = "StructureHeatExchangeLiquidtoGas")] + #[strum( + props( + name = "Heat Exchanger - Liquid + Gas", + desc = "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass separate liquid and gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to devices like a Volume Pump or a Liquid Back Volume Regulator.", + value = "944685608" + ) + )] + StructureHeatExchangeLiquidtoGas = 944685608i32, + #[strum(serialize = "StructureCompositeCladdingAngledCornerInnerLongL")] + #[strum( + props( + name = "Composite Cladding (Angled Corner Inner Long L)", + desc = "", + value = "947705066" + ) + )] + StructureCompositeCladdingAngledCornerInnerLongL = 947705066i32, + #[strum(serialize = "StructurePictureFrameThickMountLandscapeLarge")] + #[strum( + props( + name = "Picture Frame Thick Landscape Large", + desc = "", + value = "950004659" + ) + )] + StructurePictureFrameThickMountLandscapeLarge = 950004659i32, + #[strum(serialize = "StructureTankSmallAir")] + #[strum(props(name = "Small Tank (Air)", desc = "", value = "955744474"))] + StructureTankSmallAir = 955744474i32, + #[strum(serialize = "StructureHarvie")] + #[strum( + props( + name = "Harvie", + desc = "Use above a Hydroponics Tray or Hydroponics Device to manage the planting and harvest of your crops. It contains a button that will allow you to activate it's modes, or connect it to a logic system to do this for you. The modes indicate current growth status of the plant below. Import is used for planting, and harvested plants are sent to export.", + value = "958056199" + ) + )] + StructureHarvie = 958056199i32, + #[strum(serialize = "StructureFridgeBig")] + #[strum( + props( + name = "Fridge (Large)", + desc = "The Xigo Koolaid fridge is a self-cooling storage device with 15 slots that preserves food when powered and turned on. While many users have complained about the placement of the power switch, its place in the pantheon of off-world whiteware is unquestioned.\n \nWith its own permanent internal atmosphere, the Koolaid fridge slows the decay of food by maintaining an optimal internal temperature. Its power usage varies on the external temperature against which it must balance its internal temperature. As such, it must shed heat to operate, so the Koolaid fridge DOES NOT work in a vacuum.\n \nAlso, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep.\n\nFor more information about food preservation, visit the food decay section of the Stationpedia.", + value = "958476921" + ) + )] + StructureFridgeBig = 958476921i32, + #[strum(serialize = "ItemKitAirlock")] + #[strum(props(name = "Kit (Airlock)", desc = "", value = "964043875"))] + ItemKitAirlock = 964043875i32, + #[strum(serialize = "EntityRoosterBlack")] + #[strum( + props( + name = "Entity Rooster Black", + desc = "This is a rooster. It is black. There is dignity in this.", + value = "966959649" + ) + )] + EntityRoosterBlack = 966959649i32, + #[strum(serialize = "ItemKitSorter")] + #[strum(props(name = "Kit (Sorter)", desc = "", value = "969522478"))] + ItemKitSorter = 969522478i32, + #[strum(serialize = "ItemEmergencyCrowbar")] + #[strum(props(name = "Emergency Crowbar", desc = "", value = "976699731"))] + ItemEmergencyCrowbar = 976699731i32, + #[strum(serialize = "Landingpad_DiagonalPiece01")] + #[strum( + props( + name = "Landingpad Diagonal", + desc = "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", + value = "977899131" + ) + )] + LandingpadDiagonalPiece01 = 977899131i32, + #[strum(serialize = "ReagentColorBlue")] + #[strum(props(name = "Color Dye (Blue)", desc = "", value = "980054869"))] + ReagentColorBlue = 980054869i32, + #[strum(serialize = "StructureCableCorner3")] + #[strum( + props( + name = "Cable (3-Way Corner)", + desc = "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", + value = "980469101" + ) + )] + StructureCableCorner3 = 980469101i32, + #[strum(serialize = "ItemNVG")] + #[strum(props(name = "Night Vision Goggles", desc = "", value = "982514123"))] + ItemNvg = 982514123i32, + #[strum(serialize = "StructurePlinth")] + #[strum(props(name = "Plinth", desc = "", value = "989835703"))] + StructurePlinth = 989835703i32, + #[strum(serialize = "ItemSprayCanYellow")] + #[strum( + props( + name = "Spray Paint (Yellow)", + desc = "A caricature of light itself, yellow lacks the self-confidence of red, or the swagger of purple. It's less fun than orange, but less emotionally limp than khaki. It's hard to know when yellow is appropriate, but it persists as a primary color regardless. Suggesting that yellow gonna yellow, no matter what anyone thinks.", + value = "995468116" + ) + )] + ItemSprayCanYellow = 995468116i32, + #[strum(serialize = "StructureRocketCelestialTracker")] + #[strum( + props( + name = "Rocket Celestial Tracker", + desc = "The Celestial Tracker can be placed in Rockets and when turned on will provide data that can be used to orientate devices such as the Telescope. The Horizontal and Vertical output is localized to the orientation of the tracker. You can calibrate your alignment by comparing the result for the primary body with the output from the Daylight Sensor. Full functionality will only be available in orbit, but you can configure using the primary body. For aligning with the telescope, have the face plate facing up and the cables facing in the same direction as for the telescope and the output values will be aligned.", + value = "997453927" + ) + )] + StructureRocketCelestialTracker = 997453927i32, + #[strum(serialize = "ItemHighVolumeGasCanisterEmpty")] + #[strum(props(name = "High Volume Gas Canister", desc = "", value = "998653377"))] + ItemHighVolumeGasCanisterEmpty = 998653377i32, + #[strum(serialize = "ItemKitLogicTransmitter")] + #[strum(props(name = "Kit (Logic Transmitter)", desc = "", value = "1005397063"))] + ItemKitLogicTransmitter = 1005397063i32, + #[strum(serialize = "StructureIgniter")] + #[strum( + props( + name = "Igniter", + desc = "It gets the party started. Especially if that party is an explosive gas mixture.", + value = "1005491513" + ) + )] + StructureIgniter = 1005491513i32, + #[strum(serialize = "SeedBag_Potato")] + #[strum( + props( + name = "Potato Seeds", + desc = "Grow a Potato.", + value = "1005571172" + ) + )] + SeedBagPotato = 1005571172i32, + #[strum(serialize = "ItemDataDisk")] + #[strum(props(name = "Data Disk", desc = "", value = "1005843700"))] + ItemDataDisk = 1005843700i32, + #[strum(serialize = "ItemBatteryChargerSmall")] + #[strum(props(name = "Battery Charger Small", desc = "", value = "1008295833"))] + ItemBatteryChargerSmall = 1008295833i32, + #[strum(serialize = "EntityChickenWhite")] + #[strum( + props( + name = "Entity Chicken White", + desc = "It's a chicken, as white as moondust. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", + value = "1010807532" + ) + )] + EntityChickenWhite = 1010807532i32, + #[strum(serialize = "StructureLarreDockBypass")] + #[strum(props(name = "LARrE Dock (Bypass)", desc = "", value = "1011275082"))] + StructureLarreDockBypass = 1011275082i32, + #[strum(serialize = "ItemKitStacker")] + #[strum(props(name = "Kit (Stacker)", desc = "", value = "1013244511"))] + ItemKitStacker = 1013244511i32, + #[strum(serialize = "StructureTankSmall")] + #[strum(props(name = "Small Tank", desc = "", value = "1013514688"))] + StructureTankSmall = 1013514688i32, + #[strum(serialize = "ItemEmptyCan")] + #[strum( + props( + name = "Empty Can", + desc = "Used for making soups when combined with food in the Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay.", + value = "1013818348" + ) + )] + ItemEmptyCan = 1013818348i32, + #[strum(serialize = "ItemKitTankInsulated")] + #[strum(props(name = "Kit (Tank Insulated)", desc = "", value = "1021053608"))] + ItemKitTankInsulated = 1021053608i32, + #[strum(serialize = "ItemKitChute")] + #[strum(props(name = "Kit (Basic Chutes)", desc = "", value = "1025254665"))] + ItemKitChute = 1025254665i32, + #[strum(serialize = "StructureFuselageTypeA1")] + #[strum(props(name = "Fuselage (Type A1)", desc = "", value = "1033024712"))] + StructureFuselageTypeA1 = 1033024712i32, + #[strum(serialize = "StructureCableAnalysizer")] + #[strum(props(name = "Cable Analyzer", desc = "", value = "1036015121"))] + StructureCableAnalysizer = 1036015121i32, + #[strum(serialize = "StructureCableJunctionH6")] + #[strum( + props(name = "Heavy Cable (6-Way Junction)", desc = "", value = "1036780772") + )] + StructureCableJunctionH6 = 1036780772i32, + #[strum(serialize = "ItemGasFilterVolatilesM")] + #[strum(props(name = "Medium Filter (Volatiles)", desc = "", value = "1037507240"))] + ItemGasFilterVolatilesM = 1037507240i32, + #[strum(serialize = "ItemKitPortablesConnector")] + #[strum(props(name = "Kit (Portables Connector)", desc = "", value = "1041148999"))] + ItemKitPortablesConnector = 1041148999i32, + #[strum(serialize = "StructureFloorDrain")] + #[strum( + props( + name = "Passive Liquid Inlet", + desc = "A passive liquid floor inlet that quickly removes liquids in one direction from the world into the connected pipe network. It will equalise gasses with the world atmosphere also.", + value = "1048813293" + ) + )] + StructureFloorDrain = 1048813293i32, + #[strum(serialize = "StructureWallGeometryStreight")] + #[strum(props(name = "Wall (Geometry Straight)", desc = "", value = "1049735537"))] + StructureWallGeometryStreight = 1049735537i32, + #[strum(serialize = "StructureTransformerSmallReversed")] + #[strum( + props( + name = "Transformer Reversed (Small)", + desc = "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", + value = "1054059374" + ) + )] + StructureTransformerSmallReversed = 1054059374i32, + #[strum(serialize = "ItemMiningDrill")] + #[strum( + props( + name = "Mining Drill", + desc = "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.'", + value = "1055173191" + ) + )] + ItemMiningDrill = 1055173191i32, + #[strum(serialize = "ItemConstantanIngot")] + #[strum(props(name = "Ingot (Constantan)", desc = "", value = "1058547521"))] + ItemConstantanIngot = 1058547521i32, + #[strum(serialize = "StructureInsulatedPipeCrossJunction6")] + #[strum( + props( + name = "Insulated Pipe (6-Way Junction)", + desc = "Insulated pipes greatly reduce heat loss from gases stored in them.", + value = "1061164284" + ) + )] + StructureInsulatedPipeCrossJunction6 = 1061164284i32, + #[strum(serialize = "Landingpad_CenterPiece01")] + #[strum( + props( + name = "Landingpad Center", + desc = "The target point where the trader shuttle will land. Requires a clear view of the sky.", + value = "1070143159" + ) + )] + LandingpadCenterPiece01 = 1070143159i32, + #[strum(serialize = "StructureHorizontalAutoMiner")] + #[strum( + props( + name = "OGRE", + desc = "The Recurso OGRE (Orthogonal Ground Rotating Excavator) is a base structure with attached mining vehicle, which will mine a horizontal shaft up to X meters long. When full, the mining vehicle will return to the base to empty itself, before returning to dig. If it encounters empty space, it will also return to base and await instruction. The unit will return if deactivated.\n \nThe OGRE can be connected to a chute system, and is controllable by a logic network. Note that the OGRE outputs more ore than a conventional Mining Drill over the same area, due to more efficient processing.\n\nMODES\nIdle - 0\nMining - 1\nReturning - 2\nDepostingOre - 3\nFinished - 4\n", + value = "1070427573" + ) + )] + StructureHorizontalAutoMiner = 1070427573i32, + #[strum(serialize = "ItemDynamicAirCon")] + #[strum( + props(name = "Kit (Portable Air Conditioner)", desc = "", value = "1072914031") + )] + ItemDynamicAirCon = 1072914031i32, + #[strum(serialize = "ItemMarineHelmet")] + #[strum(props(name = "Marine Helmet", desc = "", value = "1073631646"))] + ItemMarineHelmet = 1073631646i32, + #[strum(serialize = "StructureDaylightSensor")] + #[strum( + props( + name = "Daylight Sensor", + desc = "Daylight sensors provide data on whether the current region of your base is in sunlight, and report the exact solar angle. Note that the orientation of the sensor alters the reported solar angle, while Logic systems can be used to offset it.", + value = "1076425094" + ) + )] + StructureDaylightSensor = 1076425094i32, + #[strum(serialize = "StructureCompositeCladdingCylindricalPanel")] + #[strum( + props( + name = "Composite Cladding (Cylindrical Panel)", + desc = "", + value = "1077151132" + ) + )] + StructureCompositeCladdingCylindricalPanel = 1077151132i32, + #[strum(serialize = "ItemRocketMiningDrillHeadMineral")] + #[strum( + props(name = "Mining-Drill Head (Mineral)", desc = "", value = "1083675581") + )] + ItemRocketMiningDrillHeadMineral = 1083675581i32, + #[strum(serialize = "ItemKitSuitStorage")] + #[strum(props(name = "Kit (Suit Storage)", desc = "", value = "1088892825"))] + ItemKitSuitStorage = 1088892825i32, + #[strum(serialize = "StructurePictureFrameThinMountPortraitLarge")] + #[strum( + props( + name = "Picture Frame Thin Portrait Large", + desc = "", + value = "1094895077" + ) + )] + StructurePictureFrameThinMountPortraitLarge = 1094895077i32, + #[strum(serialize = "StructureLiquidTankBig")] + #[strum(props(name = "Liquid Tank Big", desc = "", value = "1098900430"))] + StructureLiquidTankBig = 1098900430i32, + #[strum(serialize = "Landingpad_CrossPiece")] + #[strum( + props( + name = "Landingpad Cross", + desc = "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", + value = "1101296153" + ) + )] + LandingpadCrossPiece = 1101296153i32, + #[strum(serialize = "CartridgePlantAnalyser")] + #[strum(props(name = "Cartridge (Plant Analyser)", desc = "", value = "1101328282"))] + CartridgePlantAnalyser = 1101328282i32, + #[strum(serialize = "ItemSiliconOre")] + #[strum( + props( + name = "Ore (Silicon)", + desc = "Silicon is a chemical element with the symbol \"Si\" and is one of the most useful elements to Stationeers. Readily available throughout the universe, silicon is used in a range of alloys, glass, plastics and various electronic components a Stationeer may need to complete their mission.", + value = "1103972403" + ) + )] + ItemSiliconOre = 1103972403i32, + #[strum(serialize = "ItemWallLight")] + #[strum( + props( + name = "Kit (Lights)", + desc = "This kit creates any one of ten Kit (Lights) variants.", + value = "1108423476" + ) + )] + ItemWallLight = 1108423476i32, + #[strum(serialize = "StructureCableJunction4")] + #[strum( + props( + name = "Cable (4-Way Junction)", + desc = "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", + value = "1112047202" + ) + )] + StructureCableJunction4 = 1112047202i32, + #[strum(serialize = "ItemPillHeal")] + #[strum( + props( + name = "Pill (Medical)", + desc = "Three centuries of pharmaceutical technology compressed into one small, easy to ingest pill: the Heal Pill, aka the Proton Pill, aka Mr Happy contains active enzymes, therapeutic proteins, modified microbial strains, and mammalian cell line analogues in a single-dose boost of high purity, efficacy, and potency that potentiates a swift parasympathetic immune response.", + value = "1118069417" + ) + )] + ItemPillHeal = 1118069417i32, + #[strum(serialize = "SeedBag_Cocoa")] + #[strum(props(name = "Cocoa Seeds", desc = "", value = "1139887531"))] + SeedBagCocoa = 1139887531i32, + #[strum(serialize = "StructureMediumRocketLiquidFuelTank")] + #[strum(props(name = "Liquid Capsule Tank Medium", desc = "", value = "1143639539"))] + StructureMediumRocketLiquidFuelTank = 1143639539i32, + #[strum(serialize = "StructureCargoStorageMedium")] + #[strum(props(name = "Cargo Storage (Medium)", desc = "", value = "1151864003"))] + StructureCargoStorageMedium = 1151864003i32, + #[strum(serialize = "WeaponRifleEnergy")] + #[strum(props(name = "Energy Rifle", desc = "0.Stun\n1.Kill", value = "1154745374"))] + WeaponRifleEnergy = 1154745374i32, + #[strum(serialize = "StructureSDBSilo")] + #[strum( + props( + name = "SDB Silo", + desc = "The majestic silo holds large quantities of almost anything. While it is doing that, it cannot be deconstructed. Note also, that any food you put into a silo is likely to decay extremely rapidly. The silo can hold up to 600 stacks.", + value = "1155865682" + ) + )] + StructureSdbSilo = 1155865682i32, + #[strum(serialize = "Flag_ODA_4m")] + #[strum(props(name = "Flag (ODA 4m)", desc = "", value = "1159126354"))] + FlagOda4M = 1159126354i32, + #[strum(serialize = "ItemCannedPowderedEggs")] + #[strum( + props( + name = "Canned Powdered Eggs", + desc = "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Powdered Eggs and an Empty Can, canned powdered eggs are an exciting, dynamic food that's fairly high in nutrition, and does not decay.", + value = "1161510063" + ) + )] + ItemCannedPowderedEggs = 1161510063i32, + #[strum(serialize = "ItemKitFurniture")] + #[strum(props(name = "Kit (Furniture)", desc = "", value = "1162905029"))] + ItemKitFurniture = 1162905029i32, + #[strum(serialize = "StructureGasGenerator")] + #[strum(props(name = "Gas Fuel Generator", desc = "", value = "1165997963"))] + StructureGasGenerator = 1165997963i32, + #[strum(serialize = "StructureChair")] + #[strum( + props( + name = "Chair", + desc = "One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.", + value = "1167659360" + ) + )] + StructureChair = 1167659360i32, + #[strum(serialize = "StructureWallPaddedArchLightFittingTop")] + #[strum( + props( + name = "Wall (Padded Arch Light Fitting Top)", + desc = "", + value = "1171987947" + ) + )] + StructureWallPaddedArchLightFittingTop = 1171987947i32, + #[strum(serialize = "StructureShelf")] + #[strum(props(name = "Shelf", desc = "", value = "1172114950"))] + StructureShelf = 1172114950i32, + #[strum(serialize = "ApplianceDeskLampRight")] + #[strum(props(name = "Appliance Desk Lamp Right", desc = "", value = "1174360780"))] + ApplianceDeskLampRight = 1174360780i32, + #[strum(serialize = "ItemKitRegulator")] + #[strum(props(name = "Kit (Pressure Regulator)", desc = "", value = "1181371795"))] + ItemKitRegulator = 1181371795i32, + #[strum(serialize = "ItemKitCompositeFloorGrating")] + #[strum(props(name = "Kit (Floor Grating)", desc = "", value = "1182412869"))] + ItemKitCompositeFloorGrating = 1182412869i32, + #[strum(serialize = "StructureWallArchPlating")] + #[strum(props(name = "Wall (Arch Plating)", desc = "", value = "1182510648"))] + StructureWallArchPlating = 1182510648i32, + #[strum(serialize = "StructureWallPaddedCornerThin")] + #[strum(props(name = "Wall (Padded Corner Thin)", desc = "", value = "1183203913"))] + StructureWallPaddedCornerThin = 1183203913i32, + #[strum(serialize = "StructurePowerTransmitterReceiver")] + #[strum( + props( + name = "Microwave Power Receiver", + desc = "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.Connects to Logic Transmitter", + value = "1195820278" + ) + )] + StructurePowerTransmitterReceiver = 1195820278i32, + #[strum(serialize = "ItemPipeMeter")] + #[strum( + props( + name = "Kit (Pipe Meter)", + desc = "This kit creates a Pipe Meter.", + value = "1207939683" + ) + )] + ItemPipeMeter = 1207939683i32, + #[strum(serialize = "StructurePictureFrameThinPortraitLarge")] + #[strum( + props( + name = "Picture Frame Thin Portrait Large", + desc = "", + value = "1212777087" + ) + )] + StructurePictureFrameThinPortraitLarge = 1212777087i32, + #[strum(serialize = "StructureSleeperLeft")] + #[strum( + props( + name = "Sleeper Left", + desc = "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", + value = "1213495833" + ) + )] + StructureSleeperLeft = 1213495833i32, + #[strum(serialize = "ItemIce")] + #[strum( + props( + name = "Ice (Water)", + desc = "Water ice can be found on most planets in the Solar System, though not all worlds visited by Stationeers possess this resource. Highly sensitive to temperature, ice will begin to melt as soon as it is mined, unless kept in the Mining Belt. When melting, ice produces a mixture of Steam and Nitrogen gas.", + value = "1217489948" + ) + )] + ItemIce = 1217489948i32, + #[strum(serialize = "StructureLogicSwitch")] + #[strum(props(name = "Lever", desc = "", value = "1220484876"))] + StructureLogicSwitch = 1220484876i32, + #[strum(serialize = "StructureLiquidUmbilicalFemaleSide")] + #[strum( + props(name = "Umbilical Socket Angle (Liquid)", desc = "", value = "1220870319") + )] + StructureLiquidUmbilicalFemaleSide = 1220870319i32, + #[strum(serialize = "ItemKitAtmospherics")] + #[strum(props(name = "Kit (Atmospherics)", desc = "", value = "1222286371"))] + ItemKitAtmospherics = 1222286371i32, + #[strum(serialize = "ItemChemLightYellow")] + #[strum( + props( + name = "Chem Light (Yellow)", + desc = "Dispel the darkness with this yellow glowstick.", + value = "1224819963" + ) + )] + ItemChemLightYellow = 1224819963i32, + #[strum(serialize = "ItemIronFrames")] + #[strum(props(name = "Iron Frames", desc = "", value = "1225836666"))] + ItemIronFrames = 1225836666i32, + #[strum(serialize = "CompositeRollCover")] + #[strum( + props( + name = "Composite Roll Cover", + desc = "0.Operate\n1.Logic", + value = "1228794916" + ) + )] + CompositeRollCover = 1228794916i32, + #[strum(serialize = "StructureCompositeWall")] + #[strum( + props( + name = "Composite Wall (Type 1)", + desc = "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.", + value = "1237302061" + ) + )] + StructureCompositeWall = 1237302061i32, + #[strum(serialize = "StructureCombustionCentrifuge")] + #[strum( + props( + name = "Combustion Centrifuge", + desc = "The Combustion Centrifuge is a gas powered version of the Centrifuge. If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore.\n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. A combustible fuel mix should be supplied to the gas input, and waste gasses should be vented from the output. \n The machine's RPMs must be controlled via the throttle and combustion limiter levers. If the Combustion Centrifuge gains, or loses, RPMs too fast it will experience stress, and eventually grind to a halt. Higher RPMs directly result in faster processing speeds. \n The throttle lever controls the amount of fuel being pulled into the machine, increasing the temperature inside the engine, and leading to an increase in RPM. The limiter lever influences the speed of the combustion, and how much uncombusted gas is in the exhaust. \n Ejecting ore from the Combustion Centrifuge while it is at high RPMs will result in additional stress build up. If turned off while not stressed, the machine will automatically start to brake, and reduce RPMs in a controlled manner.\n\t ", + value = "1238905683" + ) + )] + StructureCombustionCentrifuge = 1238905683i32, + #[strum(serialize = "ItemVolatiles")] + #[strum( + props( + name = "Ice (Volatiles)", + desc = "An extremely reactive ice with numerous hydrocarbons trapped inside. For simplicity's sake, these are often displayed as H2 by devices like the Cartridge (Atmos Analyzer).\n \nVolatiles combust in a 2:1 ratio with Oxygen, creating Carbon Dioxide and pollutants. However when catalysed via devices such as the H2 Combustor in the presence of Oxygen, they produce\n Steam and heat with a modicum of Carbon Dioxide and Pollutant due to the autoignition of the volatiles in the chamber. Along with Oxygen, volatiles gas is also the major component of fuel for such devices as the Welding Torch.\n", + value = "1253102035" + ) + )] + ItemVolatiles = 1253102035i32, + #[strum(serialize = "HandgunMagazine")] + #[strum(props(name = "Handgun Magazine", desc = "", value = "1254383185"))] + HandgunMagazine = 1254383185i32, + #[strum(serialize = "ItemGasFilterVolatilesL")] + #[strum(props(name = "Heavy Filter (Volatiles)", desc = "", value = "1255156286"))] + ItemGasFilterVolatilesL = 1255156286i32, + #[strum(serialize = "ItemMiningDrillPneumatic")] + #[strum( + props( + name = "Pneumatic Mining Drill", + desc = "0.Default\n1.Flatten", + value = "1258187304" + ) + )] + ItemMiningDrillPneumatic = 1258187304i32, + #[strum(serialize = "StructureSmallTableDinnerSingle")] + #[strum( + props(name = "Small (Table Dinner Single)", desc = "", value = "1260651529") + )] + StructureSmallTableDinnerSingle = 1260651529i32, + #[strum(serialize = "ApplianceReagentProcessor")] + #[strum( + props( + name = "Reagent Processor", + desc = "Sitting somewhere between a high powered juicer and an alchemist's alembic, the Xigo reagent processor turns certain raw materials and food items into cooking and crafting ingredients. Indispensible in any space kitchen, just bolt it to the bench, and you're ready to go.", + value = "1260918085" + ) + )] + ApplianceReagentProcessor = 1260918085i32, + #[strum(serialize = "StructurePressurePlateMedium")] + #[strum(props(name = "Trigger Plate (Medium)", desc = "", value = "1269458680"))] + StructurePressurePlateMedium = 1269458680i32, + #[strum(serialize = "ItemPumpkin")] + #[strum( + props( + name = "Pumpkin", + desc = "Pumpkins are a perennial plant, with both a long growth time, and a long time between harvests. Its low requirement for darkness allows for accelerated growing if provided with extra light.", + value = "1277828144" + ) + )] + ItemPumpkin = 1277828144i32, + #[strum(serialize = "ItemPumpkinSoup")] + #[strum( + props( + name = "Pumpkin Soup", + desc = "Made using Cooked Pumpkin and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay", + value = "1277979876" + ) + )] + ItemPumpkinSoup = 1277979876i32, + #[strum(serialize = "StructureTankBigInsulated")] + #[strum(props(name = "Tank Big (Insulated)", desc = "", value = "1280378227"))] + StructureTankBigInsulated = 1280378227i32, + #[strum(serialize = "StructureWallArchCornerTriangle")] + #[strum( + props(name = "Wall (Arch Corner Triangle)", desc = "", value = "1281911841") + )] + StructureWallArchCornerTriangle = 1281911841i32, + #[strum(serialize = "StructureTurbineGenerator")] + #[strum(props(name = "Turbine Generator", desc = "", value = "1282191063"))] + StructureTurbineGenerator = 1282191063i32, + #[strum(serialize = "StructurePipeIgniter")] + #[strum( + props( + name = "Pipe Igniter", + desc = "Ignites the atmosphere inside the attached pipe network.", + value = "1286441942" + ) + )] + StructurePipeIgniter = 1286441942i32, + #[strum(serialize = "StructureWallIron")] + #[strum(props(name = "Iron Wall (Type 1)", desc = "", value = "1287324802"))] + StructureWallIron = 1287324802i32, + #[strum(serialize = "StructurePipeOneWayValveLever")] + #[strum(props(name = "One Way Valve (Gas)", desc = "", value = "1289581593"))] + StructurePipeOneWayValveLever = 1289581593i32, + #[strum(serialize = "ItemSprayGun")] + #[strum( + props( + name = "Spray Gun", + desc = "Use with Spray cans in the Spray Can to paint structures, cables and pipes. Much more efficient and faster than doing it with individual spray cans.", + value = "1289723966" + ) + )] + ItemSprayGun = 1289723966i32, + #[strum(serialize = "ItemKitSolidGenerator")] + #[strum(props(name = "Kit (Solid Generator)", desc = "", value = "1293995736"))] + ItemKitSolidGenerator = 1293995736i32, + #[strum(serialize = "StructureAccessBridge")] + #[strum( + props( + name = "Access Bridge", + desc = "Extendable bridge that spans three grids", + value = "1298920475" + ) + )] + StructureAccessBridge = 1298920475i32, + #[strum(serialize = "StructurePipeOrgan")] + #[strum( + props( + name = "Pipe Organ", + desc = "The pipe organ can be attached to one end of a Kit (Pipe Valve). The length of the pipe after the pipe organ changes the pitch of the note it will play when the valve is opened. Use Logic to open and close the valves to create some custom tunes for your base or an audible warning.", + value = "1305252611" + ) + )] + StructurePipeOrgan = 1305252611i32, + #[strum(serialize = "StructureElectronicsPrinter")] + #[strum( + props( + name = "Electronics Printer", + desc = "The electronic printer will create any electronic part you need. From circuit boards and electronic devices to solar panels. The choice is yours. Upgrade the device using a Electronic Printer Mod for additional recipes and faster processing speeds.", + value = "1307165496" + ) + )] + StructureElectronicsPrinter = 1307165496i32, + #[strum(serialize = "StructureFuselageTypeA4")] + #[strum(props(name = "Fuselage (Type A4)", desc = "", value = "1308115015"))] + StructureFuselageTypeA4 = 1308115015i32, + #[strum(serialize = "StructureSmallDirectHeatExchangeGastoGas")] + #[strum( + props( + name = "Small Direct Heat Exchanger - Gas + Gas", + desc = "Direct Heat Exchangers equalize the temperature of the two input networks.", + value = "1310303582" + ) + )] + StructureSmallDirectHeatExchangeGastoGas = 1310303582i32, + #[strum(serialize = "StructureTurboVolumePump")] + #[strum( + props( + name = "Turbo Volume Pump (Gas)", + desc = "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.", + value = "1310794736" + ) + )] + StructureTurboVolumePump = 1310794736i32, + #[strum(serialize = "ItemChemLightWhite")] + #[strum( + props( + name = "Chem Light (White)", + desc = "Snap the glowstick to activate a pale radiance that keeps the darkness at bay.", + value = "1312166823" + ) + )] + ItemChemLightWhite = 1312166823i32, + #[strum(serialize = "ItemMilk")] + #[strum( + props( + name = "Milk", + desc = "Full disclosure, it's not actually 'milk', but an Agrizero-invented synthesis of 5ml Soy Oil and 5g Fern, delicately blended in the Chemistry Station. Surprisingly filling, it can be used as an ingredient to cook other food in the Microwave or Automated Oven. Think, Muffin.", + value = "1327248310" + ) + )] + ItemMilk = 1327248310i32, + #[strum(serialize = "StructureInsulatedPipeCrossJunction3")] + #[strum( + props( + name = "Insulated Pipe (3-Way Junction)", + desc = "Insulated pipes greatly reduce heat loss from gases stored in them.", + value = "1328210035" + ) + )] + StructureInsulatedPipeCrossJunction3 = 1328210035i32, + #[strum(serialize = "StructureShortCornerLocker")] + #[strum(props(name = "Short Corner Locker", desc = "", value = "1330754486"))] + StructureShortCornerLocker = 1330754486i32, + #[strum(serialize = "StructureTankConnectorLiquid")] + #[strum( + props( + name = "Liquid Tank Connector", + desc = "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.", + value = "1331802518" + ) + )] + StructureTankConnectorLiquid = 1331802518i32, + #[strum(serialize = "ItemSprayCanPink")] + #[strum( + props( + name = "Spray Paint (Pink)", + desc = "With the invention of enduring chemical dyes, the 20th century bestowed associations with innocence and tenderness upon this pale tint of red. Yet classically, it was the color of seduction and eroticism. Things change.", + value = "1344257263" + ) + )] + ItemSprayCanPink = 1344257263i32, + #[strum(serialize = "CircuitboardGraphDisplay")] + #[strum(props(name = "Graph Display", desc = "", value = "1344368806"))] + CircuitboardGraphDisplay = 1344368806i32, + #[strum(serialize = "ItemWreckageStructureWeatherStation006")] + #[strum(props(name = "Wreckage", desc = "", value = "1344576960"))] + ItemWreckageStructureWeatherStation006 = 1344576960i32, + #[strum(serialize = "ItemCookedCorn")] + #[strum( + props( + name = "Cooked Corn", + desc = "A high-nutrient cooked food, which can be canned.", + value = "1344773148" + ) + )] + ItemCookedCorn = 1344773148i32, + #[strum(serialize = "ItemCookedSoybean")] + #[strum( + props( + name = "Cooked Soybean", + desc = "A high-nutrient cooked food, which can be canned.", + value = "1353449022" + ) + )] + ItemCookedSoybean = 1353449022i32, + #[strum(serialize = "StructureChuteCorner")] + #[strum( + props( + name = "Chute (Corner)", + desc = "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute corners are fundamental components of chute networks, which allow the transport of items between machines with import/export slots, such as the Furnace and other automatable structures.", + value = "1360330136" + ) + )] + StructureChuteCorner = 1360330136i32, + #[strum(serialize = "DynamicGasCanisterOxygen")] + #[strum( + props( + name = "Portable Gas Tank (Oxygen)", + desc = "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll be picking tank shards out of your face. You can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent it into a sealed room to create an atmosphere. Or even paint it pink, call it Steve and fill that sad space in your heart.", + value = "1360925836" + ) + )] + DynamicGasCanisterOxygen = 1360925836i32, + #[strum(serialize = "StructurePassiveVentInsulated")] + #[strum(props(name = "Insulated Passive Vent", desc = "", value = "1363077139"))] + StructurePassiveVentInsulated = 1363077139i32, + #[strum(serialize = "ApplianceChemistryStation")] + #[strum(props(name = "Chemistry Station", desc = "", value = "1365789392"))] + ApplianceChemistryStation = 1365789392i32, + #[strum(serialize = "ItemPipeIgniter")] + #[strum(props(name = "Kit (Pipe Igniter)", desc = "", value = "1366030599"))] + ItemPipeIgniter = 1366030599i32, + #[strum(serialize = "ItemFries")] + #[strum(props(name = "French Fries", desc = "", value = "1371786091"))] + ItemFries = 1371786091i32, + #[strum(serialize = "StructureSleeperVerticalDroid")] + #[strum( + props( + name = "Droid Sleeper Vertical", + desc = "The Droid Sleeper will recharge robot batteries and equiped suit batteries if present. This sleeper variant is only safe for robots. Entering as a non robot character will cause you to take damage.", + value = "1382098999" + ) + )] + StructureSleeperVerticalDroid = 1382098999i32, + #[strum(serialize = "ItemArcWelder")] + #[strum(props(name = "Arc Welder", desc = "", value = "1385062886"))] + ItemArcWelder = 1385062886i32, + #[strum(serialize = "ItemSoyOil")] + #[strum(props(name = "Soy Oil", desc = "", value = "1387403148"))] + ItemSoyOil = 1387403148i32, + #[strum(serialize = "ItemKitRocketAvionics")] + #[strum(props(name = "Kit (Avionics)", desc = "", value = "1396305045"))] + ItemKitRocketAvionics = 1396305045i32, + #[strum(serialize = "ItemMarineBodyArmor")] + #[strum(props(name = "Marine Armor", desc = "", value = "1399098998"))] + ItemMarineBodyArmor = 1399098998i32, + #[strum(serialize = "StructureStairs4x2")] + #[strum(props(name = "Stairs", desc = "", value = "1405018945"))] + StructureStairs4X2 = 1405018945i32, + #[strum(serialize = "ItemKitBattery")] + #[strum(props(name = "Kit (Battery)", desc = "", value = "1406656973"))] + ItemKitBattery = 1406656973i32, + #[strum(serialize = "StructureLargeDirectHeatExchangeGastoLiquid")] + #[strum( + props( + name = "Large Direct Heat Exchanger - Gas + Liquid", + desc = "Direct Heat Exchangers equalize the temperature of the two input networks.", + value = "1412338038" + ) + )] + StructureLargeDirectHeatExchangeGastoLiquid = 1412338038i32, + #[strum(serialize = "AccessCardBrown")] + #[strum(props(name = "Access Card (Brown)", desc = "", value = "1412428165"))] + AccessCardBrown = 1412428165i32, + #[strum(serialize = "StructureCapsuleTankLiquid")] + #[strum(props(name = "Liquid Capsule Tank Small", desc = "", value = "1415396263"))] + StructureCapsuleTankLiquid = 1415396263i32, + #[strum(serialize = "StructureLogicBatchWriter")] + #[strum(props(name = "Batch Writer", desc = "", value = "1415443359"))] + StructureLogicBatchWriter = 1415443359i32, + #[strum(serialize = "StructureCondensationChamber")] + #[strum( + props( + name = "Condensation Chamber", + desc = "A device for safely condensing gasses into liquids. Liquids and Gasses will both exist safely inside the device. The Chamber will pressurise using its in-built pressure regulator to the target set by the setting wheel.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Condensation Chamber.\n Paired with Evaporation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", + value = "1420719315" + ) + )] + StructureCondensationChamber = 1420719315i32, + #[strum(serialize = "SeedBag_Pumpkin")] + #[strum( + props( + name = "Pumpkin Seeds", + desc = "Grow a Pumpkin.", + value = "1423199840" + ) + )] + SeedBagPumpkin = 1423199840i32, + #[strum(serialize = "ItemPureIceLiquidNitrous")] + #[strum( + props( + name = "Pure Ice Liquid Nitrous", + desc = "A frozen chunk of pure Liquid Nitrous Oxide", + value = "1428477399" + ) + )] + ItemPureIceLiquidNitrous = 1428477399i32, + #[strum(serialize = "StructureFrame")] + #[strum( + props( + name = "Steel Frame", + desc = "More durable than the Iron Frame, steel frames also have several variations for more complex constructions, such as the Steel Frame (Corner) and Steel Frame (Corner Cut). Like iron frames, they are placed then completed by welding Steel Sheets to the open framework.", + value = "1432512808" + ) + )] + StructureFrame = 1432512808i32, + #[strum(serialize = "StructureWaterBottleFillerBottom")] + #[strum(props(name = "Water Bottle Filler Bottom", desc = "", value = "1433754995"))] + StructureWaterBottleFillerBottom = 1433754995i32, + #[strum(serialize = "StructureLightRoundSmall")] + #[strum(props(name = "Light Round (Small)", desc = "", value = "1436121888"))] + StructureLightRoundSmall = 1436121888i32, + #[strum(serialize = "ItemRocketMiningDrillHeadHighSpeedMineral")] + #[strum( + props( + name = "Mining-Drill Head (High Speed Mineral)", + desc = "", + value = "1440678625" + ) + )] + ItemRocketMiningDrillHeadHighSpeedMineral = 1440678625i32, + #[strum(serialize = "ItemMKIICrowbar")] + #[strum( + props( + name = "Mk II Crowbar", + desc = "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise. The MK II is more resistant to temperature and pressure.", + value = "1440775434" + ) + )] + ItemMkiiCrowbar = 1440775434i32, + #[strum(serialize = "StructureHydroponicsStation")] + #[strum(props(name = "Hydroponics Station", desc = "", value = "1441767298"))] + StructureHydroponicsStation = 1441767298i32, + #[strum(serialize = "StructureCryoTubeHorizontal")] + #[strum( + props( + name = "Cryo Tube Horizontal", + desc = "The horizontal variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", + value = "1443059329" + ) + )] + StructureCryoTubeHorizontal = 1443059329i32, + #[strum(serialize = "StructureInsulatedInLineTankLiquid1x2")] + #[strum( + props(name = "Insulated In-Line Tank Liquid", desc = "", value = "1452100517") + )] + StructureInsulatedInLineTankLiquid1X2 = 1452100517i32, + #[strum(serialize = "ItemKitPassiveLargeRadiatorLiquid")] + #[strum( + props(name = "Kit (Medium Radiator Liquid)", desc = "", value = "1453961898") + )] + ItemKitPassiveLargeRadiatorLiquid = 1453961898i32, + #[strum(serialize = "ItemPortablesPackage")] + #[strum(props(name = "Portables Package", desc = "", value = "1459105919"))] + ItemPortablesPackage = 1459105919i32, + #[strum(serialize = "ItemKitReinforcedWindows")] + #[strum(props(name = "Kit (Reinforced Walls)", desc = "", value = "1459985302"))] + ItemKitReinforcedWindows = 1459985302i32, + #[strum(serialize = "ItemWreckageStructureWeatherStation002")] + #[strum(props(name = "Wreckage", desc = "", value = "1464424921"))] + ItemWreckageStructureWeatherStation002 = 1464424921i32, + #[strum(serialize = "StructureHydroponicsTray")] + #[strum( + props( + name = "Hydroponics Tray", + desc = "The Agrizero hydroponics tray is the ideal vessel for growing a range of plantlife. It must be supplied with water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie.", + value = "1464854517" + ) + )] + StructureHydroponicsTray = 1464854517i32, + #[strum(serialize = "ItemMkIIToolbelt")] + #[strum( + props( + name = "Tool Belt MK II", + desc = "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.", + value = "1467558064" + ) + )] + ItemMkIiToolbelt = 1467558064i32, + #[strum(serialize = "StructureOverheadShortLocker")] + #[strum(props(name = "Overhead Locker", desc = "", value = "1468249454"))] + StructureOverheadShortLocker = 1468249454i32, + #[strum(serialize = "ItemMiningBeltMKII")] + #[strum( + props( + name = "Mining Belt MK II", + desc = "A larger and more capacious mining belt, the Mk II is similar to the Mining Belt, but has 13 slots instead of the basic 8, to increase the length of your mining trips. It also has space for two tools. ", + value = "1470787934" + ) + )] + ItemMiningBeltMkii = 1470787934i32, + #[strum(serialize = "StructureTorpedoRack")] + #[strum(props(name = "Torpedo Rack", desc = "", value = "1473807953"))] + StructureTorpedoRack = 1473807953i32, + #[strum(serialize = "ItemWaterBottleBag")] + #[strum(props(name = "Water Bottle Bag", desc = "", value = "1476318823"))] + ItemWaterBottleBag = 1476318823i32, + #[strum(serialize = "ItemInsulatedCanisterPackage")] + #[strum(props(name = "Insulated Canister Package", desc = "", value = "1485675617"))] + ItemInsulatedCanisterPackage = 1485675617i32, + #[strum(serialize = "StructureWallIron02")] + #[strum(props(name = "Iron Wall (Type 2)", desc = "", value = "1485834215"))] + StructureWallIron02 = 1485834215i32, + #[strum(serialize = "StructureWallLargePanel")] + #[strum(props(name = "Wall (Large Panel)", desc = "", value = "1492930217"))] + StructureWallLargePanel = 1492930217i32, + #[strum(serialize = "ItemKitLogicCircuit")] + #[strum(props(name = "Kit (IC Housing)", desc = "", value = "1512322581"))] + ItemKitLogicCircuit = 1512322581i32, + #[strum(serialize = "ItemSprayCanRed")] + #[strum( + props( + name = "Spray Paint (Red)", + desc = "The king of colors, red is perhaps the defining tone of the universe. Linked to blood, royalty, fire and damnation, it is the chromatic expression of power.", + value = "1514393921" + ) + )] + ItemSprayCanRed = 1514393921i32, + #[strum(serialize = "StructureLightRound")] + #[strum(props(name = "Light Round", desc = "", value = "1514476632"))] + StructureLightRound = 1514476632i32, + #[strum(serialize = "Fertilizer")] + #[strum( + props( + name = "Fertilizer", + desc = "Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter.\nFertilizer's affects depend on its ingredients:\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for\n\nThe effect of these ingredients depends on their respective proportions in the composter when processing is activated. ", + value = "1517856652" + ) + )] + Fertilizer = 1517856652i32, + #[strum(serialize = "StructurePowerUmbilicalMale")] + #[strum( + props( + name = "Umbilical (Power)", + desc = "0.Left\n1.Center\n2.Right", + value = "1529453938" + ) + )] + StructurePowerUmbilicalMale = 1529453938i32, + #[strum(serialize = "ItemRocketMiningDrillHeadDurable")] + #[strum( + props(name = "Mining-Drill Head (Durable)", desc = "", value = "1530764483") + )] + ItemRocketMiningDrillHeadDurable = 1530764483i32, + #[strum(serialize = "DecayedFood")] + #[strum( + props( + name = "Decayed Food", + desc = "When your food decays, it turns into this. ODA scientists have attempted to determine the exact constituents of this substance, but it remains evasive and mysterious. Suffice to say, eating it is a bad idea. Research has determined, however, that The exact speed of decay varies individually by:\n\n- TEMPERATURE - Refrigeration will slow decay, but many foods will be damaged by exposure to extreme low pressure, as well as extreme heat. The optimum temperature is 0 kelvin (-272 C).\n\n- FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance.\n\n- PRESSURE - Food decays faster when the pressure drops below 1 atmosphere (101kPa). Decay happens exponentially more quickly as the atmosphere approaches a perfect vacuum. There is no effect from higher pressures. \n\n- ATMOSPHERE - Different gases can slow and accelerate the decay process. The process will take account of respective gas ratios in mixed atmospheres in calculating the decay modifier. The following rates apply across all foods:\n\n> Oxygen x 1.3\n> Nitrogen x 0.6\n> Carbon Dioxide x 0.8\n> Volatiles x 1\n> Pollutant x 3\n> Nitrous Oxide x 1.5\n> Steam x 2\n> Vacuum (see PRESSURE above)\n\n", + value = "1531087544" + ) + )] + DecayedFood = 1531087544i32, + #[strum(serialize = "LogicStepSequencer8")] + #[strum( + props( + name = "Logic Step Sequencer", + desc = "The ODA does not approve of soundtracks or other distractions.\nAs such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure.\nCentral to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. \n\nDIY MUSIC - GETTING STARTED\n\n1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side.\n\n2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver.\n\n3: Select the output speaker (eg Passive Speaker) where the sequencer will play the sounds. This needs to be connected to the logic network on the right hand side of the sequencer.\n\n4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer.\n\n5: Set the BPM on the sequencer using a Dial and a Logic Writer to write to the sequencer's BPM variable. A higher bpm will play the sequence faster. \n\n6: Insert a sound cartridge of your choosing and select which variant of sound you wish to play by pushing the arrow buttons located above and below the sound cartridge slot.\n\n7: Choose the pitch of the sounds to play by setting the dial on each of your 8 step units to the desired note. With drums, each note is a different drum sounds. You can trial your sounds by pushing the activate button on each step unit (with the sequencer inactive).\n\n8: Get freaky with the Low frequency oscillator.\n\n9: Finally, activate the sequencer, Vibeoneer.", + value = "1531272458" + ) + )] + LogicStepSequencer8 = 1531272458i32, + #[strum(serialize = "ItemKitDynamicGasTankAdvanced")] + #[strum( + props(name = "Kit (Portable Gas Tank Mk II)", desc = "", value = "1533501495") + )] + ItemKitDynamicGasTankAdvanced = 1533501495i32, + #[strum(serialize = "ItemWireCutters")] + #[strum( + props( + name = "Wire Cutters", + desc = "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools.", + value = "1535854074" + ) + )] + ItemWireCutters = 1535854074i32, + #[strum(serialize = "StructureLadderEnd")] + #[strum(props(name = "Ladder End", desc = "", value = "1541734993"))] + StructureLadderEnd = 1541734993i32, + #[strum(serialize = "ItemGrenade")] + #[strum( + props( + name = "Hand Grenade", + desc = "Invented by the Romans, who threw Greek Fire at their enemies in ceramic jars, the word 'grenade' is derived from the Old French word for 'pomegranate', as many modern grenades resemble this round, many-seeded fruit. Also like many grenades before it, this one goes boom and breaks stuff.", + value = "1544275894" + ) + )] + ItemGrenade = 1544275894i32, + #[strum(serialize = "StructureCableJunction5Burnt")] + #[strum( + props(name = "Burnt Cable (5-Way Junction)", desc = "", value = "1545286256") + )] + StructureCableJunction5Burnt = 1545286256i32, + #[strum(serialize = "StructurePlatformLadderOpen")] + #[strum(props(name = "Ladder Platform", desc = "", value = "1559586682"))] + StructurePlatformLadderOpen = 1559586682i32, + #[strum(serialize = "StructureTraderWaypoint")] + #[strum(props(name = "Trader Waypoint", desc = "", value = "1570931620"))] + StructureTraderWaypoint = 1570931620i32, + #[strum(serialize = "ItemKitLiquidUmbilical")] + #[strum(props(name = "Kit (Liquid Umbilical)", desc = "", value = "1571996765"))] + ItemKitLiquidUmbilical = 1571996765i32, + #[strum(serialize = "StructureCompositeWall03")] + #[strum(props(name = "Composite Wall (Type 3)", desc = "", value = "1574321230"))] + StructureCompositeWall03 = 1574321230i32, + #[strum(serialize = "ItemKitRespawnPointWallMounted")] + #[strum(props(name = "Kit (Respawn)", desc = "", value = "1574688481"))] + ItemKitRespawnPointWallMounted = 1574688481i32, + #[strum(serialize = "ItemHastelloyIngot")] + #[strum(props(name = "Ingot (Hastelloy)", desc = "", value = "1579842814"))] + ItemHastelloyIngot = 1579842814i32, + #[strum(serialize = "StructureCompositeWindowShutter")] + #[strum(props(name = "Composite Window Shutter", desc = "", value = "1580592998"))] + StructureCompositeWindowShutter = 1580592998i32, + #[strum(serialize = "StructureStackerReverse")] + #[strum( + props( + name = "Stacker", + desc = "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs. The reversed stacker has power and data on the opposite side.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", + value = "1585641623" + ) + )] + StructureStackerReverse = 1585641623i32, + #[strum(serialize = "ItemKitEvaporationChamber")] + #[strum(props(name = "Kit (Phase Change Device)", desc = "", value = "1587787610"))] + ItemKitEvaporationChamber = 1587787610i32, + #[strum(serialize = "ItemGlassSheets")] + #[strum( + props( + name = "Glass Sheets", + desc = "A fundamental construction component, glass sheets are created from Silicon. Fabricated on the Autolathe, they are used to make {THING:StructureSolarPanel;Solar Panels}, and many other structures.", + value = "1588896491" + ) + )] + ItemGlassSheets = 1588896491i32, + #[strum(serialize = "StructureWallPaddedArch")] + #[strum(props(name = "Wall (Padded Arch)", desc = "", value = "1590330637"))] + StructureWallPaddedArch = 1590330637i32, + #[strum(serialize = "StructureLightRoundAngled")] + #[strum(props(name = "Light Round (Angled)", desc = "", value = "1592905386"))] + StructureLightRoundAngled = 1592905386i32, + #[strum(serialize = "StructureWallGeometryT")] + #[strum(props(name = "Wall (Geometry T)", desc = "", value = "1602758612"))] + StructureWallGeometryT = 1602758612i32, + #[strum(serialize = "ItemKitElectricUmbilical")] + #[strum(props(name = "Kit (Power Umbilical)", desc = "", value = "1603046970"))] + ItemKitElectricUmbilical = 1603046970i32, + #[strum(serialize = "Lander")] + #[strum(props(name = "Lander", desc = "", value = "1605130615"))] + Lander = 1605130615i32, + #[strum(serialize = "CartridgeNetworkAnalyser")] + #[strum( + props( + name = "Cartridge (Network Analyzer)", + desc = "A minor masterpiece of micro-electronic engineering, the network analyzer displays the current, voltage and wattage of a cable network, as well as any devices connected to it. Based on a widely-copied Sinotai design, it's used in conjunction with the OreCore Handheld Tablet.", + value = "1606989119" + ) + )] + CartridgeNetworkAnalyser = 1606989119i32, + #[strum(serialize = "CircuitboardAirControl")] + #[strum( + props( + name = "Air Control", + desc = "When added to a Console, air control circuit boards allow you to program an Active Vent. As with small dogs and 83% of people, air control circuits have only three modes: Pressure, Draft and Offline. Pressure mode maintains a 100kPa atmosphere, switching the active vent between inward and outward flow until target pressure is achieved. Draft mode allows you to pair active vents to circulate air. Offline mode deactivates the vent. ", + value = "1618019559" + ) + )] + CircuitboardAirControl = 1618019559i32, + #[strum(serialize = "StructureUprightWindTurbine")] + #[strum( + props( + name = "Upright Wind Turbine", + desc = "Norsec's basic wind turbine is an easily fabricated, rapidly deployed design that is strong enough to withstand the worst that environments can throw at it. \nWhile the wind turbine is optimized to produce power even on low atmosphere worlds (up to 200W), it performs best in denser environments. Output varies with wind speed, and during storms, may increase dramatically (up to 800W), so be careful to design your power networks with that in mind.", + value = "1622183451" + ) + )] + StructureUprightWindTurbine = 1622183451i32, + #[strum(serialize = "StructureFairingTypeA1")] + #[strum(props(name = "Fairing (Type A1)", desc = "", value = "1622567418"))] + StructureFairingTypeA1 = 1622567418i32, + #[strum(serialize = "ItemKitWallArch")] + #[strum(props(name = "Kit (Arched Wall)", desc = "", value = "1625214531"))] + ItemKitWallArch = 1625214531i32, + #[strum(serialize = "StructurePipeLiquidCrossJunction3")] + #[strum( + props( + name = "Liquid Pipe (3-Way Junction)", + desc = "You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.", + value = "1628087508" + ) + )] + StructurePipeLiquidCrossJunction3 = 1628087508i32, + #[strum(serialize = "StructureGasTankStorage")] + #[strum( + props( + name = "Gas Tank Storage", + desc = "When connected to a pipe network, the tank storage unit allows you to refill a Canister, as well as read various atmospheric data from the Gas Canister.", + value = "1632165346" + ) + )] + StructureGasTankStorage = 1632165346i32, + #[strum(serialize = "CircuitboardHashDisplay")] + #[strum(props(name = "Hash Display", desc = "", value = "1633074601"))] + CircuitboardHashDisplay = 1633074601i32, + #[strum(serialize = "CircuitboardAdvAirlockControl")] + #[strum(props(name = "Advanced Airlock", desc = "", value = "1633663176"))] + CircuitboardAdvAirlockControl = 1633663176i32, + #[strum(serialize = "ItemGasFilterCarbonDioxide")] + #[strum( + props( + name = "Filter (Carbon Dioxide)", + desc = "Given humanity's obsession with exhaling Carbon Dioxide, all Stationeers are issued two basic Sinotai Carbon Dioxide Gas Filter as part of their standard deployment kit (SDK). These filters allow passage of Carbon Dioxide into the suit's waste Canister, but are also critical components of the Portable Air Scrubber and the Filtration. The Medium Filter (Carbon Dioxide) and Heavy Filter (Carbon Dioxide) are also available.", + value = "1635000764" + ) + )] + ItemGasFilterCarbonDioxide = 1635000764i32, + #[strum(serialize = "StructureWallFlat")] + #[strum(props(name = "Wall (Flat)", desc = "", value = "1635864154"))] + StructureWallFlat = 1635864154i32, + #[strum(serialize = "StructureChairBoothMiddle")] + #[strum(props(name = "Chair (Booth Middle)", desc = "", value = "1640720378"))] + StructureChairBoothMiddle = 1640720378i32, + #[strum(serialize = "StructureWallArchArrow")] + #[strum(props(name = "Wall (Arch Arrow)", desc = "", value = "1649708822"))] + StructureWallArchArrow = 1649708822i32, + #[strum(serialize = "StructureInsulatedPipeLiquidCrossJunction5")] + #[strum( + props( + name = "Insulated Liquid Pipe (5-Way Junction)", + desc = "Liquid piping with very low temperature loss or gain.", + value = "1654694384" + ) + )] + StructureInsulatedPipeLiquidCrossJunction5 = 1654694384i32, + #[strum(serialize = "StructureLogicMath")] + #[strum( + props( + name = "Logic Math", + desc = "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log", + value = "1657691323" + ) + )] + StructureLogicMath = 1657691323i32, + #[strum(serialize = "ItemKitFridgeSmall")] + #[strum(props(name = "Kit (Fridge Small)", desc = "", value = "1661226524"))] + ItemKitFridgeSmall = 1661226524i32, + #[strum(serialize = "ItemScanner")] + #[strum( + props( + name = "Handheld Scanner", + desc = "A mysterious piece of technology, rumored to have Zrillian origins.", + value = "1661270830" + ) + )] + ItemScanner = 1661270830i32, + #[strum(serialize = "ItemEmergencyToolBelt")] + #[strum(props(name = "Emergency Tool Belt", desc = "", value = "1661941301"))] + ItemEmergencyToolBelt = 1661941301i32, + #[strum(serialize = "StructureEmergencyButton")] + #[strum(props(name = "Important Button", desc = "", value = "1668452680"))] + StructureEmergencyButton = 1668452680i32, + #[strum(serialize = "ItemKitAutoMinerSmall")] + #[strum(props(name = "Kit (Autominer Small)", desc = "", value = "1668815415"))] + ItemKitAutoMinerSmall = 1668815415i32, + #[strum(serialize = "StructureChairBacklessSingle")] + #[strum(props(name = "Chair (Backless Single)", desc = "", value = "1672275150"))] + StructureChairBacklessSingle = 1672275150i32, + #[strum(serialize = "ItemPureIceLiquidNitrogen")] + #[strum( + props( + name = "Pure Ice Liquid Nitrogen", + desc = "A frozen chunk of pure Liquid Nitrogen", + value = "1674576569" + ) + )] + ItemPureIceLiquidNitrogen = 1674576569i32, + #[strum(serialize = "ItemEvaSuit")] + #[strum( + props( + name = "Eva Suit", + desc = "The EVA suit is the basic suit Stationeers need to survive in the inhospitable environment of space. For more information on EVA suits, consult the EVA suit guide.", + value = "1677018918" + ) + )] + ItemEvaSuit = 1677018918i32, + #[strum(serialize = "StructurePictureFrameThinPortraitSmall")] + #[strum( + props( + name = "Picture Frame Thin Portrait Small", + desc = "", + value = "1684488658" + ) + )] + StructurePictureFrameThinPortraitSmall = 1684488658i32, + #[strum(serialize = "StructureLiquidDrain")] + #[strum( + props( + name = "Active Liquid Outlet", + desc = "When connected to power and activated, it pumps liquid from a liquid network into the world.", + value = "1687692899" + ) + )] + StructureLiquidDrain = 1687692899i32, + #[strum(serialize = "StructureLiquidTankStorage")] + #[strum( + props( + name = "Liquid Tank Storage", + desc = "When connected to a liquid pipe network, the tank storage unit allows you to refill a Liquid Canister, as well as read various atmospheric data from the Gas Canister. It will not accept gas canisters.", + value = "1691898022" + ) + )] + StructureLiquidTankStorage = 1691898022i32, + #[strum(serialize = "StructurePipeRadiator")] + #[strum( + props( + name = "Pipe Convection Radiator", + desc = "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added the gas within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the gas in question. Adding multiple radiators will speed up heat transfer.", + value = "1696603168" + ) + )] + StructurePipeRadiator = 1696603168i32, + #[strum(serialize = "StructureSolarPanelFlatReinforced")] + #[strum( + props( + name = "Solar Panel (Heavy Flat)", + desc = "This solar panel is resistant to storm damage.", + value = "1697196770" + ) + )] + StructureSolarPanelFlatReinforced = 1697196770i32, + #[strum(serialize = "ToolPrinterMod")] + #[strum( + props( + name = "Tool Printer Mod", + desc = "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", + value = "1700018136" + ) + )] + ToolPrinterMod = 1700018136i32, + #[strum(serialize = "StructureCableJunctionH5Burnt")] + #[strum( + props( + name = "Burnt Heavy Cable (5-Way Junction)", + desc = "", + value = "1701593300" + ) + )] + StructureCableJunctionH5Burnt = 1701593300i32, + #[strum(serialize = "ItemKitFlagODA")] + #[strum(props(name = "Kit (ODA Flag)", desc = "", value = "1701764190"))] + ItemKitFlagOda = 1701764190i32, + #[strum(serialize = "StructureWallSmallPanelsTwoTone")] + #[strum( + props(name = "Wall (Small Panels Two Tone)", desc = "", value = "1709994581") + )] + StructureWallSmallPanelsTwoTone = 1709994581i32, + #[strum(serialize = "ItemFlowerYellow")] + #[strum(props(name = "Flower (Yellow)", desc = "", value = "1712822019"))] + ItemFlowerYellow = 1712822019i32, + #[strum(serialize = "StructureInsulatedPipeLiquidCorner")] + #[strum( + props( + name = "Insulated Liquid Pipe (Corner)", + desc = "Liquid piping with very low temperature loss or gain.", + value = "1713710802" + ) + )] + StructureInsulatedPipeLiquidCorner = 1713710802i32, + #[strum(serialize = "ItemCookedCondensedMilk")] + #[strum( + props( + name = "Condensed Milk", + desc = "A high-nutrient cooked food, which can be canned.", + value = "1715917521" + ) + )] + ItemCookedCondensedMilk = 1715917521i32, + #[strum(serialize = "ItemGasSensor")] + #[strum(props(name = "Kit (Gas Sensor)", desc = "", value = "1717593480"))] + ItemGasSensor = 1717593480i32, + #[strum(serialize = "ItemAdvancedTablet")] + #[strum( + props( + name = "Advanced Tablet", + desc = "The advanced Xigo Padi 2 tablet is an improved version of the basic Handheld Tablet, boasting two cartridge slots. The Padi 2 accepts Cartridge (Atmos Analyzer), Cartridge (Tracker), Cartridge (Medical Analyzer), Cartridge (Ore Scanner), Cartridge (eReader), and various other cartridges.\n\t \n\t With a Integrated Circuit (IC10) in the Programmable Chip, you can access variable slots on the carrying human using the device numbers (d0, d1, etc...), so long as the item can be access via logic, such as the Hardsuit.Connects to Logic Transmitter", + value = "1722785341" + ) + )] + ItemAdvancedTablet = 1722785341i32, + #[strum(serialize = "ItemCoalOre")] + #[strum( + props( + name = "Ore (Coal)", + desc = "Humanity wouldn't have got to space without humble, combustible coal. Burn it in a , smelt it in the Furnace to create alloys, or use it in the Reagent Processor to make Spray Paint (Black).", + value = "1724793494" + ) + )] + ItemCoalOre = 1724793494i32, + #[strum(serialize = "EntityChick")] + #[strum( + props( + name = "Entity Chick", + desc = "Once a chick is hatched, it gets hungry. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", + value = "1730165908" + ) + )] + EntityChick = 1730165908i32, + #[strum(serialize = "StructureLiquidUmbilicalFemale")] + #[strum(props(name = "Umbilical Socket (Liquid)", desc = "", value = "1734723642"))] + StructureLiquidUmbilicalFemale = 1734723642i32, + #[strum(serialize = "StructureAirlockGate")] + #[strum( + props( + name = "Small Hangar Door", + desc = "1 x 1 modular door piece for building hangar doors.", + value = "1736080881" + ) + )] + StructureAirlockGate = 1736080881i32, + #[strum(serialize = "CartridgeOreScannerColor")] + #[strum( + props( + name = "Cartridge (Ore Scanner Color)", + desc = "When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.", + value = "1738236580" + ) + )] + CartridgeOreScannerColor = 1738236580i32, + #[strum(serialize = "StructureBench4")] + #[strum(props(name = "Bench (Workbench Style)", desc = "", value = "1750375230"))] + StructureBench4 = 1750375230i32, + #[strum(serialize = "StructureCompositeCladdingSphericalCorner")] + #[strum( + props( + name = "Composite Cladding (Spherical Corner)", + desc = "", + value = "1751355139" + ) + )] + StructureCompositeCladdingSphericalCorner = 1751355139i32, + #[strum(serialize = "ItemKitRocketScanner")] + #[strum(props(name = "Kit (Rocket Scanner)", desc = "", value = "1753647154"))] + ItemKitRocketScanner = 1753647154i32, + #[strum(serialize = "ItemAreaPowerControl")] + #[strum( + props( + name = "Kit (Area Power Controller)", + desc = "This kit places a Area Power Control (APC) on any support structure. The APC kit has two options, selecting which direction you would like the APC power to flow.", + value = "1757673317" + ) + )] + ItemAreaPowerControl = 1757673317i32, + #[strum(serialize = "ItemIronOre")] + #[strum( + props( + name = "Ore (Iron)", + desc = "Abundant throughout the Solar System, iron is the ore most commonly used by Stationeers constructing offworld bases. It can be smelted into both Ingot (Iron)s and Ingot (Steel)s.", + value = "1758427767" + ) + )] + ItemIronOre = 1758427767i32, + #[strum(serialize = "DeviceStepUnit")] + #[strum( + props( + name = "Device Step Unit", + desc = "0.C-2\n1.C#-2\n2.D-2\n3.D#-2\n4.E-2\n5.F-2\n6.F#-2\n7.G-2\n8.G#-2\n9.A-2\n10.A#-2\n11.B-2\n12.C-1\n13.C#-1\n14.D-1\n15.D#-1\n16.E-1\n17.F-1\n18.F#-1\n19.G-1\n20.G#-1\n21.A-1\n22.A#-1\n23.B-1\n24.C0\n25.C#0\n26.D0\n27.D#0\n28.E0\n29.F0\n30.F#0\n31.G0\n32.G#0\n33.A0\n34.A#0\n35.B0\n36.C1\n37.C#1\n38.D1\n39.D#1\n40.E1\n41.F1\n42.F#1\n43.G1\n44.G#1\n45.A1\n46.A#1\n47.B1\n48.C2\n49.C#2\n50.D2\n51.D#2\n52.E2\n53.F2\n54.F#2\n55.G2\n56.G#2\n57.A2\n58.A#2\n59.B2\n60.C3\n61.C#3\n62.D3\n63.D#3\n64.E3\n65.F3\n66.F#3\n67.G3\n68.G#3\n69.A3\n70.A#3\n71.B3\n72.C4\n73.C#4\n74.D4\n75.D#4\n76.E4\n77.F4\n78.F#4\n79.G4\n80.G#4\n81.A4\n82.A#4\n83.B4\n84.C5\n85.C#5\n86.D5\n87.D#5\n88.E5\n89.F5\n90.F#5\n91.G5 \n92.G#5\n93.A5\n94.A#5\n95.B5\n96.C6\n97.C#6\n98.D6\n99.D#6\n100.E6\n101.F6\n102.F#6\n103.G6\n104.G#6\n105.A6\n106.A#6\n107.B6\n108.C7\n109.C#7\n110.D7\n111.D#7\n112.E7\n113.F7\n114.F#7\n115.G7\n116.G#7\n117.A7\n118.A#7\n119.B7\n120.C8\n121.C#8\n122.D8\n123.D#8\n124.E8\n125.F8\n126.F#8\n127.G8", + value = "1762696475" + ) + )] + DeviceStepUnit = 1762696475i32, + #[strum(serialize = "StructureWallPaddedThinNoBorderCorner")] + #[strum( + props( + name = "Wall (Padded Thin No Border Corner)", + desc = "", + value = "1769527556" + ) + )] + StructureWallPaddedThinNoBorderCorner = 1769527556i32, + #[strum(serialize = "ItemKitWindowShutter")] + #[strum( + props(name = "Kit (Composite Window Shutter)", desc = "", value = "1779979754") + )] + ItemKitWindowShutter = 1779979754i32, + #[strum(serialize = "StructureRocketManufactory")] + #[strum(props(name = "Rocket Manufactory", desc = "", value = "1781051034"))] + StructureRocketManufactory = 1781051034i32, + #[strum(serialize = "SeedBag_Soybean")] + #[strum( + props( + name = "Soybean Seeds", + desc = "Grow some Soybean.", + value = "1783004244" + ) + )] + SeedBagSoybean = 1783004244i32, + #[strum(serialize = "ItemEmergencyEvaSuit")] + #[strum(props(name = "Emergency Eva Suit", desc = "", value = "1791306431"))] + ItemEmergencyEvaSuit = 1791306431i32, + #[strum(serialize = "StructureWallArchCornerRound")] + #[strum(props(name = "Wall (Arch Corner Round)", desc = "", value = "1794588890"))] + StructureWallArchCornerRound = 1794588890i32, + #[strum(serialize = "ItemCoffeeMug")] + #[strum(props(name = "Coffee Mug", desc = "", value = "1800622698"))] + ItemCoffeeMug = 1800622698i32, + #[strum(serialize = "StructureRoboticArmRailStraightStop")] + #[strum( + props(name = "Linear Rail Straight Station", desc = "", value = "1800701885") + )] + StructureRoboticArmRailStraightStop = 1800701885i32, + #[strum(serialize = "StructureAngledBench")] + #[strum(props(name = "Bench (Angled)", desc = "", value = "1811979158"))] + StructureAngledBench = 1811979158i32, + #[strum(serialize = "StructurePassiveLiquidDrain")] + #[strum( + props( + name = "Passive Liquid Drain", + desc = "Moves liquids from a pipe network to the world atmosphere.", + value = "1812364811" + ) + )] + StructurePassiveLiquidDrain = 1812364811i32, + #[strum(serialize = "ItemKitLandingPadAtmos")] + #[strum( + props(name = "Kit (Landing Pad Atmospherics)", desc = "", value = "1817007843") + )] + ItemKitLandingPadAtmos = 1817007843i32, + #[strum(serialize = "ItemRTGSurvival")] + #[strum( + props( + name = "Kit (RTG)", + desc = "This kit creates a Kit (RTG).", + value = "1817645803" + ) + )] + ItemRtgSurvival = 1817645803i32, + #[strum(serialize = "StructureInsulatedInLineTankGas1x1")] + #[strum( + props(name = "Insulated In-Line Tank Small Gas", desc = "", value = "1818267386") + )] + StructureInsulatedInLineTankGas1X1 = 1818267386i32, + #[strum(serialize = "ItemPlantThermogenic_Genepool2")] + #[strum( + props( + name = "Hades Flower (Beta strain)", + desc = "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant. The beta strain is notably more efficient than the earlier, more experimental alpha variant.", + value = "1819167057" + ) + )] + ItemPlantThermogenicGenepool2 = 1819167057i32, + #[strum(serialize = "StructureLogicSelect")] + #[strum( + props( + name = "Logic Select", + desc = "0.Equals\n1.Greater\n2.Less\n3.NotEquals", + value = "1822736084" + ) + )] + StructureLogicSelect = 1822736084i32, + #[strum(serialize = "ItemGasFilterNitrousOxideM")] + #[strum( + props(name = "Medium Filter (Nitrous Oxide)", desc = "", value = "1824284061") + )] + ItemGasFilterNitrousOxideM = 1824284061i32, + #[strum(serialize = "StructureSmallDirectHeatExchangeLiquidtoGas")] + #[strum( + props( + name = "Small Direct Heat Exchanger - Liquid + Gas ", + desc = "Direct Heat Exchangers equalize the temperature of the two input networks.", + value = "1825212016" + ) + )] + StructureSmallDirectHeatExchangeLiquidtoGas = 1825212016i32, + #[strum(serialize = "ItemKitRoverFrame")] + #[strum(props(name = "Kit (Rover Frame)", desc = "", value = "1827215803"))] + ItemKitRoverFrame = 1827215803i32, + #[strum(serialize = "ItemNickelOre")] + #[strum( + props( + name = "Ore (Nickel)", + desc = "Nickel is a chemical element with the symbol \"Ni\" and is a rare metal commonly used as a plating to prevent corrosion. Sought after by many Stationeers, Nickel is also commonly used to create several alloys.", + value = "1830218956" + ) + )] + ItemNickelOre = 1830218956i32, + #[strum(serialize = "StructurePictureFrameThinMountPortraitSmall")] + #[strum( + props( + name = "Picture Frame Thin Portrait Small", + desc = "", + value = "1835796040" + ) + )] + StructurePictureFrameThinMountPortraitSmall = 1835796040i32, + #[strum(serialize = "H2Combustor")] + #[strum( + props( + name = "H2 Combustor", + desc = "Adapted slightly from its original Recurso design, the Volatiles Combustor does exactly what its name suggests - it burns a mixture of volatiles and Oxygen to create water. Extremely useful in hot or arid environments, users need to be aware that the combustor outputs considerable waste heat. The device is also less than perfectly efficient, resulting in the autoignition of volatiles in the chamber, and the production of waste gases which must be dealt with.", + value = "1840108251" + ) + )] + H2Combustor = 1840108251i32, + #[strum(serialize = "Flag_ODA_10m")] + #[strum(props(name = "Flag (ODA 10m)", desc = "", value = "1845441951"))] + FlagOda10M = 1845441951i32, + #[strum(serialize = "StructureLightLongAngled")] + #[strum(props(name = "Wall Light (Long Angled)", desc = "", value = "1847265835"))] + StructureLightLongAngled = 1847265835i32, + #[strum(serialize = "StructurePipeLiquidCrossJunction")] + #[strum( + props( + name = "Liquid Pipe (Cross Junction)", + desc = "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", + value = "1848735691" + ) + )] + StructurePipeLiquidCrossJunction = 1848735691i32, + #[strum(serialize = "ItemCookedPumpkin")] + #[strum( + props( + name = "Cooked Pumpkin", + desc = "A high-nutrient cooked food, which can be canned.", + value = "1849281546" + ) + )] + ItemCookedPumpkin = 1849281546i32, + #[strum(serialize = "StructureLiquidValve")] + #[strum(props(name = "Valve (Liquid)", desc = "", value = "1849974453"))] + StructureLiquidValve = 1849974453i32, + #[strum(serialize = "ApplianceTabletDock")] + #[strum(props(name = "Tablet Dock", desc = "", value = "1853941363"))] + ApplianceTabletDock = 1853941363i32, + #[strum(serialize = "StructureCableJunction6HBurnt")] + #[strum( + props(name = "Burnt Cable (6-Way Junction)", desc = "", value = "1854404029") + )] + StructureCableJunction6HBurnt = 1854404029i32, + #[strum(serialize = "ItemMKIIWrench")] + #[strum( + props( + name = "Mk II Wrench", + desc = "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures The MK II is more resistant to temperature and pressure.", + value = "1862001680" + ) + )] + ItemMkiiWrench = 1862001680i32, + #[strum(serialize = "ItemAdhesiveInsulation")] + #[strum(props(name = "Adhesive Insulation", desc = "", value = "1871048978"))] + ItemAdhesiveInsulation = 1871048978i32, + #[strum(serialize = "ItemGasFilterCarbonDioxideL")] + #[strum( + props(name = "Heavy Filter (Carbon Dioxide)", desc = "", value = "1876847024") + )] + ItemGasFilterCarbonDioxideL = 1876847024i32, + #[strum(serialize = "ItemWallHeater")] + #[strum( + props( + name = "Kit (Wall Heater)", + desc = "This kit creates a Kit (Wall Heater).", + value = "1880134612" + ) + )] + ItemWallHeater = 1880134612i32, + #[strum(serialize = "StructureNitrolyzer")] + #[strum( + props( + name = "Nitrolyzer", + desc = "This device is used to create Nitrous Oxide from Oxygen, Nitrogen, and a large amount of energy. The process does not completely transform all the available gas at once, so the output is a mix of all three gasses, which may need further processing. More NOS will be created, if the gas inside the machine is close to a 1/1 ratio of Oxygen to Nitrogen. The second gas input line in optional, and not required if the gas is pre mixed.", + value = "1898243702" + ) + )] + StructureNitrolyzer = 1898243702i32, + #[strum(serialize = "StructureLargeSatelliteDish")] + #[strum( + props( + name = "Large Satellite Dish", + desc = "This large communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer (Modern) containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", + value = "1913391845" + ) + )] + StructureLargeSatelliteDish = 1913391845i32, + #[strum(serialize = "ItemGasFilterPollutants")] + #[strum( + props( + name = "Filter (Pollutant)", + desc = "Filters are used to capture various gases, such as waste emissions from a Furnace or Arc Furnace. Adding Sinotai-designed Pollutant filters to a Kit (Portable Scrubber) allows you to isolate this gas, then add it to a pipe network and employ its excellent coolant properties in a Wall Cooler. Try not to inhale.", + value = "1915566057" + ) + )] + ItemGasFilterPollutants = 1915566057i32, + #[strum(serialize = "ItemSprayCanKhaki")] + #[strum( + props( + name = "Spray Paint (Khaki)", + desc = "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.", + value = "1918456047" + ) + )] + ItemSprayCanKhaki = 1918456047i32, + #[strum(serialize = "ItemKitPumpedLiquidEngine")] + #[strum(props(name = "Kit (Pumped Liquid Engine)", desc = "", value = "1921918951"))] + ItemKitPumpedLiquidEngine = 1921918951i32, + #[strum(serialize = "StructurePowerUmbilicalFemaleSide")] + #[strum( + props(name = "Umbilical Socket Angle (Power)", desc = "", value = "1922506192") + )] + StructurePowerUmbilicalFemaleSide = 1922506192i32, + #[strum(serialize = "ItemSoybean")] + #[strum( + props( + name = "Soybean", + desc = " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil", + value = "1924673028" + ) + )] + ItemSoybean = 1924673028i32, + #[strum(serialize = "StructureInsulatedPipeLiquidCrossJunction")] + #[strum( + props( + name = "Insulated Liquid Pipe (3-Way Junction)", + desc = "Liquid piping with very low temperature loss or gain.", + value = "1926651727" + ) + )] + StructureInsulatedPipeLiquidCrossJunction = 1926651727i32, + #[strum(serialize = "ItemWreckageTurbineGenerator3")] + #[strum(props(name = "Wreckage", desc = "", value = "1927790321"))] + ItemWreckageTurbineGenerator3 = 1927790321i32, + #[strum(serialize = "StructurePassthroughHeatExchangerGasToLiquid")] + #[strum( + props( + name = "CounterFlow Heat Exchanger - Gas + Liquid", + desc = "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", + value = "1928991265" + ) + )] + StructurePassthroughHeatExchangerGasToLiquid = 1928991265i32, + #[strum(serialize = "ItemPotato")] + #[strum( + props( + name = "Potato", + desc = " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.", + value = "1929046963" + ) + )] + ItemPotato = 1929046963i32, + #[strum(serialize = "StructureCableCornerHBurnt")] + #[strum(props(name = "Burnt Cable (Corner)", desc = "", value = "1931412811"))] + StructureCableCornerHBurnt = 1931412811i32, + #[strum(serialize = "KitSDBSilo")] + #[strum( + props( + name = "Kit (SDB Silo)", + desc = "This kit creates a SDB Silo.", + value = "1932952652" + ) + )] + KitSdbSilo = 1932952652i32, + #[strum(serialize = "ItemKitPipeUtility")] + #[strum(props(name = "Kit (Pipe Utility Gas)", desc = "", value = "1934508338"))] + ItemKitPipeUtility = 1934508338i32, + #[strum(serialize = "ItemKitInteriorDoors")] + #[strum(props(name = "Kit (Interior Doors)", desc = "", value = "1935945891"))] + ItemKitInteriorDoors = 1935945891i32, + #[strum(serialize = "StructureCryoTube")] + #[strum( + props( + name = "CryoTube", + desc = "The exact operation of the Longsleep cryotube remains a commercial secret, with Norsec merely licensing the design. Able to regenerate organ damage when supplied with power and an atmosphere, the Longsleep is a minor miracle of modern medical technology.", + value = "1938254586" + ) + )] + StructureCryoTube = 1938254586i32, + #[strum(serialize = "StructureReinforcedWallPaddedWindow")] + #[strum( + props( + name = "Reinforced Window (Padded)", + desc = "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", + value = "1939061729" + ) + )] + StructureReinforcedWallPaddedWindow = 1939061729i32, + #[strum(serialize = "DynamicCrate")] + #[strum( + props( + name = "Dynamic Crate", + desc = "The humble dynamic crate has become a symbol of Stationeer invention and independence. With twelve slots and handles at either end for ease of carriage, it's both standard issue and critical kit for cadets and Commanders alike.", + value = "1941079206" + ) + )] + DynamicCrate = 1941079206i32, + #[strum(serialize = "StructureLogicGate")] + #[strum( + props( + name = "Logic Gate", + desc = "A logic device that performs a logical operation on one or more binary inputs that produces a single binary output. An input greater than zero is considered true for operations.", + value = "1942143074" + ) + )] + StructureLogicGate = 1942143074i32, + #[strum(serialize = "StructureDiode")] + #[strum(props(name = "LED", desc = "", value = "1944485013"))] + StructureDiode = 1944485013i32, + #[strum(serialize = "StructureChairBacklessDouble")] + #[strum(props(name = "Chair (Backless Double)", desc = "", value = "1944858936"))] + StructureChairBacklessDouble = 1944858936i32, + #[strum(serialize = "StructureBatteryCharger")] + #[strum( + props( + name = "Battery Cell Charger", + desc = "The 5-slot Xigo battery charger fits the Battery Cell (Small), Battery Cell (Large) and Battery Cell (Nuclear), providing up to 500W to any connected cell. Note: the older design means this device has minor power draw (10W) even when not charging.", + value = "1945930022" + ) + )] + StructureBatteryCharger = 1945930022i32, + #[strum(serialize = "StructureFurnace")] + #[strum( + props( + name = "Furnace", + desc = "The Zhurong furnace employs a high-temperature gas mixture of Oxygen and Volatiles to smelt ingots and a range of alloys as raw materials for fabricators.\nA basic gas mixture can be achieved by adding Ice (Oxite) and Ice (Volatiles) in a 1:2 ratio directly to the furnace, but more complex alloys will require careful management of a dedicated gas mixing network. Exact ingredient ratios must be observed. Likewise, smelting ores at insufficient temperatures will produce reagents, which must be recycled.\nIf liquids are present in the furnace, they will gather there until the furnace is connected to a liquid pipe network.", + value = "1947944864" + ) + )] + StructureFurnace = 1947944864i32, + #[strum(serialize = "ItemLightSword")] + #[strum( + props( + name = "Light Sword", + desc = "A charming, if useless, pseudo-weapon. (Creative only.)", + value = "1949076595" + ) + )] + ItemLightSword = 1949076595i32, + #[strum(serialize = "ItemKitLiquidRegulator")] + #[strum(props(name = "Kit (Liquid Regulator)", desc = "", value = "1951126161"))] + ItemKitLiquidRegulator = 1951126161i32, + #[strum(serialize = "StructureCompositeCladdingRoundedCorner")] + #[strum( + props( + name = "Composite Cladding (Rounded Corner)", + desc = "", + value = "1951525046" + ) + )] + StructureCompositeCladdingRoundedCorner = 1951525046i32, + #[strum(serialize = "StructureChuteExportBin")] + #[strum(props(name = "Chute Export Bin", desc = "", value = "1957571043"))] + StructureChuteExportBin = 1957571043i32, + #[strum(serialize = "ItemGasFilterPollutantsL")] + #[strum(props(name = "Heavy Filter (Pollutants)", desc = "", value = "1959564765"))] + ItemGasFilterPollutantsL = 1959564765i32, + #[strum(serialize = "ItemKitSmallSatelliteDish")] + #[strum(props(name = "Kit (Small Satellite Dish)", desc = "", value = "1960952220"))] + ItemKitSmallSatelliteDish = 1960952220i32, + #[strum(serialize = "StructureSolarPanelFlat")] + #[strum( + props( + name = "Solar Panel (Flat)", + desc = "Sinotai basic solar panels generate power from sunlight. They lie flat to the ground, and their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", + value = "1968102968" + ) + )] + StructureSolarPanelFlat = 1968102968i32, + #[strum(serialize = "StructureDrinkingFountain")] + #[strum( + props( + name = "Drinking Fountain", + desc = "The Drinking Fountain can be interacted with directly to increase hydration. It needs a Water supply.", + value = "1968371847" + ) + )] + StructureDrinkingFountain = 1968371847i32, + #[strum(serialize = "ItemJetpackBasic")] + #[strum( + props( + name = "Jetpack Basic", + desc = "The basic CHAC jetpack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stabilizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", + value = "1969189000" + ) + )] + ItemJetpackBasic = 1969189000i32, + #[strum(serialize = "ItemKitEngineMedium")] + #[strum(props(name = "Kit (Engine Medium)", desc = "", value = "1969312177"))] + ItemKitEngineMedium = 1969312177i32, + #[strum(serialize = "StructureRoboticArmRailCornerStop")] + #[strum(props(name = "Linear Rail Corner Station", desc = "", value = "1974053060"))] + StructureRoboticArmRailCornerStop = 1974053060i32, + #[strum(serialize = "StructureLarreDockAtmos")] + #[strum( + props( + name = "LARrE Dock (Atmos)", + desc = "0.Outward\n1.Inward", + value = "1978422481" + ) + )] + StructureLarreDockAtmos = 1978422481i32, + #[strum(serialize = "StructureWallGeometryCorner")] + #[strum(props(name = "Wall (Geometry Corner)", desc = "", value = "1979212240"))] + StructureWallGeometryCorner = 1979212240i32, + #[strum(serialize = "StructureInteriorDoorPaddedThin")] + #[strum( + props( + name = "Interior Door Padded Thin", + desc = "0.Operate\n1.Logic", + value = "1981698201" + ) + )] + StructureInteriorDoorPaddedThin = 1981698201i32, + #[strum(serialize = "StructureWaterBottleFillerPoweredBottom")] + #[strum(props(name = "Waterbottle Filler", desc = "", value = "1986658780"))] + StructureWaterBottleFillerPoweredBottom = 1986658780i32, + #[strum(serialize = "StructureLiquidTankSmall")] + #[strum(props(name = "Liquid Tank Small", desc = "", value = "1988118157"))] + StructureLiquidTankSmall = 1988118157i32, + #[strum(serialize = "ItemKitComputer")] + #[strum(props(name = "Kit (Computer)", desc = "", value = "1990225489"))] + ItemKitComputer = 1990225489i32, + #[strum(serialize = "StructureWeatherStation")] + #[strum( + props( + name = "Weather Station", + desc = "0.NoStorm\n1.StormIncoming\n2.InStorm", + value = "1997212478" + ) + )] + StructureWeatherStation = 1997212478i32, + #[strum(serialize = "ItemKitLogicInputOutput")] + #[strum(props(name = "Kit (Logic I/O)", desc = "", value = "1997293610"))] + ItemKitLogicInputOutput = 1997293610i32, + #[strum(serialize = "StructureCompositeCladdingPanel")] + #[strum(props(name = "Composite Cladding (Panel)", desc = "", value = "1997436771"))] + StructureCompositeCladdingPanel = 1997436771i32, + #[strum(serialize = "StructureElevatorShaftIndustrial")] + #[strum(props(name = "Elevator Shaft", desc = "", value = "1998354978"))] + StructureElevatorShaftIndustrial = 1998354978i32, + #[strum(serialize = "ReagentColorRed")] + #[strum(props(name = "Color Dye (Red)", desc = "", value = "1998377961"))] + ReagentColorRed = 1998377961i32, + #[strum(serialize = "Flag_ODA_6m")] + #[strum(props(name = "Flag (ODA 6m)", desc = "", value = "1998634960"))] + FlagOda6M = 1998634960i32, + #[strum(serialize = "StructureAreaPowerControl")] + #[strum( + props( + name = "Area Power Control", + desc = "An Area Power Control (APC) has three main functions: \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network.\nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", + value = "1999523701" + ) + )] + StructureAreaPowerControl = 1999523701i32, + #[strum(serialize = "ItemGasFilterWaterL")] + #[strum(props(name = "Heavy Filter (Water)", desc = "", value = "2004969680"))] + ItemGasFilterWaterL = 2004969680i32, + #[strum(serialize = "ItemDrill")] + #[strum( + props( + name = "Hand Drill", + desc = "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", + value = "2009673399" + ) + )] + ItemDrill = 2009673399i32, + #[strum(serialize = "ItemFlagSmall")] + #[strum(props(name = "Kit (Small Flag)", desc = "", value = "2011191088"))] + ItemFlagSmall = 2011191088i32, + #[strum(serialize = "ItemCookedRice")] + #[strum( + props( + name = "Cooked Rice", + desc = "A high-nutrient cooked food, which can be canned.", + value = "2013539020" + ) + )] + ItemCookedRice = 2013539020i32, + #[strum(serialize = "StructureRocketScanner")] + #[strum(props(name = "Rocket Scanner", desc = "", value = "2014252591"))] + StructureRocketScanner = 2014252591i32, + #[strum(serialize = "ItemKitPoweredVent")] + #[strum(props(name = "Kit (Powered Vent)", desc = "", value = "2015439334"))] + ItemKitPoweredVent = 2015439334i32, + #[strum(serialize = "CircuitboardSolarControl")] + #[strum( + props( + name = "Solar Control", + desc = "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.", + value = "2020180320" + ) + )] + CircuitboardSolarControl = 2020180320i32, + #[strum(serialize = "StructurePipeRadiatorFlatLiquid")] + #[strum( + props( + name = "Pipe Radiator Liquid", + desc = "A liquid pipe mounted radiator optimized for radiating heat in vacuums.", + value = "2024754523" + ) + )] + StructurePipeRadiatorFlatLiquid = 2024754523i32, + #[strum(serialize = "StructureWallPaddingLightFitting")] + #[strum( + props(name = "Wall (Padding Light Fitting)", desc = "", value = "2024882687") + )] + StructureWallPaddingLightFitting = 2024882687i32, + #[strum(serialize = "StructureReinforcedCompositeWindow")] + #[strum( + props( + name = "Reinforced Window (Composite)", + desc = "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", + value = "2027713511" + ) + )] + StructureReinforcedCompositeWindow = 2027713511i32, + #[strum(serialize = "ItemKitRocketLiquidFuelTank")] + #[strum( + props(name = "Kit (Rocket Liquid Fuel Tank)", desc = "", value = "2032027950") + )] + ItemKitRocketLiquidFuelTank = 2032027950i32, + #[strum(serialize = "StructureEngineMountTypeA1")] + #[strum(props(name = "Engine Mount (Type A1)", desc = "", value = "2035781224"))] + StructureEngineMountTypeA1 = 2035781224i32, + #[strum(serialize = "ItemLiquidDrain")] + #[strum(props(name = "Kit (Liquid Drain)", desc = "", value = "2036225202"))] + ItemLiquidDrain = 2036225202i32, + #[strum(serialize = "ItemLiquidTankStorage")] + #[strum( + props( + name = "Kit (Liquid Canister Storage)", + desc = "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.", + value = "2037427578" + ) + )] + ItemLiquidTankStorage = 2037427578i32, + #[strum(serialize = "StructurePipeCrossJunction3")] + #[strum( + props( + name = "Pipe (3-Way Junction)", + desc = "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", + value = "2038427184" + ) + )] + StructurePipeCrossJunction3 = 2038427184i32, + #[strum(serialize = "ItemPeaceLily")] + #[strum( + props( + name = "Peace Lily", + desc = "A fetching lily with greater resistance to cold temperatures.", + value = "2042955224" + ) + )] + ItemPeaceLily = 2042955224i32, + #[strum(serialize = "PortableSolarPanel")] + #[strum(props(name = "Portable Solar Panel", desc = "", value = "2043318949"))] + PortableSolarPanel = 2043318949i32, + #[strum(serialize = "ItemMushroom")] + #[strum( + props( + name = "Mushroom", + desc = "A tasty food item. Unlike normal plants, it consumes Oxygen and outputs Carbon Dioxide. Mushrooms will only mature at a moderate rate in darkness, and prolonged light will kill it.", + value = "2044798572" + ) + )] + ItemMushroom = 2044798572i32, + #[strum(serialize = "StructureStairwellNoDoors")] + #[strum(props(name = "Stairwell (No Doors)", desc = "", value = "2049879875"))] + StructureStairwellNoDoors = 2049879875i32, + #[strum(serialize = "ItemKitHydroponicStation")] + #[strum(props(name = "Kit (Hydroponic Station)", desc = "", value = "2057179799"))] + ItemKitHydroponicStation = 2057179799i32, + #[strum(serialize = "ItemCableCoilHeavy")] + #[strum( + props( + name = "Cable Coil (Heavy)", + desc = "Use heavy cable coil for power systems with large draws. Unlike Cable Coil, which can only safely conduct 5kW, heavy cables can transmit up to 100kW.", + value = "2060134443" + ) + )] + ItemCableCoilHeavy = 2060134443i32, + #[strum(serialize = "StructureElevatorLevelIndustrial")] + #[strum(props(name = "Elevator Level", desc = "", value = "2060648791"))] + StructureElevatorLevelIndustrial = 2060648791i32, + #[strum(serialize = "StructurePassiveLargeRadiatorGas")] + #[strum( + props( + name = "Medium Convection Radiator", + desc = "Has been replaced by Medium Convection Radiator.", + value = "2066977095" + ) + )] + StructurePassiveLargeRadiatorGas = 2066977095i32, + #[strum(serialize = "ItemKitInsulatedLiquidPipe")] + #[strum( + props(name = "Kit (Insulated Liquid Pipe)", desc = "", value = "2067655311") + )] + ItemKitInsulatedLiquidPipe = 2067655311i32, + #[strum(serialize = "StructureLiquidPipeRadiator")] + #[strum( + props( + name = "Liquid Pipe Convection Radiator", + desc = "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added to the liquid within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the liquid in question. Adding multiple radiators will speed up heat transfer.", + value = "2072805863" + ) + )] + StructureLiquidPipeRadiator = 2072805863i32, + #[strum(serialize = "StructureLogicHashGen")] + #[strum(props(name = "Logic Hash Generator", desc = "", value = "2077593121"))] + StructureLogicHashGen = 2077593121i32, + #[strum(serialize = "AccessCardWhite")] + #[strum(props(name = "Access Card (White)", desc = "", value = "2079959157"))] + AccessCardWhite = 2079959157i32, + #[strum(serialize = "StructureCableStraightHBurnt")] + #[strum(props(name = "Burnt Cable (Straight)", desc = "", value = "2085762089"))] + StructureCableStraightHBurnt = 2085762089i32, + #[strum(serialize = "StructureWallPaddedWindow")] + #[strum(props(name = "Wall (Padded Window)", desc = "", value = "2087628940"))] + StructureWallPaddedWindow = 2087628940i32, + #[strum(serialize = "StructureLogicMirror")] + #[strum(props(name = "Logic Mirror", desc = "", value = "2096189278"))] + StructureLogicMirror = 2096189278i32, + #[strum(serialize = "StructureWallFlatCornerTriangle")] + #[strum( + props(name = "Wall (Flat Corner Triangle)", desc = "", value = "2097419366") + )] + StructureWallFlatCornerTriangle = 2097419366i32, + #[strum(serialize = "StructureBackLiquidPressureRegulator")] + #[strum( + props( + name = "Liquid Back Volume Regulator", + desc = "Regulates the volume ratio of liquid in the input Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", + value = "2099900163" + ) + )] + StructureBackLiquidPressureRegulator = 2099900163i32, + #[strum(serialize = "StructureTankSmallFuel")] + #[strum(props(name = "Small Tank (Fuel)", desc = "", value = "2102454415"))] + StructureTankSmallFuel = 2102454415i32, + #[strum(serialize = "ItemEmergencyWireCutters")] + #[strum(props(name = "Emergency Wire Cutters", desc = "", value = "2102803952"))] + ItemEmergencyWireCutters = 2102803952i32, + #[strum(serialize = "StructureGasMixer")] + #[strum( + props( + name = "Gas Mixer", + desc = "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.", + value = "2104106366" + ) + )] + StructureGasMixer = 2104106366i32, + #[strum(serialize = "StructureCompositeFloorGratingOpen")] + #[strum( + props(name = "Composite Floor Grating Open", desc = "", value = "2109695912") + )] + StructureCompositeFloorGratingOpen = 2109695912i32, + #[strum(serialize = "ItemRocketMiningDrillHead")] + #[strum( + props( + name = "Mining-Drill Head (Basic)", + desc = "Replaceable drill head for Rocket Miner", + value = "2109945337" + ) + )] + ItemRocketMiningDrillHead = 2109945337i32, + #[strum(serialize = "ItemSugar")] + #[strum(props(name = "Sugar", desc = "", value = "2111910840"))] + ItemSugar = 2111910840i32, + #[strum(serialize = "DynamicMKIILiquidCanisterEmpty")] + #[strum( + props( + name = "Portable Liquid Tank Mk II", + desc = "An empty, insulated liquid Gas Canister.", + value = "2130739600" + ) + )] + DynamicMkiiLiquidCanisterEmpty = 2130739600i32, + #[strum(serialize = "ItemSpaceOre")] + #[strum( + props( + name = "Dirty Ore", + desc = "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.", + value = "2131916219" + ) + )] + ItemSpaceOre = 2131916219i32, + #[strum(serialize = "ItemKitStandardChute")] + #[strum(props(name = "Kit (Powered Chutes)", desc = "", value = "2133035682"))] + ItemKitStandardChute = 2133035682i32, + #[strum(serialize = "StructureInsulatedPipeStraight")] + #[strum( + props( + name = "Insulated Pipe (Straight)", + desc = "Insulated pipes greatly reduce heat loss from gases stored in them.", + value = "2134172356" + ) + )] + StructureInsulatedPipeStraight = 2134172356i32, + #[strum(serialize = "ItemLeadIngot")] + #[strum(props(name = "Ingot (Lead)", desc = "", value = "2134647745"))] + ItemLeadIngot = 2134647745i32, + #[strum(serialize = "ItemGasCanisterNitrogen")] + #[strum(props(name = "Canister (Nitrogen)", desc = "", value = "2145068424"))] + ItemGasCanisterNitrogen = 2145068424i32, +} +impl TryFrom for StationpediaPrefab { + type Error = super::ParseError; + fn try_from( + value: f64, + ) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = StationpediaPrefab::iter() + .find(|enm| (f64::from(*enm as i32) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} diff --git a/stationeers_data/src/enums/script.rs b/stationeers_data/src/enums/script.rs new file mode 100644 index 0000000..4bbb1f4 --- /dev/null +++ b/stationeers_data/src/enums/script.rs @@ -0,0 +1,2132 @@ +// ================================================= +// !! <-----> DO NOT MODIFY <-----> !! +// +// This module was automatically generated by an +// xtask +// +// run +// +// `cargo xtask generate -m enums` +// +// from the workspace to regenerate +// +// ================================================= + +use serde_derive::{Deserialize, Serialize}; +use strum::{AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr}; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum LogicBatchMethod { + #[strum(serialize = "Average")] + #[strum(props(docs = "", value = "0"))] + Average = 0u8, + #[strum(serialize = "Sum")] + #[strum(props(docs = "", value = "1"))] + Sum = 1u8, + #[strum(serialize = "Minimum")] + #[strum(props(docs = "", value = "2"))] + Minimum = 2u8, + #[strum(serialize = "Maximum")] + #[strum(props(docs = "", value = "3"))] + Maximum = 3u8, +} +impl TryFrom for LogicBatchMethod { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = LogicBatchMethod::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum LogicReagentMode { + #[strum(serialize = "Contents")] + #[strum(props(docs = "", value = "0"))] + Contents = 0u8, + #[strum(serialize = "Required")] + #[strum(props(docs = "", value = "1"))] + Required = 1u8, + #[strum(serialize = "Recipe")] + #[strum(props(docs = "", value = "2"))] + Recipe = 2u8, + #[strum(serialize = "TotalContents")] + #[strum(props(docs = "", value = "3"))] + TotalContents = 3u8, +} +impl TryFrom for LogicReagentMode { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = LogicReagentMode::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u8)] +pub enum LogicSlotType { + #[strum(serialize = "None")] + #[strum(props(docs = "No description", value = "0"))] + #[default] + None = 0u8, + #[strum(serialize = "Occupied")] + #[strum( + props(docs = "returns 0 when slot is not occupied, 1 when it is", value = "1") + )] + Occupied = 1u8, + #[strum(serialize = "OccupantHash")] + #[strum( + props( + docs = "returns the hash of the current occupant, the unique identifier of the thing", + value = "2" + ) + )] + OccupantHash = 2u8, + #[strum(serialize = "Quantity")] + #[strum( + props( + docs = "returns the current quantity, such as stack size, of the item in the slot", + value = "3" + ) + )] + Quantity = 3u8, + #[strum(serialize = "Damage")] + #[strum( + props(docs = "returns the damage state of the item in the slot", value = "4") + )] + Damage = 4u8, + #[strum(serialize = "Efficiency")] + #[strum( + props( + docs = "returns the growth efficiency of the plant in the slot", + value = "5" + ) + )] + Efficiency = 5u8, + #[strum(serialize = "Health")] + #[strum(props(docs = "returns the health of the plant in the slot", value = "6"))] + Health = 6u8, + #[strum(serialize = "Growth")] + #[strum( + props( + docs = "returns the current growth state of the plant in the slot", + value = "7" + ) + )] + Growth = 7u8, + #[strum(serialize = "Pressure")] + #[strum( + props( + docs = "returns pressure of the slot occupants internal atmosphere", + value = "8" + ) + )] + Pressure = 8u8, + #[strum(serialize = "Temperature")] + #[strum( + props( + docs = "returns temperature of the slot occupants internal atmosphere", + value = "9" + ) + )] + Temperature = 9u8, + #[strum(serialize = "Charge")] + #[strum( + props( + docs = "returns current energy charge the slot occupant is holding", + value = "10" + ) + )] + Charge = 10u8, + #[strum(serialize = "ChargeRatio")] + #[strum( + props( + docs = "returns current energy charge the slot occupant is holding as a ratio between 0 and 1 of its maximum", + value = "11" + ) + )] + ChargeRatio = 11u8, + #[strum(serialize = "Class")] + #[strum( + props(docs = "returns integer representing the class of object", value = "12") + )] + Class = 12u8, + #[strum(serialize = "PressureWaste")] + #[strum( + props( + docs = "returns pressure in the waste tank of the jetpack in this slot", + value = "13" + ) + )] + PressureWaste = 13u8, + #[strum(serialize = "PressureAir")] + #[strum( + props( + docs = "returns pressure in the air tank of the jetpack in this slot", + value = "14" + ) + )] + PressureAir = 14u8, + #[strum(serialize = "MaxQuantity")] + #[strum( + props(docs = "returns the max stack size of the item in the slot", value = "15") + )] + MaxQuantity = 15u8, + #[strum(serialize = "Mature")] + #[strum( + props( + docs = "returns 1 if the plant in this slot is mature, 0 when it isn't", + value = "16" + ) + )] + Mature = 16u8, + #[strum(serialize = "PrefabHash")] + #[strum(props(docs = "returns the hash of the structure in the slot", value = "17"))] + PrefabHash = 17u8, + #[strum(serialize = "Seeding")] + #[strum( + props( + docs = "Whether a plant is seeding (ready to harvest seeds from). Returns 1 if seeding or 0 if not.", + value = "18" + ) + )] + Seeding = 18u8, + #[strum(serialize = "LineNumber")] + #[strum( + props( + docs = "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution", + value = "19" + ) + )] + LineNumber = 19u8, + #[strum(serialize = "Volume")] + #[strum(props(docs = "No description available", value = "20"))] + Volume = 20u8, + #[strum(serialize = "Open")] + #[strum(props(docs = "No description available", value = "21"))] + Open = 21u8, + #[strum(serialize = "On")] + #[strum(props(docs = "No description available", value = "22"))] + On = 22u8, + #[strum(serialize = "Lock")] + #[strum(props(docs = "No description available", value = "23"))] + Lock = 23u8, + #[strum(serialize = "SortingClass")] + #[strum(props(docs = "No description available", value = "24"))] + SortingClass = 24u8, + #[strum(serialize = "FilterType")] + #[strum(props(docs = "No description available", value = "25"))] + FilterType = 25u8, + #[strum(serialize = "ReferenceId")] + #[strum(props(docs = "Unique Reference Identifier for this object", value = "26"))] + ReferenceId = 26u8, +} +impl TryFrom for LogicSlotType { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = LogicSlotType::iter() + .find(|enm| (f64::from(*enm as u8) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} +#[derive( + Default, + Debug, + Display, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumProperty, + EnumIter, + FromRepr, + Serialize, + Deserialize +)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[strum(use_phf)] +#[repr(u16)] +pub enum LogicType { + #[strum(serialize = "None")] + #[strum(props(deprecated = "true", docs = "No description", value = "0"))] + #[default] + None = 0u16, + #[strum(serialize = "Power")] + #[strum( + props( + docs = "Can be read to return if the device is correctly powered or not, set via the power system, return 1 if powered and 0 if not", + value = "1" + ) + )] + Power = 1u16, + #[strum(serialize = "Open")] + #[strum(props(docs = "1 if device is open, otherwise 0", value = "2"))] + Open = 2u16, + #[strum(serialize = "Mode")] + #[strum( + props( + docs = "Integer for mode state, different devices will have different mode states available to them", + value = "3" + ) + )] + Mode = 3u16, + #[strum(serialize = "Error")] + #[strum(props(docs = "1 if device is in error state, otherwise 0", value = "4"))] + Error = 4u16, + #[strum(serialize = "Pressure")] + #[strum(props(docs = "The current pressure reading of the device", value = "5"))] + Pressure = 5u16, + #[strum(serialize = "Temperature")] + #[strum(props(docs = "The current temperature reading of the device", value = "6"))] + Temperature = 6u16, + #[strum(serialize = "PressureExternal")] + #[strum(props(docs = "Setting for external pressure safety, in KPa", value = "7"))] + PressureExternal = 7u16, + #[strum(serialize = "PressureInternal")] + #[strum(props(docs = "Setting for internal pressure safety, in KPa", value = "8"))] + PressureInternal = 8u16, + #[strum(serialize = "Activate")] + #[strum( + props( + docs = "1 if device is activated (usually means running), otherwise 0", + value = "9" + ) + )] + Activate = 9u16, + #[strum(serialize = "Lock")] + #[strum( + props( + docs = "1 if device is locked, otherwise 0, can be set in most devices and prevents the user from access the values", + value = "10" + ) + )] + Lock = 10u16, + #[strum(serialize = "Charge")] + #[strum(props(docs = "The current charge the device has", value = "11"))] + Charge = 11u16, + #[strum(serialize = "Setting")] + #[strum( + props( + docs = "A variable setting that can be read or written, depending on the device", + value = "12" + ) + )] + Setting = 12u16, + #[strum(serialize = "Reagents")] + #[strum( + props(docs = "Total number of reagents recorded by the device", value = "13") + )] + Reagents = 13u16, + #[strum(serialize = "RatioOxygen")] + #[strum(props(docs = "The ratio of oxygen in device atmosphere", value = "14"))] + RatioOxygen = 14u16, + #[strum(serialize = "RatioCarbonDioxide")] + #[strum( + props( + docs = "The ratio of Carbon Dioxide in device atmosphere", + value = "15" + ) + )] + RatioCarbonDioxide = 15u16, + #[strum(serialize = "RatioNitrogen")] + #[strum(props(docs = "The ratio of nitrogen in device atmosphere", value = "16"))] + RatioNitrogen = 16u16, + #[strum(serialize = "RatioPollutant")] + #[strum(props(docs = "The ratio of pollutant in device atmosphere", value = "17"))] + RatioPollutant = 17u16, + #[strum(serialize = "RatioVolatiles")] + #[strum(props(docs = "The ratio of volatiles in device atmosphere", value = "18"))] + RatioVolatiles = 18u16, + #[strum(serialize = "RatioWater")] + #[strum(props(docs = "The ratio of water in device atmosphere", value = "19"))] + RatioWater = 19u16, + #[strum(serialize = "Horizontal")] + #[strum(props(docs = "Horizontal setting of the device", value = "20"))] + Horizontal = 20u16, + #[strum(serialize = "Vertical")] + #[strum(props(docs = "Vertical setting of the device", value = "21"))] + Vertical = 21u16, + #[strum(serialize = "SolarAngle")] + #[strum(props(docs = "Solar angle of the device", value = "22"))] + SolarAngle = 22u16, + #[strum(serialize = "Maximum")] + #[strum(props(docs = "Maximum setting of the device", value = "23"))] + Maximum = 23u16, + #[strum(serialize = "Ratio")] + #[strum( + props( + docs = "Context specific value depending on device, 0 to 1 based ratio", + value = "24" + ) + )] + Ratio = 24u16, + #[strum(serialize = "PowerPotential")] + #[strum( + props( + docs = "How much energy the device or network potentially provides", + value = "25" + ) + )] + PowerPotential = 25u16, + #[strum(serialize = "PowerActual")] + #[strum( + props( + docs = "How much energy the device or network is actually using", + value = "26" + ) + )] + PowerActual = 26u16, + #[strum(serialize = "Quantity")] + #[strum(props(docs = "Total quantity on the device", value = "27"))] + Quantity = 27u16, + #[strum(serialize = "On")] + #[strum( + props( + docs = "The current state of the device, 0 for off, 1 for on", + value = "28" + ) + )] + On = 28u16, + #[strum(serialize = "ImportQuantity")] + #[strum( + props( + deprecated = "true", + docs = "Total quantity of items imported by the device", + value = "29" + ) + )] + ImportQuantity = 29u16, + #[strum(serialize = "ImportSlotOccupant")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "30"))] + ImportSlotOccupant = 30u16, + #[strum(serialize = "ExportQuantity")] + #[strum( + props( + deprecated = "true", + docs = "Total quantity of items exported by the device", + value = "31" + ) + )] + ExportQuantity = 31u16, + #[strum(serialize = "ExportSlotOccupant")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "32"))] + ExportSlotOccupant = 32u16, + #[strum(serialize = "RequiredPower")] + #[strum( + props( + docs = "Idle operating power quantity, does not necessarily include extra demand power", + value = "33" + ) + )] + RequiredPower = 33u16, + #[strum(serialize = "HorizontalRatio")] + #[strum(props(docs = "Radio of horizontal setting for device", value = "34"))] + HorizontalRatio = 34u16, + #[strum(serialize = "VerticalRatio")] + #[strum(props(docs = "Radio of vertical setting for device", value = "35"))] + VerticalRatio = 35u16, + #[strum(serialize = "PowerRequired")] + #[strum( + props(docs = "Power requested from the device and/or network", value = "36") + )] + PowerRequired = 36u16, + #[strum(serialize = "Idle")] + #[strum( + props( + docs = "Returns 1 if the device is currently idle, otherwise 0", + value = "37" + ) + )] + Idle = 37u16, + #[strum(serialize = "Color")] + #[strum( + props( + docs = "\n Whether driven by concerns for clarity, safety or simple aesthetics, Stationeers have access to a small rainbow of colors for their constructions. These are the color setting for devices, represented as an integer.\n\n0: Blue\n1: Grey\n2: Green\n3: Orange\n4: Red\n5: Yellow\n6: White\n7: Black\n8: Brown\n9: Khaki\n10: Pink\n11: Purple\n\n It is an unwavering universal law that anything higher than 11 will be purple. The ODA is powerless to change this. Similarly, anything lower than 0 will be Blue.\n ", + value = "38" + ) + )] + Color = 38u16, + #[strum(serialize = "ElevatorSpeed")] + #[strum(props(docs = "Current speed of the elevator", value = "39"))] + ElevatorSpeed = 39u16, + #[strum(serialize = "ElevatorLevel")] + #[strum(props(docs = "Level the elevator is currently at", value = "40"))] + ElevatorLevel = 40u16, + #[strum(serialize = "RecipeHash")] + #[strum( + props( + docs = "Current hash of the recipe the device is set to produce", + value = "41" + ) + )] + RecipeHash = 41u16, + #[strum(serialize = "ExportSlotHash")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "42"))] + ExportSlotHash = 42u16, + #[strum(serialize = "ImportSlotHash")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "43"))] + ImportSlotHash = 43u16, + #[strum(serialize = "PlantHealth1")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "44"))] + PlantHealth1 = 44u16, + #[strum(serialize = "PlantHealth2")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "45"))] + PlantHealth2 = 45u16, + #[strum(serialize = "PlantHealth3")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "46"))] + PlantHealth3 = 46u16, + #[strum(serialize = "PlantHealth4")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "47"))] + PlantHealth4 = 47u16, + #[strum(serialize = "PlantGrowth1")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "48"))] + PlantGrowth1 = 48u16, + #[strum(serialize = "PlantGrowth2")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "49"))] + PlantGrowth2 = 49u16, + #[strum(serialize = "PlantGrowth3")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "50"))] + PlantGrowth3 = 50u16, + #[strum(serialize = "PlantGrowth4")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "51"))] + PlantGrowth4 = 51u16, + #[strum(serialize = "PlantEfficiency1")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "52"))] + PlantEfficiency1 = 52u16, + #[strum(serialize = "PlantEfficiency2")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "53"))] + PlantEfficiency2 = 53u16, + #[strum(serialize = "PlantEfficiency3")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "54"))] + PlantEfficiency3 = 54u16, + #[strum(serialize = "PlantEfficiency4")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "55"))] + PlantEfficiency4 = 55u16, + #[strum(serialize = "PlantHash1")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "56"))] + PlantHash1 = 56u16, + #[strum(serialize = "PlantHash2")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "57"))] + PlantHash2 = 57u16, + #[strum(serialize = "PlantHash3")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "58"))] + PlantHash3 = 58u16, + #[strum(serialize = "PlantHash4")] + #[strum(props(deprecated = "true", docs = "DEPRECATED", value = "59"))] + PlantHash4 = 59u16, + #[strum(serialize = "RequestHash")] + #[strum( + props( + docs = "When set to the unique identifier, requests an item of the provided type from the device", + value = "60" + ) + )] + RequestHash = 60u16, + #[strum(serialize = "CompletionRatio")] + #[strum( + props( + docs = "How complete the current production is for this device, between 0 and 1", + value = "61" + ) + )] + CompletionRatio = 61u16, + #[strum(serialize = "ClearMemory")] + #[strum( + props( + docs = "When set to 1, clears the counter memory (e.g. ExportCount). Will set itself back to 0 when actioned", + value = "62" + ) + )] + ClearMemory = 62u16, + #[strum(serialize = "ExportCount")] + #[strum( + props(docs = "How many items exported since last ClearMemory", value = "63") + )] + ExportCount = 63u16, + #[strum(serialize = "ImportCount")] + #[strum( + props(docs = "How many items imported since last ClearMemory", value = "64") + )] + ImportCount = 64u16, + #[strum(serialize = "PowerGeneration")] + #[strum(props(docs = "Returns how much power is being generated", value = "65"))] + PowerGeneration = 65u16, + #[strum(serialize = "TotalMoles")] + #[strum(props(docs = "Returns the total moles of the device", value = "66"))] + TotalMoles = 66u16, + #[strum(serialize = "Volume")] + #[strum(props(docs = "Returns the device atmosphere volume", value = "67"))] + Volume = 67u16, + #[strum(serialize = "Plant")] + #[strum( + props( + docs = "Performs the planting action for any plant based machinery", + value = "68" + ) + )] + Plant = 68u16, + #[strum(serialize = "Harvest")] + #[strum( + props( + docs = "Performs the harvesting action for any plant based machinery", + value = "69" + ) + )] + Harvest = 69u16, + #[strum(serialize = "Output")] + #[strum( + props( + docs = "The output operation for a sort handling device, such as a stacker or sorter, when in logic mode the device will only action one repetition when set zero or above and then back to -1 and await further instructions", + value = "70" + ) + )] + Output = 70u16, + #[strum(serialize = "PressureSetting")] + #[strum( + props( + docs = "The current setting for the internal pressure of the object (e.g. the Hardsuit Air release), in KPa", + value = "71" + ) + )] + PressureSetting = 71u16, + #[strum(serialize = "TemperatureSetting")] + #[strum( + props( + docs = "The current setting for the internal temperature of the object (e.g. the Hardsuit A/C)", + value = "72" + ) + )] + TemperatureSetting = 72u16, + #[strum(serialize = "TemperatureExternal")] + #[strum( + props( + docs = "The temperature of the outside of the device, usually the world atmosphere surrounding it", + value = "73" + ) + )] + TemperatureExternal = 73u16, + #[strum(serialize = "Filtration")] + #[strum( + props( + docs = "The current state of the filtration system, for example Filtration = 1 for a Hardsuit sets filtration to On", + value = "74" + ) + )] + Filtration = 74u16, + #[strum(serialize = "AirRelease")] + #[strum( + props( + docs = "The current state of the air release system, for example AirRelease = 1 for a Hardsuit sets Air Release to On", + value = "75" + ) + )] + AirRelease = 75u16, + #[strum(serialize = "PositionX")] + #[strum( + props( + docs = "The current position in X dimension in world coordinates", + value = "76" + ) + )] + PositionX = 76u16, + #[strum(serialize = "PositionY")] + #[strum( + props( + docs = "The current position in Y dimension in world coordinates", + value = "77" + ) + )] + PositionY = 77u16, + #[strum(serialize = "PositionZ")] + #[strum( + props( + docs = "The current position in Z dimension in world coordinates", + value = "78" + ) + )] + PositionZ = 78u16, + #[strum(serialize = "VelocityMagnitude")] + #[strum(props(docs = "The current magnitude of the velocity vector", value = "79"))] + VelocityMagnitude = 79u16, + #[strum(serialize = "VelocityRelativeX")] + #[strum( + props( + docs = "The current velocity X relative to the forward vector of this", + value = "80" + ) + )] + VelocityRelativeX = 80u16, + #[strum(serialize = "VelocityRelativeY")] + #[strum( + props( + docs = "The current velocity Y relative to the forward vector of this", + value = "81" + ) + )] + VelocityRelativeY = 81u16, + #[strum(serialize = "VelocityRelativeZ")] + #[strum( + props( + docs = "The current velocity Z relative to the forward vector of this", + value = "82" + ) + )] + VelocityRelativeZ = 82u16, + #[strum(serialize = "RatioNitrousOxide")] + #[strum( + props( + docs = "The ratio of Nitrous Oxide in device atmosphere", + value = "83" + ) + )] + RatioNitrousOxide = 83u16, + #[strum(serialize = "PrefabHash")] + #[strum(props(docs = "The hash of the structure", value = "84"))] + PrefabHash = 84u16, + #[strum(serialize = "ForceWrite")] + #[strum(props(docs = "Forces Logic Writer devices to rewrite value", value = "85"))] + ForceWrite = 85u16, + #[strum(serialize = "SignalStrength")] + #[strum( + props(docs = "Returns the degree offset of the strongest contact", value = "86") + )] + SignalStrength = 86u16, + #[strum(serialize = "SignalID")] + #[strum( + props( + docs = "Returns the contact ID of the strongest signal from this Satellite", + value = "87" + ) + )] + SignalId = 87u16, + #[strum(serialize = "TargetX")] + #[strum( + props( + docs = "The target position in X dimension in world coordinates", + value = "88" + ) + )] + TargetX = 88u16, + #[strum(serialize = "TargetY")] + #[strum( + props( + docs = "The target position in Y dimension in world coordinates", + value = "89" + ) + )] + TargetY = 89u16, + #[strum(serialize = "TargetZ")] + #[strum( + props( + docs = "The target position in Z dimension in world coordinates", + value = "90" + ) + )] + TargetZ = 90u16, + #[strum(serialize = "SettingInput")] + #[strum(props(docs = "", value = "91"))] + SettingInput = 91u16, + #[strum(serialize = "SettingOutput")] + #[strum(props(docs = "", value = "92"))] + SettingOutput = 92u16, + #[strum(serialize = "CurrentResearchPodType")] + #[strum(props(docs = "", value = "93"))] + CurrentResearchPodType = 93u16, + #[strum(serialize = "ManualResearchRequiredPod")] + #[strum( + props( + docs = "Sets the pod type to search for a certain pod when breaking down a pods.", + value = "94" + ) + )] + ManualResearchRequiredPod = 94u16, + #[strum(serialize = "MineablesInVicinity")] + #[strum( + props( + docs = "Returns the amount of potential mineables within an extended area around AIMEe.", + value = "95" + ) + )] + MineablesInVicinity = 95u16, + #[strum(serialize = "MineablesInQueue")] + #[strum( + props( + docs = "Returns the amount of mineables AIMEe has queued up to mine.", + value = "96" + ) + )] + MineablesInQueue = 96u16, + #[strum(serialize = "NextWeatherEventTime")] + #[strum( + props( + docs = "Returns in seconds when the next weather event is inbound.", + value = "97" + ) + )] + NextWeatherEventTime = 97u16, + #[strum(serialize = "Combustion")] + #[strum( + props( + docs = "The assess atmosphere is on fire. Returns 1 if atmosphere is on fire, 0 if not.", + value = "98" + ) + )] + Combustion = 98u16, + #[strum(serialize = "Fuel")] + #[strum( + props( + docs = "Gets the cost of fuel to return the rocket to your current world.", + value = "99" + ) + )] + Fuel = 99u16, + #[strum(serialize = "ReturnFuelCost")] + #[strum( + props( + docs = "Gets the fuel remaining in your rocket's fuel tank.", + value = "100" + ) + )] + ReturnFuelCost = 100u16, + #[strum(serialize = "CollectableGoods")] + #[strum( + props( + docs = "Gets the cost of fuel to return the rocket to your current world.", + value = "101" + ) + )] + CollectableGoods = 101u16, + #[strum(serialize = "Time")] + #[strum(props(docs = "Time", value = "102"))] + Time = 102u16, + #[strum(serialize = "Bpm")] + #[strum(props(docs = "Bpm", value = "103"))] + Bpm = 103u16, + #[strum(serialize = "EnvironmentEfficiency")] + #[strum( + props( + docs = "The Environment Efficiency reported by the machine, as a float between 0 and 1", + value = "104" + ) + )] + EnvironmentEfficiency = 104u16, + #[strum(serialize = "WorkingGasEfficiency")] + #[strum( + props( + docs = "The Working Gas Efficiency reported by the machine, as a float between 0 and 1", + value = "105" + ) + )] + WorkingGasEfficiency = 105u16, + #[strum(serialize = "PressureInput")] + #[strum( + props( + docs = "The current pressure reading of the device's Input Network", + value = "106" + ) + )] + PressureInput = 106u16, + #[strum(serialize = "TemperatureInput")] + #[strum( + props( + docs = "The current temperature reading of the device's Input Network", + value = "107" + ) + )] + TemperatureInput = 107u16, + #[strum(serialize = "RatioOxygenInput")] + #[strum( + props(docs = "The ratio of oxygen in device's input network", value = "108") + )] + RatioOxygenInput = 108u16, + #[strum(serialize = "RatioCarbonDioxideInput")] + #[strum( + props( + docs = "The ratio of Carbon Dioxide in device's input network", + value = "109" + ) + )] + RatioCarbonDioxideInput = 109u16, + #[strum(serialize = "RatioNitrogenInput")] + #[strum( + props(docs = "The ratio of nitrogen in device's input network", value = "110") + )] + RatioNitrogenInput = 110u16, + #[strum(serialize = "RatioPollutantInput")] + #[strum( + props(docs = "The ratio of pollutant in device's input network", value = "111") + )] + RatioPollutantInput = 111u16, + #[strum(serialize = "RatioVolatilesInput")] + #[strum( + props(docs = "The ratio of volatiles in device's input network", value = "112") + )] + RatioVolatilesInput = 112u16, + #[strum(serialize = "RatioWaterInput")] + #[strum(props(docs = "The ratio of water in device's input network", value = "113"))] + RatioWaterInput = 113u16, + #[strum(serialize = "RatioNitrousOxideInput")] + #[strum( + props( + docs = "The ratio of Nitrous Oxide in device's input network", + value = "114" + ) + )] + RatioNitrousOxideInput = 114u16, + #[strum(serialize = "TotalMolesInput")] + #[strum( + props( + docs = "Returns the total moles of the device's Input Network", + value = "115" + ) + )] + TotalMolesInput = 115u16, + #[strum(serialize = "PressureInput2")] + #[strum( + props( + docs = "The current pressure reading of the device's Input2 Network", + value = "116" + ) + )] + PressureInput2 = 116u16, + #[strum(serialize = "TemperatureInput2")] + #[strum( + props( + docs = "The current temperature reading of the device's Input2 Network", + value = "117" + ) + )] + TemperatureInput2 = 117u16, + #[strum(serialize = "RatioOxygenInput2")] + #[strum( + props(docs = "The ratio of oxygen in device's Input2 network", value = "118") + )] + RatioOxygenInput2 = 118u16, + #[strum(serialize = "RatioCarbonDioxideInput2")] + #[strum( + props( + docs = "The ratio of Carbon Dioxide in device's Input2 network", + value = "119" + ) + )] + RatioCarbonDioxideInput2 = 119u16, + #[strum(serialize = "RatioNitrogenInput2")] + #[strum( + props(docs = "The ratio of nitrogen in device's Input2 network", value = "120") + )] + RatioNitrogenInput2 = 120u16, + #[strum(serialize = "RatioPollutantInput2")] + #[strum( + props(docs = "The ratio of pollutant in device's Input2 network", value = "121") + )] + RatioPollutantInput2 = 121u16, + #[strum(serialize = "RatioVolatilesInput2")] + #[strum( + props(docs = "The ratio of volatiles in device's Input2 network", value = "122") + )] + RatioVolatilesInput2 = 122u16, + #[strum(serialize = "RatioWaterInput2")] + #[strum( + props(docs = "The ratio of water in device's Input2 network", value = "123") + )] + RatioWaterInput2 = 123u16, + #[strum(serialize = "RatioNitrousOxideInput2")] + #[strum( + props( + docs = "The ratio of Nitrous Oxide in device's Input2 network", + value = "124" + ) + )] + RatioNitrousOxideInput2 = 124u16, + #[strum(serialize = "TotalMolesInput2")] + #[strum( + props( + docs = "Returns the total moles of the device's Input2 Network", + value = "125" + ) + )] + TotalMolesInput2 = 125u16, + #[strum(serialize = "PressureOutput")] + #[strum( + props( + docs = "The current pressure reading of the device's Output Network", + value = "126" + ) + )] + PressureOutput = 126u16, + #[strum(serialize = "TemperatureOutput")] + #[strum( + props( + docs = "The current temperature reading of the device's Output Network", + value = "127" + ) + )] + TemperatureOutput = 127u16, + #[strum(serialize = "RatioOxygenOutput")] + #[strum( + props(docs = "The ratio of oxygen in device's Output network", value = "128") + )] + RatioOxygenOutput = 128u16, + #[strum(serialize = "RatioCarbonDioxideOutput")] + #[strum( + props( + docs = "The ratio of Carbon Dioxide in device's Output network", + value = "129" + ) + )] + RatioCarbonDioxideOutput = 129u16, + #[strum(serialize = "RatioNitrogenOutput")] + #[strum( + props(docs = "The ratio of nitrogen in device's Output network", value = "130") + )] + RatioNitrogenOutput = 130u16, + #[strum(serialize = "RatioPollutantOutput")] + #[strum( + props(docs = "The ratio of pollutant in device's Output network", value = "131") + )] + RatioPollutantOutput = 131u16, + #[strum(serialize = "RatioVolatilesOutput")] + #[strum( + props(docs = "The ratio of volatiles in device's Output network", value = "132") + )] + RatioVolatilesOutput = 132u16, + #[strum(serialize = "RatioWaterOutput")] + #[strum( + props(docs = "The ratio of water in device's Output network", value = "133") + )] + RatioWaterOutput = 133u16, + #[strum(serialize = "RatioNitrousOxideOutput")] + #[strum( + props( + docs = "The ratio of Nitrous Oxide in device's Output network", + value = "134" + ) + )] + RatioNitrousOxideOutput = 134u16, + #[strum(serialize = "TotalMolesOutput")] + #[strum( + props( + docs = "Returns the total moles of the device's Output Network", + value = "135" + ) + )] + TotalMolesOutput = 135u16, + #[strum(serialize = "PressureOutput2")] + #[strum( + props( + docs = "The current pressure reading of the device's Output2 Network", + value = "136" + ) + )] + PressureOutput2 = 136u16, + #[strum(serialize = "TemperatureOutput2")] + #[strum( + props( + docs = "The current temperature reading of the device's Output2 Network", + value = "137" + ) + )] + TemperatureOutput2 = 137u16, + #[strum(serialize = "RatioOxygenOutput2")] + #[strum( + props(docs = "The ratio of oxygen in device's Output2 network", value = "138") + )] + RatioOxygenOutput2 = 138u16, + #[strum(serialize = "RatioCarbonDioxideOutput2")] + #[strum( + props( + docs = "The ratio of Carbon Dioxide in device's Output2 network", + value = "139" + ) + )] + RatioCarbonDioxideOutput2 = 139u16, + #[strum(serialize = "RatioNitrogenOutput2")] + #[strum( + props(docs = "The ratio of nitrogen in device's Output2 network", value = "140") + )] + RatioNitrogenOutput2 = 140u16, + #[strum(serialize = "RatioPollutantOutput2")] + #[strum( + props(docs = "The ratio of pollutant in device's Output2 network", value = "141") + )] + RatioPollutantOutput2 = 141u16, + #[strum(serialize = "RatioVolatilesOutput2")] + #[strum( + props(docs = "The ratio of volatiles in device's Output2 network", value = "142") + )] + RatioVolatilesOutput2 = 142u16, + #[strum(serialize = "RatioWaterOutput2")] + #[strum( + props(docs = "The ratio of water in device's Output2 network", value = "143") + )] + RatioWaterOutput2 = 143u16, + #[strum(serialize = "RatioNitrousOxideOutput2")] + #[strum( + props( + docs = "The ratio of Nitrous Oxide in device's Output2 network", + value = "144" + ) + )] + RatioNitrousOxideOutput2 = 144u16, + #[strum(serialize = "TotalMolesOutput2")] + #[strum( + props( + docs = "Returns the total moles of the device's Output2 Network", + value = "145" + ) + )] + TotalMolesOutput2 = 145u16, + #[strum(serialize = "CombustionInput")] + #[strum( + props( + docs = "The assess atmosphere is on fire. Returns 1 if device's input network is on fire, 0 if not.", + value = "146" + ) + )] + CombustionInput = 146u16, + #[strum(serialize = "CombustionInput2")] + #[strum( + props( + docs = "The assess atmosphere is on fire. Returns 1 if device's Input2 network is on fire, 0 if not.", + value = "147" + ) + )] + CombustionInput2 = 147u16, + #[strum(serialize = "CombustionOutput")] + #[strum( + props( + docs = "The assess atmosphere is on fire. Returns 1 if device's Output network is on fire, 0 if not.", + value = "148" + ) + )] + CombustionOutput = 148u16, + #[strum(serialize = "CombustionOutput2")] + #[strum( + props( + docs = "The assess atmosphere is on fire. Returns 1 if device's Output2 network is on fire, 0 if not.", + value = "149" + ) + )] + CombustionOutput2 = 149u16, + #[strum(serialize = "OperationalTemperatureEfficiency")] + #[strum( + props( + docs = "How the input pipe's temperature effects the machines efficiency", + value = "150" + ) + )] + OperationalTemperatureEfficiency = 150u16, + #[strum(serialize = "TemperatureDifferentialEfficiency")] + #[strum( + props( + docs = "How the difference between the input pipe and waste pipe temperatures effect the machines efficiency", + value = "151" + ) + )] + TemperatureDifferentialEfficiency = 151u16, + #[strum(serialize = "PressureEfficiency")] + #[strum( + props( + docs = "How the pressure of the input pipe and waste pipe effect the machines efficiency", + value = "152" + ) + )] + PressureEfficiency = 152u16, + #[strum(serialize = "CombustionLimiter")] + #[strum( + props( + docs = "Retards the rate of combustion inside the machine (range: 0-100), with 0 being the slowest rate of combustion and 100 being the fastest", + value = "153" + ) + )] + CombustionLimiter = 153u16, + #[strum(serialize = "Throttle")] + #[strum( + props( + docs = "Increases the rate at which the machine works (range: 0-100)", + value = "154" + ) + )] + Throttle = 154u16, + #[strum(serialize = "Rpm")] + #[strum( + props( + docs = "The number of revolutions per minute that the device's spinning mechanism is doing", + value = "155" + ) + )] + Rpm = 155u16, + #[strum(serialize = "Stress")] + #[strum( + props( + docs = "Machines get stressed when working hard. When Stress reaches 100 the machine will automatically shut down", + value = "156" + ) + )] + Stress = 156u16, + #[strum(serialize = "InterrogationProgress")] + #[strum( + props( + docs = "Progress of this sattellite dish's interrogation of its current target, as a ratio from 0-1", + value = "157" + ) + )] + InterrogationProgress = 157u16, + #[strum(serialize = "TargetPadIndex")] + #[strum( + props( + docs = "The index of the trader landing pad on this devices data network that it will try to call a trader in to land", + value = "158" + ) + )] + TargetPadIndex = 158u16, + #[strum(serialize = "SizeX")] + #[strum( + props( + docs = "Size on the X (right) axis of the object in largeGrids (a largeGrid is 2meters)", + value = "160" + ) + )] + SizeX = 160u16, + #[strum(serialize = "SizeY")] + #[strum( + props( + docs = "Size on the Y(Up) axis of the object in largeGrids (a largeGrid is 2meters)", + value = "161" + ) + )] + SizeY = 161u16, + #[strum(serialize = "SizeZ")] + #[strum( + props( + docs = "Size on the Z(Forward) axis of the object in largeGrids (a largeGrid is 2meters)", + value = "162" + ) + )] + SizeZ = 162u16, + #[strum(serialize = "MinimumWattsToContact")] + #[strum( + props( + docs = "Minimum required amount of watts from the dish hitting the target trader contact to start interrogating the contact", + value = "163" + ) + )] + MinimumWattsToContact = 163u16, + #[strum(serialize = "WattsReachingContact")] + #[strum( + props( + docs = "The amount of watts actually hitting the contact. This is effected by the power of the dish and how far off-axis the dish is from the contact vector", + value = "164" + ) + )] + WattsReachingContact = 164u16, + #[strum(serialize = "Channel0")] + #[strum( + props( + docs = "Channel on a cable network which should be considered volatile", + value = "165" + ) + )] + Channel0 = 165u16, + #[strum(serialize = "Channel1")] + #[strum( + props( + docs = "Channel on a cable network which should be considered volatile", + value = "166" + ) + )] + Channel1 = 166u16, + #[strum(serialize = "Channel2")] + #[strum( + props( + docs = "Channel on a cable network which should be considered volatile", + value = "167" + ) + )] + Channel2 = 167u16, + #[strum(serialize = "Channel3")] + #[strum( + props( + docs = "Channel on a cable network which should be considered volatile", + value = "168" + ) + )] + Channel3 = 168u16, + #[strum(serialize = "Channel4")] + #[strum( + props( + docs = "Channel on a cable network which should be considered volatile", + value = "169" + ) + )] + Channel4 = 169u16, + #[strum(serialize = "Channel5")] + #[strum( + props( + docs = "Channel on a cable network which should be considered volatile", + value = "170" + ) + )] + Channel5 = 170u16, + #[strum(serialize = "Channel6")] + #[strum( + props( + docs = "Channel on a cable network which should be considered volatile", + value = "171" + ) + )] + Channel6 = 171u16, + #[strum(serialize = "Channel7")] + #[strum( + props( + docs = "Channel on a cable network which should be considered volatile", + value = "172" + ) + )] + Channel7 = 172u16, + #[strum(serialize = "LineNumber")] + #[strum( + props( + docs = "The line number of current execution for an integrated circuit running on this device. While this number can be written, use with caution", + value = "173" + ) + )] + LineNumber = 173u16, + #[strum(serialize = "Flush")] + #[strum( + props( + docs = "Set to 1 to activate the flush function on the device", + value = "174" + ) + )] + Flush = 174u16, + #[strum(serialize = "SoundAlert")] + #[strum(props(docs = "Plays a sound alert on the devices speaker", value = "175"))] + SoundAlert = 175u16, + #[strum(serialize = "SolarIrradiance")] + #[strum(props(docs = "", value = "176"))] + SolarIrradiance = 176u16, + #[strum(serialize = "RatioLiquidNitrogen")] + #[strum( + props( + docs = "The ratio of Liquid Nitrogen in device atmosphere", + value = "177" + ) + )] + RatioLiquidNitrogen = 177u16, + #[strum(serialize = "RatioLiquidNitrogenInput")] + #[strum( + props( + docs = "The ratio of Liquid Nitrogen in device's input network", + value = "178" + ) + )] + RatioLiquidNitrogenInput = 178u16, + #[strum(serialize = "RatioLiquidNitrogenInput2")] + #[strum( + props( + docs = "The ratio of Liquid Nitrogen in device's Input2 network", + value = "179" + ) + )] + RatioLiquidNitrogenInput2 = 179u16, + #[strum(serialize = "RatioLiquidNitrogenOutput")] + #[strum( + props( + docs = "The ratio of Liquid Nitrogen in device's Output network", + value = "180" + ) + )] + RatioLiquidNitrogenOutput = 180u16, + #[strum(serialize = "RatioLiquidNitrogenOutput2")] + #[strum( + props( + docs = "The ratio of Liquid Nitrogen in device's Output2 network", + value = "181" + ) + )] + RatioLiquidNitrogenOutput2 = 181u16, + #[strum(serialize = "VolumeOfLiquid")] + #[strum( + props( + docs = "The total volume of all liquids in Liters in the atmosphere", + value = "182" + ) + )] + VolumeOfLiquid = 182u16, + #[strum(serialize = "RatioLiquidOxygen")] + #[strum( + props( + docs = "The ratio of Liquid Oxygen in device's Atmosphere", + value = "183" + ) + )] + RatioLiquidOxygen = 183u16, + #[strum(serialize = "RatioLiquidOxygenInput")] + #[strum( + props( + docs = "The ratio of Liquid Oxygen in device's Input Atmosphere", + value = "184" + ) + )] + RatioLiquidOxygenInput = 184u16, + #[strum(serialize = "RatioLiquidOxygenInput2")] + #[strum( + props( + docs = "The ratio of Liquid Oxygen in device's Input2 Atmosphere", + value = "185" + ) + )] + RatioLiquidOxygenInput2 = 185u16, + #[strum(serialize = "RatioLiquidOxygenOutput")] + #[strum( + props( + docs = "The ratio of Liquid Oxygen in device's device's Output Atmosphere", + value = "186" + ) + )] + RatioLiquidOxygenOutput = 186u16, + #[strum(serialize = "RatioLiquidOxygenOutput2")] + #[strum( + props( + docs = "The ratio of Liquid Oxygen in device's Output2 Atmopshere", + value = "187" + ) + )] + RatioLiquidOxygenOutput2 = 187u16, + #[strum(serialize = "RatioLiquidVolatiles")] + #[strum( + props( + docs = "The ratio of Liquid Volatiles in device's Atmosphere", + value = "188" + ) + )] + RatioLiquidVolatiles = 188u16, + #[strum(serialize = "RatioLiquidVolatilesInput")] + #[strum( + props( + docs = "The ratio of Liquid Volatiles in device's Input Atmosphere", + value = "189" + ) + )] + RatioLiquidVolatilesInput = 189u16, + #[strum(serialize = "RatioLiquidVolatilesInput2")] + #[strum( + props( + docs = "The ratio of Liquid Volatiles in device's Input2 Atmosphere", + value = "190" + ) + )] + RatioLiquidVolatilesInput2 = 190u16, + #[strum(serialize = "RatioLiquidVolatilesOutput")] + #[strum( + props( + docs = "The ratio of Liquid Volatiles in device's device's Output Atmosphere", + value = "191" + ) + )] + RatioLiquidVolatilesOutput = 191u16, + #[strum(serialize = "RatioLiquidVolatilesOutput2")] + #[strum( + props( + docs = "The ratio of Liquid Volatiles in device's Output2 Atmopshere", + value = "192" + ) + )] + RatioLiquidVolatilesOutput2 = 192u16, + #[strum(serialize = "RatioSteam")] + #[strum( + props( + docs = "The ratio of Steam in device's Atmosphere", + value = "193" + ) + )] + RatioSteam = 193u16, + #[strum(serialize = "RatioSteamInput")] + #[strum( + props( + docs = "The ratio of Steam in device's Input Atmosphere", + value = "194" + ) + )] + RatioSteamInput = 194u16, + #[strum(serialize = "RatioSteamInput2")] + #[strum( + props( + docs = "The ratio of Steam in device's Input2 Atmosphere", + value = "195" + ) + )] + RatioSteamInput2 = 195u16, + #[strum(serialize = "RatioSteamOutput")] + #[strum( + props( + docs = "The ratio of Steam in device's device's Output Atmosphere", + value = "196" + ) + )] + RatioSteamOutput = 196u16, + #[strum(serialize = "RatioSteamOutput2")] + #[strum( + props( + docs = "The ratio of Steam in device's Output2 Atmopshere", + value = "197" + ) + )] + RatioSteamOutput2 = 197u16, + #[strum(serialize = "ContactTypeId")] + #[strum(props(docs = "The type id of the contact.", value = "198"))] + ContactTypeId = 198u16, + #[strum(serialize = "RatioLiquidCarbonDioxide")] + #[strum( + props( + docs = "The ratio of Liquid Carbon Dioxide in device's Atmosphere", + value = "199" + ) + )] + RatioLiquidCarbonDioxide = 199u16, + #[strum(serialize = "RatioLiquidCarbonDioxideInput")] + #[strum( + props( + docs = "The ratio of Liquid Carbon Dioxide in device's Input Atmosphere", + value = "200" + ) + )] + RatioLiquidCarbonDioxideInput = 200u16, + #[strum(serialize = "RatioLiquidCarbonDioxideInput2")] + #[strum( + props( + docs = "The ratio of Liquid Carbon Dioxide in device's Input2 Atmosphere", + value = "201" + ) + )] + RatioLiquidCarbonDioxideInput2 = 201u16, + #[strum(serialize = "RatioLiquidCarbonDioxideOutput")] + #[strum( + props( + docs = "The ratio of Liquid Carbon Dioxide in device's device's Output Atmosphere", + value = "202" + ) + )] + RatioLiquidCarbonDioxideOutput = 202u16, + #[strum(serialize = "RatioLiquidCarbonDioxideOutput2")] + #[strum( + props( + docs = "The ratio of Liquid Carbon Dioxide in device's Output2 Atmopshere", + value = "203" + ) + )] + RatioLiquidCarbonDioxideOutput2 = 203u16, + #[strum(serialize = "RatioLiquidPollutant")] + #[strum( + props( + docs = "The ratio of Liquid Pollutant in device's Atmosphere", + value = "204" + ) + )] + RatioLiquidPollutant = 204u16, + #[strum(serialize = "RatioLiquidPollutantInput")] + #[strum( + props( + docs = "The ratio of Liquid Pollutant in device's Input Atmosphere", + value = "205" + ) + )] + RatioLiquidPollutantInput = 205u16, + #[strum(serialize = "RatioLiquidPollutantInput2")] + #[strum( + props( + docs = "The ratio of Liquid Pollutant in device's Input2 Atmosphere", + value = "206" + ) + )] + RatioLiquidPollutantInput2 = 206u16, + #[strum(serialize = "RatioLiquidPollutantOutput")] + #[strum( + props( + docs = "The ratio of Liquid Pollutant in device's device's Output Atmosphere", + value = "207" + ) + )] + RatioLiquidPollutantOutput = 207u16, + #[strum(serialize = "RatioLiquidPollutantOutput2")] + #[strum( + props( + docs = "The ratio of Liquid Pollutant in device's Output2 Atmopshere", + value = "208" + ) + )] + RatioLiquidPollutantOutput2 = 208u16, + #[strum(serialize = "RatioLiquidNitrousOxide")] + #[strum( + props( + docs = "The ratio of Liquid Nitrous Oxide in device's Atmosphere", + value = "209" + ) + )] + RatioLiquidNitrousOxide = 209u16, + #[strum(serialize = "RatioLiquidNitrousOxideInput")] + #[strum( + props( + docs = "The ratio of Liquid Nitrous Oxide in device's Input Atmosphere", + value = "210" + ) + )] + RatioLiquidNitrousOxideInput = 210u16, + #[strum(serialize = "RatioLiquidNitrousOxideInput2")] + #[strum( + props( + docs = "The ratio of Liquid Nitrous Oxide in device's Input2 Atmosphere", + value = "211" + ) + )] + RatioLiquidNitrousOxideInput2 = 211u16, + #[strum(serialize = "RatioLiquidNitrousOxideOutput")] + #[strum( + props( + docs = "The ratio of Liquid Nitrous Oxide in device's device's Output Atmosphere", + value = "212" + ) + )] + RatioLiquidNitrousOxideOutput = 212u16, + #[strum(serialize = "RatioLiquidNitrousOxideOutput2")] + #[strum( + props( + docs = "The ratio of Liquid Nitrous Oxide in device's Output2 Atmopshere", + value = "213" + ) + )] + RatioLiquidNitrousOxideOutput2 = 213u16, + #[strum(serialize = "Progress")] + #[strum( + props( + docs = "Progress of the rocket to the next node on the map expressed as a value between 0-1.", + value = "214" + ) + )] + Progress = 214u16, + #[strum(serialize = "DestinationCode")] + #[strum( + props( + docs = "The Space Map Address of the rockets target Space Map Location", + value = "215" + ) + )] + DestinationCode = 215u16, + #[strum(serialize = "Acceleration")] + #[strum( + props( + docs = "Change in velocity. Rockets that are deccelerating when landing will show this as negative value.", + value = "216" + ) + )] + Acceleration = 216u16, + #[strum(serialize = "ReferenceId")] + #[strum(props(docs = "Unique Reference Identifier for this object", value = "217"))] + ReferenceId = 217u16, + #[strum(serialize = "AutoShutOff")] + #[strum( + props( + docs = "Turns off all devices in the rocket upon reaching destination", + value = "218" + ) + )] + AutoShutOff = 218u16, + #[strum(serialize = "Mass")] + #[strum( + props( + docs = "The total Mass of the rocket in kilograms including fuel and cargo. The more massive the rocket the more fuel will be required to move to a new location in space.", + value = "219" + ) + )] + Mass = 219u16, + #[strum(serialize = "DryMass")] + #[strum( + props( + docs = "The Mass in kilograms of the rocket excluding fuel. The more massive the rocket the more fuel will be required to move to a new location in space.", + value = "220" + ) + )] + DryMass = 220u16, + #[strum(serialize = "Thrust")] + #[strum( + props( + docs = "Total current thrust of all rocket engines on the rocket in Newtons.", + value = "221" + ) + )] + Thrust = 221u16, + #[strum(serialize = "Weight")] + #[strum( + props( + docs = "Weight of Rocket in Newtons (Including fuel and cargo). Weight is effected by local body gravity.", + value = "222" + ) + )] + Weight = 222u16, + #[strum(serialize = "ThrustToWeight")] + #[strum( + props( + docs = "Ratio of thrust to weight of rocket. Weight is effected by local body gravity. A rocket with a low thrust to weight will expend more fuel during launch and landing.", + value = "223" + ) + )] + ThrustToWeight = 223u16, + #[strum(serialize = "TimeToDestination")] + #[strum( + props( + docs = "Estimated time in seconds until rocket arrives at target destination.", + value = "224" + ) + )] + TimeToDestination = 224u16, + #[strum(serialize = "BurnTimeRemaining")] + #[strum( + props( + docs = "Estimated time in seconds until fuel is depleted. Calculated based on current fuel usage.", + value = "225" + ) + )] + BurnTimeRemaining = 225u16, + #[strum(serialize = "AutoLand")] + #[strum( + props( + docs = "Engages the automatic landing algorithm. The rocket will automatically throttle and turn on and off its engines to achieve a smooth landing.", + value = "226" + ) + )] + AutoLand = 226u16, + #[strum(serialize = "ForwardX")] + #[strum( + props( + docs = "The direction the entity is facing expressed as a normalized vector", + value = "227" + ) + )] + ForwardX = 227u16, + #[strum(serialize = "ForwardY")] + #[strum( + props( + docs = "The direction the entity is facing expressed as a normalized vector", + value = "228" + ) + )] + ForwardY = 228u16, + #[strum(serialize = "ForwardZ")] + #[strum( + props( + docs = "The direction the entity is facing expressed as a normalized vector", + value = "229" + ) + )] + ForwardZ = 229u16, + #[strum(serialize = "Orientation")] + #[strum( + props( + docs = "The orientation of the entity in degrees in a plane relative towards the north origin", + value = "230" + ) + )] + Orientation = 230u16, + #[strum(serialize = "VelocityX")] + #[strum( + props(docs = "The world velocity of the entity in the X axis", value = "231") + )] + VelocityX = 231u16, + #[strum(serialize = "VelocityY")] + #[strum( + props(docs = "The world velocity of the entity in the Y axis", value = "232") + )] + VelocityY = 232u16, + #[strum(serialize = "VelocityZ")] + #[strum( + props(docs = "The world velocity of the entity in the Z axis", value = "233") + )] + VelocityZ = 233u16, + #[strum(serialize = "PassedMoles")] + #[strum( + props( + docs = "The number of moles that passed through this device on the previous simulation tick", + value = "234" + ) + )] + PassedMoles = 234u16, + #[strum(serialize = "ExhaustVelocity")] + #[strum(props(docs = "The velocity of the exhaust gas in m/s", value = "235"))] + ExhaustVelocity = 235u16, + #[strum(serialize = "FlightControlRule")] + #[strum( + props( + docs = "Flight control rule of rocket. None = 0, No AutoPilot. Normal = 1, Target Decent Apex of 60m. Alternate = 2, Velocity to High - Full throttle. Alternate2 = 3, Target an appropriate decent velocity as velocity is too low. FinalApproach = 4, Descend towards launch mount in a controlled manner.", + value = "236" + ) + )] + FlightControlRule = 236u16, + #[strum(serialize = "ReEntryAltitude")] + #[strum( + props( + docs = "The altitude that the rocket will begin its decent to the pad. Must be between 25km and 120km", + value = "237" + ) + )] + ReEntryAltitude = 237u16, + #[strum(serialize = "Apex")] + #[strum( + props( + docs = "The lowest altitude that the rocket will reach before it starts travelling upwards again.", + value = "238" + ) + )] + Apex = 238u16, + #[strum(serialize = "EntityState")] + #[strum( + props( + docs = "The current entity state, such as whether it is dead, unconscious or alive, expressed as a state integer.", + value = "239" + ) + )] + EntityState = 239u16, + #[strum(serialize = "DrillCondition")] + #[strum( + props( + docs = "The current condition of the drill head in this devices drill slot. Expressed as a ratio between 0 and 1.", + value = "240" + ) + )] + DrillCondition = 240u16, + #[strum(serialize = "Index")] + #[strum(props(docs = "The current index for the device.", value = "241"))] + Index = 241u16, + #[strum(serialize = "CelestialHash")] + #[strum( + props(docs = "The current hash of the targeted celestial object.", value = "242") + )] + CelestialHash = 242u16, + #[strum(serialize = "AlignmentError")] + #[strum( + props( + docs = "The angular discrepancy between the telescope's current orientation and the target. Indicates how 'off target' the telescope is. Returns NaN when no target.", + value = "243" + ) + )] + AlignmentError = 243u16, + #[strum(serialize = "DistanceAu")] + #[strum( + props( + docs = "The current distance to the celestial object, measured in astronomical units.", + value = "244" + ) + )] + DistanceAu = 244u16, + #[strum(serialize = "OrbitPeriod")] + #[strum( + props( + docs = "The time it takes for an object to complete one full orbit around another object, measured in days. Indicates the duration of the orbital cycle.", + value = "245" + ) + )] + OrbitPeriod = 245u16, + #[strum(serialize = "Inclination")] + #[strum( + props( + docs = "The tilt of an orbit's plane relative to the equatorial plane, measured in degrees. Defines the orbital plane's angle.", + value = "246" + ) + )] + Inclination = 246u16, + #[strum(serialize = "Eccentricity")] + #[strum( + props( + docs = "A measure of how elliptical (oval) an orbit is. Ranges from 0 (a perfect circle) to 1 (a parabolic trajectory).", + value = "247" + ) + )] + Eccentricity = 247u16, + #[strum(serialize = "SemiMajorAxis")] + #[strum( + props( + docs = "The longest radius of an elliptical orbit in astronomical units, measuring half the major axis. Determines the size of the orbit.", + value = "248" + ) + )] + SemiMajorAxis = 248u16, + #[strum(serialize = "DistanceKm")] + #[strum( + props( + docs = "The current distance to the celestial object, measured in kilometers.", + value = "249" + ) + )] + DistanceKm = 249u16, + #[strum(serialize = "CelestialParentHash")] + #[strum( + props( + docs = "The hash for the name of the parent the celestial is orbiting, 0 if there is no parent celestial.", + value = "250" + ) + )] + CelestialParentHash = 250u16, + #[strum(serialize = "TrueAnomaly")] + #[strum( + props( + docs = "An angular parameter that defines the position of a body moving along a Keplerian orbit. It is the angle between the direction of periapsis and the current position of the body, as seen from the main focus of the ellipse (the point around which the object orbits).", + value = "251" + ) + )] + TrueAnomaly = 251u16, + #[strum(serialize = "RatioHydrogen")] + #[strum( + props( + docs = "The ratio of Hydrogen in device's Atmopshere", + value = "252" + ) + )] + RatioHydrogen = 252u16, + #[strum(serialize = "RatioLiquidHydrogen")] + #[strum( + props( + docs = "The ratio of Liquid Hydrogen in device's Atmopshere", + value = "253" + ) + )] + RatioLiquidHydrogen = 253u16, + #[strum(serialize = "RatioPollutedWater")] + #[strum( + props(docs = "The ratio of polluted water in device atmosphere", value = "254") + )] + RatioPollutedWater = 254u16, + #[strum(serialize = "Discover")] + #[strum( + props( + docs = "Progress status of Discovery scan at the rocket's target Space Map Location. Returns a clamped normalised value. If Discovery scan is not available returns -1.", + value = "255" + ) + )] + Discover = 255u16, + #[strum(serialize = "Chart")] + #[strum( + props( + docs = "Progress status of Chart scan at the rocket's target Space Map Location. Returns a clamped normalised value. If Chart scan is not available returns -1.", + value = "256" + ) + )] + Chart = 256u16, + #[strum(serialize = "Survey")] + #[strum( + props( + docs = "Progress status of Survey scan at the rocket's target Space Map Location. Returns a normalised value where 100% surveyed is equal to 1. If Survey scan is not available returns -1.", + value = "257" + ) + )] + Survey = 257u16, + #[strum(serialize = "NavPoints")] + #[strum( + props( + docs = "The number of NavPoints at the rocket's target Space Map Location.", + value = "258" + ) + )] + NavPoints = 258u16, + #[strum(serialize = "ChartedNavPoints")] + #[strum( + props( + docs = "The number of charted NavPoints at the rocket's target Space Map Location.", + value = "259" + ) + )] + ChartedNavPoints = 259u16, + #[strum(serialize = "Sites")] + #[strum( + props( + docs = "The number of Sites that have been discovered at the rockets target Space Map location.", + value = "260" + ) + )] + Sites = 260u16, + #[strum(serialize = "CurrentCode")] + #[strum( + props( + docs = "The Space Map Address of the rockets current Space Map Location", + value = "261" + ) + )] + CurrentCode = 261u16, + #[strum(serialize = "Density")] + #[strum( + props( + docs = "The density of the rocket's target site's mine-able deposit.", + value = "262" + ) + )] + Density = 262u16, + #[strum(serialize = "Richness")] + #[strum( + props( + docs = "The richness of the rocket's target site's mine-able deposit.", + value = "263" + ) + )] + Richness = 263u16, + #[strum(serialize = "Size")] + #[strum( + props( + docs = "The size of the rocket's target site's mine-able deposit.", + value = "264" + ) + )] + Size = 264u16, + #[strum(serialize = "TotalQuantity")] + #[strum( + props( + docs = "The estimated total quantity of resources available to mine at the rocket's target Space Map Site.", + value = "265" + ) + )] + TotalQuantity = 265u16, + #[strum(serialize = "MinedQuantity")] + #[strum( + props( + docs = "The total number of resources that have been mined at the rocket's target Space Map Site.", + value = "266" + ) + )] + MinedQuantity = 266u16, + #[strum(serialize = "BestContactFilter")] + #[strum( + props( + docs = "Filters the satellite's auto selection of targets to a single reference ID.", + value = "267" + ) + )] + BestContactFilter = 267u16, + #[strum(serialize = "NameHash")] + #[strum( + props( + docs = "Provides the hash value for the name of the object as a 32 bit integer.", + value = "268" + ) + )] + NameHash = 268u16, + #[strum(serialize = "Altitude")] + #[strum( + props( + docs = "The altitude that the rocket above the planet's surface. -1 if the rocket is in space.", + value = "269" + ) + )] + Altitude = 269u16, + #[strum(serialize = "TargetSlotIndex")] + #[strum( + props( + docs = "The slot index that the target device that this device will try to interact with", + value = "270" + ) + )] + TargetSlotIndex = 270u16, + #[strum(serialize = "TargetPrefabHash")] + #[strum(props(docs = "The prefab", value = "271"))] + TargetPrefabHash = 271u16, +} +impl TryFrom for LogicType { + type Error = super::ParseError; + fn try_from(value: f64) -> Result>::Error> { + use strum::IntoEnumIterator; + if let Some(enm) = LogicType::iter() + .find(|enm| (f64::from(*enm as u16) - value).abs() < f64::EPSILON) + { + Ok(enm) + } else { + Err(super::ParseError { + enm: value.to_string(), + }) + } + } +} diff --git a/stationeers_data/src/lib.rs b/stationeers_data/src/lib.rs new file mode 100644 index 0000000..9e17e3d --- /dev/null +++ b/stationeers_data/src/lib.rs @@ -0,0 +1,194 @@ +use std::collections::BTreeMap; + +pub mod templates; +pub mod enums { + use serde_derive::{Deserialize, Serialize}; + + #[cfg(feature = "tsify")] + use tsify::Tsify; + #[cfg(feature = "tsify")] + use wasm_bindgen::prelude::*; + + use std::fmt::Display; + use strum::{AsRefStr, EnumIter, EnumString, FromRepr}; + + pub mod basic; + pub mod prefabs; + pub mod script; + + #[derive(Debug)] + pub struct ParseError { + pub enm: String, + } + + impl Display for ParseError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Unknown enum '{}'", self.enm) + } + } + + impl std::error::Error for ParseError {} + + #[derive( + Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, EnumString, + )] + #[cfg_attr(feature = "tsify", derive(Tsify))] + #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] + pub enum MemoryAccess { + Read, + Write, + ReadWrite, + } + + #[derive( + Debug, + Default, + Clone, + Copy, + PartialEq, + PartialOrd, + Eq, + Ord, + Hash, + Serialize, + Deserialize, + EnumIter, + AsRefStr, + FromRepr, + EnumString, + )] + #[cfg_attr(feature = "tsify", derive(Tsify))] + #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] + pub enum ConnectionType { + Pipe, + Power, + Data, + Chute, + Elevator, + PipeLiquid, + LandingPad, + LaunchPad, + PowerAndData, + RoboticArmRail, + #[serde(other)] + #[default] + None, + } + + #[derive( + Debug, + Default, + Clone, + Copy, + PartialEq, + PartialOrd, + Eq, + Ord, + Hash, + Serialize, + Deserialize, + EnumIter, + AsRefStr, + FromRepr, + EnumString, + )] + #[cfg_attr(feature = "tsify", derive(Tsify))] + #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] + pub enum ConnectionRole { + Input, + Input2, + Output, + Output2, + Waste, + #[serde(other)] + #[default] + None, + } + + #[derive( + Debug, + Default, + Clone, + Copy, + PartialEq, + PartialOrd, + Eq, + Ord, + Hash, + Serialize, + Deserialize, + EnumIter, + AsRefStr, + FromRepr, + EnumString, + )] + #[cfg_attr(feature = "tsify", derive(Tsify))] + #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] + #[repr(u32)] + pub enum MachineTier { + #[default] + Undefined = 0, + TierOne = 1, + TierTwo = 2, + TierThree = 3, + #[serde(other)] + Max, + } + + #[derive( + Default, + Debug, + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + EnumString, + AsRefStr, + EnumIter, + FromRepr, + Serialize, + Deserialize, + )] + #[cfg_attr(feature = "tsify", derive(Tsify))] + #[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))] + pub enum Species { + None, + #[default] + Human, + Zrilian, + Robot, + } +} + +#[must_use] +pub fn build_prefab_database() -> Option> { + #[cfg(feature = "prefab_database")] + let map = Some(database::build_prefab_database()); + #[cfg(not(feature = "prefab_database"))] + let map = None; + + map +} + +pub fn build_reagent_database() -> Option> { + #[cfg(feature = "reagent_database")] + let map = Some(database::build_reagent_database()); + #[cfg(not(feature = "reagent_database"))] + let map = None; + + map +} + +pub mod database { + #[cfg(feature = "prefab_database")] + mod prefab_map; + #[cfg(feature = "prefab_database")] + pub use prefab_map::build_prefab_database; + #[cfg(feature = "reagent_database")] + mod reagent_map; + #[cfg(feature = "reagent_database")] + pub use reagent_map::build_reagent_database; +} diff --git a/stationeers_data/src/templates.rs b/stationeers_data/src/templates.rs new file mode 100644 index 0000000..c1f94cf --- /dev/null +++ b/stationeers_data/src/templates.rs @@ -0,0 +1,690 @@ +use std::collections::BTreeMap; + +use crate::enums::{ + basic::{Class, GasType, SortingClass}, + script::{LogicSlotType, LogicType}, + ConnectionRole, ConnectionType, MachineTier, MemoryAccess, Species, +}; + +use serde_with::{serde_as, DisplayFromStr}; + +use serde_derive::{Deserialize, Serialize}; +#[cfg(feature = "tsify")] +use tsify::Tsify; +#[cfg(feature = "tsify")] +use wasm_bindgen::prelude::*; + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +#[serde(tag = "templateType")] +pub enum ObjectTemplate { + Structure(StructureTemplate), + StructureSlots(StructureSlotsTemplate), + StructureLogic(StructureLogicTemplate), + StructureLogicDevice(StructureLogicDeviceTemplate), + StructureLogicDeviceConsumer(StructureLogicDeviceConsumerTemplate), + StructureLogicDeviceMemory(StructureLogicDeviceMemoryTemplate), + StructureLogicDeviceConsumerMemory(StructureLogicDeviceConsumerMemoryTemplate), + StructureCircuitHolder(StructureCircuitHolderTemplate), + Item(ItemTemplate), + ItemSlots(ItemSlotsTemplate), + ItemConsumer(ItemConsumerTemplate), + ItemLogic(ItemLogicTemplate), + ItemLogicMemory(ItemLogicMemoryTemplate), + ItemCircuitHolder(ItemCircuitHolderTemplate), + ItemSuit(ItemSuitTemplate), + ItemSuitLogic(ItemSuitLogicTemplate), + ItemSuitCircuitHolder(ItemSuitCircuitHolderTemplate), + Human(HumanTemplate), +} + +#[allow(dead_code)] +impl ObjectTemplate { + #[allow(clippy::must_use_candidate)] + pub fn prefab(&self) -> &PrefabInfo { + #[allow(clippy::enum_glob_use)] + use ObjectTemplate::*; + match self { + Structure(s) => &s.prefab, + StructureSlots(s) => &s.prefab, + StructureLogic(s) => &s.prefab, + StructureLogicDevice(s) => &s.prefab, + StructureLogicDeviceConsumer(s) => &s.prefab, + StructureLogicDeviceMemory(s) => &s.prefab, + StructureLogicDeviceConsumerMemory(s) => &s.prefab, + StructureCircuitHolder(s) => &s.prefab, + Item(i) => &i.prefab, + ItemSlots(i) => &i.prefab, + ItemConsumer(i) => &i.prefab, + ItemLogic(i) => &i.prefab, + ItemLogicMemory(i) => &i.prefab, + ItemCircuitHolder(i) => &i.prefab, + ItemSuit(i) => &i.prefab, + ItemSuitLogic(i) => &i.prefab, + ItemSuitCircuitHolder(i) => &i.prefab, + Human(h) => &h.prefab, + } + } +} + +impl From for ObjectTemplate { + fn from(value: StructureTemplate) -> Self { + Self::Structure(value) + } +} + +impl From for ObjectTemplate { + fn from(value: StructureSlotsTemplate) -> Self { + Self::StructureSlots(value) + } +} + +impl From for ObjectTemplate { + fn from(value: StructureLogicTemplate) -> Self { + Self::StructureLogic(value) + } +} + +impl From for ObjectTemplate { + fn from(value: StructureLogicDeviceTemplate) -> Self { + Self::StructureLogicDevice(value) + } +} +impl From for ObjectTemplate { + fn from(value: StructureLogicDeviceConsumerTemplate) -> Self { + Self::StructureLogicDeviceConsumer(value) + } +} + +impl From for ObjectTemplate { + fn from(value: StructureLogicDeviceMemoryTemplate) -> Self { + Self::StructureLogicDeviceMemory(value) + } +} + +impl From for ObjectTemplate { + fn from(value: StructureLogicDeviceConsumerMemoryTemplate) -> Self { + Self::StructureLogicDeviceConsumerMemory(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemTemplate) -> Self { + Self::Item(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemSlotsTemplate) -> Self { + Self::ItemSlots(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemConsumerTemplate) -> Self { + Self::ItemConsumer(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemLogicTemplate) -> Self { + Self::ItemLogic(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemLogicMemoryTemplate) -> Self { + Self::ItemLogicMemory(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemSuitCircuitHolderTemplate) -> Self { + Self::ItemSuitCircuitHolder(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemSuitTemplate) -> Self { + Self::ItemSuit(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemSuitLogicTemplate) -> Self { + Self::ItemSuitLogic(value) + } +} + +impl From for ObjectTemplate { + fn from(value: ItemCircuitHolderTemplate) -> Self { + Self::ItemCircuitHolder(value) + } +} + +impl From for ObjectTemplate { + fn from(value: StructureCircuitHolderTemplate) -> Self { + Self::StructureCircuitHolder(value) + } +} + +impl From for ObjectTemplate { + fn from(value: HumanTemplate) -> Self { + Self::Human(value) + } +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct HumanTemplate { + pub prefab: PrefabInfo, + pub species: Species, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct PrefabInfo { + pub prefab_name: String, + pub prefab_hash: i32, + pub desc: String, + pub name: String, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum SlotInfo { + Direct { + name: String, + class: Class, + index: u32, + }, + Proxy { + name: String, + index: u32, + }, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct LogicInfo { + #[serde_as(as = "BTreeMap")] + #[cfg_attr( + feature = "tsify", + tsify(type = "Map>") + )] + pub logic_slot_types: BTreeMap>, + pub logic_types: BTreeMap, + #[serde_as(as = "Option>")] + #[cfg_attr(feature = "tsify", tsify(optional, type = "Map"))] + pub modes: Option>, + pub transmission_receiver: bool, + pub wireless_logic: bool, + pub circuit_holder: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemInfo { + pub consumable: bool, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub filter_type: Option, + pub ingredient: bool, + pub max_quantity: u32, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub reagents: Option>, + pub slot_class: Class, + pub sorting_class: SortingClass, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ConnectionInfo { + pub typ: ConnectionType, + pub role: ConnectionRole, +} + +#[allow(clippy::struct_excessive_bools)] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct DeviceInfo { + pub connection_list: Vec, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub device_pins_length: Option, + pub has_activate_state: bool, + pub has_atmosphere: bool, + pub has_color_state: bool, + pub has_lock_state: bool, + pub has_mode_state: bool, + pub has_on_off_state: bool, + pub has_open_state: bool, + pub has_reagents: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ConsumerInfo { + pub consumed_resources: Vec, + pub processed_reagents: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct Reagent { + pub id: u8, + pub name: String, + pub hash: i32, + pub unit: String, + pub is_organic: bool, + pub sources: BTreeMap, +} + +impl Reagent { + pub fn with_name(mut self, name: impl Into) -> Self { + self.name = name.into(); + self + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct RecipeRange { + pub start: f64, + pub stop: f64, + pub is_valid: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct RecipeGasMix { + pub rule: i64, + pub is_any: bool, + pub is_any_to_remove: bool, + pub reagents: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct Recipe { + pub target_prefab: String, + pub target_prefab_hash: i32, + pub tier: MachineTier, + pub time: f64, + pub energy: f64, + pub temperature: RecipeRange, + pub pressure: RecipeRange, + pub required_mix: RecipeGasMix, + pub count_types: i64, + pub reagents: BTreeMap, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct RecipeOrder { + pub recipe: Recipe, + pub quantity: u32, +} + +impl Recipe { + pub fn with_target(mut self, prefab: impl Into) -> Self { + let prefab: String = prefab.into(); + self.target_prefab_hash = const_crc32::crc32(prefab.as_bytes()) as i32; + self.target_prefab = prefab; + self + } +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct FabricatorInfo { + pub tier: MachineTier, + pub recipes: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct StructureInfo { + pub small_grid: bool, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub enum InstructionPartType { + Bool8, + Byte8, + Int32, + UInt32, + Short16, + UShort16, + Unused(u32), + Unknown(String), +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct InstructionPart { + pub range: (u32, u32), + pub name: String, + pub typ: InstructionPartType, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct Instruction { + pub description: String, + pub description_stripped: String, + pub typ: String, + pub value: i64, + pub valid: (u32, Option), + pub parts: Vec, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct MemoryInfo { + #[cfg_attr(feature = "tsify", tsify(optional))] + pub instructions: Option>, + pub memory_access: MemoryAccess, + pub memory_size: u32, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ThermalInfo { + pub convection_factor: f32, + pub radiation_factor: f32, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct InternalAtmoInfo { + pub volume: f32, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct SuitInfo { + pub hygiene_reduction_multiplier: f32, + pub waste_max_pressure: f32, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct StructureTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct StructureSlotsTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct StructureLogicTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct StructureLogicDeviceTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub device: DeviceInfo, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct StructureLogicDeviceConsumerTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub device: DeviceInfo, + pub consumer_info: ConsumerInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub fabricator_info: Option, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct StructureLogicDeviceMemoryTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub device: DeviceInfo, + pub memory: MemoryInfo, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct StructureCircuitHolderTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub device: DeviceInfo, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct StructureLogicDeviceConsumerMemoryTemplate { + pub prefab: PrefabInfo, + pub structure: StructureInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub device: DeviceInfo, + pub consumer_info: ConsumerInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub fabricator_info: Option, + pub memory: MemoryInfo, +} + +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemSlotsTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemConsumerTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub consumer_info: ConsumerInfo, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemLogicTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemLogicMemoryTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub memory: MemoryInfo, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemCircuitHolderTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemSuitTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub suit_info: SuitInfo, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemSuitLogicTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub suit_info: SuitInfo, +} + +#[serde_as] +#[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] +#[cfg_attr(feature = "tsify", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))] +pub struct ItemSuitCircuitHolderTemplate { + pub prefab: PrefabInfo, + pub item: ItemInfo, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub thermal_info: Option, + #[cfg_attr(feature = "tsify", tsify(optional))] + pub internal_atmo_info: Option, + pub logic: LogicInfo, + #[serde_as(as = "BTreeMap")] + #[cfg_attr(feature = "tsify", tsify(type = "Map"))] + pub slots: BTreeMap, + pub suit_info: SuitInfo, + pub memory: MemoryInfo, +} diff --git a/www/assets_finding.ipynb b/www/assets_finding.ipynb index 4fa48fd..bcacbea 100644 --- a/www/assets_finding.ipynb +++ b/www/assets_finding.ipynb @@ -15,18 +15,20 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ + "%matplotlib widget\n", "import json\n", "\n", "database = {}\n", "\n", - "with open(\"data/database.json\", \"r\") as f:\n", - " database = json.load(f)\n", + "with open(\"src/ts/virtualMachine/prefabDatabase.ts\", \"r\") as f:\n", + " contents = f.read().removeprefix(\"export default \").removesuffix(\" as const\")\n", + " database = json.loads(contents)\n", "\n", - "db = database[\"db\"]" + "db = database[\"prefabs\"]" ] }, { @@ -38,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -58,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -80,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -105,9 +107,9 @@ " better_matches = []\n", " for can in filtered_matches:\n", " name, match, mapping = can\n", - " if mapping.startswith(\"Item\") and mapping in name:\n", + " if mapping.startswith(\"Item\") and mapping in name or mapping.lower() in name:\n", " better_matches.append((name, match, mapping))\n", - " elif mapping.startswith(\"Structure\") and mapping in name:\n", + " elif mapping.startswith(\"Structure\") and mapping in name or mapping.lower() in name:\n", " better_matches.append((name, match, mapping))\n", " if len(better_matches) > 0:\n", " filtered_matches = better_matches\n", @@ -127,7 +129,7 @@ " direct = []\n", " for can in filtered_matches:\n", " name, match, mapping = can\n", - " if f\"{match}-\" in name:\n", + " if f\"{match}-\" in name or f\"{match.lower()}-\" in name:\n", " direct.append((name, match, mapping))\n", " if len(direct) > 0:\n", " filtered_matches = direct\n", @@ -154,7 +156,7 @@ " continue\n", " elif name.startswith(\"Kit\") and not mapping.startswith(\"Kit\"):\n", " continue\n", - " elif not name.startswith(match):\n", + " elif not (name.startswith(match) or name.startswith(match.lower())):\n", " continue\n", " not_worse.append((name, match, mapping))\n", " if len(not_worse) > 0:\n", @@ -171,14 +173,15 @@ "\n", "for entry in db.values():\n", " candidates = []\n", + " entry_name = entry[\"prefab\"][\"prefab_name\"]\n", " for name in names:\n", - " if entry[\"name\"] in name:\n", - " candidates.append((name, entry[\"name\"], entry[\"name\"]))\n", - " if entry[\"name\"].removeprefix(\"Item\") in name:\n", - " candidates.append((name, entry[\"name\"].removeprefix(\"Item\"), entry[\"name\"]))\n", - " if entry[\"name\"].removeprefix(\"Structure\") in name:\n", - " candidates.append((name, entry[\"name\"].removeprefix(\"Structure\"), entry[\"name\"]))\n", - " image_candidates[entry[\"name\"]] = filter_candidates(candidates)" + " if entry_name in name or entry_name.lower() in name:\n", + " candidates.append((name, entry_name, entry_name))\n", + " if entry_name.removeprefix(\"Item\") in name or entry_name.removeprefix(\"Item\").lower() in name:\n", + " candidates.append((name, entry_name.removeprefix(\"Item\"), entry_name))\n", + " if entry_name.removeprefix(\"Structure\") in name or entry_name.removeprefix(\"Structure\").lower() in name:\n", + " candidates.append((name, entry_name.removeprefix(\"Structure\"), entry_name))\n", + " image_candidates[entry_name] = filter_candidates(candidates)" ] }, { @@ -190,7 +193,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -206,12 +209,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Prepare out List of file copies. at this point a few items will never have a match. and one or two will have two choices but those choices will be arbitrary." + "Prepare out List of file copies. at this point a few items will never have a match. and one or two will have two choices but those choices will be filtered again by passing them through some extra function." ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -227,25 +230,87 @@ "ItemHorticultureBelt []\n", "ItemKitLiquidRegulator []\n", "ItemKitPortablesConnector []\n", - "ItemMushroom ['ItemMushroom-resources.assets-3022.png', 'ItemMushroom-resources.assets-9304.png']\n", "ItemPlantEndothermic_Creative []\n", "ItemPlantThermogenic_Creative []\n", + "ItemSuitModCryogenicUpgrade []\n", "Landingpad_GasConnectorInwardPiece []\n", "Landingpad_LiquidConnectorInwardPiece []\n", "StructureBlocker []\n", "StructureElevatorLevelIndustrial []\n", + "StructureLogicSorter []\n", "StructurePlinth []\n" ] } ], "source": [ + "%matplotlib widget\n", "to_copy = []\n", + "\n", + "from IPython.display import Image, display\n", + "\n", + "gases = [(\"Oxygen\", \"White\"), (\"Nitrogen\", \"Black\"), (\"CarbonDioxide\", \"Yellow\"), (\"Fuel\", \"Orange\")]\n", + "\n", + "colors = [\"White\", \"Black\", \"Gray\", \"Khaki\", \"Brown\", \"Orange\", \"Yellow\", \"Red\", \"Green\", \"Blue\", \"Purple\"]\n", + "\n", + "def split_gas(name):\n", + " for gas, color in gases:\n", + " if name.endswith(gas):\n", + " return (name.removesuffix(gas), gas, color)\n", + " elif name.lower().endswith(gas):\n", + " return (name.lower().removesuffix(gas), gas, color)\n", + " elif name.lower().endswith(gas.lower()):\n", + " return (name.lower().removesuffix(gas.lower()), gas.lower(), color.lower())\n", + " return [name, None, None]\n", + "\n", + "def match_gas_color(name, candidates):\n", + " mat, gas, color = split_gas(name)\n", + " seek = f\"{mat}_{color}\"\n", + " if gas is not None:\n", + " for candidate in candidates:\n", + " if seek in candidate or seek.lower() in candidate:\n", + " return candidate\n", + " return None\n", + "\n", + "def prefer_direct(name, candidates):\n", + " for candidate in candidates:\n", + " if f\"{name}-\" in candidate or f\"{name.lower()}-\" in candidate:\n", + " return candidate\n", + " return None\n", + "\n", + "def prefer_uncolored(name, candidates):\n", + " for candidate in candidates:\n", + " for color in colors:\n", + " if f\"_{color}\" not in candidate and f\"_{color.lower()}\" not in candidate:\n", + " return candidate\n", + " return None\n", + "\n", + "def prefer_lower_match(name, candidates):\n", + " for candidate in candidates:\n", + " if f\"{name.lower()}-\" in candidate:\n", + " return candidate\n", + " return None\n", + "\n", + "filter_funcs = [prefer_lower_match, prefer_direct, match_gas_color, prefer_uncolored]\n", + "\n", "for name, candidates in image_candidates.items():\n", " if len(candidates) != 1:\n", + " found = False\n", + " for func in filter_funcs:\n", + " candidate = func(name, candidates)\n", + " if candidate is not None:\n", + " to_copy.append((name, candidate))\n", + " found = True\n", + " if found:\n", + " continue\n", " print(name, candidates)\n", " if len(candidates) > 1:\n", + " for candidate in candidates:\n", + " print(candidate)\n", + " display(Image(datapath / candidate))\n", + " \n", " #take first as fallback\n", - " to_copy.append((name, candidates[0]))\n", + " # to_copy.append((name, candidates[0]))\n", + " raise StopExecution\n", " else:\n", " # print(name, candidates)\n", " to_copy.append((name, candidates[0]))\n" @@ -253,7 +318,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -334,14 +399,28 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 42, "metadata": {}, "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3497a8d33d6a45879586d4c7441e3f60", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "IntProgress(value=0, max=1288)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, { "name": "stdout", "output_type": "stream", "text": [ - "1266 of 1266 | 100.00% \n", + "1288 of 1288 | 100.00% \n", "Done\n" ] } @@ -352,6 +431,12 @@ "destpath = Path(\"img/stationpedia\")\n", "total_files = len(to_copy)\n", "\n", + "from ipywidgets import IntProgress\n", + "from IPython.display import display\n", + "import time\n", + "\n", + "f = IntProgress(min=0, max=total_files)\n", + "display(f)\n", "count = 0\n", "print ( f\"{count} of {total_files} | { count / total_files * 100}\", end=\"\\r\")\n", "for name, file in to_copy:\n", @@ -359,6 +444,7 @@ " dest = destpath / f\"{name}.png\"\n", " shutil.copy(source, dest)\n", " count += 1\n", + " f.value = count\n", " print ( f\"{count} of {total_files} | { (count / total_files) * 100 :.2f}% \", end=\"\\r\")\n", "print()\n", "print(\"Done\")\n", @@ -382,7 +468,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.2" + "version": "3.12.5" } }, "nbformat": 4, diff --git a/www/cspell.json b/www/cspell.json index 1fc3cc1..7db59c6 100644 --- a/www/cspell.json +++ b/www/cspell.json @@ -52,23 +52,37 @@ "brnaz", "brne", "brnez", + "bson", "Circuitboard", + "clazz", "codegen", + "Comlink", + "datapoints", + "dbutils", "Depressurising", "deviceslength", + "dodgerblue", + "dont", "endpos", "getd", "Hardsuit", "hardwrap", "hashables", "hstack", + "IDBP", + "idxs", "infile", "jetpack", "Keybind", "labelledby", + "lawngreen", "lbns", + "leeoniya", + "lightdom", "logicable", + "LogicSlotType", "logicslottypes", + "LogicSlotTypes", "logictype", "logictypes", "lparen", @@ -82,6 +96,7 @@ "pedia", "pinf", "popperjs", + "preact", "preproc", "Pressurising", "putd", @@ -91,20 +106,22 @@ "regen", "rocketstation", "rparen", + "rsbuild", + "rspack", "sapz", "sattellite", "sdns", "sdse", + "searchbtn", "seqz", "serde", "sgez", "sgtz", "slez", + "Slotable", "slotclass", "slotlogic", "slotlogicable", - "slotlogictype", - "slotlogictypes", "slottype", "sltz", "snan", @@ -117,10 +134,17 @@ "stationpedia", "tablist", "tabpanel", + "tailwindcss", "themelist", "tokentype", "trunc", - "whos" + "ufuzzy", + "VMIC", + "VMUI", + "vstack", + "whitesmoke", + "whos", + "wicg" ], "flagWords": [], "language": "en", diff --git a/www/data/Enums.json b/www/data/Enums.json deleted file mode 100644 index 00c8682..0000000 --- a/www/data/Enums.json +++ /dev/null @@ -1 +0,0 @@ -{"LogicType":{"None":0,"Power":1,"Open":2,"Mode":3,"Error":4,"Pressure":5,"Temperature":6,"PressureExternal":7,"PressureInternal":8,"Activate":9,"Lock":10,"Charge":11,"Setting":12,"Reagents":13,"RatioOxygen":14,"RatioCarbonDioxide":15,"RatioNitrogen":16,"RatioPollutant":17,"RatioVolatiles":18,"RatioWater":19,"Horizontal":20,"Vertical":21,"SolarAngle":22,"Maximum":23,"Ratio":24,"PowerPotential":25,"PowerActual":26,"Quantity":27,"On":28,"ImportQuantity":29,"ImportSlotOccupant":30,"ExportQuantity":31,"ExportSlotOccupant":32,"RequiredPower":33,"HorizontalRatio":34,"VerticalRatio":35,"PowerRequired":36,"Idle":37,"Color":38,"ElevatorSpeed":39,"ElevatorLevel":40,"RecipeHash":41,"ExportSlotHash":42,"ImportSlotHash":43,"PlantHealth1":44,"PlantHealth2":45,"PlantHealth3":46,"PlantHealth4":47,"PlantGrowth1":48,"PlantGrowth2":49,"PlantGrowth3":50,"PlantGrowth4":51,"PlantEfficiency1":52,"PlantEfficiency2":53,"PlantEfficiency3":54,"PlantEfficiency4":55,"PlantHash1":56,"PlantHash2":57,"PlantHash3":58,"PlantHash4":59,"RequestHash":60,"CompletionRatio":61,"ClearMemory":62,"ExportCount":63,"ImportCount":64,"PowerGeneration":65,"TotalMoles":66,"Volume":67,"Plant":68,"Harvest":69,"Output":70,"PressureSetting":71,"TemperatureSetting":72,"TemperatureExternal":73,"Filtration":74,"AirRelease":75,"PositionX":76,"PositionY":77,"PositionZ":78,"VelocityMagnitude":79,"VelocityRelativeX":80,"VelocityRelativeY":81,"VelocityRelativeZ":82,"RatioNitrousOxide":83,"PrefabHash":84,"ForceWrite":85,"SignalStrength":86,"SignalID":87,"TargetX":88,"TargetY":89,"TargetZ":90,"SettingInput":91,"SettingOutput":92,"CurrentResearchPodType":93,"ManualResearchRequiredPod":94,"MineablesInVicinity":95,"MineablesInQueue":96,"NextWeatherEventTime":97,"Combustion":98,"Fuel":99,"ReturnFuelCost":100,"CollectableGoods":101,"Time":102,"Bpm":103,"EnvironmentEfficiency":104,"WorkingGasEfficiency":105,"PressureInput":106,"TemperatureInput":107,"RatioOxygenInput":108,"RatioCarbonDioxideInput":109,"RatioNitrogenInput":110,"RatioPollutantInput":111,"RatioVolatilesInput":112,"RatioWaterInput":113,"RatioNitrousOxideInput":114,"TotalMolesInput":115,"PressureInput2":116,"TemperatureInput2":117,"RatioOxygenInput2":118,"RatioCarbonDioxideInput2":119,"RatioNitrogenInput2":120,"RatioPollutantInput2":121,"RatioVolatilesInput2":122,"RatioWaterInput2":123,"RatioNitrousOxideInput2":124,"TotalMolesInput2":125,"PressureOutput":126,"TemperatureOutput":127,"RatioOxygenOutput":128,"RatioCarbonDioxideOutput":129,"RatioNitrogenOutput":130,"RatioPollutantOutput":131,"RatioVolatilesOutput":132,"RatioWaterOutput":133,"RatioNitrousOxideOutput":134,"TotalMolesOutput":135,"PressureOutput2":136,"TemperatureOutput2":137,"RatioOxygenOutput2":138,"RatioCarbonDioxideOutput2":139,"RatioNitrogenOutput2":140,"RatioPollutantOutput2":141,"RatioVolatilesOutput2":142,"RatioWaterOutput2":143,"RatioNitrousOxideOutput2":144,"TotalMolesOutput2":145,"CombustionInput":146,"CombustionInput2":147,"CombustionOutput":148,"CombustionOutput2":149,"OperationalTemperatureEfficiency":150,"TemperatureDifferentialEfficiency":151,"PressureEfficiency":152,"CombustionLimiter":153,"Throttle":154,"Rpm":155,"Stress":156,"InterrogationProgress":157,"TargetPadIndex":158,"SizeX":160,"SizeY":161,"SizeZ":162,"MinimumWattsToContact":163,"WattsReachingContact":164,"Channel0":165,"Channel1":166,"Channel2":167,"Channel3":168,"Channel4":169,"Channel5":170,"Channel6":171,"Channel7":172,"LineNumber":173,"Flush":174,"SoundAlert":175,"SolarIrradiance":176,"RatioLiquidNitrogen":177,"RatioLiquidNitrogenInput":178,"RatioLiquidNitrogenInput2":179,"RatioLiquidNitrogenOutput":180,"RatioLiquidNitrogenOutput2":181,"VolumeOfLiquid":182,"RatioLiquidOxygen":183,"RatioLiquidOxygenInput":184,"RatioLiquidOxygenInput2":185,"RatioLiquidOxygenOutput":186,"RatioLiquidOxygenOutput2":187,"RatioLiquidVolatiles":188,"RatioLiquidVolatilesInput":189,"RatioLiquidVolatilesInput2":190,"RatioLiquidVolatilesOutput":191,"RatioLiquidVolatilesOutput2":192,"RatioSteam":193,"RatioSteamInput":194,"RatioSteamInput2":195,"RatioSteamOutput":196,"RatioSteamOutput2":197,"ContactTypeId":198,"RatioLiquidCarbonDioxide":199,"RatioLiquidCarbonDioxideInput":200,"RatioLiquidCarbonDioxideInput2":201,"RatioLiquidCarbonDioxideOutput":202,"RatioLiquidCarbonDioxideOutput2":203,"RatioLiquidPollutant":204,"RatioLiquidPollutantInput":205,"RatioLiquidPollutantInput2":206,"RatioLiquidPollutantOutput":207,"RatioLiquidPollutantOutput2":208,"RatioLiquidNitrousOxide":209,"RatioLiquidNitrousOxideInput":210,"RatioLiquidNitrousOxideInput2":211,"RatioLiquidNitrousOxideOutput":212,"RatioLiquidNitrousOxideOutput2":213,"Progress":214,"DestinationCode":215,"Acceleration":216,"ReferenceId":217,"AutoShutOff":218,"Mass":219,"DryMass":220,"Thrust":221,"Weight":222,"ThrustToWeight":223,"TimeToDestination":224,"BurnTimeRemaining":225,"AutoLand":226,"ForwardX":227,"ForwardY":228,"ForwardZ":229,"Orientation":230,"VelocityX":231,"VelocityY":232,"VelocityZ":233,"PassedMoles":234,"ExhaustVelocity":235,"FlightControlRule":236,"ReEntryAltitude":237,"Apex":238,"EntityState":239,"DrillCondition":240,"Index":241,"CelestialHash":242,"AlignmentError":243,"DistanceAu":244,"OrbitPeriod":245,"Inclination":246,"Eccentricity":247,"SemiMajorAxis":248,"DistanceKm":249,"CelestialParentHash":250,"TrueAnomaly":251,"RatioHydrogen":252,"RatioLiquidHydrogen":253,"RatioPollutedWater":254,"Discover":255,"Chart":256,"Survey":257,"NavPoints":258,"ChartedNavPoints":259,"Sites":260,"CurrentCode":261,"Density":262,"Richness":263,"Size":264,"TotalQuantity":265,"MinedQuantity":266,"BestContactFilter":267},"LogicSlotType":{"None":0,"Occupied":1,"OccupantHash":2,"Quantity":3,"Damage":4,"Efficiency":5,"Health":6,"Growth":7,"Pressure":8,"Temperature":9,"Charge":10,"ChargeRatio":11,"Class":12,"PressureWaste":13,"PressureAir":14,"MaxQuantity":15,"Mature":16,"PrefabHash":17,"Seeding":18,"LineNumber":19,"Volume":20,"Open":21,"On":22,"Lock":23,"SortingClass":24,"FilterType":25,"ReferenceId":26},"LogicBatchMethod":{"Average":0,"Sum":1,"Minimum":2,"Maximum":3},"LogicReagentMode":{"Contents":0,"Required":1,"Recipe":2,"TotalContents":3},"Enums":{"LogicType.None":0,"LogicType.Power":1,"LogicType.Open":2,"LogicType.Mode":3,"LogicType.Error":4,"LogicType.Pressure":5,"LogicType.Temperature":6,"LogicType.PressureExternal":7,"LogicType.PressureInternal":8,"LogicType.Activate":9,"LogicType.Lock":10,"LogicType.Charge":11,"LogicType.Setting":12,"LogicType.Reagents":13,"LogicType.RatioOxygen":14,"LogicType.RatioCarbonDioxide":15,"LogicType.RatioNitrogen":16,"LogicType.RatioPollutant":17,"LogicType.RatioVolatiles":18,"LogicType.RatioWater":19,"LogicType.Horizontal":20,"LogicType.Vertical":21,"LogicType.SolarAngle":22,"LogicType.Maximum":23,"LogicType.Ratio":24,"LogicType.PowerPotential":25,"LogicType.PowerActual":26,"LogicType.Quantity":27,"LogicType.On":28,"LogicType.ImportQuantity":29,"LogicType.ImportSlotOccupant":30,"LogicType.ExportQuantity":31,"LogicType.ExportSlotOccupant":32,"LogicType.RequiredPower":33,"LogicType.HorizontalRatio":34,"LogicType.VerticalRatio":35,"LogicType.PowerRequired":36,"LogicType.Idle":37,"LogicType.Color":38,"LogicType.ElevatorSpeed":39,"LogicType.ElevatorLevel":40,"LogicType.RecipeHash":41,"LogicType.ExportSlotHash":42,"LogicType.ImportSlotHash":43,"LogicType.PlantHealth1":44,"LogicType.PlantHealth2":45,"LogicType.PlantHealth3":46,"LogicType.PlantHealth4":47,"LogicType.PlantGrowth1":48,"LogicType.PlantGrowth2":49,"LogicType.PlantGrowth3":50,"LogicType.PlantGrowth4":51,"LogicType.PlantEfficiency1":52,"LogicType.PlantEfficiency2":53,"LogicType.PlantEfficiency3":54,"LogicType.PlantEfficiency4":55,"LogicType.PlantHash1":56,"LogicType.PlantHash2":57,"LogicType.PlantHash3":58,"LogicType.PlantHash4":59,"LogicType.RequestHash":60,"LogicType.CompletionRatio":61,"LogicType.ClearMemory":62,"LogicType.ExportCount":63,"LogicType.ImportCount":64,"LogicType.PowerGeneration":65,"LogicType.TotalMoles":66,"LogicType.Volume":67,"LogicType.Plant":68,"LogicType.Harvest":69,"LogicType.Output":70,"LogicType.PressureSetting":71,"LogicType.TemperatureSetting":72,"LogicType.TemperatureExternal":73,"LogicType.Filtration":74,"LogicType.AirRelease":75,"LogicType.PositionX":76,"LogicType.PositionY":77,"LogicType.PositionZ":78,"LogicType.VelocityMagnitude":79,"LogicType.VelocityRelativeX":80,"LogicType.VelocityRelativeY":81,"LogicType.VelocityRelativeZ":82,"LogicType.RatioNitrousOxide":83,"LogicType.PrefabHash":84,"LogicType.ForceWrite":85,"LogicType.SignalStrength":86,"LogicType.SignalID":87,"LogicType.TargetX":88,"LogicType.TargetY":89,"LogicType.TargetZ":90,"LogicType.SettingInput":91,"LogicType.SettingOutput":92,"LogicType.CurrentResearchPodType":93,"LogicType.ManualResearchRequiredPod":94,"LogicType.MineablesInVicinity":95,"LogicType.MineablesInQueue":96,"LogicType.NextWeatherEventTime":97,"LogicType.Combustion":98,"LogicType.Fuel":99,"LogicType.ReturnFuelCost":100,"LogicType.CollectableGoods":101,"LogicType.Time":102,"LogicType.Bpm":103,"LogicType.EnvironmentEfficiency":104,"LogicType.WorkingGasEfficiency":105,"LogicType.PressureInput":106,"LogicType.TemperatureInput":107,"LogicType.RatioOxygenInput":108,"LogicType.RatioCarbonDioxideInput":109,"LogicType.RatioNitrogenInput":110,"LogicType.RatioPollutantInput":111,"LogicType.RatioVolatilesInput":112,"LogicType.RatioWaterInput":113,"LogicType.RatioNitrousOxideInput":114,"LogicType.TotalMolesInput":115,"LogicType.PressureInput2":116,"LogicType.TemperatureInput2":117,"LogicType.RatioOxygenInput2":118,"LogicType.RatioCarbonDioxideInput2":119,"LogicType.RatioNitrogenInput2":120,"LogicType.RatioPollutantInput2":121,"LogicType.RatioVolatilesInput2":122,"LogicType.RatioWaterInput2":123,"LogicType.RatioNitrousOxideInput2":124,"LogicType.TotalMolesInput2":125,"LogicType.PressureOutput":126,"LogicType.TemperatureOutput":127,"LogicType.RatioOxygenOutput":128,"LogicType.RatioCarbonDioxideOutput":129,"LogicType.RatioNitrogenOutput":130,"LogicType.RatioPollutantOutput":131,"LogicType.RatioVolatilesOutput":132,"LogicType.RatioWaterOutput":133,"LogicType.RatioNitrousOxideOutput":134,"LogicType.TotalMolesOutput":135,"LogicType.PressureOutput2":136,"LogicType.TemperatureOutput2":137,"LogicType.RatioOxygenOutput2":138,"LogicType.RatioCarbonDioxideOutput2":139,"LogicType.RatioNitrogenOutput2":140,"LogicType.RatioPollutantOutput2":141,"LogicType.RatioVolatilesOutput2":142,"LogicType.RatioWaterOutput2":143,"LogicType.RatioNitrousOxideOutput2":144,"LogicType.TotalMolesOutput2":145,"LogicType.CombustionInput":146,"LogicType.CombustionInput2":147,"LogicType.CombustionOutput":148,"LogicType.CombustionOutput2":149,"LogicType.OperationalTemperatureEfficiency":150,"LogicType.TemperatureDifferentialEfficiency":151,"LogicType.PressureEfficiency":152,"LogicType.CombustionLimiter":153,"LogicType.Throttle":154,"LogicType.Rpm":155,"LogicType.Stress":156,"LogicType.InterrogationProgress":157,"LogicType.TargetPadIndex":158,"LogicType.SizeX":160,"LogicType.SizeY":161,"LogicType.SizeZ":162,"LogicType.MinimumWattsToContact":163,"LogicType.WattsReachingContact":164,"LogicType.Channel0":165,"LogicType.Channel1":166,"LogicType.Channel2":167,"LogicType.Channel3":168,"LogicType.Channel4":169,"LogicType.Channel5":170,"LogicType.Channel6":171,"LogicType.Channel7":172,"LogicType.LineNumber":173,"LogicType.Flush":174,"LogicType.SoundAlert":175,"LogicType.SolarIrradiance":176,"LogicType.RatioLiquidNitrogen":177,"LogicType.RatioLiquidNitrogenInput":178,"LogicType.RatioLiquidNitrogenInput2":179,"LogicType.RatioLiquidNitrogenOutput":180,"LogicType.RatioLiquidNitrogenOutput2":181,"LogicType.VolumeOfLiquid":182,"LogicType.RatioLiquidOxygen":183,"LogicType.RatioLiquidOxygenInput":184,"LogicType.RatioLiquidOxygenInput2":185,"LogicType.RatioLiquidOxygenOutput":186,"LogicType.RatioLiquidOxygenOutput2":187,"LogicType.RatioLiquidVolatiles":188,"LogicType.RatioLiquidVolatilesInput":189,"LogicType.RatioLiquidVolatilesInput2":190,"LogicType.RatioLiquidVolatilesOutput":191,"LogicType.RatioLiquidVolatilesOutput2":192,"LogicType.RatioSteam":193,"LogicType.RatioSteamInput":194,"LogicType.RatioSteamInput2":195,"LogicType.RatioSteamOutput":196,"LogicType.RatioSteamOutput2":197,"LogicType.ContactTypeId":198,"LogicType.RatioLiquidCarbonDioxide":199,"LogicType.RatioLiquidCarbonDioxideInput":200,"LogicType.RatioLiquidCarbonDioxideInput2":201,"LogicType.RatioLiquidCarbonDioxideOutput":202,"LogicType.RatioLiquidCarbonDioxideOutput2":203,"LogicType.RatioLiquidPollutant":204,"LogicType.RatioLiquidPollutantInput":205,"LogicType.RatioLiquidPollutantInput2":206,"LogicType.RatioLiquidPollutantOutput":207,"LogicType.RatioLiquidPollutantOutput2":208,"LogicType.RatioLiquidNitrousOxide":209,"LogicType.RatioLiquidNitrousOxideInput":210,"LogicType.RatioLiquidNitrousOxideInput2":211,"LogicType.RatioLiquidNitrousOxideOutput":212,"LogicType.RatioLiquidNitrousOxideOutput2":213,"LogicType.Progress":214,"LogicType.DestinationCode":215,"LogicType.Acceleration":216,"LogicType.ReferenceId":217,"LogicType.AutoShutOff":218,"LogicType.Mass":219,"LogicType.DryMass":220,"LogicType.Thrust":221,"LogicType.Weight":222,"LogicType.ThrustToWeight":223,"LogicType.TimeToDestination":224,"LogicType.BurnTimeRemaining":225,"LogicType.AutoLand":226,"LogicType.ForwardX":227,"LogicType.ForwardY":228,"LogicType.ForwardZ":229,"LogicType.Orientation":230,"LogicType.VelocityX":231,"LogicType.VelocityY":232,"LogicType.VelocityZ":233,"LogicType.PassedMoles":234,"LogicType.ExhaustVelocity":235,"LogicType.FlightControlRule":236,"LogicType.ReEntryAltitude":237,"LogicType.Apex":238,"LogicType.EntityState":239,"LogicType.DrillCondition":240,"LogicType.Index":241,"LogicType.CelestialHash":242,"LogicType.AlignmentError":243,"LogicType.DistanceAu":244,"LogicType.OrbitPeriod":245,"LogicType.Inclination":246,"LogicType.Eccentricity":247,"LogicType.SemiMajorAxis":248,"LogicType.DistanceKm":249,"LogicType.CelestialParentHash":250,"LogicType.TrueAnomaly":251,"LogicType.RatioHydrogen":252,"LogicType.RatioLiquidHydrogen":253,"LogicType.RatioPollutedWater":254,"LogicType.Discover":255,"LogicType.Chart":256,"LogicType.Survey":257,"LogicType.NavPoints":258,"LogicType.ChartedNavPoints":259,"LogicType.Sites":260,"LogicType.CurrentCode":261,"LogicType.Density":262,"LogicType.Richness":263,"LogicType.Size":264,"LogicType.TotalQuantity":265,"LogicType.MinedQuantity":266,"LogicType.BestContactFilter":267,"LogicSlotType.None":0,"LogicSlotType.Occupied":1,"LogicSlotType.OccupantHash":2,"LogicSlotType.Quantity":3,"LogicSlotType.Damage":4,"LogicSlotType.Efficiency":5,"LogicSlotType.Health":6,"LogicSlotType.Growth":7,"LogicSlotType.Pressure":8,"LogicSlotType.Temperature":9,"LogicSlotType.Charge":10,"LogicSlotType.ChargeRatio":11,"LogicSlotType.Class":12,"LogicSlotType.PressureWaste":13,"LogicSlotType.PressureAir":14,"LogicSlotType.MaxQuantity":15,"LogicSlotType.Mature":16,"LogicSlotType.PrefabHash":17,"LogicSlotType.Seeding":18,"LogicSlotType.LineNumber":19,"LogicSlotType.Volume":20,"LogicSlotType.Open":21,"LogicSlotType.On":22,"LogicSlotType.Lock":23,"LogicSlotType.SortingClass":24,"LogicSlotType.FilterType":25,"LogicSlotType.ReferenceId":26,"Sound.None":0,"Sound.Alarm2":1,"Sound.Alarm3":2,"Sound.Alarm4":3,"Sound.Alarm5":4,"Sound.Alarm6":5,"Sound.Alarm7":6,"Sound.Music1":7,"Sound.Music2":8,"Sound.Music3":9,"Sound.Alarm8":10,"Sound.Alarm9":11,"Sound.Alarm10":12,"Sound.Alarm11":13,"Sound.Alarm12":14,"Sound.Danger":15,"Sound.Warning":16,"Sound.Alert":17,"Sound.StormIncoming":18,"Sound.IntruderAlert":19,"Sound.Depressurising":20,"Sound.Pressurising":21,"Sound.AirlockCycling":22,"Sound.PowerLow":23,"Sound.SystemFailure":24,"Sound.Welcome":25,"Sound.MalfunctionDetected":26,"Sound.HaltWhoGoesThere":27,"Sound.FireFireFire":28,"Sound.One":29,"Sound.Two":30,"Sound.Three":31,"Sound.Four":32,"Sound.Five":33,"Sound.Floor":34,"Sound.RocketLaunching":35,"Sound.LiftOff":36,"Sound.TraderIncoming":37,"Sound.TraderLanded":38,"Sound.PressureHigh":39,"Sound.PressureLow":40,"Sound.TemperatureHigh":41,"Sound.TemperatureLow":42,"Sound.PollutantsDetected":43,"Sound.HighCarbonDioxide":44,"Sound.Alarm1":45,"TransmitterMode.Passive":0,"TransmitterMode.Active":1,"ElevatorMode.Stationary":0,"ElevatorMode.Upward":1,"ElevatorMode.Downward":2,"Color.Blue":0,"Color.Gray":1,"Color.Green":2,"Color.Orange":3,"Color.Red":4,"Color.Yellow":5,"Color.White":6,"Color.Black":7,"Color.Brown":8,"Color.Khaki":9,"Color.Pink":10,"Color.Purple":11,"EntityState.Alive":0,"EntityState.Dead":1,"EntityState.Unconscious":2,"EntityState.Decay":3,"AirControl.None":0,"AirControl.Offline":1,"AirControl.Pressure":2,"AirControl.Draught":4,"DaylightSensorMode.Default":0,"DaylightSensorMode.Horizontal":1,"DaylightSensorMode.Vertical":2,"Equals":0,"Greater":1,"Less":2,"NotEquals":3,"AirCon.Cold":0,"AirCon.Hot":1,"Vent.Outward":0,"Vent.Inward":1,"PowerMode.Idle":0,"PowerMode.Discharged":1,"PowerMode.Discharging":2,"PowerMode.Charging":3,"PowerMode.Charged":4,"RobotMode.None":0,"RobotMode.Follow":1,"RobotMode.MoveToTarget":2,"RobotMode.Roam":3,"RobotMode.Unload":4,"RobotMode.PathToTarget":5,"RobotMode.StorageFull":6,"SortingClass.Default":0,"SortingClass.Kits":1,"SortingClass.Tools":2,"SortingClass.Resources":3,"SortingClass.Food":4,"SortingClass.Clothing":5,"SortingClass.Appliances":6,"SortingClass.Atmospherics":7,"SortingClass.Storage":8,"SortingClass.Ores":9,"SortingClass.Ices":10,"SlotClass.None":0,"SlotClass.Helmet":1,"SlotClass.Suit":2,"SlotClass.Back":3,"SlotClass.GasFilter":4,"SlotClass.GasCanister":5,"SlotClass.Motherboard":6,"SlotClass.Circuitboard":7,"SlotClass.DataDisk":8,"SlotClass.Organ":9,"SlotClass.Ore":10,"SlotClass.Plant":11,"SlotClass.Uniform":12,"SlotClass.Entity":13,"SlotClass.Battery":14,"SlotClass.Egg":15,"SlotClass.Belt":16,"SlotClass.Tool":17,"SlotClass.Appliance":18,"SlotClass.Ingot":19,"SlotClass.Torpedo":20,"SlotClass.Cartridge":21,"SlotClass.AccessCard":22,"SlotClass.Magazine":23,"SlotClass.Circuit":24,"SlotClass.Bottle":25,"SlotClass.ProgrammableChip":26,"SlotClass.Glasses":27,"SlotClass.CreditCard":28,"SlotClass.DirtCanister":29,"SlotClass.SensorProcessingUnit":30,"SlotClass.LiquidCanister":31,"SlotClass.LiquidBottle":32,"SlotClass.Wreckage":33,"SlotClass.SoundCartridge":34,"SlotClass.DrillHead":35,"SlotClass.ScanningHead":36,"SlotClass.Flare":37,"SlotClass.Blocked":38,"SlotClass.SuitMod":39,"GasType.Undefined":0,"GasType.Oxygen":1,"GasType.Nitrogen":2,"GasType.CarbonDioxide":4,"GasType.Volatiles":8,"GasType.Pollutant":16,"GasType.Water":32,"GasType.NitrousOxide":64,"GasType.LiquidNitrogen":128,"GasType.LiquidOxygen":256,"GasType.LiquidVolatiles":512,"GasType.Steam":1024,"GasType.LiquidCarbonDioxide":2048,"GasType.LiquidPollutant":4096,"GasType.LiquidNitrousOxide":8192,"GasType.Hydrogen":16384,"GasType.LiquidHydrogen":32768,"GasType.PollutedWater":65536,"RocketMode.Invalid":0,"RocketMode.None":1,"RocketMode.Mine":2,"RocketMode.Survey":3,"RocketMode.Discover":4,"RocketMode.Chart":5,"ReEntryProfile.None":0,"ReEntryProfile.Optimal":1,"ReEntryProfile.Medium":2,"ReEntryProfile.High":3,"ReEntryProfile.Max":4,"SorterInstruction.None":0,"SorterInstruction.FilterPrefabHashEquals":1,"SorterInstruction.FilterPrefabHashNotEquals":2,"SorterInstruction.FilterSortingClassCompare":3,"SorterInstruction.FilterSlotTypeCompare":4,"SorterInstruction.FilterQuantityCompare":5,"SorterInstruction.LimitNextExecutionByCount":6}} \ No newline at end of file diff --git a/www/data/Stationpedia.json b/www/data/Stationpedia.json deleted file mode 100644 index c40f7ad..0000000 --- a/www/data/Stationpedia.json +++ /dev/null @@ -1,70094 +0,0 @@ -{ - "pages": [ - { - "Key": "ThingDynamicGPR", - "Title": "", - "Description": "", - "PrefabName": "DynamicGPR", - "PrefabHash": -2085885850, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "None", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemAuthoringToolRocketNetwork", - "Title": "", - "Description": "", - "PrefabName": "ItemAuthoringToolRocketNetwork", - "PrefabHash": -1731627004, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingMonsterEgg", - "Title": "", - "Description": "", - "PrefabName": "MonsterEgg", - "PrefabHash": -1667675295, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingMotherboardMissionControl", - "Title": "", - "Description": "", - "PrefabName": "MotherboardMissionControl", - "PrefabHash": -127121474, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Motherboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureCableCorner3HBurnt", - "Title": "", - "Description": "", - "PrefabName": "StructureCableCorner3HBurnt", - "PrefabHash": 2393826, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureDrinkingFountain", - "Title": "", - "Description": "", - "PrefabName": "StructureDrinkingFountain", - "PrefabHash": 1968371847, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingRobot", - "Title": "AIMeE Bot", - "Description": "Designed by - presumably drunk - Norsec roboticists, AIMeE (or Automated Independent Mechanical Entity) can be a Stationeer's best friend, or tiresome nemesis, or both several times in the same day. \n \nIntended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard.\n\nAIMEe has 7 modes:\n\nRobotMode.None = 0 = Do nothing\nRobotMode.None = 1 = Follow nearest player\nRobotMode.None = 2 = Move to target in straight line\nRobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius\nRobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids\nRobotMode.None = 5 = Path(find) to target\nRobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter", - "PrefabName": "Robot", - "PrefabHash": 434786784, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "1" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "2" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "3" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "4" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "5" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "6" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "7" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "8" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "9" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureExternal", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TemperatureExternal", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityMagnitude", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TargetX", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "TargetY", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "TargetZ", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "MineablesInVicinity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "MineablesInQueue", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ForwardX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ForwardY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ForwardZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Orientation", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityZ", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - } - ], - "ModeInsert": [ - { - "LogicName": "None", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Follow", - "LogicAccessTypes": "1" - }, - { - "LogicName": "MoveToTarget", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Roam", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Unload", - "LogicAccessTypes": "4" - }, - { - "LogicName": "PathToTarget", - "LogicAccessTypes": "5" - }, - { - "LogicName": "StorageFull", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "PressureExternal": "Read", - "On": "ReadWrite", - "TemperatureExternal": "Read", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "VelocityMagnitude": "Read", - "VelocityRelativeX": "Read", - "VelocityRelativeY": "Read", - "VelocityRelativeZ": "Read", - "TargetX": "Write", - "TargetY": "Write", - "TargetZ": "Write", - "MineablesInVicinity": "Read", - "MineablesInQueue": "Read", - "ReferenceId": "Read", - "ForwardX": "Read", - "ForwardY": "Read", - "ForwardZ": "Read", - "Orientation": "Read", - "VelocityX": "Read", - "VelocityY": "Read", - "VelocityZ": "Read" - } - }, - "WirelessLogic": true, - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureAccessBridge", - "Title": "Access Bridge", - "Description": "Extendable bridge that spans three grids", - "PrefabName": "StructureAccessBridge", - "PrefabHash": 1298920475, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingAccessCardBlack", - "Title": "Access Card (Black)", - "Description": "", - "PrefabName": "AccessCardBlack", - "PrefabHash": -1330388999, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardBlue", - "Title": "Access Card (Blue)", - "Description": "", - "PrefabName": "AccessCardBlue", - "PrefabHash": -1411327657, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardBrown", - "Title": "Access Card (Brown)", - "Description": "", - "PrefabName": "AccessCardBrown", - "PrefabHash": 1412428165, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardGray", - "Title": "Access Card (Gray)", - "Description": "", - "PrefabName": "AccessCardGray", - "PrefabHash": -1339479035, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardGreen", - "Title": "Access Card (Green)", - "Description": "", - "PrefabName": "AccessCardGreen", - "PrefabHash": -374567952, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardKhaki", - "Title": "Access Card (Khaki)", - "Description": "", - "PrefabName": "AccessCardKhaki", - "PrefabHash": 337035771, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardOrange", - "Title": "Access Card (Orange)", - "Description": "", - "PrefabName": "AccessCardOrange", - "PrefabHash": -332896929, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardPink", - "Title": "Access Card (Pink)", - "Description": "", - "PrefabName": "AccessCardPink", - "PrefabHash": 431317557, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardPurple", - "Title": "Access Card (Purple)", - "Description": "", - "PrefabName": "AccessCardPurple", - "PrefabHash": 459843265, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardRed", - "Title": "Access Card (Red)", - "Description": "", - "PrefabName": "AccessCardRed", - "PrefabHash": -1713748313, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardWhite", - "Title": "Access Card (White)", - "Description": "", - "PrefabName": "AccessCardWhite", - "PrefabHash": 2079959157, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingAccessCardYellow", - "Title": "Access Card (Yellow)", - "Description": "", - "PrefabName": "AccessCardYellow", - "PrefabHash": 568932536, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "AccessCard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureLiquidDrain", - "Title": "Active Liquid Outlet", - "Description": "When connected to power and activated, it pumps liquid from a liquid network into the world.", - "PrefabName": "StructureLiquidDrain", - "PrefabHash": 1687692899, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "None" - ], - [ - "Data", - "Input" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureActiveVent", - "Title": "Active Vent", - "Description": "The active vent is a powered device for maintaining gas pressure by pumping gas into (or out of) a pipe network. The vent has two modes: 'Outward' sets it to pump gas into a space until pressure is reached; 'Inward' sets it to pump gas out until pressure is reached. The pressure parameter can be set on a connected Console. Default pressure is 101kPa for Outward; 0kPa for Inward ...", - "PrefabName": "StructureActiveVent", - "PrefabHash": -1129453144, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "DataDisk", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureExternal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PressureInternal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Outward", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Inward", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "PressureExternal": "ReadWrite", - "PressureInternal": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ], - [ - "Pipe", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemAdhesiveInsulation", - "Title": "Adhesive Insulation", - "Description": "", - "PrefabName": "ItemAdhesiveInsulation", - "PrefabHash": 1871048978, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools", - "MaxQuantity": 20.0 - } - }, - { - "Key": "ThingCircuitboardAdvAirlockControl", - "Title": "Advanced Airlock", - "Description": "", - "PrefabName": "CircuitboardAdvAirlockControl", - "PrefabHash": 1633663176, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureAdvancedComposter", - "Title": "Advanced Composter", - "Description": "The advanced composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires Water and power to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat. \n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times\n", - "PrefabName": "StructureAdvancedComposter", - "PrefabHash": 446212963, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "5" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "Power", - "None" - ], - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureAdvancedFurnace", - "Title": "Advanced Furnace", - "Description": "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.", - "PrefabName": "StructureAdvancedFurnace", - "PrefabHash": 545937711, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SettingInput", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "SettingOutput", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Pipe Liquid Output2", - "LogicAccessTypes": "6" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Reagents": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RecipeHash": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "SettingInput": "ReadWrite", - "SettingOutput": "ReadWrite", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "PipeLiquid", - "Output2" - ] - ], - "HasReagents": true, - "HasAtmosphere": true, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureAdvancedPackagingMachine", - "Title": "Advanced Packaging Machine", - "Description": "The Xigo Advanced Cannifier Multi-Plus Pro is an automateable packaging machine that uses Empty Cans and cooked food to create canned sustenance that does not decay. Note that the ACMPP only accepts cooked food and tin cans.", - "PrefabName": "StructureAdvancedPackagingMachine", - "PrefabHash": -463037670, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "CompletionRatio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RecipeHash": "ReadWrite", - "CompletionRatio": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemAdvancedTablet", - "Title": "Advanced Tablet", - "Description": "The advanced Xigo Padi 2 tablet is an improved version of the basic Handheld Tablet, boasting two cartridge slots. The Padi 2 accepts Atmos Analyzer, Tracker, Medical Analyzer, Ore Scanner, eReader, and various other cartridges.\n\t \n\t With a Integrated Circuit (IC10) in the Programmable Chip, you can access variable slots on the carrying human using the device numbers (d0, d1, etc...), so long as the item can be access via logic, such as the Hardsuit.Connects to Logic Transmitter", - "PrefabName": "ItemAdvancedTablet", - "PrefabHash": 1722785341, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Cartridge", - "SlotType": "Cartridge", - "SlotIndex": "1" - }, - { - "SlotName": "Cartridge1", - "SlotType": "Cartridge", - "SlotIndex": "2" - }, - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "3" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "SoundAlert", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3" - } - ], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "Volume": "ReadWrite", - "SoundAlert": "ReadWrite", - "ReferenceId": "Read" - } - }, - "WirelessLogic": true, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureAirConditioner", - "Title": "Air Conditioner", - "Description": "Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature.\n\t \nThe unit has three pipe connections: input, output, and waste. Gas fed into the input will be heated or cooled to reach the target temperature, while the opposite will happen to gas on the waste network.\n\nMultiple Efficiency Multipliers can effect the amount of energy the Air Conditioner uses, and these can be view on the unit's green Information Panel. As the temperature difference between input and waste increases, the Temperature Differential Efficiency Multiplier will decrease. If input or waste temperature is extremely hot or cold, the Operational Temperature Efficiency will decrease. If the input or waste pipe has approach low pressures, the Pressure Efficiency will decrease.\n\nPipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. \n \nFor more information on using the air conditioner, consult the temperature control Guides page.", - "PrefabName": "StructureAirConditioner", - "PrefabHash": -2087593337, - "SlotInserts": [ - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "OperationalTemperatureEfficiency", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureDifferentialEfficiency", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureEfficiency", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Idle", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Active", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Waste", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "PressureInput": "Read", - "TemperatureInput": "Read", - "RatioOxygenInput": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioNitrogenInput": "Read", - "RatioPollutantInput": "Read", - "RatioVolatilesInput": "Read", - "RatioWaterInput": "Read", - "RatioNitrousOxideInput": "Read", - "TotalMolesInput": "Read", - "PressureOutput": "Read", - "TemperatureOutput": "Read", - "RatioOxygenOutput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioNitrogenOutput": "Read", - "RatioPollutantOutput": "Read", - "RatioVolatilesOutput": "Read", - "RatioWaterOutput": "Read", - "RatioNitrousOxideOutput": "Read", - "TotalMolesOutput": "Read", - "PressureOutput2": "Read", - "TemperatureOutput2": "Read", - "RatioOxygenOutput2": "Read", - "RatioCarbonDioxideOutput2": "Read", - "RatioNitrogenOutput2": "Read", - "RatioPollutantOutput2": "Read", - "RatioVolatilesOutput2": "Read", - "RatioWaterOutput2": "Read", - "RatioNitrousOxideOutput2": "Read", - "TotalMolesOutput2": "Read", - "CombustionInput": "Read", - "CombustionOutput": "Read", - "CombustionOutput2": "Read", - "OperationalTemperatureEfficiency": "Read", - "TemperatureDifferentialEfficiency": "Read", - "PressureEfficiency": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "Pipe", - "Waste" - ], - [ - "Power", - "None" - ] - ], - "DevicesLength": 2, - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingCircuitboardAirControl", - "Title": "Air Control", - "Description": "When added to a Console, air control circuit boards allow you to program an Active Vent. As with small dogs and 83% of people, air control circuits have only three modes: Pressure, Draft and Offline. Pressure mode maintains a 100kPa atmosphere, switching the active vent between inward and outward flow until target pressure is achieved. Draft mode allows you to pair active vents to circulate air. Offline mode deactivates the vent. ", - "PrefabName": "CircuitboardAirControl", - "PrefabHash": 1618019559, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingCircuitboardAirlockControl", - "Title": "Airlock", - "Description": "Rumored to have been first sketched on a Norsec toilet wall by a disgruntled engineer, the Exgress airlock control circuit board’s versatility and ease of fabrication has made it the Stationeers control system of choice for Airlock cycling protocols. \n\nTo enter setup mode, insert the board into a Console along with a data disk. In this mode, you can see all data-accessible objects currently connected to the Console. Doors, lights, gas sensors and slave consoles can be selected (highlighted green), and will be controlled once the data disk is removed.", - "PrefabName": "CircuitboardAirlockControl", - "PrefabHash": 912176135, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureAirlock", - "Title": "Airlock", - "Description": "The standard airlock is a powered portal that forms the main component of an airlock chamber. As long as the airlock is not locked, it can be manually opened using a crowbar.", - "PrefabName": "StructureAirlock", - "PrefabHash": -2105052344, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingImGuiCircuitboardAirlockControl", - "Title": "Airlock (Experimental)", - "Description": "", - "PrefabName": "ImGuiCircuitboardAirlockControl", - "PrefabHash": -73796547, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemAlienMushroom", - "Title": "Alien Mushroom", - "Description": "", - "PrefabName": "ItemAlienMushroom", - "PrefabHash": 176446172, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemAmmoBox", - "Title": "Ammo Box", - "Description": "", - "PrefabName": "ItemAmmoBox", - "PrefabHash": -9559091, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemAngleGrinder", - "Title": "Angle Grinder", - "Description": "Angles-be-gone with the trusty angle grinder.", - "PrefabName": "ItemAngleGrinder", - "PrefabHash": 201215010, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingApplianceDeskLampLeft", - "Title": "Appliance Desk Lamp Left", - "Description": "", - "PrefabName": "ApplianceDeskLampLeft", - "PrefabHash": -1683849799, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingApplianceDeskLampRight", - "Title": "Appliance Desk Lamp Right", - "Description": "", - "PrefabName": "ApplianceDeskLampRight", - "PrefabHash": 1174360780, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingApplianceSeedTray", - "Title": "Appliance Seed Tray", - "Description": "The seed tray can hold up to twelve plants or seeds and can be used to facilitate fast experimentation and testing of plant genetics.", - "PrefabName": "ApplianceSeedTray", - "PrefabHash": 142831994, - "SlotInserts": [ - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "0" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "1" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "2" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "3" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "4" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "5" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "6" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "7" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "8" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "9" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "10" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "11" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingStructureArcFurnace", - "Title": "Arc Furnace", - "Description": "The simplest smelting system available to the average Stationeer, Recurso's arc furnace was forged itself in the depths of the Solar System to help explorational geologists determine the purity of potential asteroidal mining targets.\nCo-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources.\nThe smelting process also releases a range of by product gases, principally Nitrogen, Carbon Dioxide, Volatiles and Oxygen in differing ratios. These can be recaptured from the atmosphere by filtering, but also make the arc furnace a risk in closed environments. \nUnlike the more advanced Furnace, the arc furnace cannot create alloys.", - "PrefabName": "StructureArcFurnace", - "PrefabHash": -247344692, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Ore", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "Ingot", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "RecipeHash": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemArcWelder", - "Title": "Arc Welder", - "Description": "", - "PrefabName": "ItemArcWelder", - "PrefabHash": 1385062886, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureAreaPowerControlReversed", - "Title": "Area Power Control", - "Description": "An Area Power Control (APC) has three main functions. \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. \nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", - "PrefabName": "StructureAreaPowerControlReversed", - "PrefabHash": -1032513487, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Data Disk", - "SlotType": "DataDisk", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerPotential", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerActual", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [ - { - "LogicName": "Idle", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Discharged", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Discharging", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Charging", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Charged", - "LogicAccessTypes": "4" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Power And Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "Input" - ], - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureAreaPowerControl", - "Title": "Area Power Control", - "Description": "An Area Power Control (APC) has three main functions: \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network.\nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", - "PrefabName": "StructureAreaPowerControl", - "PrefabHash": 1999523701, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Data Disk", - "SlotType": "DataDisk", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerPotential", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerActual", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [ - { - "LogicName": "Idle", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Discharged", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Discharging", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Charging", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Charged", - "LogicAccessTypes": "4" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Power And Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "Input" - ], - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemAstroloySheets", - "Title": "Astroloy Sheets", - "Description": "", - "PrefabName": "ItemAstroloySheets", - "PrefabHash": -1662476145, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingCartridgeAtmosAnalyser", - "Title": "Atmos Analyzer", - "Description": "The Lorenz atmos analyzer is a multi-functional mass-spectrometer designed by ExMin for use with the OreCore Handheld Tablet. It displays the pressure, concentration and molar quantity of gas in rooms, tanks, or pipe networks.", - "PrefabName": "CartridgeAtmosAnalyser", - "PrefabHash": -1550278665, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemAuthoringTool", - "Title": "Authoring Tool", - "Description": "", - "PrefabName": "ItemAuthoringTool", - "PrefabHash": 789015045, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureAutolathe", - "Title": "Autolathe", - "Description": "The foundation of most Stationeer fabrication systems, the ExMin autolathe is a multi-axis molecular compositional system. Its complexity demands considerable time to assemble, but it remains an indispensable creation tool. Upgrade the device using a Autolathe Printer Mod for additional recipes and faster processing speeds.\n\t ", - "PrefabName": "StructureAutolathe", - "PrefabHash": 336213101, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Ingot", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "CompletionRatio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RecipeHash": "ReadWrite", - "CompletionRatio": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingAutolathePrinterMod", - "Title": "Autolathe Printer Mod", - "Description": "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "PrefabName": "AutolathePrinterMod", - "PrefabHash": 221058307, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureAutomatedOven", - "Title": "Automated Oven", - "Description": "", - "PrefabName": "StructureAutomatedOven", - "PrefabHash": -1672404896, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "CompletionRatio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RecipeHash": "ReadWrite", - "CompletionRatio": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureAutoMinerSmall", - "Title": "Autominer (Small)", - "Description": "The Recurso SquareDig autominer is a structure that when built will mine a vertical 2x2 shaft until it hits bedrock. The autominer can be connected to a chute system, and is controllable by a logic network. Note that the autominer outputs more ore than a conventional Mining Drill over the same area.", - "PrefabName": "StructureAutoMinerSmall", - "PrefabHash": 7274344, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBatterySmall", - "Title": "Auxiliary Rocket Battery ", - "Description": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "PrefabName": "StructureBatterySmall", - "PrefabHash": -2123455080, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerPotential", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerActual", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Power Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "Read", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "Input" - ], - [ - "Power", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBackPressureRegulator", - "Title": "Back Pressure Regulator", - "Description": "Unlike the Pressure Regulator, which closes when the input exceeds a given pressure, the back pressure regulator opens when input pressure reaches a given value.", - "PrefabName": "StructureBackPressureRegulator", - "PrefabHash": -1149857558, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemPotatoBaked", - "Title": "Baked Potato", - "Description": "", - "PrefabName": "ItemPotatoBaked", - "PrefabHash": -2111886401, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Potato": 1.0 - } - } - }, - { - "Key": "ThingAppliancePackagingMachine", - "Title": "Basic Packaging Machine", - "Description": "The Xigo Cannifier requires Empty Can and cooked food to create long-lasting, easily stored sustenance. Note that the Cannifier must be bolted to a Powered Bench for power, and only accepts cooked food and tin cans.\n\nOPERATION\n\n1. Add the correct ingredients to the device via the hopper in the TOP.\n\n2. Close the device using the dropdown handle.\n\n3. Activate the device.\n\n4. Remove canned goods from the outlet in the FRONT.\n\nNote: the Cannifier will flash an error on its activation switch if you attempt to activate it before closing it.\n\n\n ", - "PrefabName": "AppliancePackagingMachine", - "PrefabHash": -749191906, - "SlotInserts": [ - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingItemBasketBall", - "Title": "Basket Ball", - "Description": "", - "PrefabName": "ItemBasketBall", - "PrefabHash": -1262580790, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureBasketHoop", - "Title": "Basket Hoop", - "Description": "", - "PrefabName": "StructureBasketHoop", - "PrefabHash": -1613497288, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicBatchReader", - "Title": "Batch Reader", - "Description": "", - "PrefabName": "StructureLogicBatchReader", - "PrefabHash": 264413729, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicBatchSlotReader", - "Title": "Batch Slot Reader", - "Description": "", - "PrefabName": "StructureLogicBatchSlotReader", - "PrefabHash": 436888930, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicBatchWriter", - "Title": "Batch Writer", - "Description": "", - "PrefabName": "StructureLogicBatchWriter", - "PrefabHash": 1415443359, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ForceWrite", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ForceWrite": "Write", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBatteryMedium", - "Title": "Battery (Medium)", - "Description": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "PrefabName": "StructureBatteryMedium", - "PrefabHash": -1125305264, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerPotential", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerActual", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Power Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "Read", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "Input" - ], - [ - "Power", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemBatteryCellLarge", - "Title": "Battery Cell (Large)", - "Description": "First mass-produced by Xigo in 2155 on the basis of a unattributed prototype, the classic silicon anode solid-state design extends its optimum temperature range.\n\nPOWER OUTPUT\nThe large power cell can discharge 288kW of power. \n", - "PrefabName": "ItemBatteryCellLarge", - "PrefabHash": -459827268, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Battery", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemBatteryCellNuclear", - "Title": "Battery Cell (Nuclear)", - "Description": "Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld.\n\nPOWER OUTPUT\nPushing the power-weight balance to its limits, the 'nuke' has a 2.3 megawatt charge (2304000W), reflecting its reliance on exotic superalloys.", - "PrefabName": "ItemBatteryCellNuclear", - "PrefabHash": 544617306, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Battery", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemBatteryCell", - "Title": "Battery Cell (Small)", - "Description": "Harnessing a design pioneered in the early 21st century, the small battery cell is the Stationeer's basic unit of portable electrical power. While it lacks the charge of a Battery Cell (Large) or Battery Cell (Nuclear), it has the humble advantage of being fabricated from basic resources.\n\nPOWER OUTPUT\nThe small cell stores up to 36000 watts of power.", - "PrefabName": "ItemBatteryCell", - "PrefabHash": 700133157, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Battery", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureBatteryCharger", - "Title": "Battery Cell Charger", - "Description": "The 5-slot Xigo battery charger fits the Battery Cell (Small), Battery Cell (Large) and Battery Cell (Nuclear), providing up to 500W to any connected cell. Note: the older design means this device has minor power draw (10W) even when not charging.", - "PrefabName": "StructureBatteryCharger", - "PrefabHash": 1945930022, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "1" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "2" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "3" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "4" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3, 4" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBatteryChargerSmall", - "Title": "Battery Charger Small", - "Description": "", - "PrefabName": "StructureBatteryChargerSmall", - "PrefabHash": -761772413, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemBatteryChargerSmall", - "Title": "Battery Charger Small", - "Description": "", - "PrefabName": "ItemBatteryChargerSmall", - "PrefabHash": 1008295833, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingBattery_Wireless_cell", - "Title": "Battery Wireless Cell", - "Description": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "PrefabName": "Battery_Wireless_cell", - "PrefabHash": -462415758, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Battery", - "SortingClass": "Default" - } - }, - { - "Key": "ThingBattery_Wireless_cell_Big", - "Title": "Battery Wireless Cell (Big)", - "Description": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "PrefabName": "Battery_Wireless_cell_Big", - "PrefabHash": -41519077, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Battery", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureBeacon", - "Title": "Beacon", - "Description": "", - "PrefabName": "StructureBeacon", - "PrefabHash": -188177083, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Color", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": true - } - }, - { - "Key": "ThingStructureAngledBench", - "Title": "Bench (Angled)", - "Description": "", - "PrefabName": "StructureAngledBench", - "PrefabHash": 1811979158, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBench1", - "Title": "Bench (Counter Style)", - "Description": "", - "PrefabName": "StructureBench1", - "PrefabHash": 406745009, - "SlotInserts": [ - { - "SlotName": "Appliance 1", - "SlotType": "Appliance", - "SlotIndex": "0" - }, - { - "SlotName": "Appliance 2", - "SlotType": "Appliance", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "On", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureFlatBench", - "Title": "Bench (Flat)", - "Description": "", - "PrefabName": "StructureFlatBench", - "PrefabHash": 839890807, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBench3", - "Title": "Bench (Frame Style)", - "Description": "", - "PrefabName": "StructureBench3", - "PrefabHash": -164622691, - "SlotInserts": [ - { - "SlotName": "Appliance 1", - "SlotType": "Appliance", - "SlotIndex": "0" - }, - { - "SlotName": "Appliance 2", - "SlotType": "Appliance", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "On", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBench2", - "Title": "Bench (High Tech Style)", - "Description": "", - "PrefabName": "StructureBench2", - "PrefabHash": -2127086069, - "SlotInserts": [ - { - "SlotName": "Appliance 1", - "SlotType": "Appliance", - "SlotIndex": "0" - }, - { - "SlotName": "Appliance 2", - "SlotType": "Appliance", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "On", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBench4", - "Title": "Bench (Workbench Style)", - "Description": "", - "PrefabName": "StructureBench4", - "PrefabHash": 1750375230, - "SlotInserts": [ - { - "SlotName": "Appliance 1", - "SlotType": "Appliance", - "SlotIndex": "0" - }, - { - "SlotName": "Appliance 2", - "SlotType": "Appliance", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "On", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemBiomass", - "Title": "Biomass", - "Description": "Diced organic material that is returned when food and organic matter is passed through the Recycler and Centrifuge. Can be burned in a Furnace into Charcoal for use in the Generator (Solid Fuel).", - "PrefabName": "ItemBiomass", - "PrefabHash": -831480639, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Ingredient": true, - "Reagents": { - "Biomass": 1.0 - } - } - }, - { - "Key": "ThingStructureBlastDoor", - "Title": "Blast Door", - "Description": "Airtight and almost undamageable, the original 'Millmar' series of blast door was designed by off-world mining giant Recurso to protect asteroid-mining facilities from nuclear-incident-level explosive decompression.\nShort of a pocket-sized singularity blinking into the local space-time frame, there is effectively no limit to the pressure these blast doors can contain - ideal for constructing airlocks in pressure-sensitive environments.", - "PrefabName": "StructureBlastDoor", - "PrefabHash": 337416191, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBlockBed", - "Title": "Block Bed", - "Description": "Description coming.", - "PrefabName": "StructureBlockBed", - "PrefabHash": 697908419, - "SlotInserts": [ - { - "SlotName": "Bed", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBlocker", - "Title": "Blocker", - "Description": "", - "PrefabName": "StructureBlocker", - "PrefabHash": 378084505, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemBreadLoaf", - "Title": "Bread Loaf", - "Description": "", - "PrefabName": "ItemBreadLoaf", - "PrefabHash": 893514943, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingStructureCableCorner3Burnt", - "Title": "Burnt Cable (3-Way Corner)", - "Description": "", - "PrefabName": "StructureCableCorner3Burnt", - "PrefabHash": 318437449, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableCorner4Burnt", - "Title": "Burnt Cable (4-Way Corner)", - "Description": "", - "PrefabName": "StructureCableCorner4Burnt", - "PrefabHash": 268421361, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableJunction4Burnt", - "Title": "Burnt Cable (4-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunction4Burnt", - "PrefabHash": -1756896811, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableJunction4HBurnt", - "Title": "Burnt Cable (4-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunction4HBurnt", - "PrefabHash": -115809132, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableJunction5Burnt", - "Title": "Burnt Cable (5-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunction5Burnt", - "PrefabHash": 1545286256, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableJunction6Burnt", - "Title": "Burnt Cable (6-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunction6Burnt", - "PrefabHash": -628145954, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableJunction6HBurnt", - "Title": "Burnt Cable (6-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunction6HBurnt", - "PrefabHash": 1854404029, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableCornerHBurnt", - "Title": "Burnt Cable (Corner)", - "Description": "", - "PrefabName": "StructureCableCornerHBurnt", - "PrefabHash": 1931412811, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableCornerBurnt", - "Title": "Burnt Cable (Corner)", - "Description": "", - "PrefabName": "StructureCableCornerBurnt", - "PrefabHash": -177220914, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableJunctionHBurnt", - "Title": "Burnt Cable (Junction)", - "Description": "", - "PrefabName": "StructureCableJunctionHBurnt", - "PrefabHash": -341365649, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableJunctionBurnt", - "Title": "Burnt Cable (Junction)", - "Description": "", - "PrefabName": "StructureCableJunctionBurnt", - "PrefabHash": -1620686196, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableStraightHBurnt", - "Title": "Burnt Cable (Straight)", - "Description": "", - "PrefabName": "StructureCableStraightHBurnt", - "PrefabHash": 2085762089, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableStraightBurnt", - "Title": "Burnt Cable (Straight)", - "Description": "", - "PrefabName": "StructureCableStraightBurnt", - "PrefabHash": -1196981113, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableCorner4HBurnt", - "Title": "Burnt Heavy Cable (4-Way Corner)", - "Description": "", - "PrefabName": "StructureCableCorner4HBurnt", - "PrefabHash": -981223316, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCableJunctionH5Burnt", - "Title": "Burnt Heavy Cable (5-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunctionH5Burnt", - "PrefabHash": 1701593300, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureLogicButton", - "Title": "Button", - "Description": "", - "PrefabName": "StructureLogicButton", - "PrefabHash": 491845673, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCableCorner3", - "Title": "Cable (3-Way Corner)", - "Description": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "PrefabName": "StructureCableCorner3", - "PrefabHash": 980469101, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureCableCorner4", - "Title": "Cable (4-Way Corner)", - "Description": "", - "PrefabName": "StructureCableCorner4", - "PrefabHash": -1542172466, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructureCableJunction4", - "Title": "Cable (4-Way Junction)", - "Description": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "PrefabName": "StructureCableJunction4", - "PrefabHash": 1112047202, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructureCableJunction5", - "Title": "Cable (5-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunction5", - "PrefabHash": 894390004, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - } - ] - }, - { - "Key": "ThingStructureCableJunction6", - "Title": "Cable (6-Way Junction)", - "Description": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer duty - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "PrefabName": "StructureCableJunction6", - "PrefabHash": -1404690610, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "5" - } - ] - }, - { - "Key": "ThingStructureCableCorner", - "Title": "Cable (Corner)", - "Description": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "PrefabName": "StructureCableCorner", - "PrefabHash": -889269388, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureCableJunction", - "Title": "Cable (Junction)", - "Description": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "PrefabName": "StructureCableJunction", - "PrefabHash": -175342021, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureCableStraight", - "Title": "Cable (Straight)", - "Description": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool'.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "PrefabName": "StructureCableStraight", - "PrefabHash": 605357050, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureCableAnalysizer", - "Title": "Cable Analyzer", - "Description": "", - "PrefabName": "StructureCableAnalysizer", - "PrefabHash": 1036015121, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PowerPotential", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerActual", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerRequired", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PowerPotential": "Read", - "PowerActual": "Read", - "PowerRequired": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemCableCoil", - "Title": "Cable Coil", - "Description": "Bodily metaphors are tired and anthropocentric, but it was Frida Stuppen, the first ODA Administrator, who said, 'Let the cabling be as the nerve and the vessel, transmitting power and data alike through systems we forge among the stars.' Later commentators suggested that she was simply putting a romantic gloss on a piece of dubious economy. Whatever the case, standard cabling is where any Stationeer's network begins. \nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "PrefabName": "ItemCableCoil", - "PrefabHash": -466050668, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Resources", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemCableCoilHeavy", - "Title": "Cable Coil (Heavy)", - "Description": "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW.", - "PrefabName": "ItemCableCoilHeavy", - "PrefabHash": 2060134443, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Resources", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingStructureCamera", - "Title": "Camera", - "Description": "Nothing says 'I care' like a security camera that's been linked a Motion Sensor and a Console fitted with a Camera Display.\nBe there, even when you're not.", - "PrefabName": "StructureCamera", - "PrefabHash": -342072665, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Mode": "ReadWrite", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingCircuitboardCameraDisplay", - "Title": "Camera Display", - "Description": "Surveillance is sometimes necessary when building bases in highly hostile environments. The camera display circuit board allows wary Stationeers to turn a Console into a security display when connected to a Camera.", - "PrefabName": "CircuitboardCameraDisplay", - "PrefabHash": -412104504, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemGasCanisterEmpty", - "Title": "Canister", - "Description": "", - "PrefabName": "ItemGasCanisterEmpty", - "PrefabHash": 42280099, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemGasCanisterCarbonDioxide", - "Title": "Canister (CO2)", - "Description": "", - "PrefabName": "ItemGasCanisterCarbonDioxide", - "PrefabHash": -767685874, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemGasCanisterFuel", - "Title": "Canister (Fuel)", - "Description": "", - "PrefabName": "ItemGasCanisterFuel", - "PrefabHash": -1014695176, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemGasCanisterNitrogen", - "Title": "Canister (Nitrogen)", - "Description": "", - "PrefabName": "ItemGasCanisterNitrogen", - "PrefabHash": 2145068424, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemGasCanisterOxygen", - "Title": "Canister (Oxygen)", - "Description": "", - "PrefabName": "ItemGasCanisterOxygen", - "PrefabHash": -1152261938, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemGasCanisterPollutants", - "Title": "Canister (Pollutants)", - "Description": "", - "PrefabName": "ItemGasCanisterPollutants", - "PrefabHash": -1552586384, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemGasCanisterVolatiles", - "Title": "Canister (Volatiles)", - "Description": "", - "PrefabName": "ItemGasCanisterVolatiles", - "PrefabHash": -472094806, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemCannedCondensedMilk", - "Title": "Canned Condensed Milk", - "Description": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Condensed Milk and an Empty Can, canned condensed milk is fairly high in nutrition, and does not decay.", - "PrefabName": "ItemCannedCondensedMilk", - "PrefabHash": -2104175091, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemCannedEdamame", - "Title": "Canned Edamame", - "Description": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Soybean and an Empty Can, canned edamame beans are fairly high in nutrition, and do not decay.", - "PrefabName": "ItemCannedEdamame", - "PrefabHash": -999714082, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemFrenchFries", - "Title": "Canned French Fries", - "Description": "Because space would suck without 'em.", - "PrefabName": "ItemFrenchFries", - "PrefabHash": -57608687, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemCannedMushroom", - "Title": "Canned Mushroom", - "Description": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Mushroom and a Empty Can, delicious mushroom soup is fairly high in nutrition, and does not decay.", - "PrefabName": "ItemCannedMushroom", - "PrefabHash": -1344601965, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemCannedPowderedEggs", - "Title": "Canned Powdered Eggs", - "Description": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Powdered Eggs and an Empty Can, canned powdered eggs are an exciting, dynamic food that's fairly high in nutrition, and does not decay.", - "PrefabName": "ItemCannedPowderedEggs", - "PrefabHash": 1161510063, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemCannedRicePudding", - "Title": "Canned Rice Pudding", - "Description": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Rice and an Empty Can, canned rice pudding is a sweet treat, fairly high in nutrition, and does not decay.", - "PrefabName": "ItemCannedRicePudding", - "PrefabHash": -1185552595, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingCardboardBox", - "Title": "Cardboard Box", - "Description": "", - "PrefabName": "CardboardBox", - "PrefabHash": -1976947556, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Storage" - } - }, - { - "Key": "ThingStructureCargoStorageMedium", - "Title": "Cargo Storage (Medium)", - "Description": "", - "PrefabName": "StructureCargoStorageMedium", - "PrefabHash": 1151864003, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "11" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "12" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "13" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "14" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "15" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "16" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "17" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "18" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "19" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "20" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "21" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "22" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "23" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "24" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "25" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "26" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "27" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "28" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "29" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "30" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "31" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "32" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "33" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "34" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "35" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "36" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "37" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "38" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "39" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "40" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "41" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "42" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "43" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "44" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "45" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "46" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "47" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "48" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "49" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "50" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "51" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "52" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "53" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "54" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "55" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "56" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "57" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "58" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "59" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "60" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "61" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "62" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "63" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "64" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "65" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "66" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "67" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "68" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "69" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "70" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "71" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "72" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "73" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "74" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "75" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "76" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "77" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "78" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "79" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "80" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "81" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "82" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "83" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "84" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "85" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "86" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "87" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "88" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "89" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "90" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "91" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "92" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "93" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "94" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "95" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "96" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "97" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "98" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "99" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "100" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "101" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {}, - "2": {}, - "3": {}, - "4": {}, - "5": {}, - "6": {}, - "7": {}, - "8": {}, - "9": {}, - "10": {}, - "11": {}, - "12": {}, - "13": {}, - "14": {}, - "15": {}, - "16": {}, - "17": {}, - "18": {}, - "19": {}, - "20": {}, - "21": {}, - "22": {}, - "23": {}, - "24": {}, - "25": {}, - "26": {}, - "27": {}, - "28": {}, - "29": {}, - "30": {}, - "31": {}, - "32": {}, - "33": {}, - "34": {}, - "35": {}, - "36": {}, - "37": {}, - "38": {}, - "39": {}, - "40": {}, - "41": {}, - "42": {}, - "43": {}, - "44": {}, - "45": {}, - "46": {}, - "47": {}, - "48": {}, - "49": {}, - "50": {}, - "51": {}, - "52": {}, - "53": {}, - "54": {}, - "55": {}, - "56": {}, - "57": {}, - "58": {}, - "59": {}, - "60": {}, - "61": {}, - "62": {}, - "63": {}, - "64": {}, - "65": {}, - "66": {}, - "67": {}, - "68": {}, - "69": {}, - "70": {}, - "71": {}, - "72": {}, - "73": {}, - "74": {}, - "75": {}, - "76": {}, - "77": {}, - "78": {}, - "79": {}, - "80": {}, - "81": {}, - "82": {}, - "83": {}, - "84": {}, - "85": {}, - "86": {}, - "87": {}, - "88": {}, - "89": {}, - "90": {}, - "91": {}, - "92": {}, - "93": {}, - "94": {}, - "95": {}, - "96": {}, - "97": {}, - "98": {}, - "99": {}, - "100": {}, - "101": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Ratio": "Read", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ], - [ - "Chute", - "Output" - ], - [ - "Chute", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCargoStorageSmall", - "Title": "Cargo Storage (Small)", - "Description": "", - "PrefabName": "StructureCargoStorageSmall", - "PrefabHash": -1493672123, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "11" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "12" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "13" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "14" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "15" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "16" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "17" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "18" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "19" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "20" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "21" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "22" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "23" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "24" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "25" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "26" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "27" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "28" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "29" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "30" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "31" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "32" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "33" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "34" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "35" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "36" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "37" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "38" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "39" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "40" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "41" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "42" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "43" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "44" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "45" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "46" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "47" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "48" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "49" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "50" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "51" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "11": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "12": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "13": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "14": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "15": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "16": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "17": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "18": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "19": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "20": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "21": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "22": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "23": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "24": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "25": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "26": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "27": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "28": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "29": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "30": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "31": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "32": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "33": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "34": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "35": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "36": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "37": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "38": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "39": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "40": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "41": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "42": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "43": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "44": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "45": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "46": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "47": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "48": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "49": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "50": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "51": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Ratio": "Read", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ], - [ - "Chute", - "Output" - ], - [ - "Chute", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingCartridgeAccessController", - "Title": "Cartridge (Access Controller)", - "Description": "", - "PrefabName": "CartridgeAccessController", - "PrefabHash": -1634532552, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingCartridgePlantAnalyser", - "Title": "Cartridge Plant Analyser", - "Description": "", - "PrefabName": "CartridgePlantAnalyser", - "PrefabHash": 1101328282, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemGasFilterCarbonDioxideInfinite", - "Title": "Catalytic Filter (Carbon Dioxide)", - "Description": "A filter that selectively targets Carbon Dioxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "PrefabName": "ItemGasFilterCarbonDioxideInfinite", - "PrefabHash": -185568964, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "CarbonDioxide" - } - }, - { - "Key": "ThingItemGasFilterNitrogenInfinite", - "Title": "Catalytic Filter (Nitrogen)", - "Description": "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "PrefabName": "ItemGasFilterNitrogenInfinite", - "PrefabHash": 152751131, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Nitrogen" - } - }, - { - "Key": "ThingItemGasFilterNitrousOxideInfinite", - "Title": "Catalytic Filter (Nitrous Oxide)", - "Description": "A filter that selectively targets Nitrous Oxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "PrefabName": "ItemGasFilterNitrousOxideInfinite", - "PrefabHash": -123934842, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "NitrousOxide" - } - }, - { - "Key": "ThingItemGasFilterOxygenInfinite", - "Title": "Catalytic Filter (Oxygen)", - "Description": "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "PrefabName": "ItemGasFilterOxygenInfinite", - "PrefabHash": -1055451111, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Oxygen" - } - }, - { - "Key": "ThingItemGasFilterPollutantsInfinite", - "Title": "Catalytic Filter (Pollutants)", - "Description": "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "PrefabName": "ItemGasFilterPollutantsInfinite", - "PrefabHash": -503738105, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Pollutant" - } - }, - { - "Key": "ThingItemGasFilterVolatilesInfinite", - "Title": "Catalytic Filter (Volatiles)", - "Description": "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "PrefabName": "ItemGasFilterVolatilesInfinite", - "PrefabHash": -1916176068, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Volatiles" - } - }, - { - "Key": "ThingItemGasFilterWaterInfinite", - "Title": "Catalytic Filter (Water)", - "Description": "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "PrefabName": "ItemGasFilterWaterInfinite", - "PrefabHash": -1678456554, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Steam" - } - }, - { - "Key": "ThingStructureCentrifuge", - "Title": "Centrifuge", - "Description": "If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. \n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. \n Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. \n If openned while powered on, the centrifuge will enter an errored state and reduce its rpm to 0 and then export any items.", - "PrefabName": "StructureCentrifuge", - "PrefabHash": 690945935, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemCerealBar", - "Title": "Cereal Bar", - "Description": "Sustains, without decay. If only all our relationships were so well balanced.", - "PrefabName": "ItemCerealBar", - "PrefabHash": 791746840, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingStructureChair", - "Title": "Chair", - "Description": "One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.", - "PrefabName": "StructureChair", - "PrefabHash": 1167659360, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChairBacklessDouble", - "Title": "Chair (Backless Double)", - "Description": "", - "PrefabName": "StructureChairBacklessDouble", - "PrefabHash": 1944858936, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChairBacklessSingle", - "Title": "Chair (Backless Single)", - "Description": "", - "PrefabName": "StructureChairBacklessSingle", - "PrefabHash": 1672275150, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChairBoothCornerLeft", - "Title": "Chair (Booth Corner Left)", - "Description": "", - "PrefabName": "StructureChairBoothCornerLeft", - "PrefabHash": -367720198, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChairBoothMiddle", - "Title": "Chair (Booth Middle)", - "Description": "", - "PrefabName": "StructureChairBoothMiddle", - "PrefabHash": 1640720378, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChairRectangleDouble", - "Title": "Chair (Rectangle Double)", - "Description": "", - "PrefabName": "StructureChairRectangleDouble", - "PrefabHash": -1152812099, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChairRectangleSingle", - "Title": "Chair (Rectangle Single)", - "Description": "", - "PrefabName": "StructureChairRectangleSingle", - "PrefabHash": -1425428917, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChairThickDouble", - "Title": "Chair (Thick Double)", - "Description": "", - "PrefabName": "StructureChairThickDouble", - "PrefabHash": -1245724402, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChairThickSingle", - "Title": "Chair (Thick Single)", - "Description": "", - "PrefabName": "StructureChairThickSingle", - "PrefabHash": -1510009608, - "SlotInserts": [ - { - "SlotName": "Seat", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemCharcoal", - "Title": "Charcoal", - "Description": "Charcoal is a lightweight, black carbon residue produced by heating Biomass in a Arc Furnace. It contains less energy potential than Ore (Coal), but can be used as a basic fuel source. Charcoal can also be substituted for coal in alloy recipes.", - "PrefabName": "ItemCharcoal", - "PrefabHash": 252561409, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 200.0, - "Ingredient": true, - "Reagents": { - "Carbon": 1.0 - } - } - }, - { - "Key": "ThingItemChemLightBlue", - "Title": "Chem Light (Blue)", - "Description": "A safe and slightly rave-some source of blue light. Snap to activate.", - "PrefabName": "ItemChemLightBlue", - "PrefabHash": -772542081, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemChemLightGreen", - "Title": "Chem Light (Green)", - "Description": "Enliven the dreariest, airless rock with this glowy green light. Snap to activate.", - "PrefabName": "ItemChemLightGreen", - "PrefabHash": -597479390, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemChemLightRed", - "Title": "Chem Light (Red)", - "Description": "A red glowstick. Snap to activate. Then reach for the lasers.", - "PrefabName": "ItemChemLightRed", - "PrefabHash": -525810132, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemChemLightWhite", - "Title": "Chem Light (White)", - "Description": "Snap the glowstick to activate a pale radiance that keeps the darkness at bay.", - "PrefabName": "ItemChemLightWhite", - "PrefabHash": 1312166823, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemChemLightYellow", - "Title": "Chem Light (Yellow)", - "Description": "Dispel the darkness with this yellow glowstick.", - "PrefabName": "ItemChemLightYellow", - "PrefabHash": 1224819963, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingApplianceChemistryStation", - "Title": "Chemistry Station", - "Description": "", - "PrefabName": "ApplianceChemistryStation", - "PrefabHash": 1365789392, - "SlotInserts": [ - { - "SlotName": "Output", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingNpcChick", - "Title": "Chick", - "Description": "", - "PrefabName": "NpcChick", - "PrefabHash": 155856647, - "SlotInserts": [ - { - "SlotName": "Brain", - "SlotType": "Organ", - "SlotIndex": "0" - }, - { - "SlotName": "Lungs", - "SlotType": "Organ", - "SlotIndex": "1" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingNpcChicken", - "Title": "Chicken", - "Description": "", - "PrefabName": "NpcChicken", - "PrefabHash": 399074198, - "SlotInserts": [ - { - "SlotName": "Brain", - "SlotType": "Organ", - "SlotIndex": "0" - }, - { - "SlotName": "Lungs", - "SlotType": "Organ", - "SlotIndex": "1" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureChuteCorner", - "Title": "Chute (Corner)", - "Description": "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute corners are fundamental components of chute networks, which allow the transport of items between machines with import/export slots, such as the Furnace and other automatable structures.", - "PrefabName": "StructureChuteCorner", - "PrefabHash": 1360330136, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureChuteJunction", - "Title": "Chute (Junction)", - "Description": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute junctions are fundamental components of chute networks, allowing merging or splitting of these networks. When combined with a programmed Sorter, items can be sent down different paths to various machines with import/export slots.", - "PrefabName": "StructureChuteJunction", - "PrefabHash": -611232514, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Input2", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureChuteStraight", - "Title": "Chute (Straight)", - "Description": "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChutes are fundamental components of chute networks, which allow the transport of items between any machine or device with an import/export slot.", - "PrefabName": "StructureChuteStraight", - "PrefabHash": 168307007, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureChuteWindow", - "Title": "Chute (Window)", - "Description": "Chute's with windows let you see what's passing through your import/export network. But be warned, they are not insulated as other chutes are. Ices will melt.", - "PrefabName": "StructureChuteWindow", - "PrefabHash": -607241919, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureChuteBin", - "Title": "Chute Bin", - "Description": "The Stationeer's goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nLike most Recurso-designed systems, chute bins are simple and robust powered items, allowing items to be manually passed into chute networks by pulling a lever. They can also be programmed with logic to operate automatically, although full automation requires the use items such as a SDB Hopper.", - "PrefabName": "StructureChuteBin", - "PrefabHash": -850484480, - "SlotInserts": [ - { - "SlotName": "Input", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteDigitalFlipFlopSplitterLeft", - "Title": "Chute Digital Flip Flop Splitter Left", - "Description": "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", - "PrefabName": "StructureChuteDigitalFlipFlopSplitterLeft", - "PrefabHash": -810874728, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SettingOutput", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Output2", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Setting": "ReadWrite", - "Quantity": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "SettingOutput": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Chute", - "Output2" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteDigitalFlipFlopSplitterRight", - "Title": "Chute Digital Flip Flop Splitter Right", - "Description": "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", - "PrefabName": "StructureChuteDigitalFlipFlopSplitterRight", - "PrefabHash": 163728359, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SettingOutput", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Output2", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Setting": "ReadWrite", - "Quantity": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "SettingOutput": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Chute", - "Output2" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteDigitalValveLeft", - "Title": "Chute Digital Valve Left", - "Description": "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", - "PrefabName": "StructureChuteDigitalValveLeft", - "PrefabHash": 648608238, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Quantity": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteDigitalValveRight", - "Title": "Chute Digital Valve Right", - "Description": "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", - "PrefabName": "StructureChuteDigitalValveRight", - "PrefabHash": -1337091041, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Quantity": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteFlipFlopSplitter", - "Title": "Chute Flip Flop Splitter", - "Description": "A chute that toggles between two outputs", - "PrefabName": "StructureChuteFlipFlopSplitter", - "PrefabHash": -1446854725, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Output2", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureChuteInlet", - "Title": "Chute Inlet", - "Description": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute inlet is an aperture by which items can be introduced to import/export networks. Note that its origins in zero-gravity mining means chute inlets are unpowered and permanently open, rather than interactable, allowing objects to be thrown in. They can be connected to logic systems to monitor throughput.", - "PrefabName": "StructureChuteInlet", - "PrefabHash": -1469588766, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Lock": "ReadWrite", - "ClearMemory": "Write", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteOutlet", - "Title": "Chute Outlet", - "Description": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute outlet is an aperture for exiting items from import/export networks. Note that the outlet's origins in zero-gravity mining means they are permanently open, rather than interactable, but can be connected to logic systems to monitor throughput.", - "PrefabName": "StructureChuteOutlet", - "PrefabHash": -1022714809, - "SlotInserts": [ - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Lock": "ReadWrite", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteOverflow", - "Title": "Chute Overflow", - "Description": "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.", - "PrefabName": "StructureChuteOverflow", - "PrefabHash": 225377225, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Output2", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureChuteValve", - "Title": "Chute Valve", - "Description": "The Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute.", - "PrefabName": "StructureChuteValve", - "PrefabHash": 434875271, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingItemCoffeeMug", - "Title": "Coffee Mug", - "Description": "", - "PrefabName": "ItemCoffeeMug", - "PrefabHash": 1800622698, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingReagentColorBlue", - "Title": "Color Dye (Blue)", - "Description": "", - "PrefabName": "ReagentColorBlue", - "PrefabHash": 980054869, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "ColorBlue": 10.0 - } - } - }, - { - "Key": "ThingReagentColorGreen", - "Title": "Color Dye (Green)", - "Description": "", - "PrefabName": "ReagentColorGreen", - "PrefabHash": 120807542, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "ColorGreen": 10.0 - } - } - }, - { - "Key": "ThingReagentColorOrange", - "Title": "Color Dye (Orange)", - "Description": "", - "PrefabName": "ReagentColorOrange", - "PrefabHash": -400696159, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "ColorOrange": 10.0 - } - } - }, - { - "Key": "ThingReagentColorRed", - "Title": "Color Dye (Red)", - "Description": "", - "PrefabName": "ReagentColorRed", - "PrefabHash": 1998377961, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "ColorRed": 10.0 - } - } - }, - { - "Key": "ThingReagentColorYellow", - "Title": "Color Dye (Yellow)", - "Description": "", - "PrefabName": "ReagentColorYellow", - "PrefabHash": 635208006, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "ColorYellow": 10.0 - } - } - }, - { - "Key": "ThingStructureCombustionCentrifuge", - "Title": "Combustion Centrifuge", - "Description": "The Combustion Centrifuge is a gas powered version of the Centrifuge. If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore.\n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. A combustible fuel mix should be supplied to the gas input, and waste gasses should be vented from the output. \n The machine's RPMs must be controlled via the throttle and combustion limiter levers. If the Combustion Centrifuge gains, or loses, RPMs too fast it will experience stress, and eventually grind to a halt. Higher RPMs directly result in faster processing speeds. \n The throttle lever controls the amount of fuel being pulled into the machine, increasing the temperature inside the engine, and leading to an increase in RPM. The limiter lever influences the speed of the combustion, and how much uncombusted gas is in the exhaust. \n Ejecting ore from the Combustion Centrifuge while it is at high RPMs will result in additional stress build up. If turned off while not stressed, the machine will automatically start to brake, and reduce RPMs in a controlled manner.\n\t ", - "PrefabName": "StructureCombustionCentrifuge", - "PrefabHash": 1238905683, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "2" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionLimiter", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Throttle", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Rpm", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Stress", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "5" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {}, - "2": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Lock": "ReadWrite", - "Reagents": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "PressureInput": "Read", - "TemperatureInput": "Read", - "RatioOxygenInput": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioNitrogenInput": "Read", - "RatioPollutantInput": "Read", - "RatioVolatilesInput": "Read", - "RatioWaterInput": "Read", - "RatioNitrousOxideInput": "Read", - "TotalMolesInput": "Read", - "PressureOutput": "Read", - "TemperatureOutput": "Read", - "RatioOxygenOutput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioNitrogenOutput": "Read", - "RatioPollutantOutput": "Read", - "RatioVolatilesOutput": "Read", - "RatioWaterOutput": "Read", - "RatioNitrousOxideOutput": "Read", - "TotalMolesOutput": "Read", - "CombustionInput": "Read", - "CombustionOutput": "Read", - "CombustionLimiter": "ReadWrite", - "Throttle": "ReadWrite", - "Rpm": "Read", - "Stress": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ] - ], - "DevicesLength": 2, - "HasReagents": true, - "HasAtmosphere": true, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingMotherboardComms", - "Title": "Communications Motherboard", - "Description": "When placed in a Computer and connected to a Landingpad Data And Power, a Medium Satellite Dish, and a Vending Machine allows Stationeers to trade with suppliers. Adjust the horizontal and vertical attributes of the Medium Satellite Dish either directly or through logic. You need a communications signal of 95% or above to establish reliable communications with a trader. A minimum of a 3x3 clear pad area with a Landingpad Center at the center is required for a trader to land.", - "PrefabName": "MotherboardComms", - "PrefabHash": -337075633, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Motherboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureCompositeCladdingAngledCornerInnerLongL", - "Title": "Composite Cladding (Angled Corner Inner Long L)", - "Description": "", - "PrefabName": "StructureCompositeCladdingAngledCornerInnerLongL", - "PrefabHash": 947705066, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingAngledCornerInnerLongR", - "Title": "Composite Cladding (Angled Corner Inner Long R)", - "Description": "", - "PrefabName": "StructureCompositeCladdingAngledCornerInnerLongR", - "PrefabHash": -1032590967, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingAngledCornerInnerLong", - "Title": "Composite Cladding (Angled Corner Inner Long)", - "Description": "", - "PrefabName": "StructureCompositeCladdingAngledCornerInnerLong", - "PrefabHash": -1417912632, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingAngledCornerInner", - "Title": "Composite Cladding (Angled Corner Inner)", - "Description": "", - "PrefabName": "StructureCompositeCladdingAngledCornerInner", - "PrefabHash": -1841871763, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingAngledCorner", - "Title": "Composite Cladding (Angled Corner)", - "Description": "", - "PrefabName": "StructureCompositeCladdingAngledCorner", - "PrefabHash": -69685069, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingAngled", - "Title": "Composite Cladding (Angled)", - "Description": "", - "PrefabName": "StructureCompositeCladdingAngled", - "PrefabHash": -1513030150, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingCylindricalPanel", - "Title": "Composite Cladding (Cylindrical Panel)", - "Description": "", - "PrefabName": "StructureCompositeCladdingCylindricalPanel", - "PrefabHash": 1077151132, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingCylindrical", - "Title": "Composite Cladding (Cylindrical)", - "Description": "", - "PrefabName": "StructureCompositeCladdingCylindrical", - "PrefabHash": 212919006, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingAngledCornerLong", - "Title": "Composite Cladding (Long Angled Corner)", - "Description": "", - "PrefabName": "StructureCompositeCladdingAngledCornerLong", - "PrefabHash": 850558385, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingAngledCornerLongR", - "Title": "Composite Cladding (Long Angled Mirrored Corner)", - "Description": "", - "PrefabName": "StructureCompositeCladdingAngledCornerLongR", - "PrefabHash": -348918222, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingAngledLong", - "Title": "Composite Cladding (Long Angled)", - "Description": "", - "PrefabName": "StructureCompositeCladdingAngledLong", - "PrefabHash": -387546514, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingPanel", - "Title": "Composite Cladding (Panel)", - "Description": "", - "PrefabName": "StructureCompositeCladdingPanel", - "PrefabHash": 1997436771, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingRoundedCornerInner", - "Title": "Composite Cladding (Rounded Corner Inner)", - "Description": "", - "PrefabName": "StructureCompositeCladdingRoundedCornerInner", - "PrefabHash": 110184667, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingRoundedCorner", - "Title": "Composite Cladding (Rounded Corner)", - "Description": "", - "PrefabName": "StructureCompositeCladdingRoundedCorner", - "PrefabHash": 1951525046, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingRounded", - "Title": "Composite Cladding (Rounded)", - "Description": "", - "PrefabName": "StructureCompositeCladdingRounded", - "PrefabHash": -259357734, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingSphericalCap", - "Title": "Composite Cladding (Spherical Cap)", - "Description": "", - "PrefabName": "StructureCompositeCladdingSphericalCap", - "PrefabHash": 534213209, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingSphericalCorner", - "Title": "Composite Cladding (Spherical Corner)", - "Description": "", - "PrefabName": "StructureCompositeCladdingSphericalCorner", - "PrefabHash": 1751355139, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeCladdingSpherical", - "Title": "Composite Cladding (Spherical)", - "Description": "", - "PrefabName": "StructureCompositeCladdingSpherical", - "PrefabHash": 139107321, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeDoor", - "Title": "Composite Door", - "Description": "Recurso's composite doors are rated to 300kPa, which is more than sufficient for most purposes they were designed for. However, steep pressure differentials are not your friend.", - "PrefabName": "StructureCompositeDoor", - "PrefabHash": -793837322, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCompositeFloorGrating", - "Title": "Composite Floor Grating", - "Description": "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.", - "PrefabName": "StructureCompositeFloorGrating", - "PrefabHash": 324868581, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeFloorGrating2", - "Title": "Composite Floor Grating (Type 2)", - "Description": "", - "PrefabName": "StructureCompositeFloorGrating2", - "PrefabHash": -895027741, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeFloorGrating3", - "Title": "Composite Floor Grating (Type 3)", - "Description": "", - "PrefabName": "StructureCompositeFloorGrating3", - "PrefabHash": -1113471627, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeFloorGrating4", - "Title": "Composite Floor Grating (Type 4)", - "Description": "", - "PrefabName": "StructureCompositeFloorGrating4", - "PrefabHash": 600133846, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeFloorGratingOpen", - "Title": "Composite Floor Grating Open", - "Description": "", - "PrefabName": "StructureCompositeFloorGratingOpen", - "PrefabHash": 2109695912, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeFloorGratingOpenRotated", - "Title": "Composite Floor Grating Open Rotated", - "Description": "", - "PrefabName": "StructureCompositeFloorGratingOpenRotated", - "PrefabHash": 882307910, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingCompositeRollCover", - "Title": "Composite Roll Cover", - "Description": "0.Operate\n1.Logic", - "PrefabName": "CompositeRollCover", - "PrefabHash": 1228794916, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCompositeWall", - "Title": "Composite Wall (Type 1)", - "Description": "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.", - "PrefabName": "StructureCompositeWall", - "PrefabHash": 1237302061, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeWall02", - "Title": "Composite Wall (Type 2)", - "Description": "", - "PrefabName": "StructureCompositeWall02", - "PrefabHash": 718343384, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeWall03", - "Title": "Composite Wall (Type 3)", - "Description": "", - "PrefabName": "StructureCompositeWall03", - "PrefabHash": 1574321230, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeWall04", - "Title": "Composite Wall (Type 4)", - "Description": "", - "PrefabName": "StructureCompositeWall04", - "PrefabHash": -1011701267, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeWindow", - "Title": "Composite Window", - "Description": "Air-tight and resistant to extreme temperatures, composite walls come in several charming, near identical varieties - reflecting their designer's focus on form over function.", - "PrefabName": "StructureCompositeWindow", - "PrefabHash": -2060571986, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureComputer", - "Title": "Computer", - "Description": "In some ways a relic, the 'Chonk R1' was designed by severely conflicted Norsec technicians, who needed a unit that could operate with a wide range of motherboards, while also enduring the worst a new Cadet could throw at it.\nThe result is a machine described by some as 'the only PC likely to survive our collision with a black hole', while other, less appreciative users regard it as sharing most of its technological DNA with a cheese grater.\nCompatible motherboards:\n- Logic Motherboard\n- Manufacturing Motherboard\n- Sorter Motherboard\n- Communications Motherboard\n- IC Editor Motherboard", - "PrefabName": "StructureComputer", - "PrefabHash": -626563514, - "SlotInserts": [ - { - "SlotName": "Data Disk", - "SlotType": "DataDisk", - "SlotIndex": "0" - }, - { - "SlotName": "Data Disk", - "SlotType": "DataDisk", - "SlotIndex": "1" - }, - { - "SlotName": "Motherboard", - "SlotType": "Motherboard", - "SlotIndex": "2" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {}, - "2": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCondensationChamber", - "Title": "Condensation Chamber", - "Description": "A device for safely condensing gasses into liquids. Liquids and Gasses will both exist safely inside the device. The Chamber will pressurise using its in-built pressure regulator to the target set by the setting wheel.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Condensation Chamber.\n Paired with Evaporation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", - "PrefabName": "StructureCondensationChamber", - "PrefabHash": 1420719315, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input2" - ], - [ - "Pipe", - "Input" - ], - [ - "PipeLiquid", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCondensationValve", - "Title": "Condensation Valve", - "Description": "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.", - "PrefabName": "StructureCondensationValve", - "PrefabHash": -965741795, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Output" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemCookedCondensedMilk", - "Title": "Condensed Milk", - "Description": "A high-nutrient cooked food, which can be canned.", - "PrefabName": "ItemCookedCondensedMilk", - "PrefabHash": 1715917521, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0, - "Ingredient": true, - "Reagents": { - "Milk": 100.0 - } - } - }, - { - "Key": "ThingCartridgeConfiguration", - "Title": "Configuration", - "Description": "", - "PrefabName": "CartridgeConfiguration", - "PrefabHash": -932136011, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureConsole", - "Title": "Console", - "Description": "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", - "PrefabName": "StructureConsole", - "PrefabHash": 235638270, - "SlotInserts": [ - { - "SlotName": "Circuit Board", - "SlotType": "Circuitboard", - "SlotIndex": "0" - }, - { - "SlotName": "Data Disk", - "SlotType": "DataDisk", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureConsoleDual", - "Title": "Console Dual", - "Description": "This Norsec-designed control box manages devices such as the Active Vent, Gas Sensor, Composite Door and others, depending on which circuitboard is inserted into the unit. It has separate data and power ports.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", - "PrefabName": "StructureConsoleDual", - "PrefabHash": -722284333, - "SlotInserts": [ - { - "SlotName": "Circuit Board", - "SlotType": "Circuitboard", - "SlotIndex": "0" - }, - { - "SlotName": "Data Disk", - "SlotType": "DataDisk", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureConsoleMonitor", - "Title": "Console Monitor", - "Description": "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor, Security Camera and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port, and a charming sloped interface.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", - "PrefabName": "StructureConsoleMonitor", - "PrefabHash": 801677497, - "SlotInserts": [ - { - "SlotName": "Circuit Board", - "SlotType": "Circuitboard", - "SlotIndex": "0" - }, - { - "SlotName": "Data Disk", - "SlotType": "DataDisk", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCrateMount", - "Title": "Container Mount", - "Description": "", - "PrefabName": "StructureCrateMount", - "PrefabHash": -733500083, - "SlotInserts": [ - { - "SlotName": "Container Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureControlChair", - "Title": "Control Chair", - "Description": "Once, these chairs were the heart of space-going behemoths. Now, they're items of nostalgia built only by a handful of Stationeers with a sense of history. In other words, kitsch.", - "PrefabName": "StructureControlChair", - "PrefabHash": -1961153710, - "SlotInserts": [ - { - "SlotName": "Entity", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityMagnitude", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "VelocityMagnitude": "Read", - "VelocityRelativeX": "Read", - "VelocityRelativeY": "Read", - "VelocityRelativeZ": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemCookedCorn", - "Title": "Cooked Corn", - "Description": "A high-nutrient cooked food, which can be canned.", - "PrefabName": "ItemCookedCorn", - "PrefabHash": 1344773148, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0, - "Ingredient": true, - "Reagents": { - "Corn": 1.0 - } - } - }, - { - "Key": "ThingItemCookedMushroom", - "Title": "Cooked Mushroom", - "Description": "A high-nutrient cooked food, which can be canned.", - "PrefabName": "ItemCookedMushroom", - "PrefabHash": -1076892658, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0, - "Ingredient": true, - "Reagents": { - "Mushroom": 1.0 - } - } - }, - { - "Key": "ThingItemCookedPumpkin", - "Title": "Cooked Pumpkin", - "Description": "A high-nutrient cooked food, which can be canned.", - "PrefabName": "ItemCookedPumpkin", - "PrefabHash": 1849281546, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0, - "Ingredient": true, - "Reagents": { - "Pumpkin": 1.0 - } - } - }, - { - "Key": "ThingItemCookedRice", - "Title": "Cooked Rice", - "Description": "A high-nutrient cooked food, which can be canned.", - "PrefabName": "ItemCookedRice", - "PrefabHash": 2013539020, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0, - "Ingredient": true, - "Reagents": { - "Rice": 1.0 - } - } - }, - { - "Key": "ThingItemCookedSoybean", - "Title": "Cooked Soybean", - "Description": "A high-nutrient cooked food, which can be canned.", - "PrefabName": "ItemCookedSoybean", - "PrefabHash": 1353449022, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0, - "Ingredient": true, - "Reagents": { - "Soy": 5.0 - } - } - }, - { - "Key": "ThingItemCookedTomato", - "Title": "Cooked Tomato", - "Description": "A high-nutrient cooked food, which can be canned.", - "PrefabName": "ItemCookedTomato", - "PrefabHash": -709086714, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0, - "Ingredient": true, - "Reagents": { - "Tomato": 1.0 - } - } - }, - { - "Key": "ThingItemCorn", - "Title": "Corn", - "Description": "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.", - "PrefabName": "ItemCorn", - "PrefabHash": 258339687, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 20.0, - "Ingredient": true, - "Reagents": { - "Corn": 1.0 - } - } - }, - { - "Key": "ThingSeedBag_Corn", - "Title": "Corn Seeds", - "Description": "Grow a Corn.", - "PrefabName": "SeedBag_Corn", - "PrefabHash": -1290755415, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemCornSoup", - "Title": "Corn Soup", - "Description": "Made using Cooked Corn and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Faily high in nutrition, canned food does not decay.", - "PrefabName": "ItemCornSoup", - "PrefabHash": 545034114, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingStructureCornerLocker", - "Title": "Corner Locker", - "Description": "", - "PrefabName": "StructureCornerLocker", - "PrefabHash": -1968255729, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePassthroughHeatExchangerGasToGas", - "Title": "CounterFlow Heat Exchanger - Gas + Gas", - "Description": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", - "PrefabName": "StructurePassthroughHeatExchangerGasToGas", - "PrefabHash": -1674187440, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Output2", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Input2" - ], - [ - "Pipe", - "Output" - ], - [ - "Pipe", - "Output2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePassthroughHeatExchangerGasToLiquid", - "Title": "CounterFlow Heat Exchanger - Gas + Liquid", - "Description": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", - "PrefabName": "StructurePassthroughHeatExchangerGasToLiquid", - "PrefabHash": 1928991265, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input2", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Liquid Output2", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "PipeLiquid", - "Input2" - ], - [ - "Pipe", - "Output" - ], - [ - "PipeLiquid", - "Output2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePassthroughHeatExchangerLiquidToLiquid", - "Title": "CounterFlow Heat Exchanger - Liquid + Liquid", - "Description": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exchange of temperatures.", - "PrefabName": "StructurePassthroughHeatExchangerLiquidToLiquid", - "PrefabHash": -1472829583, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input2", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Liquid Output2", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Input2" - ], - [ - "PipeLiquid", - "Output" - ], - [ - "PipeLiquid", - "Output2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingCrateMkII", - "Title": "Crate Mk II", - "Description": "A more heavily reinforced version of the iconic Dynamic Crate, the Crate Mk II is resistant to incredibly high pressures and temperatures. Short of disposing of it in a black hole, the Mk II is about as safe as luggage gets.", - "PrefabName": "CrateMkII", - "PrefabHash": 8709219, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Storage" - } - }, - { - "Key": "ThingItemCreditCard", - "Title": "Credit Card", - "Description": "", - "PrefabName": "ItemCreditCard", - "PrefabHash": -1756772618, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "CreditCard", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemCrowbar", - "Title": "Crowbar", - "Description": "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise.", - "PrefabName": "ItemCrowbar", - "PrefabHash": 856108234, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureCryoTubeHorizontal", - "Title": "Cryo Tube Horizontal", - "Description": "The horizontal variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", - "PrefabName": "StructureCryoTubeHorizontal", - "PrefabHash": 1443059329, - "SlotInserts": [ - { - "SlotName": "Player", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "EntityState", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "EntityState": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCryoTubeVertical", - "Title": "Cryo Tube Vertical", - "Description": "The vertical variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", - "PrefabName": "StructureCryoTubeVertical", - "PrefabHash": -1381321828, - "SlotInserts": [ - { - "SlotName": "Player", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "EntityState", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "EntityState": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCryoTube", - "Title": "CryoTube", - "Description": "The exact operation of the Longsleep cryotube remains a commercial secret, with Norsec merely licensing the design. Able to regenerate organ damage when supplied with power and an atmosphere, the Longsleep is a minor miracle of modern medical technology.", - "PrefabName": "StructureCryoTube", - "PrefabHash": 1938254586, - "SlotInserts": [ - { - "SlotName": "Bed", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "EntityState", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "EntityState": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemSuitModCryogenicUpgrade", - "Title": "Cryogenic Suit Upgrade", - "Description": "Enables suits with basic cooling functionality to work with cryogenic liquid.", - "PrefabName": "ItemSuitModCryogenicUpgrade", - "PrefabHash": -1274308304, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "SuitMod", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemFilterFern", - "Title": "Darga Fern", - "Description": "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.", - "PrefabName": "ItemFilterFern", - "PrefabHash": 266654416, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemDataDisk", - "Title": "Data Disk", - "Description": "", - "PrefabName": "ItemDataDisk", - "PrefabHash": 1005843700, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "DataDisk", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureDaylightSensor", - "Title": "Daylight Sensor", - "Description": "Daylight sensors provide data on whether the current region of your base is in sunlight, and report the exact solar angle. Note that the orientation of the sensor alters the reported solar angle, while Logic systems can be used to offset it.", - "PrefabName": "StructureDaylightSensor", - "PrefabHash": 1076425094, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SolarAngle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SolarIrradiance", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Default", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Mode": "ReadWrite", - "Activate": "ReadWrite", - "Horizontal": "Read", - "Vertical": "Read", - "SolarAngle": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "SolarIrradiance": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingDecayedFood", - "Title": "Decayed Food", - "Description": "When your food decays, it turns into this. ODA scientists have attempted to determine the exact constituents of this substance, but it remains evasive and mysterious. Suffice to say, eating it is a bad idea. Research has determined, however, that The exact speed of decay varies individually by:\n\n- TEMPERATURE - Refrigeration will slow decay, but many foods will be damaged by exposure to extreme low pressure, as well as extreme heat. The optimum temperature is 0 kelvin (-272 C).\n\n- FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance.\n\n- PRESSURE - Food decays faster when the pressure drops below 1 atmosphere (101kPa). Decay happens exponentially more quickly as the atmosphere approaches a perfect vacuum. There is no effect from higher pressures. \n\n- ATMOSPHERE - Different gases can slow and accelerate the decay process. The process will take account of respective gas ratios in mixed atmospheres in calculating the decay modifier. The following rates apply across all foods:\n\n> Oxygen x 1.3\n> Nitrogen x 0.6\n> Carbon Dioxide x 0.8\n> Volatiles x 1\n> Pollutant x 3\n> Nitrous Oxide x 1.5\n> Steam x 2\n> Vacuum (see PRESSURE above)\n\n", - "PrefabName": "DecayedFood", - "PrefabHash": 1531087544, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 25.0 - } - }, - { - "Key": "ThingStructureDeepMiner", - "Title": "Deep Miner", - "Description": "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s", - "PrefabName": "StructureDeepMiner", - "PrefabHash": 265720906, - "SlotInserts": [ - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingDeviceStepUnit", - "Title": "Device Step Unit", - "Description": "0.C-2\n1.C#-2\n2.D-2\n3.D#-2\n4.E-2\n5.F-2\n6.F#-2\n7.G-2\n8.G#-2\n9.A-2\n10.A#-2\n11.B-2\n12.C-1\n13.C#-1\n14.D-1\n15.D#-1\n16.E-1\n17.F-1\n18.F#-1\n19.G-1\n20.G#-1\n21.A-1\n22.A#-1\n23.B-1\n24.C0\n25.C#0\n26.D0\n27.D#0\n28.E0\n29.F0\n30.F#0\n31.G0\n32.G#0\n33.A0\n34.A#0\n35.B0\n36.C1\n37.C#1\n38.D1\n39.D#1\n40.E1\n41.F1\n42.F#1\n43.G1\n44.G#1\n45.A1\n46.A#1\n47.B1\n48.C2\n49.C#2\n50.D2\n51.D#2\n52.E2\n53.F2\n54.F#2\n55.G2\n56.G#2\n57.A2\n58.A#2\n59.B2\n60.C3\n61.C#3\n62.D3\n63.D#3\n64.E3\n65.F3\n66.F#3\n67.G3\n68.G#3\n69.A3\n70.A#3\n71.B3\n72.C4\n73.C#4\n74.D4\n75.D#4\n76.E4\n77.F4\n78.F#4\n79.G4\n80.G#4\n81.A4\n82.A#4\n83.B4\n84.C5\n85.C#5\n86.D5\n87.D#5\n88.E5\n89.F5\n90.F#5\n91.G5 \n92.G#5\n93.A5\n94.A#5\n95.B5\n96.C6\n97.C#6\n98.D6\n99.D#6\n100.E6\n101.F6\n102.F#6\n103.G6\n104.G#6\n105.A6\n106.A#6\n107.B6\n108.C7\n109.C#7\n110.D7\n111.D#7\n112.E7\n113.F7\n114.F#7\n115.G7\n116.G#7\n117.A7\n118.A#7\n119.B7\n120.C8\n121.C#8\n122.D8\n123.D#8\n124.E8\n125.F8\n126.F#8\n127.G8", - "PrefabName": "DeviceStepUnit", - "PrefabHash": 1762696475, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "C-2", - "LogicAccessTypes": "0" - }, - { - "LogicName": "C#-2", - "LogicAccessTypes": "1" - }, - { - "LogicName": "D-2", - "LogicAccessTypes": "2" - }, - { - "LogicName": "D#-2", - "LogicAccessTypes": "3" - }, - { - "LogicName": "E-2", - "LogicAccessTypes": "4" - }, - { - "LogicName": "F-2", - "LogicAccessTypes": "5" - }, - { - "LogicName": "F#-2", - "LogicAccessTypes": "6" - }, - { - "LogicName": "G-2", - "LogicAccessTypes": "7" - }, - { - "LogicName": "G#-2", - "LogicAccessTypes": "8" - }, - { - "LogicName": "A-2", - "LogicAccessTypes": "9" - }, - { - "LogicName": "A#-2", - "LogicAccessTypes": "10" - }, - { - "LogicName": "B-2", - "LogicAccessTypes": "11" - }, - { - "LogicName": "C-1", - "LogicAccessTypes": "12" - }, - { - "LogicName": "C#-1", - "LogicAccessTypes": "13" - }, - { - "LogicName": "D-1", - "LogicAccessTypes": "14" - }, - { - "LogicName": "D#-1", - "LogicAccessTypes": "15" - }, - { - "LogicName": "E-1", - "LogicAccessTypes": "16" - }, - { - "LogicName": "F-1", - "LogicAccessTypes": "17" - }, - { - "LogicName": "F#-1", - "LogicAccessTypes": "18" - }, - { - "LogicName": "G-1", - "LogicAccessTypes": "19" - }, - { - "LogicName": "G#-1", - "LogicAccessTypes": "20" - }, - { - "LogicName": "A-1", - "LogicAccessTypes": "21" - }, - { - "LogicName": "A#-1", - "LogicAccessTypes": "22" - }, - { - "LogicName": "B-1", - "LogicAccessTypes": "23" - }, - { - "LogicName": "C0", - "LogicAccessTypes": "24" - }, - { - "LogicName": "C#0", - "LogicAccessTypes": "25" - }, - { - "LogicName": "D0", - "LogicAccessTypes": "26" - }, - { - "LogicName": "D#0", - "LogicAccessTypes": "27" - }, - { - "LogicName": "E0", - "LogicAccessTypes": "28" - }, - { - "LogicName": "F0", - "LogicAccessTypes": "29" - }, - { - "LogicName": "F#0", - "LogicAccessTypes": "30" - }, - { - "LogicName": "G0", - "LogicAccessTypes": "31" - }, - { - "LogicName": "G#0", - "LogicAccessTypes": "32" - }, - { - "LogicName": "A0", - "LogicAccessTypes": "33" - }, - { - "LogicName": "A#0", - "LogicAccessTypes": "34" - }, - { - "LogicName": "B0", - "LogicAccessTypes": "35" - }, - { - "LogicName": "C1", - "LogicAccessTypes": "36" - }, - { - "LogicName": "C#1", - "LogicAccessTypes": "37" - }, - { - "LogicName": "D1", - "LogicAccessTypes": "38" - }, - { - "LogicName": "D#1", - "LogicAccessTypes": "39" - }, - { - "LogicName": "E1", - "LogicAccessTypes": "40" - }, - { - "LogicName": "F1", - "LogicAccessTypes": "41" - }, - { - "LogicName": "F#1", - "LogicAccessTypes": "42" - }, - { - "LogicName": "G1", - "LogicAccessTypes": "43" - }, - { - "LogicName": "G#1", - "LogicAccessTypes": "44" - }, - { - "LogicName": "A1", - "LogicAccessTypes": "45" - }, - { - "LogicName": "A#1", - "LogicAccessTypes": "46" - }, - { - "LogicName": "B1", - "LogicAccessTypes": "47" - }, - { - "LogicName": "C2", - "LogicAccessTypes": "48" - }, - { - "LogicName": "C#2", - "LogicAccessTypes": "49" - }, - { - "LogicName": "D2", - "LogicAccessTypes": "50" - }, - { - "LogicName": "D#2", - "LogicAccessTypes": "51" - }, - { - "LogicName": "E2", - "LogicAccessTypes": "52" - }, - { - "LogicName": "F2", - "LogicAccessTypes": "53" - }, - { - "LogicName": "F#2", - "LogicAccessTypes": "54" - }, - { - "LogicName": "G2", - "LogicAccessTypes": "55" - }, - { - "LogicName": "G#2", - "LogicAccessTypes": "56" - }, - { - "LogicName": "A2", - "LogicAccessTypes": "57" - }, - { - "LogicName": "A#2", - "LogicAccessTypes": "58" - }, - { - "LogicName": "B2", - "LogicAccessTypes": "59" - }, - { - "LogicName": "C3", - "LogicAccessTypes": "60" - }, - { - "LogicName": "C#3", - "LogicAccessTypes": "61" - }, - { - "LogicName": "D3", - "LogicAccessTypes": "62" - }, - { - "LogicName": "D#3", - "LogicAccessTypes": "63" - }, - { - "LogicName": "E3", - "LogicAccessTypes": "64" - }, - { - "LogicName": "F3", - "LogicAccessTypes": "65" - }, - { - "LogicName": "F#3", - "LogicAccessTypes": "66" - }, - { - "LogicName": "G3", - "LogicAccessTypes": "67" - }, - { - "LogicName": "G#3", - "LogicAccessTypes": "68" - }, - { - "LogicName": "A3", - "LogicAccessTypes": "69" - }, - { - "LogicName": "A#3", - "LogicAccessTypes": "70" - }, - { - "LogicName": "B3", - "LogicAccessTypes": "71" - }, - { - "LogicName": "C4", - "LogicAccessTypes": "72" - }, - { - "LogicName": "C#4", - "LogicAccessTypes": "73" - }, - { - "LogicName": "D4", - "LogicAccessTypes": "74" - }, - { - "LogicName": "D#4", - "LogicAccessTypes": "75" - }, - { - "LogicName": "E4", - "LogicAccessTypes": "76" - }, - { - "LogicName": "F4", - "LogicAccessTypes": "77" - }, - { - "LogicName": "F#4", - "LogicAccessTypes": "78" - }, - { - "LogicName": "G4", - "LogicAccessTypes": "79" - }, - { - "LogicName": "G#4", - "LogicAccessTypes": "80" - }, - { - "LogicName": "A4", - "LogicAccessTypes": "81" - }, - { - "LogicName": "A#4", - "LogicAccessTypes": "82" - }, - { - "LogicName": "B4", - "LogicAccessTypes": "83" - }, - { - "LogicName": "C5", - "LogicAccessTypes": "84" - }, - { - "LogicName": "C#5", - "LogicAccessTypes": "85" - }, - { - "LogicName": "D5", - "LogicAccessTypes": "86" - }, - { - "LogicName": "D#5", - "LogicAccessTypes": "87" - }, - { - "LogicName": "E5", - "LogicAccessTypes": "88" - }, - { - "LogicName": "F5", - "LogicAccessTypes": "89" - }, - { - "LogicName": "F#5", - "LogicAccessTypes": "90" - }, - { - "LogicName": "G5 ", - "LogicAccessTypes": "91" - }, - { - "LogicName": "G#5", - "LogicAccessTypes": "92" - }, - { - "LogicName": "A5", - "LogicAccessTypes": "93" - }, - { - "LogicName": "A#5", - "LogicAccessTypes": "94" - }, - { - "LogicName": "B5", - "LogicAccessTypes": "95" - }, - { - "LogicName": "C6", - "LogicAccessTypes": "96" - }, - { - "LogicName": "C#6", - "LogicAccessTypes": "97" - }, - { - "LogicName": "D6", - "LogicAccessTypes": "98" - }, - { - "LogicName": "D#6", - "LogicAccessTypes": "99" - }, - { - "LogicName": "E6", - "LogicAccessTypes": "100" - }, - { - "LogicName": "F6", - "LogicAccessTypes": "101" - }, - { - "LogicName": "F#6", - "LogicAccessTypes": "102" - }, - { - "LogicName": "G6", - "LogicAccessTypes": "103" - }, - { - "LogicName": "G#6", - "LogicAccessTypes": "104" - }, - { - "LogicName": "A6", - "LogicAccessTypes": "105" - }, - { - "LogicName": "A#6", - "LogicAccessTypes": "106" - }, - { - "LogicName": "B6", - "LogicAccessTypes": "107" - }, - { - "LogicName": "C7", - "LogicAccessTypes": "108" - }, - { - "LogicName": "C#7", - "LogicAccessTypes": "109" - }, - { - "LogicName": "D7", - "LogicAccessTypes": "110" - }, - { - "LogicName": "D#7", - "LogicAccessTypes": "111" - }, - { - "LogicName": "E7", - "LogicAccessTypes": "112" - }, - { - "LogicName": "F7", - "LogicAccessTypes": "113" - }, - { - "LogicName": "F#7", - "LogicAccessTypes": "114" - }, - { - "LogicName": "G7", - "LogicAccessTypes": "115" - }, - { - "LogicName": "G#7", - "LogicAccessTypes": "116" - }, - { - "LogicName": "A7", - "LogicAccessTypes": "117" - }, - { - "LogicName": "A#7", - "LogicAccessTypes": "118" - }, - { - "LogicName": "B7", - "LogicAccessTypes": "119" - }, - { - "LogicName": "C8", - "LogicAccessTypes": "120" - }, - { - "LogicName": "C#8", - "LogicAccessTypes": "121" - }, - { - "LogicName": "D8", - "LogicAccessTypes": "122" - }, - { - "LogicName": "D#8", - "LogicAccessTypes": "123" - }, - { - "LogicName": "E8", - "LogicAccessTypes": "124" - }, - { - "LogicName": "F8", - "LogicAccessTypes": "125" - }, - { - "LogicName": "F#8", - "LogicAccessTypes": "126" - }, - { - "LogicName": "G8", - "LogicAccessTypes": "127" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Volume": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicDial", - "Title": "Dial", - "Description": "An assignable dial with up to 1000 modes.", - "PrefabName": "StructureLogicDial", - "PrefabHash": 554524804, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Mode": "ReadWrite", - "Setting": "ReadWrite", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureDigitalValve", - "Title": "Digital Valve", - "Description": "The digital valve allows Stationeers to create logic-controlled valves and pipe networks.", - "PrefabName": "StructureDigitalValve", - "PrefabHash": -1280984102, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Output" - ], - [ - "Pipe", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureDiodeSlide", - "Title": "Diode Slide", - "Description": "", - "PrefabName": "StructureDiodeSlide", - "PrefabHash": 576516101, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemDirtCanister", - "Title": "Dirt Canister", - "Description": "A container the will fill with Dirt when using a Mining Drill when placed inside a Mining Belt. You can then use this Dirt Canister with the Terrain Manipulator to adjust the terrain to suit your needs.", - "PrefabName": "ItemDirtCanister", - "PrefabHash": 902565329, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSpaceOre", - "Title": "Dirty Ore", - "Description": "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.", - "PrefabName": "ItemSpaceOre", - "PrefabHash": 2131916219, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemDirtyOre", - "Title": "Dirty Ore", - "Description": "Ore mined from bedrock via the Deep Miner which then can be used in the Centrifuge, or Combustion Centrifuge. Once processed, it produces ore in a ratio similar to the average found on the planet's surface. ", - "PrefabName": "ItemDirtyOre", - "PrefabHash": -1234745580, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Ores", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemDisposableBatteryCharger", - "Title": "Disposable Battery Charger", - "Description": "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.", - "PrefabName": "ItemDisposableBatteryCharger", - "PrefabHash": -2124435700, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingStructureDockPortSide", - "Title": "Dock (Port Side)", - "Description": "", - "PrefabName": "StructureDockPortSide", - "PrefabHash": -137465079, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingCircuitboardDoorControl", - "Title": "Door Control", - "Description": "A basic tool of Stationeer base construction, this circuit board provides a way to open and close a Composite Door, Blast Door or Glass Door remotely, when connected to a Console. This system can be further linked to Motion Sensor to create automatic doors.", - "PrefabName": "CircuitboardDoorControl", - "PrefabHash": 855694771, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureSleeperVerticalDroid", - "Title": "Droid Sleeper Vertical", - "Description": "The Droid Sleeper will recharge robot batteries and equiped suit batteries if present. This sleeper variant is only safe for robots. Entering as a non robot character will cause you to take damage.", - "PrefabName": "StructureSleeperVerticalDroid", - "PrefabHash": 1382098999, - "SlotInserts": [ - { - "SlotName": "Player", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemDuctTape", - "Title": "Duct Tape", - "Description": "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage.", - "PrefabName": "ItemDuctTape", - "PrefabHash": -1943134693, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingDynamicCrate", - "Title": "Dynamic Crate", - "Description": "The humble dynamic crate has become a symbol of Stationeer invention and independence. With twelve slots and handles at either end for ease of carriage, it's both standard issue and critical kit for cadets and Commanders alike.", - "PrefabName": "DynamicCrate", - "PrefabHash": 1941079206, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Storage" - } - }, - { - "Key": "ThingDynamicGasCanisterRocketFuel", - "Title": "Dynamic Gas Canister Rocket Fuel", - "Description": "", - "PrefabName": "DynamicGasCanisterRocketFuel", - "PrefabHash": -8883951, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemFertilizedEgg", - "Title": "Egg", - "Description": "To hatch it requires an incubation temperature of between 35 and 45 degrees Celsius and will hatch into a Chick. If the egg is exposed to tepratures below 10 degrees it will no longer be viable.", - "PrefabName": "ItemFertilizedEgg", - "PrefabHash": -383972371, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Egg", - "SortingClass": "Resources", - "Ingredient": true, - "Reagents": { - "Egg": 1.0 - } - } - }, - { - "Key": "ThingItemEggCarton", - "Title": "Egg Carton", - "Description": "Within, eggs reside in mysterious, marmoreal silence.", - "PrefabName": "ItemEggCarton", - "PrefabHash": -524289310, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "Egg", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "Egg", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "Egg", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "Egg", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "Egg", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "Egg", - "SlotIndex": "5" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Storage" - } - }, - { - "Key": "ThingStructureElectrolyzer", - "Title": "Electrolyzer", - "Description": "The Norsec-designed Electrolyzer splits Water into hydrogen and Oxygen. Employing unknown proprietary technology, the device uses water's latent heat as the energy to drive the electrosis process. If there is a downside to this near-miraculous fission, it's that the device is limited by the quantity of power available, which is used to maintain the temperature output. In other words, the machine works best with hot gas.", - "PrefabName": "StructureElectrolyzer", - "PrefabHash": -1668992663, - "SlotInserts": [ - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Idle", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Active", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "PressureInput": "Read", - "TemperatureInput": "Read", - "RatioOxygenInput": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioNitrogenInput": "Read", - "RatioPollutantInput": "Read", - "RatioVolatilesInput": "Read", - "RatioWaterInput": "Read", - "RatioNitrousOxideInput": "Read", - "TotalMolesInput": "Read", - "PressureOutput": "Read", - "TemperatureOutput": "Read", - "RatioOxygenOutput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioNitrogenOutput": "Read", - "RatioPollutantOutput": "Read", - "RatioVolatilesOutput": "Read", - "RatioWaterOutput": "Read", - "RatioNitrousOxideOutput": "Read", - "TotalMolesOutput": "Read", - "CombustionInput": "Read", - "CombustionOutput": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "Power", - "None" - ] - ], - "DevicesLength": 2, - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemElectronicParts", - "Title": "Electronic Parts", - "Description": "", - "PrefabName": "ItemElectronicParts", - "PrefabHash": 731250882, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 20.0 - } - }, - { - "Key": "ThingElectronicPrinterMod", - "Title": "Electronic Printer Mod", - "Description": "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "PrefabName": "ElectronicPrinterMod", - "PrefabHash": -311170652, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureElectronicsPrinter", - "Title": "Electronics Printer", - "Description": "The electronic printer will create any electronic part you need. From circuit boards and electronic devices to solar panels. The choice is yours. Upgrade the device using a Electronic Printer Mod for additional recipes and faster processing speeds.", - "PrefabName": "StructureElectronicsPrinter", - "PrefabHash": 1307165496, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Ingot", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "CompletionRatio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RecipeHash": "ReadWrite", - "CompletionRatio": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingElevatorCarrage", - "Title": "Elevator", - "Description": "", - "PrefabName": "ElevatorCarrage", - "PrefabHash": -110788403, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureElevatorLevelIndustrial", - "Title": "Elevator Level", - "Description": "", - "PrefabName": "StructureElevatorLevelIndustrial", - "PrefabHash": 2060648791, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ElevatorSpeed", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ElevatorLevel", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ElevatorSpeed": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Elevator", - "None" - ], - [ - "Elevator", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureElevatorLevelFront", - "Title": "Elevator Level (Cabled)", - "Description": "", - "PrefabName": "StructureElevatorLevelFront", - "PrefabHash": -827912235, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ElevatorSpeed", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ElevatorLevel", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ElevatorSpeed": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Elevator", - "None" - ], - [ - "Elevator", - "None" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureElevatorShaftIndustrial", - "Title": "Elevator Shaft", - "Description": "", - "PrefabName": "StructureElevatorShaftIndustrial", - "PrefabHash": 1998354978, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "ElevatorSpeed", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ElevatorLevel", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "ElevatorSpeed": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Elevator", - "None" - ], - [ - "Elevator", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureElevatorShaft", - "Title": "Elevator Shaft (Cabled)", - "Description": "", - "PrefabName": "StructureElevatorShaft", - "PrefabHash": 826144419, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ElevatorSpeed", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ElevatorLevel", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ElevatorSpeed": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Elevator", - "None" - ], - [ - "Elevator", - "None" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemEmergencyAngleGrinder", - "Title": "Emergency Angle Grinder", - "Description": "", - "PrefabName": "ItemEmergencyAngleGrinder", - "PrefabHash": -351438780, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemEmergencyArcWelder", - "Title": "Emergency Arc Welder", - "Description": "", - "PrefabName": "ItemEmergencyArcWelder", - "PrefabHash": -1056029600, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemEmergencyCrowbar", - "Title": "Emergency Crowbar", - "Description": "", - "PrefabName": "ItemEmergencyCrowbar", - "PrefabHash": 976699731, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemEmergencyDrill", - "Title": "Emergency Drill", - "Description": "", - "PrefabName": "ItemEmergencyDrill", - "PrefabHash": -2052458905, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemEmergencyEvaSuit", - "Title": "Emergency Eva Suit", - "Description": "", - "PrefabName": "ItemEmergencyEvaSuit", - "PrefabHash": 1791306431, - "SlotInserts": [ - { - "SlotName": "Air Tank", - "SlotType": "GasCanister", - "SlotIndex": "0" - }, - { - "SlotName": "Waste Tank", - "SlotType": "GasCanister", - "SlotIndex": "1" - }, - { - "SlotName": "Life Support", - "SlotType": "Battery", - "SlotIndex": "2" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "3" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "4" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "5" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Suit", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemEmergencyPickaxe", - "Title": "Emergency Pickaxe", - "Description": "", - "PrefabName": "ItemEmergencyPickaxe", - "PrefabHash": -1061510408, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemEmergencyScrewdriver", - "Title": "Emergency Screwdriver", - "Description": "", - "PrefabName": "ItemEmergencyScrewdriver", - "PrefabHash": 266099983, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemEmergencySpaceHelmet", - "Title": "Emergency Space Helmet", - "Description": "", - "PrefabName": "ItemEmergencySpaceHelmet", - "PrefabHash": 205916793, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Flush", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "SoundAlert", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Lock": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "TotalMoles": "Read", - "Volume": "ReadWrite", - "RatioNitrousOxide": "Read", - "Combustion": "Read", - "Flush": "Write", - "SoundAlert": "ReadWrite", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Item": { - "SlotClass": "Helmet", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemEmergencyToolBelt", - "Title": "Emergency Tool Belt", - "Description": "", - "PrefabName": "ItemEmergencyToolBelt", - "PrefabHash": 1661941301, - "SlotInserts": [ - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "0" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "1" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "2" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "3" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "4" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "5" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "6" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "7" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Belt", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemEmergencyWireCutters", - "Title": "Emergency Wire Cutters", - "Description": "", - "PrefabName": "ItemEmergencyWireCutters", - "PrefabHash": 2102803952, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemEmergencyWrench", - "Title": "Emergency Wrench", - "Description": "", - "PrefabName": "ItemEmergencyWrench", - "PrefabHash": 162553030, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemEmptyCan", - "Title": "Empty Can", - "Description": "Used for making soups when combined with food in the Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay.", - "PrefabName": "ItemEmptyCan", - "PrefabHash": 1013818348, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0, - "Ingredient": true, - "Reagents": { - "Steel": 1.0 - } - } - }, - { - "Key": "ThingItemPlantEndothermic_Creative", - "Title": "Endothermic Plant Creative", - "Description": "", - "PrefabName": "ItemPlantEndothermic_Creative", - "PrefabHash": -1159179557, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingWeaponPistolEnergy", - "Title": "Energy Pistol", - "Description": "0.Stun\n1.Kill", - "PrefabName": "WeaponPistolEnergy", - "PrefabHash": -385323479, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Stun", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Kill", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "None", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingWeaponRifleEnergy", - "Title": "Energy Rifle", - "Description": "0.Stun\n1.Kill", - "PrefabName": "WeaponRifleEnergy", - "PrefabHash": 1154745374, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Stun", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Kill", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "None", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureEngineMountTypeA1", - "Title": "Engine Mount (Type A1)", - "Description": "", - "PrefabName": "StructureEngineMountTypeA1", - "PrefabHash": 2035781224, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingEntityChick", - "Title": "Entity Chick", - "Description": "Once a chick is hatched, it gets hungry. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", - "PrefabName": "EntityChick", - "PrefabHash": 1730165908, - "SlotInserts": [ - { - "SlotName": "Brain", - "SlotType": "Organ", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingEntityChickenBrown", - "Title": "Entity Chicken Brown", - "Description": "Like so many of its brethren, this is a chicken. A brown one. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", - "PrefabName": "EntityChickenBrown", - "PrefabHash": 334097180, - "SlotInserts": [ - { - "SlotName": "Brain", - "SlotType": "Organ", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingEntityChickenWhite", - "Title": "Entity Chicken White", - "Description": "It's a chicken, as white as moondust. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", - "PrefabName": "EntityChickenWhite", - "PrefabHash": 1010807532, - "SlotInserts": [ - { - "SlotName": "Brain", - "SlotType": "Organ", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingEntityRoosterBlack", - "Title": "Entity Rooster Black", - "Description": "This is a rooster. It is black. There is dignity in this.", - "PrefabName": "EntityRoosterBlack", - "PrefabHash": 966959649, - "SlotInserts": [ - { - "SlotName": "Brain", - "SlotType": "Organ", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingEntityRoosterBrown", - "Title": "Entity Rooster Brown", - "Description": "The common brown rooster. Don't let it hear you say that.", - "PrefabName": "EntityRoosterBrown", - "PrefabHash": -583103395, - "SlotInserts": [ - { - "SlotName": "Brain", - "SlotType": "Organ", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemEvaSuit", - "Title": "Eva Suit", - "Description": "The EVA suit is the basic suit Stationeers need to survive in the inhospitable environment of space. For more information on EVA suits, consult the EVA suit guide.", - "PrefabName": "ItemEvaSuit", - "PrefabHash": 1677018918, - "SlotInserts": [ - { - "SlotName": "Air Tank", - "SlotType": "GasCanister", - "SlotIndex": "0" - }, - { - "SlotName": "Waste Tank", - "SlotType": "GasCanister", - "SlotIndex": "1" - }, - { - "SlotName": "Life Support", - "SlotType": "Battery", - "SlotIndex": "2" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "3" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "4" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "5" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Suit", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingStructureEvaporationChamber", - "Title": "Evaporation Chamber", - "Description": "A device for safely evaporating liquids into gasses. Liquids and Gasses will both exist safely inside the device. Lowering the pressure target of the in-built back pressure regulator using the setting wheel will change the boiling temperature of liquids inside.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Evaporation Chamber. \n Paired with Condensation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", - "PrefabName": "StructureEvaporationChamber", - "PrefabHash": -1429782576, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input2" - ], - [ - "Pipe", - "Output" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "Data", - "None" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureExpansionValve", - "Title": "Expansion Valve", - "Description": "Allows for moving liquids from a liquid pipe into a gas pipe. Only allows liquids to pass in one direction. Typically this is done to allow the liquid to evaporate into a gas as part of an airconditioning loop.", - "PrefabName": "StructureExpansionValve", - "PrefabHash": 195298587, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Output" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureFairingTypeA1", - "Title": "Fairing (Type A1)", - "Description": "", - "PrefabName": "StructureFairingTypeA1", - "PrefabHash": 1622567418, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureFairingTypeA2", - "Title": "Fairing (Type A2)", - "Description": "", - "PrefabName": "StructureFairingTypeA2", - "PrefabHash": -104908736, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureFairingTypeA3", - "Title": "Fairing (Type A3)", - "Description": "", - "PrefabName": "StructureFairingTypeA3", - "PrefabHash": -1900541738, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemFern", - "Title": "Fern", - "Description": "There was a time, when Stationeers had to make Fenoxitone Powder using the Reagent Processor. Recent advances in technology allow you to use equivalent quantities of fern directly in recipes.", - "PrefabName": "ItemFern", - "PrefabHash": 892110467, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Ingredient": true, - "Reagents": { - "Fenoxitone": 1.0 - } - } - }, - { - "Key": "ThingSeedBag_Fern", - "Title": "Fern Seeds", - "Description": "Grow a Fern.", - "PrefabName": "SeedBag_Fern", - "PrefabHash": -1990600883, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingFertilizer", - "Title": "Fertilizer", - "Description": "Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter.\nFertilizer's affects depend on its ingredients:\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for\n\nThe effect of these ingredients depends on their respective proportions in the composter when processing is activated. ", - "PrefabName": "Fertilizer", - "PrefabHash": 1517856652, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemGasFilterCarbonDioxide", - "Title": "Filter (Carbon Dioxide)", - "Description": "Given humanity's obsession with exhaling Carbon Dioxide, all Stationeers are issued two basic Sinotai Carbon Dioxide Gas Filter as part of their standard deployment kit (SDK). These filters allow passage of Carbon Dioxide into the suit's waste Canister, but are also critical components of the Portable Air Scrubber and the Filtration. The Medium Filter (Carbon Dioxide) and Heavy Filter (Carbon Dioxide) are also available.", - "PrefabName": "ItemGasFilterCarbonDioxide", - "PrefabHash": 1635000764, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "CarbonDioxide" - } - }, - { - "Key": "ThingItemGasFilterNitrogen", - "Title": "Filter (Nitrogen)", - "Description": "Filters are used to capture various gases, which can be disposed of or used elsewhere. Nitrogen is a byproduct of smelting various ores, notably Ice (Nitrice), which may be combined with Oxygen to make a breathable - and considerably less flammable - atmosphere.", - "PrefabName": "ItemGasFilterNitrogen", - "PrefabHash": 632853248, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Nitrogen" - } - }, - { - "Key": "ThingItemGasFilterNitrousOxide", - "Title": "Filter (Nitrous Oxide)", - "Description": "", - "PrefabName": "ItemGasFilterNitrousOxide", - "PrefabHash": -1247674305, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "NitrousOxide" - } - }, - { - "Key": "ThingItemGasFilterOxygen", - "Title": "Filter (Oxygen)", - "Description": "Sinotai have cornered the market in filter design. Their trademarked templates are simple to print and highly efficient at capturing various gases, which can be disposed of or used elsewhere. Oxygen is a common byproduct of smelting various ores, but must be filtered of such impurities as Nitrogen using this filter and various devices, such as the Kit (Portable Scrubber).", - "PrefabName": "ItemGasFilterOxygen", - "PrefabHash": -721824748, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Oxygen" - } - }, - { - "Key": "ThingItemGasFilterPollutants", - "Title": "Filter (Pollutant)", - "Description": "Filters are used to capture various gases, such as waste emissions from a Furnace or Arc Furnace. Adding Sinotai-designed Pollutant filters to a Kit (Portable Scrubber) allows you to isolate this gas, then add it to a pipe network and employ its excellent coolant properties in a Wall Cooler. Try not to inhale.", - "PrefabName": "ItemGasFilterPollutants", - "PrefabHash": 1915566057, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Pollutant" - } - }, - { - "Key": "ThingItemGasFilterVolatiles", - "Title": "Filter (Volatiles)", - "Description": "Filters are used to capture various gases, which can be disposed of or used elsewhere. Volatiles are created by exposing Ice (Volatiles) to heat. The product can then be collected and combined with Oxygen to create fuel, or used within a Furnace to smelt ores and create alloys.", - "PrefabName": "ItemGasFilterVolatiles", - "PrefabHash": 15011598, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Volatiles" - } - }, - { - "Key": "ThingItemGasFilterWater", - "Title": "Filter (Water)", - "Description": "Sinotai filters are used to capture various gases, which can be disposed of, or used elsewhere. Water can be collected by filtering smelted Ice (Water)", - "PrefabName": "ItemGasFilterWater", - "PrefabHash": -1993197973, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Steam" - } - }, - { - "Key": "ThingStructureFiltration", - "Title": "Filtration", - "Description": "The Filtration Unit is based on a long-standing ExMin system, itself based on older designs of uncertain provenance. It is available in the Kit (Atmospherics).\nThe device has nonetheless proven indispensable for Stationeer atmospheric systems, as it can filter two gases simultaneously from a single pipe network using a dual filter array. The unit has an input, and a filter output as well as an unfiltered outlet for any residual gases.\n", - "PrefabName": "StructureFiltration", - "PrefabHash": -348054045, - "SlotInserts": [ - { - "SlotName": "Gas Filter", - "SlotType": "GasFilter", - "SlotIndex": "0" - }, - { - "SlotName": "Gas Filter", - "SlotType": "GasFilter", - "SlotIndex": "1" - }, - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "2" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionOutput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Idle", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Active", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Waste", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {}, - "2": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "PressureInput": "Read", - "TemperatureInput": "Read", - "RatioOxygenInput": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioNitrogenInput": "Read", - "RatioPollutantInput": "Read", - "RatioVolatilesInput": "Read", - "RatioWaterInput": "Read", - "RatioNitrousOxideInput": "Read", - "TotalMolesInput": "Read", - "PressureOutput": "Read", - "TemperatureOutput": "Read", - "RatioOxygenOutput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioNitrogenOutput": "Read", - "RatioPollutantOutput": "Read", - "RatioVolatilesOutput": "Read", - "RatioWaterOutput": "Read", - "RatioNitrousOxideOutput": "Read", - "TotalMolesOutput": "Read", - "PressureOutput2": "Read", - "TemperatureOutput2": "Read", - "RatioOxygenOutput2": "Read", - "RatioCarbonDioxideOutput2": "Read", - "RatioNitrogenOutput2": "Read", - "RatioPollutantOutput2": "Read", - "RatioVolatilesOutput2": "Read", - "RatioWaterOutput2": "Read", - "RatioNitrousOxideOutput2": "Read", - "TotalMolesOutput2": "Read", - "CombustionInput": "Read", - "CombustionOutput": "Read", - "CombustionOutput2": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "Pipe", - "Waste" - ], - [ - "Power", - "None" - ] - ], - "DevicesLength": 2, - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingFireArmSMG", - "Title": "Fire Arm SMG", - "Description": "0.Single\n1.Auto", - "PrefabName": "FireArmSMG", - "PrefabHash": -86315541, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "Magazine", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Single", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Auto", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemReusableFireExtinguisher", - "Title": "Fire Extinguisher (Reusable)", - "Description": "Requires a canister filled with any inert liquid to opperate.", - "PrefabName": "ItemReusableFireExtinguisher", - "PrefabHash": -1773192190, - "SlotInserts": [ - { - "SlotName": "Liquid Canister", - "SlotType": "LiquidCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingFlag_ODA_10m", - "Title": "Flag (ODA 10m)", - "Description": "", - "PrefabName": "Flag_ODA_10m", - "PrefabHash": 1845441951, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingFlag_ODA_4m", - "Title": "Flag (ODA 4m)", - "Description": "", - "PrefabName": "Flag_ODA_4m", - "PrefabHash": 1159126354, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingFlag_ODA_6m", - "Title": "Flag (ODA 6m)", - "Description": "", - "PrefabName": "Flag_ODA_6m", - "PrefabHash": 1998634960, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingFlag_ODA_8m", - "Title": "Flag (ODA 8m)", - "Description": "", - "PrefabName": "Flag_ODA_8m", - "PrefabHash": -375156130, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingFlareGun", - "Title": "Flare Gun", - "Description": "", - "PrefabName": "FlareGun", - "PrefabHash": 118685786, - "SlotInserts": [ - { - "SlotName": "Magazine", - "SlotType": "Flare", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "Blocked", - "SlotIndex": "1" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureFlashingLight", - "Title": "Flashing Light", - "Description": "Few objects or ideas are as clearly and transparently named as the Flashing Light, although fans of scrupulous accuracy have been known to refer to it by its full, official title: 'Default Yellow Flashing Light'.", - "PrefabName": "StructureFlashingLight", - "PrefabHash": -1535893860, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemFlashlight", - "Title": "Flashlight", - "Description": "A flashlight with a narrow and wide beam options.", - "PrefabName": "ItemFlashlight", - "PrefabHash": -838472102, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Low Power", - "LogicAccessTypes": "0" - }, - { - "LogicName": "High Power", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemFlour", - "Title": "Flour", - "Description": "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).", - "PrefabName": "ItemFlour", - "PrefabHash": -665995854, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Flour": 50.0 - } - } - }, - { - "Key": "ThingItemFlowerBlue", - "Title": "Flower (Blue)", - "Description": "", - "PrefabName": "ItemFlowerBlue", - "PrefabHash": -1573623434, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemFlowerGreen", - "Title": "Flower (Green)", - "Description": "", - "PrefabName": "ItemFlowerGreen", - "PrefabHash": -1513337058, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemFlowerOrange", - "Title": "Flower (Orange)", - "Description": "", - "PrefabName": "ItemFlowerOrange", - "PrefabHash": -1411986716, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemFlowerRed", - "Title": "Flower (Red)", - "Description": "", - "PrefabName": "ItemFlowerRed", - "PrefabHash": -81376085, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemFlowerYellow", - "Title": "Flower (Yellow)", - "Description": "", - "PrefabName": "ItemFlowerYellow", - "PrefabHash": 1712822019, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemFries", - "Title": "French Fries", - "Description": "", - "PrefabName": "ItemFries", - "PrefabHash": 1371786091, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingStructureFridgeBig", - "Title": "Fridge (Large)", - "Description": "The Xigo Koolaid fridge is a self-cooling storage device with 15 slots that preserves food when powered and turned on. While many users have complained about the placement of the power switch, its place in the pantheon of off-world whiteware is unquestioned.\n \nWith its own permanent internal atmosphere, the Koolaid fridge slows the decay of food by maintaining an optimal internal temperature. Its power usage varies on the external temperature against which it must balance its internal temperature. As such, it must shed heat to operate, so the Koolaid fridge DOES NOT work in a vacuum.\n \nAlso, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep.\n\nFor more information about food preservation, visit the food decay section of the Stationpedia.", - "PrefabName": "StructureFridgeBig", - "PrefabHash": 958476921, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "11" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "12" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "13" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "14" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "11": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "12": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "13": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "14": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureFridgeSmall", - "Title": "Fridge Small", - "Description": "Essentially a heavily insulated box that allows users to pipe in any desired atmosphere, the Recurso Minibar fridge was a simple solution to the problem of food decay. It stores a small number of items, at any temperature you can muster.\n \n For more information about food preservation, visit the food decay section of the Stationpedia.", - "PrefabName": "StructureFridgeSmall", - "PrefabHash": 751887598, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureFurnace", - "Title": "Furnace", - "Description": "The Zhurong furnace employs a high-temperature gas mixture of Oxygen and Volatiles to smelt ingots and a range of alloys as raw materials for fabricators.\nA basic gas mixture can be achieved by adding Ice (Oxite) and Ice (Volatiles) in a 1:2 ratio directly to the furnace, but more complex alloys will require careful management of a dedicated gas mixing network. Exact ingredient ratios must be observed. Likewise, smelting ores at insufficient temperatures will produce reagents, which must be recycled.\nIf liquids are present in the furnace, they will gather there until the furnace is connected to a liquid pipe network.", - "PrefabName": "StructureFurnace", - "PrefabHash": 1947944864, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Liquid Output2", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "5" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Reagents": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "RecipeHash": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "PipeLiquid", - "Output2" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": true, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCableFuse100k", - "Title": "Fuse (100kW)", - "Description": "", - "PrefabName": "StructureCableFuse100k", - "PrefabHash": 281380789, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCableFuse1k", - "Title": "Fuse (1kW)", - "Description": "", - "PrefabName": "StructureCableFuse1k", - "PrefabHash": -1103727120, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCableFuse50k", - "Title": "Fuse (50kW)", - "Description": "", - "PrefabName": "StructureCableFuse50k", - "PrefabHash": -349716617, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCableFuse5k", - "Title": "Fuse (5kW)", - "Description": "", - "PrefabName": "StructureCableFuse5k", - "PrefabHash": -631590668, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureFuselageTypeA1", - "Title": "Fuselage (Type A1)", - "Description": "", - "PrefabName": "StructureFuselageTypeA1", - "PrefabHash": 1033024712, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureFuselageTypeA2", - "Title": "Fuselage (Type A2)", - "Description": "", - "PrefabName": "StructureFuselageTypeA2", - "PrefabHash": -1533287054, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureFuselageTypeA4", - "Title": "Fuselage (Type A4)", - "Description": "", - "PrefabName": "StructureFuselageTypeA4", - "PrefabHash": 1308115015, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureFuselageTypeC5", - "Title": "Fuselage (Type C5)", - "Description": "", - "PrefabName": "StructureFuselageTypeC5", - "PrefabHash": 147395155, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingCartridgeGPS", - "Title": "GPS", - "Description": "", - "PrefabName": "CartridgeGPS", - "PrefabHash": -1957063345, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemGasCanisterNitrousOxide", - "Title": "Gas Canister (Sleeping)", - "Description": "", - "PrefabName": "ItemGasCanisterNitrousOxide", - "PrefabHash": -1712153401, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemGasCanisterSmart", - "Title": "Gas Canister (Smart)", - "Description": "0.Mode0\n1.Mode1", - "PrefabName": "ItemGasCanisterSmart", - "PrefabHash": -668314371, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingStructureMediumRocketGasFuelTank", - "Title": "Gas Capsule Tank Medium", - "Description": "", - "PrefabName": "StructureMediumRocketGasFuelTank", - "PrefabHash": -1093860567, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Output" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCapsuleTankGas", - "Title": "Gas Capsule Tank Small", - "Description": "", - "PrefabName": "StructureCapsuleTankGas", - "PrefabHash": -1385712131, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingCircuitboardGasDisplay", - "Title": "Gas Display", - "Description": "Information is power. Place this circuitboard into a Console to create a display that shows gas pressure or temperature of any connected tank, storage cannister, Kit (Pipe Analyzer) or Kit (Gas Sensor).", - "PrefabName": "CircuitboardGasDisplay", - "PrefabHash": -82343730, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureGasGenerator", - "Title": "Gas Fuel Generator", - "Description": "", - "PrefabName": "StructureGasGenerator", - "PrefabHash": 1165997963, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerGeneration", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PowerGeneration": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureGasMixer", - "Title": "Gas Mixer", - "Description": "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.", - "PrefabName": "StructureGasMixer", - "PrefabHash": 2104106366, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Output" - ], - [ - "Pipe", - "Input2" - ], - [ - "Pipe", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureGasSensor", - "Title": "Gas Sensor", - "Description": "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.", - "PrefabName": "StructureGasSensor", - "PrefabHash": -1252983604, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingDynamicGasTankAdvanced", - "Title": "Gas Tank Mk II", - "Description": "0.Mode0\n1.Mode1", - "PrefabName": "DynamicGasTankAdvanced", - "PrefabHash": -386375420, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureGasTankStorage", - "Title": "Gas Tank Storage", - "Description": "When connected to a pipe network, the tank storage unit allows you to refill a Canister, as well as read various atmospheric data from the Gas Canister.", - "PrefabName": "StructureGasTankStorage", - "PrefabHash": 1632165346, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "GasCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Quantity": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSolidFuelGenerator", - "Title": "Generator (Solid Fuel)", - "Description": "The mainstay of power generation for Stationeers, this device provides 20kW of power. Multiple solid resources can be loaded. While operating, the device will output its maximum power regardless of whether you have captured it or not. Watch for blown wires! It will output much more power than your regular Cable Coil can handle.", - "PrefabName": "StructureSolidFuelGenerator", - "PrefabHash": 813146305, - "SlotInserts": [ - { - "SlotName": "Input", - "SlotType": "Ore", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerGeneration", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Not Generating", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Generating", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "ClearMemory": "Write", - "ImportCount": "Read", - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Data", - "None" - ], - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureGlassDoor", - "Title": "Glass Door", - "Description": "0.Operate\n1.Logic", - "PrefabName": "StructureGlassDoor", - "PrefabHash": -324331872, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemGlassSheets", - "Title": "Glass Sheets", - "Description": "A fundamental construction component, glass sheets are created from Silicon. Fabricated on the Autolathe, they are used to make {THING:StructureSolarPanel;Solar Panels}, and many other structures.", - "PrefabName": "ItemGlassSheets", - "PrefabHash": 1588896491, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemGlasses", - "Title": "Glasses", - "Description": "", - "PrefabName": "ItemGlasses", - "PrefabHash": -1068925231, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Glasses", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingCircuitboardGraphDisplay", - "Title": "Graph Display", - "Description": "", - "PrefabName": "CircuitboardGraphDisplay", - "PrefabHash": 1344368806, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureGrowLight", - "Title": "Grow Light", - "Description": "Agrizero's leading hydroponic lighting system, the GrowUp UV light supplements sunshine in low light or sun-distant conditions. The unit adds growability over the space of a grid, so requires proximate placement to work. ", - "PrefabName": "StructureGrowLight", - "PrefabHash": -1758710260, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingCartridgeGuide", - "Title": "Guide", - "Description": "", - "PrefabName": "CartridgeGuide", - "PrefabHash": 872720793, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingH2Combustor", - "Title": "H2 Combustor", - "Description": "Adapted slightly from its original Recurso design, the Volatiles Combustor does exactly what its name suggests - it burns a mixture of volatiles and Oxygen to create water. Extremely useful in hot or arid environments, users need to be aware that the combustor outputs considerable waste heat. The device is also less than perfectly efficient, resulting in the autoignition of volatiles in the chamber, and the production of waste gases which must be dealt with.", - "PrefabName": "H2Combustor", - "PrefabHash": 1840108251, - "SlotInserts": [ - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Idle", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Active", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "PressureInput": "Read", - "TemperatureInput": "Read", - "RatioOxygenInput": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioNitrogenInput": "Read", - "RatioPollutantInput": "Read", - "RatioVolatilesInput": "Read", - "RatioWaterInput": "Read", - "RatioNitrousOxideInput": "Read", - "TotalMolesInput": "Read", - "PressureOutput": "Read", - "TemperatureOutput": "Read", - "RatioOxygenOutput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioNitrogenOutput": "Read", - "RatioPollutantOutput": "Read", - "RatioVolatilesOutput": "Read", - "RatioWaterOutput": "Read", - "RatioNitrousOxideOutput": "Read", - "TotalMolesOutput": "Read", - "CombustionInput": "Read", - "CombustionOutput": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "Power", - "None" - ] - ], - "DevicesLength": 2, - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemHEMDroidRepairKit", - "Title": "HEMDroid Repair Kit", - "Description": "Repairs damaged HEM-Droids to full health.", - "PrefabName": "ItemHEMDroidRepairKit", - "PrefabHash": 470636008, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemPlantThermogenic_Genepool1", - "Title": "Hades Flower (Alpha strain)", - "Description": "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant.", - "PrefabName": "ItemPlantThermogenic_Genepool1", - "PrefabHash": -177792789, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemPlantThermogenic_Genepool2", - "Title": "Hades Flower (Beta strain)", - "Description": "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant. The beta strain is notably more efficient than the earlier, more experimental alpha variant.", - "PrefabName": "ItemPlantThermogenic_Genepool2", - "PrefabHash": 1819167057, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemDrill", - "Title": "Hand Drill", - "Description": "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", - "PrefabName": "ItemDrill", - "PrefabHash": 2009673399, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemGrenade", - "Title": "Hand Grenade", - "Description": "Invented by the Romans, who threw Greek Fire at their enemies in ceramic jars, the word 'grenade' is derived from the Old French word for 'pomegranate', as many modern grenades resemble this round, many-seeded fruit. Also like many grenades before it, this one goes boom and breaks stuff.", - "PrefabName": "ItemGrenade", - "PrefabHash": 1544275894, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingHandgun", - "Title": "Handgun", - "Description": "", - "PrefabName": "Handgun", - "PrefabHash": 247238062, - "SlotInserts": [ - { - "SlotName": "Magazine", - "SlotType": "Magazine", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingHandgunMagazine", - "Title": "Handgun Magazine", - "Description": "", - "PrefabName": "HandgunMagazine", - "PrefabHash": 1254383185, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Magazine", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemScanner", - "Title": "Handheld Scanner", - "Description": "A mysterious piece of technology, rumored to have Zrillian origins.", - "PrefabName": "ItemScanner", - "PrefabHash": 1661270830, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemTablet", - "Title": "Handheld Tablet", - "Description": "The Xigo handheld 'Padi' tablet is an all-purpose data platform, provided as standard issue to all Stationeers. A dynamic multi-tool that accepts a range of cartridges, the Padi becomes an Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, eReader, and various other functions.", - "PrefabName": "ItemTablet", - "PrefabHash": -229808600, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Cartridge", - "SlotType": "Cartridge", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemHardMiningBackPack", - "Title": "Hard Mining Backpack", - "Description": "", - "PrefabName": "ItemHardMiningBackPack", - "PrefabHash": 900366130, - "SlotInserts": [ - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "0" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "1" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "2" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "3" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "4" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "5" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "6" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "7" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "8" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "9" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "10" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "11" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "12" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "13" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "14" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "15" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "16" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "17" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "18" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "19" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "20" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "21" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "22" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "23" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "24" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "25" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "26" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "27" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Back", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemHardSuit", - "Title": "Hardsuit", - "Description": "Connects to Logic Transmitter", - "PrefabName": "ItemHardSuit", - "PrefabHash": -1758310454, - "SlotInserts": [ - { - "SlotName": "Air Tank", - "SlotType": "GasCanister", - "SlotIndex": "0" - }, - { - "SlotName": "Waste Tank", - "SlotType": "GasCanister", - "SlotIndex": "1" - }, - { - "SlotName": "Life Support", - "SlotType": "Battery", - "SlotIndex": "2" - }, - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "3" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "4" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "5" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "6" - }, - { - "SlotName": "Filter", - "SlotType": "GasFilter", - "SlotIndex": "7" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureExternal", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PressureSetting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TemperatureSetting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TemperatureExternal", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Filtration", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "AirRelease", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PositionX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityMagnitude", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SoundAlert", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ForwardX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ForwardY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ForwardZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Orientation", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "EntityState", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "2" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "FilterType", - "LogicAccessTypes": "4, 5, 6, 7" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "FilterType": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "FilterType": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "FilterType": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "FilterType": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "PressureExternal": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "TotalMoles": "Read", - "Volume": "ReadWrite", - "PressureSetting": "ReadWrite", - "TemperatureSetting": "ReadWrite", - "TemperatureExternal": "Read", - "Filtration": "ReadWrite", - "AirRelease": "ReadWrite", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "VelocityMagnitude": "Read", - "VelocityRelativeX": "Read", - "VelocityRelativeY": "Read", - "VelocityRelativeZ": "Read", - "RatioNitrousOxide": "Read", - "Combustion": "Read", - "SoundAlert": "ReadWrite", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "ForwardX": "Read", - "ForwardY": "Read", - "ForwardZ": "Read", - "Orientation": "Read", - "VelocityX": "Read", - "VelocityY": "Read", - "VelocityZ": "Read", - "EntityState": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Memory": { - "MemorySize": 0, - "MemorySizeReadable": "0 B", - "MemoryAccess": "ReadWrite" - }, - "WirelessLogic": true, - "Item": { - "SlotClass": "Suit", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemHardBackpack", - "Title": "Hardsuit Backpack", - "Description": "This backpack can be useful when you are working inside and don't need to fly around.", - "PrefabName": "ItemHardBackpack", - "PrefabHash": 374891127, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "11" - } - ], - "LogicInsert": [ - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Back", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemHardsuitHelmet", - "Title": "Hardsuit Helmet", - "Description": "The Hardsuit Helmet is similar to the Space Helmet, but can withstand higher temperatures and pressures. It's perfect for enduring harsh environments like Venus and Vulcan.", - "PrefabName": "ItemHardsuitHelmet", - "PrefabHash": -84573099, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Flush", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "SoundAlert", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Lock": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "TotalMoles": "Read", - "Volume": "ReadWrite", - "RatioNitrousOxide": "Read", - "Combustion": "Read", - "Flush": "Write", - "SoundAlert": "ReadWrite", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Item": { - "SlotClass": "Helmet", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemHardJetpack", - "Title": "Hardsuit Jetpack", - "Description": "The Norsec jetpack isn't 'technically' a jetpack at all, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nThe hardsuit jetpack is capable of much higher speeds than the Jetpack Basic - up to 15m/s. Indispensable for building, mining and general movement, it has fourteen storage slots.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", - "PrefabName": "ItemHardJetpack", - "PrefabHash": -412551656, - "SlotInserts": [ - { - "SlotName": "Propellant", - "SlotType": "GasCanister", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "11" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "12" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "13" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "14" - } - ], - "LogicInsert": [ - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "12": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "13": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "14": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Back", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingStructureHarvie", - "Title": "Harvie", - "Description": "Use above a Hydroponics Tray or Hydroponics Device to manage the planting and harvest of your crops. It contains a button that will allow you to activate it's modes, or connect it to a logic system to do this for you. The modes indicate current growth status of the plant below. Import is used for planting, and harvested plants are sent to export.", - "PrefabName": "StructureHarvie", - "PrefabHash": 958056199, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Plant", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Hand", - "SlotType": "None", - "SlotIndex": "2" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Plant", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "Harvest", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2" - } - ], - "ModeInsert": [ - { - "LogicName": "Idle", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Happy", - "LogicAccessTypes": "1" - }, - { - "LogicName": "UnHappy", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Dead", - "LogicAccessTypes": "3" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "Plant": "Write", - "Harvest": "Write", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingCircuitboardHashDisplay", - "Title": "Hash Display", - "Description": "", - "PrefabName": "CircuitboardHashDisplay", - "PrefabHash": 1633074601, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemHat", - "Title": "Hat", - "Description": "As the name suggests, this is a hat.", - "PrefabName": "ItemHat", - "PrefabHash": 299189339, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Helmet", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemCropHay", - "Title": "Hay", - "Description": "", - "PrefabName": "ItemCropHay", - "PrefabHash": 215486157, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemWearLamp", - "Title": "Headlamp", - "Description": "", - "PrefabName": "ItemWearLamp", - "PrefabHash": -598730959, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Helmet", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingStructureHeatExchangerGastoGas", - "Title": "Heat Exchanger - Gas", - "Description": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to gas management devices like a Volume Pump or a Back Pressure Regulator.", - "PrefabName": "StructureHeatExchangerGastoGas", - "PrefabHash": 21266291, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "Pipe", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureHeatExchangerLiquidtoLiquid", - "Title": "Heat Exchanger - Liquid", - "Description": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two liquid networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to liquid management devices like a Liquid Volume Pump or a Liquid Back Volume Regulator.\n", - "PrefabName": "StructureHeatExchangerLiquidtoLiquid", - "PrefabHash": -613784254, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureHeatExchangeLiquidtoGas", - "Title": "Heat Exchanger - Liquid + Gas", - "Description": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass separate liquid and gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to devices like a Volume Pump or a Liquid Back Volume Regulator.", - "PrefabName": "StructureHeatExchangeLiquidtoGas", - "PrefabHash": 944685608, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCableCornerH3", - "Title": "Heavy Cable (3-Way Corner)", - "Description": "", - "PrefabName": "StructureCableCornerH3", - "PrefabHash": -1843379322, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureCableJunctionH", - "Title": "Heavy Cable (3-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunctionH", - "PrefabHash": 469451637, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureCableCornerH4", - "Title": "Heavy Cable (4-Way Corner)", - "Description": "", - "PrefabName": "StructureCableCornerH4", - "PrefabHash": 205837861, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructureCableJunctionH4", - "Title": "Heavy Cable (4-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunctionH4", - "PrefabHash": -742234680, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructureCableJunctionH5", - "Title": "Heavy Cable (5-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunctionH5", - "PrefabHash": -1530571426, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - } - ] - }, - { - "Key": "ThingStructureCableJunctionH6", - "Title": "Heavy Cable (6-Way Junction)", - "Description": "", - "PrefabName": "StructureCableJunctionH6", - "PrefabHash": 1036780772, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "5" - } - ] - }, - { - "Key": "ThingStructureCableCornerH", - "Title": "Heavy Cable (Corner)", - "Description": "", - "PrefabName": "StructureCableCornerH", - "PrefabHash": -39359015, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureCableStraightH", - "Title": "Heavy Cable (Straight)", - "Description": "", - "PrefabName": "StructureCableStraightH", - "PrefabHash": -146200530, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingItemGasFilterCarbonDioxideL", - "Title": "Heavy Filter (Carbon Dioxide)", - "Description": "", - "PrefabName": "ItemGasFilterCarbonDioxideL", - "PrefabHash": 1876847024, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "CarbonDioxide" - } - }, - { - "Key": "ThingItemGasFilterNitrogenL", - "Title": "Heavy Filter (Nitrogen)", - "Description": "", - "PrefabName": "ItemGasFilterNitrogenL", - "PrefabHash": -1387439451, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Nitrogen" - } - }, - { - "Key": "ThingItemGasFilterNitrousOxideL", - "Title": "Heavy Filter (Nitrous Oxide)", - "Description": "", - "PrefabName": "ItemGasFilterNitrousOxideL", - "PrefabHash": 465267979, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "NitrousOxide" - } - }, - { - "Key": "ThingItemGasFilterOxygenL", - "Title": "Heavy Filter (Oxygen)", - "Description": "", - "PrefabName": "ItemGasFilterOxygenL", - "PrefabHash": -1217998945, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Oxygen" - } - }, - { - "Key": "ThingItemGasFilterPollutantsL", - "Title": "Heavy Filter (Pollutants)", - "Description": "", - "PrefabName": "ItemGasFilterPollutantsL", - "PrefabHash": 1959564765, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Pollutant" - } - }, - { - "Key": "ThingItemGasFilterVolatilesL", - "Title": "Heavy Filter (Volatiles)", - "Description": "", - "PrefabName": "ItemGasFilterVolatilesL", - "PrefabHash": 1255156286, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Volatiles" - } - }, - { - "Key": "ThingItemGasFilterWaterL", - "Title": "Heavy Filter (Water)", - "Description": "", - "PrefabName": "ItemGasFilterWaterL", - "PrefabHash": 2004969680, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Steam" - } - }, - { - "Key": "ThingItemHighVolumeGasCanisterEmpty", - "Title": "High Volume Gas Canister", - "Description": "", - "PrefabName": "ItemHighVolumeGasCanisterEmpty", - "PrefabHash": 998653377, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemHorticultureBelt", - "Title": "Horticulture Belt", - "Description": "", - "PrefabName": "ItemHorticultureBelt", - "PrefabHash": -1117581553, - "SlotInserts": [ - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "0" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "1" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "2" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "3" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "4" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "5" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "6" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "7" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "8" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "9" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Belt", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingHumanSkull", - "Title": "Human Skull", - "Description": "", - "PrefabName": "HumanSkull", - "PrefabHash": -857713709, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureHydraulicPipeBender", - "Title": "Hydraulic Pipe Bender", - "Description": "A go-to tool for all your atmospheric and plumbing needs, the ExMin Atmoprinter will create everything from pipes, pumps and tanks, to vents and filters, ensuring your survival in any environment. Upgrade the Atmoprinter using a Pipe Bender Mod for additional recipes and faster processing speeds.", - "PrefabName": "StructureHydraulicPipeBender", - "PrefabHash": -1888248335, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Ingot", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "CompletionRatio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RecipeHash": "ReadWrite", - "CompletionRatio": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureHydroponicsTrayData", - "Title": "Hydroponics Device", - "Description": "The Agrizero hydroponics device is the ideal vessel for growing a range of plantlife. It must be supplied with Water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie. Note that unlike the Hydroponics Tray, these cannot be placed consecutively as they are considered devices rather than pure pipes. They do, however, allow data interrogation for logic systems.", - "PrefabName": "StructureHydroponicsTrayData", - "PrefabHash": -1841632400, - "SlotInserts": [ - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "0" - }, - { - "SlotName": "Fertiliser", - "SlotType": "Plant", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Efficiency", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Health", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Growth", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Mature", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Seeding", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Health": "Read", - "Growth": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "Mature": "Read", - "PrefabHash": "Read", - "Seeding": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "None" - ], - [ - "PipeLiquid", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureHydroponicsStation", - "Title": "Hydroponics Station", - "Description": "", - "PrefabName": "StructureHydroponicsStation", - "PrefabHash": 1441767298, - "SlotInserts": [ - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "0" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "1" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "2" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "3" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "4" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "5" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "6" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "7" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Efficiency", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Health", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Growth", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "Mature", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Health": "Read", - "Growth": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "Mature": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Health": "Read", - "Growth": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "Mature": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Health": "Read", - "Growth": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "Mature": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Health": "Read", - "Growth": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "Mature": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Health": "Read", - "Growth": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "Mature": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Health": "Read", - "Growth": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "Mature": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Health": "Read", - "Growth": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "Mature": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Health": "Read", - "Growth": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "Mature": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureHydroponicsTray", - "Title": "Hydroponics Tray", - "Description": "The Agrizero hydroponics tray is the ideal vessel for growing a range of plantlife. It must be supplied with water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie.", - "PrefabName": "StructureHydroponicsTray", - "PrefabHash": 1464854517, - "SlotInserts": [ - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "0" - }, - { - "SlotName": "Fertiliser", - "SlotType": "Plant", - "SlotIndex": "1" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingMotherboardProgrammableChip", - "Title": "IC Editor Motherboard", - "Description": "When placed in a Computer, the IC Editor allows players to write and edit IC code, which can then be uploaded to a Integrated Circuit (IC10) if housed in an IC Housing.", - "PrefabName": "MotherboardProgrammableChip", - "PrefabHash": -161107071, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Motherboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureCircuitHousing", - "Title": "IC Housing", - "Description": "", - "PrefabName": "StructureCircuitHousing", - "PrefabHash": -128473777, - "SlotInserts": [ - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "LineNumber", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "LineNumber", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "LineNumber": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "LineNumber": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Memory": { - "MemorySize": 0, - "MemorySizeReadable": "0 B", - "MemoryAccess": "ReadWrite" - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Power", - "None" - ] - ], - "DevicesLength": 6, - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemNitrice", - "Title": "Ice (Nitrice)", - "Description": "Nitrice is the nickname given to solid Nitrogen Ice, and found on many planets and moons in the Solar System. Given the inert nature of the Nitrogen it produces, the ice is useful when making breathable atmospheres with low flammability.\n\nHighly sensitive to temperature, nitrice will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small.", - "PrefabName": "ItemNitrice", - "PrefabHash": -1499471529, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemOxite", - "Title": "Ice (Oxite)", - "Description": "Oxite ice is largely composed of frozen Oxygen, and found on many planets in the Solar System. Highly valuable and sought after, not all planets a Stationeer visits will have some. \n\nHighly sensitive to temperature, oxite will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small. When melting, oxite produces a mixture of Oxygen and Nitrogen.", - "PrefabName": "ItemOxite", - "PrefabHash": -1805394113, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemVolatiles", - "Title": "Ice (Volatiles)", - "Description": "An extremely reactive ice with numerous hydrocarbons trapped inside. For simplicity's sake, these are often displayed as H2 by devices like the Atmos Analyzer.\n \nVolatiles combust in a 2:1 ratio with Oxygen, creating Carbon Dioxide and pollutants. However when catalysed via devices such as the H2 Combustor in the presence of Oxygen, they produce\n Steam and heat with a modicum of Carbon Dioxide and Pollutant due to the autoignition of the volatiles in the chamber. Along with Oxygen, volatiles gas is also the major component of fuel for such devices as the Welding Torch.\n", - "PrefabName": "ItemVolatiles", - "PrefabHash": 1253102035, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemIce", - "Title": "Ice (Water)", - "Description": "Water ice can be found on most planets in the Solar System, though not all worlds visited by Stationeers possess this resource. Highly sensitive to temperature, ice will begin to melt as soon as it is mined, unless kept in the Mining Belt. When melting, ice produces a mixture of Steam and Nitrogen gas.", - "PrefabName": "ItemIce", - "PrefabHash": 1217489948, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingStructureIceCrusher", - "Title": "Ice Crusher", - "Description": "The Recurso KoolAuger converts various ices into their respective gases and liquids.\nA remarkably smart and compact sublimation-melting unit, it produces gas or liquid depending on the ice being processed. The upper outlet is gas, the lower for liquid, and while you can attach any pipe you like to either outlet, it will only function if the correct network is attached. It will also only pass gas or liquid into a network if it is powered and turned on.\nIf the KoolAuger is full, it will not accept any further ice until the gas or liquid contents is drained. In this state, it will flash a yellow error state on the activation switch.", - "PrefabName": "StructureIceCrusher", - "PrefabHash": 443849486, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Ore", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Liquid Output2", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "Chute", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "PipeLiquid", - "Output2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureIgniter", - "Title": "Igniter", - "Description": "It gets the party started. Especially if that party is an explosive gas mixture.", - "PrefabName": "StructureIgniter", - "PrefabHash": 1005491513, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureEmergencyButton", - "Title": "Important Button", - "Description": "Description coming.", - "PrefabName": "StructureEmergencyButton", - "PrefabHash": 1668452680, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureInLineTankGas1x2", - "Title": "In-Line Tank Gas", - "Description": "A small expansion tank that increases the volume of a pipe network.", - "PrefabName": "StructureInLineTankGas1x2", - "PrefabHash": 35149429, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInLineTankLiquid1x2", - "Title": "In-Line Tank Liquid", - "Description": "A small expansion tank that increases the volume of a pipe network.", - "PrefabName": "StructureInLineTankLiquid1x2", - "PrefabHash": -1183969663, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInLineTankGas1x1", - "Title": "In-Line Tank Small Gas", - "Description": "A small expansion tank that increases the volume of a pipe network.", - "PrefabName": "StructureInLineTankGas1x1", - "PrefabHash": -1693382705, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInLineTankLiquid1x1", - "Title": "In-Line Tank Small Liquid", - "Description": "A small expansion tank that increases the volume of a pipe network.", - "PrefabName": "StructureInLineTankLiquid1x1", - "PrefabHash": 543645499, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingItemAstroloyIngot", - "Title": "Ingot (Astroloy)", - "Description": "Due to the original Stationeer manual collapsing into a singularity, Astroloy recipes have been warped by spacetime contortions. The correct Astroloy recipe, as memorialized for all time in a series of charming plastic icons, is 1.0 Copper, 1.0 Cobalt, and 2.0 Steel.", - "PrefabName": "ItemAstroloyIngot", - "PrefabHash": 412924554, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Astroloy": 1.0 - } - } - }, - { - "Key": "ThingItemConstantanIngot", - "Title": "Ingot (Constantan)", - "Description": "", - "PrefabName": "ItemConstantanIngot", - "PrefabHash": 1058547521, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Constantan": 1.0 - } - } - }, - { - "Key": "ThingItemCopperIngot", - "Title": "Ingot (Copper)", - "Description": "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.", - "PrefabName": "ItemCopperIngot", - "PrefabHash": -404336834, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Copper": 1.0 - } - } - }, - { - "Key": "ThingItemElectrumIngot", - "Title": "Ingot (Electrum)", - "Description": "", - "PrefabName": "ItemElectrumIngot", - "PrefabHash": 502280180, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Electrum": 1.0 - } - } - }, - { - "Key": "ThingItemGoldIngot", - "Title": "Ingot (Gold)", - "Description": "There is an enduring paradox at the heart of the Stationeers project: An initiative conceived as 'cut-price space exploration' uses Gold as a fundamental ingredient in fabricating so much of its equipment and materiel. ", - "PrefabName": "ItemGoldIngot", - "PrefabHash": 226410516, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Gold": 1.0 - } - } - }, - { - "Key": "ThingItemHastelloyIngot", - "Title": "Ingot (Hastelloy)", - "Description": "", - "PrefabName": "ItemHastelloyIngot", - "PrefabHash": 1579842814, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Hastelloy": 1.0 - } - } - }, - { - "Key": "ThingItemInconelIngot", - "Title": "Ingot (Inconel)", - "Description": "", - "PrefabName": "ItemInconelIngot", - "PrefabHash": -787796599, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Inconel": 1.0 - } - } - }, - { - "Key": "ThingItemInvarIngot", - "Title": "Ingot (Invar)", - "Description": "", - "PrefabName": "ItemInvarIngot", - "PrefabHash": -297990285, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Invar": 1.0 - } - } - }, - { - "Key": "ThingItemIronIngot", - "Title": "Ingot (Iron)", - "Description": "The most basic unit of construction available to Stationeer-kind, iron ingots are created by smelting Ore (Iron) in the Furnace and Arc Furnace, and used to create a variety of items.", - "PrefabName": "ItemIronIngot", - "PrefabHash": -1301215609, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Iron": 1.0 - } - } - }, - { - "Key": "ThingItemLeadIngot", - "Title": "Ingot (Lead)", - "Description": "", - "PrefabName": "ItemLeadIngot", - "PrefabHash": 2134647745, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Lead": 1.0 - } - } - }, - { - "Key": "ThingItemNickelIngot", - "Title": "Ingot (Nickel)", - "Description": "", - "PrefabName": "ItemNickelIngot", - "PrefabHash": -1406385572, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Nickel": 1.0 - } - } - }, - { - "Key": "ThingItemSiliconIngot", - "Title": "Ingot (Silicon)", - "Description": "", - "PrefabName": "ItemSiliconIngot", - "PrefabHash": -290196476, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Silicon": 1.0 - } - } - }, - { - "Key": "ThingItemSilverIngot", - "Title": "Ingot (Silver)", - "Description": "", - "PrefabName": "ItemSilverIngot", - "PrefabHash": -929742000, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Silver": 1.0 - } - } - }, - { - "Key": "ThingItemSolderIngot", - "Title": "Ingot (Solder)", - "Description": "", - "PrefabName": "ItemSolderIngot", - "PrefabHash": -82508479, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Solder": 1.0 - } - } - }, - { - "Key": "ThingItemSteelIngot", - "Title": "Ingot (Steel)", - "Description": "Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1.\nIt may not be elegant, but Ice (Oxite) and Ice (Volatiles) can be combined at a ratio of 1:2 in a furnace to create the necessary gas mixture for smelting.", - "PrefabName": "ItemSteelIngot", - "PrefabHash": -654790771, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Steel": 1.0 - } - } - }, - { - "Key": "ThingItemStelliteIngot", - "Title": "Ingot (Stellite)", - "Description": "", - "PrefabName": "ItemStelliteIngot", - "PrefabHash": -1897868623, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Stellite": 1.0 - } - } - }, - { - "Key": "ThingItemWaspaloyIngot", - "Title": "Ingot (Waspaloy)", - "Description": "", - "PrefabName": "ItemWaspaloyIngot", - "PrefabHash": 156348098, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ingot", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Waspaloy": 1.0 - } - } - }, - { - "Key": "ThingStructureInsulatedInLineTankGas1x2", - "Title": "Insulated In-Line Tank Gas", - "Description": "", - "PrefabName": "StructureInsulatedInLineTankGas1x2", - "PrefabHash": -177610944, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInsulatedInLineTankLiquid1x2", - "Title": "Insulated In-Line Tank Liquid", - "Description": "", - "PrefabName": "StructureInsulatedInLineTankLiquid1x2", - "PrefabHash": 1452100517, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInsulatedInLineTankGas1x1", - "Title": "Insulated In-Line Tank Small Gas", - "Description": "", - "PrefabName": "StructureInsulatedInLineTankGas1x1", - "PrefabHash": 1818267386, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInsulatedInLineTankLiquid1x1", - "Title": "Insulated In-Line Tank Small Liquid", - "Description": "", - "PrefabName": "StructureInsulatedInLineTankLiquid1x1", - "PrefabHash": -813426145, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeLiquidCrossJunction", - "Title": "Insulated Liquid Pipe (3-Way Junction)", - "Description": "Liquid piping with very low temperature loss or gain.", - "PrefabName": "StructureInsulatedPipeLiquidCrossJunction", - "PrefabHash": 1926651727, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeLiquidCrossJunction4", - "Title": "Insulated Liquid Pipe (4-Way Junction)", - "Description": "Liquid piping with very low temperature loss or gain.", - "PrefabName": "StructureInsulatedPipeLiquidCrossJunction4", - "PrefabHash": 363303270, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeLiquidCrossJunction5", - "Title": "Insulated Liquid Pipe (5-Way Junction)", - "Description": "Liquid piping with very low temperature loss or gain.", - "PrefabName": "StructureInsulatedPipeLiquidCrossJunction5", - "PrefabHash": 1654694384, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeLiquidCrossJunction6", - "Title": "Insulated Liquid Pipe (6-Way Junction)", - "Description": "Liquid piping with very low temperature loss or gain.", - "PrefabName": "StructureInsulatedPipeLiquidCrossJunction6", - "PrefabHash": -72748982, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "5" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeLiquidCorner", - "Title": "Insulated Liquid Pipe (Corner)", - "Description": "Liquid piping with very low temperature loss or gain.", - "PrefabName": "StructureInsulatedPipeLiquidCorner", - "PrefabHash": 1713710802, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructurePipeInsulatedLiquidCrossJunction", - "Title": "Insulated Liquid Pipe (Cross Junction)", - "Description": "Liquid piping with very low temperature loss or gain.", - "PrefabName": "StructurePipeInsulatedLiquidCrossJunction", - "PrefabHash": -2068497073, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeLiquidStraight", - "Title": "Insulated Liquid Pipe (Straight)", - "Description": "Liquid piping with very low temperature loss or gain.", - "PrefabName": "StructureInsulatedPipeLiquidStraight", - "PrefabHash": 295678685, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeLiquidTJunction", - "Title": "Insulated Liquid Pipe (T Junction)", - "Description": "Liquid piping with very low temperature loss or gain.", - "PrefabName": "StructureInsulatedPipeLiquidTJunction", - "PrefabHash": -532384855, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureLiquidTankBigInsulated", - "Title": "Insulated Liquid Tank Big", - "Description": "", - "PrefabName": "StructureLiquidTankBigInsulated", - "PrefabHash": -1430440215, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidTankSmallInsulated", - "Title": "Insulated Liquid Tank Small", - "Description": "", - "PrefabName": "StructureLiquidTankSmallInsulated", - "PrefabHash": 608607718, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePassiveVentInsulated", - "Title": "Insulated Passive Vent", - "Description": "", - "PrefabName": "StructurePassiveVentInsulated", - "PrefabHash": 1363077139, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeCrossJunction3", - "Title": "Insulated Pipe (3-Way Junction)", - "Description": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "PrefabName": "StructureInsulatedPipeCrossJunction3", - "PrefabHash": 1328210035, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeCrossJunction4", - "Title": "Insulated Pipe (4-Way Junction)", - "Description": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "PrefabName": "StructureInsulatedPipeCrossJunction4", - "PrefabHash": -783387184, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeCrossJunction5", - "Title": "Insulated Pipe (5-Way Junction)", - "Description": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "PrefabName": "StructureInsulatedPipeCrossJunction5", - "PrefabHash": -1505147578, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeCrossJunction6", - "Title": "Insulated Pipe (6-Way Junction)", - "Description": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "PrefabName": "StructureInsulatedPipeCrossJunction6", - "PrefabHash": 1061164284, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "5" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeCorner", - "Title": "Insulated Pipe (Corner)", - "Description": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "PrefabName": "StructureInsulatedPipeCorner", - "PrefabHash": -1967711059, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeCrossJunction", - "Title": "Insulated Pipe (Cross Junction)", - "Description": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "PrefabName": "StructureInsulatedPipeCrossJunction", - "PrefabHash": -92778058, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeStraight", - "Title": "Insulated Pipe (Straight)", - "Description": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "PrefabName": "StructureInsulatedPipeStraight", - "PrefabHash": 2134172356, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructureInsulatedPipeTJunction", - "Title": "Insulated Pipe (T Junction)", - "Description": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "PrefabName": "StructureInsulatedPipeTJunction", - "PrefabHash": -2076086215, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureInsulatedTankConnector", - "Title": "Insulated Tank Connector", - "Description": "", - "PrefabName": "StructureInsulatedTankConnector", - "PrefabHash": -31273349, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ] - }, - { - "Key": "ThingStructureInsulatedTankConnectorLiquid", - "Title": "Insulated Tank Connector Liquid", - "Description": "", - "PrefabName": "StructureInsulatedTankConnectorLiquid", - "PrefabHash": -1602030414, - "SlotInserts": [ - { - "SlotName": "Portable Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ] - }, - { - "Key": "ThingItemInsulation", - "Title": "Insulation", - "Description": "Mysterious in the extreme, the function of this item is lost to the ages.", - "PrefabName": "ItemInsulation", - "PrefabHash": 897176943, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources" - } - }, - { - "Key": "ThingItemIntegratedCircuit10", - "Title": "Integrated Circuit (IC10)", - "Description": "", - "PrefabName": "ItemIntegratedCircuit10", - "PrefabHash": -744098481, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "LineNumber", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "LineNumber": "Read", - "ReferenceId": "Read" - } - }, - "Memory": { - "MemorySize": 512, - "MemorySizeReadable": "4096 KB", - "MemoryAccess": "ReadWrite" - }, - "Item": { - "SlotClass": "ProgrammableChip", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureInteriorDoorGlass", - "Title": "Interior Door Glass", - "Description": "0.Operate\n1.Logic", - "PrefabName": "StructureInteriorDoorGlass", - "PrefabHash": -2096421875, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureInteriorDoorPadded", - "Title": "Interior Door Padded", - "Description": "0.Operate\n1.Logic", - "PrefabName": "StructureInteriorDoorPadded", - "PrefabHash": 847461335, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureInteriorDoorPaddedThin", - "Title": "Interior Door Padded Thin", - "Description": "0.Operate\n1.Logic", - "PrefabName": "StructureInteriorDoorPaddedThin", - "PrefabHash": 1981698201, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureInteriorDoorTriangle", - "Title": "Interior Door Triangle", - "Description": "0.Operate\n1.Logic", - "PrefabName": "StructureInteriorDoorTriangle", - "PrefabHash": -1182923101, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureFrameIron", - "Title": "Iron Frame", - "Description": "", - "PrefabName": "StructureFrameIron", - "PrefabHash": -1240951678, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemIronFrames", - "Title": "Iron Frames", - "Description": "", - "PrefabName": "ItemIronFrames", - "PrefabHash": 1225836666, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 30.0 - } - }, - { - "Key": "ThingItemIronSheets", - "Title": "Iron Sheets", - "Description": "", - "PrefabName": "ItemIronSheets", - "PrefabHash": -487378546, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingStructureWallIron", - "Title": "Iron Wall (Type 1)", - "Description": "", - "PrefabName": "StructureWallIron", - "PrefabHash": 1287324802, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallIron02", - "Title": "Iron Wall (Type 2)", - "Description": "", - "PrefabName": "StructureWallIron02", - "PrefabHash": 1485834215, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallIron03", - "Title": "Iron Wall (Type 3)", - "Description": "", - "PrefabName": "StructureWallIron03", - "PrefabHash": 798439281, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallIron04", - "Title": "Iron Wall (Type 4)", - "Description": "", - "PrefabName": "StructureWallIron04", - "PrefabHash": -1309433134, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureCompositeWindowIron", - "Title": "Iron Window", - "Description": "", - "PrefabName": "StructureCompositeWindowIron", - "PrefabHash": -688284639, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemJetpackBasic", - "Title": "Jetpack Basic", - "Description": "The basic CHAC jetpack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stabilizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", - "PrefabName": "ItemJetpackBasic", - "PrefabHash": 1969189000, - "SlotInserts": [ - { - "SlotName": "Propellant", - "SlotType": "GasCanister", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - } - ], - "LogicInsert": [ - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Back", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingUniformOrangeJumpSuit", - "Title": "Jump Suit (Orange)", - "Description": "", - "PrefabName": "UniformOrangeJumpSuit", - "PrefabHash": 810053150, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Access Card", - "SlotType": "AccessCard", - "SlotIndex": "2" - }, - { - "SlotName": "Credit Card", - "SlotType": "CreditCard", - "SlotIndex": "3" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Uniform", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemKitAIMeE", - "Title": "Kit (AIMeE)", - "Description": "", - "PrefabName": "ItemKitAIMeE", - "PrefabHash": 496830914, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitAccessBridge", - "Title": "Kit (Access Bridge)", - "Description": "", - "PrefabName": "ItemKitAccessBridge", - "PrefabHash": 513258369, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemActiveVent", - "Title": "Kit (Active Vent)", - "Description": "When constructed, this kit places an Active Vent on any support structure.", - "PrefabName": "ItemActiveVent", - "PrefabHash": -842048328, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitAdvancedComposter", - "Title": "Kit (Advanced Composter)", - "Description": "", - "PrefabName": "ItemKitAdvancedComposter", - "PrefabHash": -1431998347, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitAdvancedFurnace", - "Title": "Kit (Advanced Furnace)", - "Description": "", - "PrefabName": "ItemKitAdvancedFurnace", - "PrefabHash": -616758353, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitAdvancedPackagingMachine", - "Title": "Kit (Advanced Packaging Machine)", - "Description": "", - "PrefabName": "ItemKitAdvancedPackagingMachine", - "PrefabHash": -598545233, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitAirlock", - "Title": "Kit (Airlock)", - "Description": "", - "PrefabName": "ItemKitAirlock", - "PrefabHash": 964043875, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitArcFurnace", - "Title": "Kit (Arc Furnace)", - "Description": "", - "PrefabName": "ItemKitArcFurnace", - "PrefabHash": -98995857, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitWallArch", - "Title": "Kit (Arched Wall)", - "Description": "", - "PrefabName": "ItemKitWallArch", - "PrefabHash": 1625214531, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 30.0 - } - }, - { - "Key": "ThingItemKitAtmospherics", - "Title": "Kit (Atmospherics)", - "Description": "", - "PrefabName": "ItemKitAtmospherics", - "PrefabHash": 1222286371, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitAutolathe", - "Title": "Kit (Autolathe)", - "Description": "", - "PrefabName": "ItemKitAutolathe", - "PrefabHash": -1753893214, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitHydroponicAutomated", - "Title": "Kit (Automated Hydroponics)", - "Description": "", - "PrefabName": "ItemKitHydroponicAutomated", - "PrefabHash": -927931558, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitAutomatedOven", - "Title": "Kit (Automated Oven)", - "Description": "", - "PrefabName": "ItemKitAutomatedOven", - "PrefabHash": -1931958659, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitAutoMinerSmall", - "Title": "Kit (Autominer Small)", - "Description": "", - "PrefabName": "ItemKitAutoMinerSmall", - "PrefabHash": 1668815415, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRocketAvionics", - "Title": "Kit (Avionics)", - "Description": "", - "PrefabName": "ItemKitRocketAvionics", - "PrefabHash": 1396305045, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitChute", - "Title": "Kit (Basic Chutes)", - "Description": "", - "PrefabName": "ItemKitChute", - "PrefabHash": 1025254665, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitBasket", - "Title": "Kit (Basket)", - "Description": "", - "PrefabName": "ItemKitBasket", - "PrefabHash": 148305004, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemBatteryCharger", - "Title": "Kit (Battery Charger)", - "Description": "This kit produces a 5-slot Kit (Battery Charger).", - "PrefabName": "ItemBatteryCharger", - "PrefabHash": -1866880307, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitBatteryLarge", - "Title": "Kit (Battery Large)", - "Description": "", - "PrefabName": "ItemKitBatteryLarge", - "PrefabHash": -21225041, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitBattery", - "Title": "Kit (Battery)", - "Description": "", - "PrefabName": "ItemKitBattery", - "PrefabHash": 1406656973, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitBeacon", - "Title": "Kit (Beacon)", - "Description": "", - "PrefabName": "ItemKitBeacon", - "PrefabHash": 249073136, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitBeds", - "Title": "Kit (Beds)", - "Description": "", - "PrefabName": "ItemKitBeds", - "PrefabHash": -1241256797, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitBlastDoor", - "Title": "Kit (Blast Door)", - "Description": "", - "PrefabName": "ItemKitBlastDoor", - "PrefabHash": -1755116240, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemCableAnalyser", - "Title": "Kit (Cable Analyzer)", - "Description": "", - "PrefabName": "ItemCableAnalyser", - "PrefabHash": -1792787349, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemCableFuse", - "Title": "Kit (Cable Fuses)", - "Description": "", - "PrefabName": "ItemCableFuse", - "PrefabHash": 195442047, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemGasTankStorage", - "Title": "Kit (Canister Storage)", - "Description": "This kit produces a Kit (Canister Storage) for refilling a Canister.", - "PrefabName": "ItemGasTankStorage", - "PrefabHash": -2113012215, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitCentrifuge", - "Title": "Kit (Centrifuge)", - "Description": "", - "PrefabName": "ItemKitCentrifuge", - "PrefabHash": 578182956, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitChairs", - "Title": "Kit (Chairs)", - "Description": "", - "PrefabName": "ItemKitChairs", - "PrefabHash": -1394008073, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitChuteUmbilical", - "Title": "Kit (Chute Umbilical)", - "Description": "", - "PrefabName": "ItemKitChuteUmbilical", - "PrefabHash": -876560854, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitCompositeCladding", - "Title": "Kit (Cladding)", - "Description": "", - "PrefabName": "ItemKitCompositeCladding", - "PrefabHash": -1470820996, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingKitStructureCombustionCentrifuge", - "Title": "Kit (Combustion Centrifuge)", - "Description": "", - "PrefabName": "KitStructureCombustionCentrifuge", - "PrefabHash": 231903234, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitComputer", - "Title": "Kit (Computer)", - "Description": "", - "PrefabName": "ItemKitComputer", - "PrefabHash": 1990225489, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitConsole", - "Title": "Kit (Consoles)", - "Description": "", - "PrefabName": "ItemKitConsole", - "PrefabHash": -1241851179, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitCrateMount", - "Title": "Kit (Container Mount)", - "Description": "", - "PrefabName": "ItemKitCrateMount", - "PrefabHash": -551612946, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPassthroughHeatExchanger", - "Title": "Kit (CounterFlow Heat Exchanger)", - "Description": "", - "PrefabName": "ItemKitPassthroughHeatExchanger", - "PrefabHash": 636112787, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitCrateMkII", - "Title": "Kit (Crate Mk II)", - "Description": "", - "PrefabName": "ItemKitCrateMkII", - "PrefabHash": -1585956426, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitCrate", - "Title": "Kit (Crate)", - "Description": "", - "PrefabName": "ItemKitCrate", - "PrefabHash": 429365598, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemRTG", - "Title": "Kit (Creative RTG)", - "Description": "This kit creates that miracle of modern science, a Kit (Creative RTG).", - "PrefabName": "ItemRTG", - "PrefabHash": 495305053, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitCryoTube", - "Title": "Kit (Cryo Tube)", - "Description": "", - "PrefabName": "ItemKitCryoTube", - "PrefabHash": -545234195, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitDeepMiner", - "Title": "Kit (Deep Miner)", - "Description": "", - "PrefabName": "ItemKitDeepMiner", - "PrefabHash": -1935075707, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemPipeDigitalValve", - "Title": "Kit (Digital Valve)", - "Description": "This kit creates a Digital Valve.", - "PrefabName": "ItemPipeDigitalValve", - "PrefabHash": -1532448832, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitDockingPort", - "Title": "Kit (Docking Port)", - "Description": "", - "PrefabName": "ItemKitDockingPort", - "PrefabHash": 77421200, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitDoor", - "Title": "Kit (Door)", - "Description": "", - "PrefabName": "ItemKitDoor", - "PrefabHash": 168615924, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitDrinkingFountain", - "Title": "Kit (Drinking Fountain)", - "Description": "", - "PrefabName": "ItemKitDrinkingFountain", - "PrefabHash": -1743663875, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitElectronicsPrinter", - "Title": "Kit (Electronics Printer)", - "Description": "", - "PrefabName": "ItemKitElectronicsPrinter", - "PrefabHash": -1181922382, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitElevator", - "Title": "Kit (Elevator)", - "Description": "", - "PrefabName": "ItemKitElevator", - "PrefabHash": -945806652, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitEngineLarge", - "Title": "Kit (Engine Large)", - "Description": "", - "PrefabName": "ItemKitEngineLarge", - "PrefabHash": 755302726, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitEngineMedium", - "Title": "Kit (Engine Medium)", - "Description": "", - "PrefabName": "ItemKitEngineMedium", - "PrefabHash": 1969312177, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitEngineSmall", - "Title": "Kit (Engine Small)", - "Description": "", - "PrefabName": "ItemKitEngineSmall", - "PrefabHash": 19645163, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemFlashingLight", - "Title": "Kit (Flashing Light)", - "Description": "", - "PrefabName": "ItemFlashingLight", - "PrefabHash": -2107840748, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitWallFlat", - "Title": "Kit (Flat Wall)", - "Description": "", - "PrefabName": "ItemKitWallFlat", - "PrefabHash": -846838195, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 30.0 - } - }, - { - "Key": "ThingItemKitCompositeFloorGrating", - "Title": "Kit (Floor Grating)", - "Description": "", - "PrefabName": "ItemKitCompositeFloorGrating", - "PrefabHash": 1182412869, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitFridgeBig", - "Title": "Kit (Fridge Large)", - "Description": "", - "PrefabName": "ItemKitFridgeBig", - "PrefabHash": -1168199498, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitFridgeSmall", - "Title": "Kit (Fridge Small)", - "Description": "", - "PrefabName": "ItemKitFridgeSmall", - "PrefabHash": 1661226524, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitFurnace", - "Title": "Kit (Furnace)", - "Description": "", - "PrefabName": "ItemKitFurnace", - "PrefabHash": -806743925, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitFurniture", - "Title": "Kit (Furniture)", - "Description": "", - "PrefabName": "ItemKitFurniture", - "PrefabHash": 1162905029, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitFuselage", - "Title": "Kit (Fuselage)", - "Description": "", - "PrefabName": "ItemKitFuselage", - "PrefabHash": -366262681, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitGasGenerator", - "Title": "Kit (Gas Fuel Generator)", - "Description": "", - "PrefabName": "ItemKitGasGenerator", - "PrefabHash": 377745425, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemPipeGasMixer", - "Title": "Kit (Gas Mixer)", - "Description": "This kit creates a Gas Mixer.", - "PrefabName": "ItemPipeGasMixer", - "PrefabHash": -1134459463, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemGasSensor", - "Title": "Kit (Gas Sensor)", - "Description": "", - "PrefabName": "ItemGasSensor", - "PrefabHash": 1717593480, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitGasUmbilical", - "Title": "Kit (Gas Umbilical)", - "Description": "", - "PrefabName": "ItemKitGasUmbilical", - "PrefabHash": -1867280568, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitWallGeometry", - "Title": "Kit (Geometric Wall)", - "Description": "", - "PrefabName": "ItemKitWallGeometry", - "PrefabHash": -784733231, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 30.0 - } - }, - { - "Key": "ThingItemKitGrowLight", - "Title": "Kit (Grow Light)", - "Description": "", - "PrefabName": "ItemKitGrowLight", - "PrefabHash": 341030083, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitAirlockGate", - "Title": "Kit (Hangar Door)", - "Description": "", - "PrefabName": "ItemKitAirlockGate", - "PrefabHash": 682546947, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitHarvie", - "Title": "Kit (Harvie)", - "Description": "", - "PrefabName": "ItemKitHarvie", - "PrefabHash": -1022693454, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitHydraulicPipeBender", - "Title": "Kit (Hydraulic Pipe Bender)", - "Description": "", - "PrefabName": "ItemKitHydraulicPipeBender", - "PrefabHash": -2098556089, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitHydroponicStation", - "Title": "Kit (Hydroponic Station)", - "Description": "", - "PrefabName": "ItemKitHydroponicStation", - "PrefabHash": 2057179799, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemHydroponicTray", - "Title": "Kit (Hydroponic Tray)", - "Description": "This kits creates a Hydroponics Tray for growing various plants.", - "PrefabName": "ItemHydroponicTray", - "PrefabHash": -1193543727, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitLogicCircuit", - "Title": "Kit (IC Housing)", - "Description": "", - "PrefabName": "ItemKitLogicCircuit", - "PrefabHash": 1512322581, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitIceCrusher", - "Title": "Kit (Ice Crusher)", - "Description": "", - "PrefabName": "ItemKitIceCrusher", - "PrefabHash": 288111533, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemIgniter", - "Title": "Kit (Igniter)", - "Description": "This kit creates an Kit (Igniter) unit.", - "PrefabName": "ItemIgniter", - "PrefabHash": 890106742, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitInsulatedLiquidPipe", - "Title": "Kit (Insulated Liquid Pipe)", - "Description": "", - "PrefabName": "ItemKitInsulatedLiquidPipe", - "PrefabHash": 2067655311, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 20.0 - } - }, - { - "Key": "ThingItemKitLiquidTankInsulated", - "Title": "Kit (Insulated Liquid Tank)", - "Description": "", - "PrefabName": "ItemKitLiquidTankInsulated", - "PrefabHash": 617773453, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemPassiveVentInsulated", - "Title": "Kit (Insulated Passive Vent)", - "Description": "", - "PrefabName": "ItemPassiveVentInsulated", - "PrefabHash": -1397583760, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitInsulatedPipeUtility", - "Title": "Kit (Insulated Pipe Utility Gas)", - "Description": "", - "PrefabName": "ItemKitInsulatedPipeUtility", - "PrefabHash": -27284803, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitInsulatedPipeUtilityLiquid", - "Title": "Kit (Insulated Pipe Utility Liquid)", - "Description": "", - "PrefabName": "ItemKitInsulatedPipeUtilityLiquid", - "PrefabHash": -1831558953, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitInsulatedPipe", - "Title": "Kit (Insulated Pipe)", - "Description": "", - "PrefabName": "ItemKitInsulatedPipe", - "PrefabHash": 452636699, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 20.0 - } - }, - { - "Key": "ThingItemKitInteriorDoors", - "Title": "Kit (Interior Doors)", - "Description": "", - "PrefabName": "ItemKitInteriorDoors", - "PrefabHash": 1935945891, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitWallIron", - "Title": "Kit (Iron Wall)", - "Description": "", - "PrefabName": "ItemKitWallIron", - "PrefabHash": -524546923, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 30.0 - } - }, - { - "Key": "ThingItemKitLadder", - "Title": "Kit (Ladder)", - "Description": "", - "PrefabName": "ItemKitLadder", - "PrefabHash": 489494578, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLandingPadAtmos", - "Title": "Kit (Landing Pad Atmospherics)", - "Description": "", - "PrefabName": "ItemKitLandingPadAtmos", - "PrefabHash": 1817007843, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLandingPadBasic", - "Title": "Kit (Landing Pad Basic)", - "Description": "", - "PrefabName": "ItemKitLandingPadBasic", - "PrefabHash": 293581318, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLandingPadWaypoint", - "Title": "Kit (Landing Pad Runway)", - "Description": "", - "PrefabName": "ItemKitLandingPadWaypoint", - "PrefabHash": -1267511065, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLargeDirectHeatExchanger", - "Title": "Kit (Large Direct Heat Exchanger)", - "Description": "", - "PrefabName": "ItemKitLargeDirectHeatExchanger", - "PrefabHash": 450164077, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitLargeExtendableRadiator", - "Title": "Kit (Large Extendable Radiator)", - "Description": "", - "PrefabName": "ItemKitLargeExtendableRadiator", - "PrefabHash": 847430620, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitLargeSatelliteDish", - "Title": "Kit (Large Satellite Dish)", - "Description": "", - "PrefabName": "ItemKitLargeSatelliteDish", - "PrefabHash": -2039971217, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitLaunchMount", - "Title": "Kit (Launch Mount)", - "Description": "", - "PrefabName": "ItemKitLaunchMount", - "PrefabHash": -1854167549, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemWallLight", - "Title": "Kit (Lights)", - "Description": "This kit creates any one of ten Kit (Lights) variants.", - "PrefabName": "ItemWallLight", - "PrefabHash": 1108423476, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemLiquidTankStorage", - "Title": "Kit (Liquid Canister Storage)", - "Description": "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.", - "PrefabName": "ItemLiquidTankStorage", - "PrefabHash": 2037427578, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemWaterPipeDigitalValve", - "Title": "Kit (Liquid Digital Valve)", - "Description": "", - "PrefabName": "ItemWaterPipeDigitalValve", - "PrefabHash": 309693520, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemLiquidDrain", - "Title": "Kit (Liquid Drain)", - "Description": "", - "PrefabName": "ItemLiquidDrain", - "PrefabHash": 2036225202, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemLiquidPipeAnalyzer", - "Title": "Kit (Liquid Pipe Analyzer)", - "Description": "", - "PrefabName": "ItemLiquidPipeAnalyzer", - "PrefabHash": 226055671, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemWaterPipeMeter", - "Title": "Kit (Liquid Pipe Meter)", - "Description": "", - "PrefabName": "ItemWaterPipeMeter", - "PrefabHash": -90898877, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemLiquidPipeValve", - "Title": "Kit (Liquid Pipe Valve)", - "Description": "This kit creates a Liquid Valve.", - "PrefabName": "ItemLiquidPipeValve", - "PrefabHash": -2126113312, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPipeLiquid", - "Title": "Kit (Liquid Pipe)", - "Description": "", - "PrefabName": "ItemKitPipeLiquid", - "PrefabHash": -1166461357, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 20.0 - } - }, - { - "Key": "ThingItemPipeLiquidRadiator", - "Title": "Kit (Liquid Radiator)", - "Description": "This kit creates a Liquid Pipe Convection Radiator.", - "PrefabName": "ItemPipeLiquidRadiator", - "PrefabHash": -906521320, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLiquidRegulator", - "Title": "Kit (Liquid Regulator)", - "Description": "", - "PrefabName": "ItemKitLiquidRegulator", - "PrefabHash": 1951126161, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitLiquidTank", - "Title": "Kit (Liquid Tank)", - "Description": "", - "PrefabName": "ItemKitLiquidTank", - "PrefabHash": -799849305, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitLiquidUmbilical", - "Title": "Kit (Liquid Umbilical)", - "Description": "", - "PrefabName": "ItemKitLiquidUmbilical", - "PrefabHash": 1571996765, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemLiquidPipeVolumePump", - "Title": "Kit (Liquid Volume Pump)", - "Description": "", - "PrefabName": "ItemLiquidPipeVolumePump", - "PrefabHash": -2106280569, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemWaterWallCooler", - "Title": "Kit (Liquid Wall Cooler)", - "Description": "", - "PrefabName": "ItemWaterWallCooler", - "PrefabHash": -1721846327, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitLocker", - "Title": "Kit (Locker)", - "Description": "", - "PrefabName": "ItemKitLocker", - "PrefabHash": 882301399, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitLogicInputOutput", - "Title": "Kit (Logic I/O)", - "Description": "", - "PrefabName": "ItemKitLogicInputOutput", - "PrefabHash": 1997293610, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLogicMemory", - "Title": "Kit (Logic Memory)", - "Description": "", - "PrefabName": "ItemKitLogicMemory", - "PrefabHash": -2098214189, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLogicProcessor", - "Title": "Kit (Logic Processor)", - "Description": "", - "PrefabName": "ItemKitLogicProcessor", - "PrefabHash": 220644373, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLogicSwitch", - "Title": "Kit (Logic Switch)", - "Description": "", - "PrefabName": "ItemKitLogicSwitch", - "PrefabHash": 124499454, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLogicTransmitter", - "Title": "Kit (Logic Transmitter)", - "Description": "", - "PrefabName": "ItemKitLogicTransmitter", - "PrefabHash": 1005397063, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitPassiveLargeRadiatorLiquid", - "Title": "Kit (Medium Radiator Liquid)", - "Description": "", - "PrefabName": "ItemKitPassiveLargeRadiatorLiquid", - "PrefabHash": 1453961898, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitPassiveLargeRadiatorGas", - "Title": "Kit (Medium Radiator)", - "Description": "", - "PrefabName": "ItemKitPassiveLargeRadiatorGas", - "PrefabHash": -1752768283, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitSatelliteDish", - "Title": "Kit (Medium Satellite Dish)", - "Description": "", - "PrefabName": "ItemKitSatelliteDish", - "PrefabHash": 178422810, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitMotherShipCore", - "Title": "Kit (Mothership)", - "Description": "", - "PrefabName": "ItemKitMotherShipCore", - "PrefabHash": -344968335, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitMusicMachines", - "Title": "Kit (Music Machines)", - "Description": "", - "PrefabName": "ItemKitMusicMachines", - "PrefabHash": -2038889137, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitFlagODA", - "Title": "Kit (ODA Flag)", - "Description": "", - "PrefabName": "ItemKitFlagODA", - "PrefabHash": 1701764190, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitHorizontalAutoMiner", - "Title": "Kit (OGRE)", - "Description": "", - "PrefabName": "ItemKitHorizontalAutoMiner", - "PrefabHash": 844391171, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitWallPadded", - "Title": "Kit (Padded Wall)", - "Description": "", - "PrefabName": "ItemKitWallPadded", - "PrefabHash": -821868990, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 30.0 - } - }, - { - "Key": "ThingItemKitEvaporationChamber", - "Title": "Kit (Phase Change Device)", - "Description": "", - "PrefabName": "ItemKitEvaporationChamber", - "PrefabHash": 1587787610, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemPipeAnalyizer", - "Title": "Kit (Pipe Analyzer)", - "Description": "This kit creates a Pipe Analyzer.", - "PrefabName": "ItemPipeAnalyizer", - "PrefabHash": -767597887, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemPipeIgniter", - "Title": "Kit (Pipe Igniter)", - "Description": "", - "PrefabName": "ItemPipeIgniter", - "PrefabHash": 1366030599, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemPipeLabel", - "Title": "Kit (Pipe Label)", - "Description": "This kit creates a Pipe Label.", - "PrefabName": "ItemPipeLabel", - "PrefabHash": 391769637, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 20.0 - } - }, - { - "Key": "ThingItemPipeMeter", - "Title": "Kit (Pipe Meter)", - "Description": "This kit creates a Pipe Meter.", - "PrefabName": "ItemPipeMeter", - "PrefabHash": 1207939683, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitPipeOrgan", - "Title": "Kit (Pipe Organ)", - "Description": "", - "PrefabName": "ItemKitPipeOrgan", - "PrefabHash": -827125300, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPipeRadiatorLiquid", - "Title": "Kit (Pipe Radiator Liquid)", - "Description": "", - "PrefabName": "ItemKitPipeRadiatorLiquid", - "PrefabHash": -1697302609, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPipeRadiator", - "Title": "Kit (Pipe Radiator)", - "Description": "", - "PrefabName": "ItemKitPipeRadiator", - "PrefabHash": 920411066, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPipeUtility", - "Title": "Kit (Pipe Utility Gas)", - "Description": "", - "PrefabName": "ItemKitPipeUtility", - "PrefabHash": 1934508338, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPipeUtilityLiquid", - "Title": "Kit (Pipe Utility Liquid)", - "Description": "", - "PrefabName": "ItemKitPipeUtilityLiquid", - "PrefabHash": 595478589, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemPipeValve", - "Title": "Kit (Pipe Valve)", - "Description": "This kit creates a Valve.", - "PrefabName": "ItemPipeValve", - "PrefabHash": 799323450, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPipe", - "Title": "Kit (Pipe)", - "Description": "", - "PrefabName": "ItemKitPipe", - "PrefabHash": -1619793705, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 20.0 - } - }, - { - "Key": "ThingItemKitPlanter", - "Title": "Kit (Planter)", - "Description": "", - "PrefabName": "ItemKitPlanter", - "PrefabHash": 119096484, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemDynamicAirCon", - "Title": "Kit (Portable Air Conditioner)", - "Description": "", - "PrefabName": "ItemDynamicAirCon", - "PrefabHash": 1072914031, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitDynamicGasTankAdvanced", - "Title": "Kit (Portable Gas Tank Mk II)", - "Description": "", - "PrefabName": "ItemKitDynamicGasTankAdvanced", - "PrefabHash": 1533501495, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitDynamicCanister", - "Title": "Kit (Portable Gas Tank)", - "Description": "", - "PrefabName": "ItemKitDynamicCanister", - "PrefabHash": -1061945368, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitDynamicGenerator", - "Title": "Kit (Portable Generator)", - "Description": "", - "PrefabName": "ItemKitDynamicGenerator", - "PrefabHash": -732720413, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitDynamicHydroponics", - "Title": "Kit (Portable Hydroponics)", - "Description": "", - "PrefabName": "ItemKitDynamicHydroponics", - "PrefabHash": -1861154222, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitDynamicMKIILiquidCanister", - "Title": "Kit (Portable Liquid Tank Mk II)", - "Description": "", - "PrefabName": "ItemKitDynamicMKIILiquidCanister", - "PrefabHash": -638019974, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitDynamicLiquidCanister", - "Title": "Kit (Portable Liquid Tank)", - "Description": "", - "PrefabName": "ItemKitDynamicLiquidCanister", - "PrefabHash": 375541286, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemDynamicScrubber", - "Title": "Kit (Portable Scrubber)", - "Description": "", - "PrefabName": "ItemDynamicScrubber", - "PrefabHash": -971920158, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPortablesConnector", - "Title": "Kit (Portables Connector)", - "Description": "", - "PrefabName": "ItemKitPortablesConnector", - "PrefabHash": 1041148999, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemPowerConnector", - "Title": "Kit (Power Connector)", - "Description": "This kit creates a Power Connector.", - "PrefabName": "ItemPowerConnector", - "PrefabHash": 839924019, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemAreaPowerControl", - "Title": "Kit (Power Controller)", - "Description": "This kit places a Area Power Control (APC) on any support structure. The APC kit has two options, selecting which direction you would like the APC power to flow.", - "PrefabName": "ItemAreaPowerControl", - "PrefabHash": 1757673317, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitPowerTransmitterOmni", - "Title": "Kit (Power Transmitter Omni)", - "Description": "", - "PrefabName": "ItemKitPowerTransmitterOmni", - "PrefabHash": -831211676, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPowerTransmitter", - "Title": "Kit (Power Transmitter)", - "Description": "", - "PrefabName": "ItemKitPowerTransmitter", - "PrefabHash": 291368213, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitElectricUmbilical", - "Title": "Kit (Power Umbilical)", - "Description": "", - "PrefabName": "ItemKitElectricUmbilical", - "PrefabHash": 1603046970, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitStandardChute", - "Title": "Kit (Powered Chutes)", - "Description": "", - "PrefabName": "ItemKitStandardChute", - "PrefabHash": 2133035682, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPoweredVent", - "Title": "Kit (Powered Vent)", - "Description": "", - "PrefabName": "ItemKitPoweredVent", - "PrefabHash": 2015439334, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitPressureFedGasEngine", - "Title": "Kit (Pressure Fed Gas Engine)", - "Description": "", - "PrefabName": "ItemKitPressureFedGasEngine", - "PrefabHash": -121514007, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitPressureFedLiquidEngine", - "Title": "Kit (Pressure Fed Liquid Engine)", - "Description": "", - "PrefabName": "ItemKitPressureFedLiquidEngine", - "PrefabHash": -99091572, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRegulator", - "Title": "Kit (Pressure Regulator)", - "Description": "", - "PrefabName": "ItemKitRegulator", - "PrefabHash": 1181371795, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitGovernedGasRocketEngine", - "Title": "Kit (Pumped Gas Rocket Engine)", - "Description": "", - "PrefabName": "ItemKitGovernedGasRocketEngine", - "PrefabHash": 206848766, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitPumpedLiquidEngine", - "Title": "Kit (Pumped Liquid Engine)", - "Description": "", - "PrefabName": "ItemKitPumpedLiquidEngine", - "PrefabHash": 1921918951, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemRTGSurvival", - "Title": "Kit (RTG)", - "Description": "This kit creates a Kit (RTG).", - "PrefabName": "ItemRTGSurvival", - "PrefabHash": 1817645803, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemPipeRadiator", - "Title": "Kit (Radiator)", - "Description": "This kit creates a Pipe Convection Radiator.", - "PrefabName": "ItemPipeRadiator", - "PrefabHash": -1796655088, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitRailing", - "Title": "Kit (Railing)", - "Description": "", - "PrefabName": "ItemKitRailing", - "PrefabHash": 750176282, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitRecycler", - "Title": "Kit (Recycler)", - "Description": "", - "PrefabName": "ItemKitRecycler", - "PrefabHash": 849148192, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitReinforcedWindows", - "Title": "Kit (Reinforced Windows)", - "Description": "", - "PrefabName": "ItemKitReinforcedWindows", - "PrefabHash": 1459985302, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitRespawnPointWallMounted", - "Title": "Kit (Respawn)", - "Description": "", - "PrefabName": "ItemKitRespawnPointWallMounted", - "PrefabHash": 1574688481, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitRocketBattery", - "Title": "Kit (Rocket Battery)", - "Description": "", - "PrefabName": "ItemKitRocketBattery", - "PrefabHash": -314072139, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitRocketCargoStorage", - "Title": "Kit (Rocket Cargo Storage)", - "Description": "", - "PrefabName": "ItemKitRocketCargoStorage", - "PrefabHash": 479850239, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitRocketCelestialTracker", - "Title": "Kit (Rocket Celestial Tracker)", - "Description": "", - "PrefabName": "ItemKitRocketCelestialTracker", - "PrefabHash": -303008602, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRocketCircuitHousing", - "Title": "Kit (Rocket Circuit Housing)", - "Description": "", - "PrefabName": "ItemKitRocketCircuitHousing", - "PrefabHash": 721251202, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRocketDatalink", - "Title": "Kit (Rocket Datalink)", - "Description": "", - "PrefabName": "ItemKitRocketDatalink", - "PrefabHash": -1256996603, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRocketGasFuelTank", - "Title": "Kit (Rocket Gas Fuel Tank)", - "Description": "", - "PrefabName": "ItemKitRocketGasFuelTank", - "PrefabHash": -1629347579, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitLaunchTower", - "Title": "Kit (Rocket Launch Tower)", - "Description": "", - "PrefabName": "ItemKitLaunchTower", - "PrefabHash": -174523552, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitRocketLiquidFuelTank", - "Title": "Kit (Rocket Liquid Fuel Tank)", - "Description": "", - "PrefabName": "ItemKitRocketLiquidFuelTank", - "PrefabHash": 2032027950, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitRocketManufactory", - "Title": "Kit (Rocket Manufactory)", - "Description": "", - "PrefabName": "ItemKitRocketManufactory", - "PrefabHash": -636127860, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRocketMiner", - "Title": "Kit (Rocket Miner)", - "Description": "", - "PrefabName": "ItemKitRocketMiner", - "PrefabHash": -867969909, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRocketScanner", - "Title": "Kit (Rocket Scanner)", - "Description": "", - "PrefabName": "ItemKitRocketScanner", - "PrefabHash": 1753647154, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRoverFrame", - "Title": "Kit (Rover Frame)", - "Description": "", - "PrefabName": "ItemKitRoverFrame", - "PrefabHash": 1827215803, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRoverMKI", - "Title": "Kit (Rover Mk I)", - "Description": "", - "PrefabName": "ItemKitRoverMKI", - "PrefabHash": 197243872, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitSDBHopper", - "Title": "Kit (SDB Hopper)", - "Description": "", - "PrefabName": "ItemKitSDBHopper", - "PrefabHash": 323957548, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingKitSDBSilo", - "Title": "Kit (SDB Silo)", - "Description": "This kit creates a SDB Silo.", - "PrefabName": "KitSDBSilo", - "PrefabHash": 1932952652, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitSecurityPrinter", - "Title": "Kit (Security Printer)", - "Description": "", - "PrefabName": "ItemKitSecurityPrinter", - "PrefabHash": 578078533, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitSensor", - "Title": "Kit (Sensors)", - "Description": "", - "PrefabName": "ItemKitSensor", - "PrefabHash": -1776897113, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitShower", - "Title": "Kit (Shower)", - "Description": "", - "PrefabName": "ItemKitShower", - "PrefabHash": 735858725, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitSign", - "Title": "Kit (Sign)", - "Description": "", - "PrefabName": "ItemKitSign", - "PrefabHash": 529996327, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitSleeper", - "Title": "Kit (Sleeper)", - "Description": "", - "PrefabName": "ItemKitSleeper", - "PrefabHash": 326752036, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitSmallDirectHeatExchanger", - "Title": "Kit (Small Direct Heat Exchanger)", - "Description": "", - "PrefabName": "ItemKitSmallDirectHeatExchanger", - "PrefabHash": -1332682164, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemFlagSmall", - "Title": "Kit (Small Flag)", - "Description": "", - "PrefabName": "ItemFlagSmall", - "PrefabHash": 2011191088, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitSmallSatelliteDish", - "Title": "Kit (Small Satellite Dish)", - "Description": "", - "PrefabName": "ItemKitSmallSatelliteDish", - "PrefabHash": 1960952220, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitSolarPanelBasicReinforced", - "Title": "Kit (Solar Panel Basic Heavy)", - "Description": "", - "PrefabName": "ItemKitSolarPanelBasicReinforced", - "PrefabHash": -528695432, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitSolarPanelBasic", - "Title": "Kit (Solar Panel Basic)", - "Description": "", - "PrefabName": "ItemKitSolarPanelBasic", - "PrefabHash": 844961456, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitSolarPanelReinforced", - "Title": "Kit (Solar Panel Heavy)", - "Description": "", - "PrefabName": "ItemKitSolarPanelReinforced", - "PrefabHash": -364868685, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitSolarPanel", - "Title": "Kit (Solar Panel)", - "Description": "", - "PrefabName": "ItemKitSolarPanel", - "PrefabHash": -1924492105, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitSolidGenerator", - "Title": "Kit (Solid Generator)", - "Description": "", - "PrefabName": "ItemKitSolidGenerator", - "PrefabHash": 1293995736, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitSorter", - "Title": "Kit (Sorter)", - "Description": "", - "PrefabName": "ItemKitSorter", - "PrefabHash": 969522478, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitSpeaker", - "Title": "Kit (Speaker)", - "Description": "", - "PrefabName": "ItemKitSpeaker", - "PrefabHash": -126038526, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitStacker", - "Title": "Kit (Stacker)", - "Description": "", - "PrefabName": "ItemKitStacker", - "PrefabHash": 1013244511, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitStairs", - "Title": "Kit (Stairs)", - "Description": "", - "PrefabName": "ItemKitStairs", - "PrefabHash": 170878959, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitStairwell", - "Title": "Kit (Stairwell)", - "Description": "", - "PrefabName": "ItemKitStairwell", - "PrefabHash": -1868555784, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitStirlingEngine", - "Title": "Kit (Stirling Engine)", - "Description": "", - "PrefabName": "ItemKitStirlingEngine", - "PrefabHash": -1821571150, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitSuitStorage", - "Title": "Kit (Suit Storage)", - "Description": "", - "PrefabName": "ItemKitSuitStorage", - "PrefabHash": 1088892825, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitTables", - "Title": "Kit (Tables)", - "Description": "", - "PrefabName": "ItemKitTables", - "PrefabHash": -1361598922, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitTankInsulated", - "Title": "Kit (Tank Insulated)", - "Description": "", - "PrefabName": "ItemKitTankInsulated", - "PrefabHash": 1021053608, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitTank", - "Title": "Kit (Tank)", - "Description": "", - "PrefabName": "ItemKitTank", - "PrefabHash": 771439840, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitGroundTelescope", - "Title": "Kit (Telescope)", - "Description": "", - "PrefabName": "ItemKitGroundTelescope", - "PrefabHash": -2140672772, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitToolManufactory", - "Title": "Kit (Tool Manufactory)", - "Description": "", - "PrefabName": "ItemKitToolManufactory", - "PrefabHash": 529137748, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitTransformer", - "Title": "Kit (Transformer Large)", - "Description": "", - "PrefabName": "ItemKitTransformer", - "PrefabHash": -453039435, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitRocketTransformerSmall", - "Title": "Kit (Transformer Small (Rocket))", - "Description": "", - "PrefabName": "ItemKitRocketTransformerSmall", - "PrefabHash": -932335800, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitTransformerSmall", - "Title": "Kit (Transformer Small)", - "Description": "", - "PrefabName": "ItemKitTransformerSmall", - "PrefabHash": 665194284, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitPressurePlate", - "Title": "Kit (Trigger Plate)", - "Description": "", - "PrefabName": "ItemKitPressurePlate", - "PrefabHash": 123504691, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitTurbineGenerator", - "Title": "Kit (Turbine Generator)", - "Description": "", - "PrefabName": "ItemKitTurbineGenerator", - "PrefabHash": -1590715731, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitTurboVolumePump", - "Title": "Kit (Turbo Volume Pump - Gas)", - "Description": "", - "PrefabName": "ItemKitTurboVolumePump", - "PrefabHash": -1248429712, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitLiquidTurboVolumePump", - "Title": "Kit (Turbo Volume Pump - Liquid)", - "Description": "", - "PrefabName": "ItemKitLiquidTurboVolumePump", - "PrefabHash": -1805020897, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitUprightWindTurbine", - "Title": "Kit (Upright Wind Turbine)", - "Description": "", - "PrefabName": "ItemKitUprightWindTurbine", - "PrefabHash": -1798044015, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitVendingMachineRefrigerated", - "Title": "Kit (Vending Machine Refrigerated)", - "Description": "", - "PrefabName": "ItemKitVendingMachineRefrigerated", - "PrefabHash": -1867508561, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitVendingMachine", - "Title": "Kit (Vending Machine)", - "Description": "", - "PrefabName": "ItemKitVendingMachine", - "PrefabHash": -2038384332, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemPipeVolumePump", - "Title": "Kit (Volume Pump)", - "Description": "This kit creates a Volume Pump.", - "PrefabName": "ItemPipeVolumePump", - "PrefabHash": -1766301997, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemWallCooler", - "Title": "Kit (Wall Cooler)", - "Description": "This kit creates a Wall Cooler.", - "PrefabName": "ItemWallCooler", - "PrefabHash": -1567752627, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemWallHeater", - "Title": "Kit (Wall Heater)", - "Description": "This kit creates a Kit (Wall Heater).", - "PrefabName": "ItemWallHeater", - "PrefabHash": 1880134612, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingItemKitWall", - "Title": "Kit (Wall)", - "Description": "", - "PrefabName": "ItemKitWall", - "PrefabHash": -1826855889, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 30.0 - } - }, - { - "Key": "ThingItemKitWaterBottleFiller", - "Title": "Kit (Water Bottle Filler)", - "Description": "", - "PrefabName": "ItemKitWaterBottleFiller", - "PrefabHash": 159886536, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitWaterPurifier", - "Title": "Kit (Water Purifier)", - "Description": "", - "PrefabName": "ItemKitWaterPurifier", - "PrefabHash": 611181283, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitWeatherStation", - "Title": "Kit (Weather Station)", - "Description": "", - "PrefabName": "ItemKitWeatherStation", - "PrefabHash": 337505889, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemKitWindTurbine", - "Title": "Kit (Wind Turbine)", - "Description": "", - "PrefabName": "ItemKitWindTurbine", - "PrefabHash": -868916503, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitWindowShutter", - "Title": "Kit (Window Shutter)", - "Description": "", - "PrefabName": "ItemKitWindowShutter", - "PrefabHash": 1779979754, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitHeatExchanger", - "Title": "Kit Heat Exchanger", - "Description": "", - "PrefabName": "ItemKitHeatExchanger", - "PrefabHash": -1710540039, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitPictureFrame", - "Title": "Kit Picture Frame", - "Description": "", - "PrefabName": "ItemKitPictureFrame", - "PrefabHash": -2062364768, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemKitResearchMachine", - "Title": "Kit Research Machine", - "Description": "", - "PrefabName": "ItemKitResearchMachine", - "PrefabHash": 724776762, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingKitchenTableShort", - "Title": "Kitchen Table (Short)", - "Description": "", - "PrefabName": "KitchenTableShort", - "PrefabHash": -1427415566, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingKitchenTableSimpleShort", - "Title": "Kitchen Table (Simple Short)", - "Description": "", - "PrefabName": "KitchenTableSimpleShort", - "PrefabHash": -78099334, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingKitchenTableSimpleTall", - "Title": "Kitchen Table (Simple Tall)", - "Description": "", - "PrefabName": "KitchenTableSimpleTall", - "PrefabHash": -1068629349, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingKitchenTableTall", - "Title": "Kitchen Table (Tall)", - "Description": "", - "PrefabName": "KitchenTableTall", - "PrefabHash": -1386237782, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureKlaxon", - "Title": "Klaxon Speaker", - "Description": "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.", - "PrefabName": "StructureKlaxon", - "PrefabHash": -828056979, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SoundAlert", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "None", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Alarm2", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Alarm3", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Alarm4", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Alarm5", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Alarm6", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Alarm7", - "LogicAccessTypes": "6" - }, - { - "LogicName": "Music1", - "LogicAccessTypes": "7" - }, - { - "LogicName": "Music2", - "LogicAccessTypes": "8" - }, - { - "LogicName": "Music3", - "LogicAccessTypes": "9" - }, - { - "LogicName": "Alarm8", - "LogicAccessTypes": "10" - }, - { - "LogicName": "Alarm9", - "LogicAccessTypes": "11" - }, - { - "LogicName": "Alarm10", - "LogicAccessTypes": "12" - }, - { - "LogicName": "Alarm11", - "LogicAccessTypes": "13" - }, - { - "LogicName": "Alarm12", - "LogicAccessTypes": "14" - }, - { - "LogicName": "Danger", - "LogicAccessTypes": "15" - }, - { - "LogicName": "Warning", - "LogicAccessTypes": "16" - }, - { - "LogicName": "Alert", - "LogicAccessTypes": "17" - }, - { - "LogicName": "StormIncoming", - "LogicAccessTypes": "18" - }, - { - "LogicName": "IntruderAlert", - "LogicAccessTypes": "19" - }, - { - "LogicName": "Depressurising", - "LogicAccessTypes": "20" - }, - { - "LogicName": "Pressurising", - "LogicAccessTypes": "21" - }, - { - "LogicName": "AirlockCycling", - "LogicAccessTypes": "22" - }, - { - "LogicName": "PowerLow", - "LogicAccessTypes": "23" - }, - { - "LogicName": "SystemFailure", - "LogicAccessTypes": "24" - }, - { - "LogicName": "Welcome", - "LogicAccessTypes": "25" - }, - { - "LogicName": "MalfunctionDetected", - "LogicAccessTypes": "26" - }, - { - "LogicName": "HaltWhoGoesThere", - "LogicAccessTypes": "27" - }, - { - "LogicName": "FireFireFire", - "LogicAccessTypes": "28" - }, - { - "LogicName": "One", - "LogicAccessTypes": "29" - }, - { - "LogicName": "Two", - "LogicAccessTypes": "30" - }, - { - "LogicName": "Three", - "LogicAccessTypes": "31" - }, - { - "LogicName": "Four", - "LogicAccessTypes": "32" - }, - { - "LogicName": "Five", - "LogicAccessTypes": "33" - }, - { - "LogicName": "Floor", - "LogicAccessTypes": "34" - }, - { - "LogicName": "RocketLaunching", - "LogicAccessTypes": "35" - }, - { - "LogicName": "LiftOff", - "LogicAccessTypes": "36" - }, - { - "LogicName": "TraderIncoming", - "LogicAccessTypes": "37" - }, - { - "LogicName": "TraderLanded", - "LogicAccessTypes": "38" - }, - { - "LogicName": "PressureHigh", - "LogicAccessTypes": "39" - }, - { - "LogicName": "PressureLow", - "LogicAccessTypes": "40" - }, - { - "LogicName": "TemperatureHigh", - "LogicAccessTypes": "41" - }, - { - "LogicName": "TemperatureLow", - "LogicAccessTypes": "42" - }, - { - "LogicName": "PollutantsDetected", - "LogicAccessTypes": "43" - }, - { - "LogicName": "HighCarbonDioxide", - "LogicAccessTypes": "44" - }, - { - "LogicName": "Alarm1", - "LogicAccessTypes": "45" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Volume": "ReadWrite", - "PrefabHash": "Read", - "SoundAlert": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureDiode", - "Title": "LED", - "Description": "", - "PrefabName": "StructureDiode", - "PrefabHash": 1944485013, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Color", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": true - } - }, - { - "Key": "ThingStructureConsoleLED1x3", - "Title": "LED Display (Large)", - "Description": "0.Default\n1.Percent\n2.Power", - "PrefabName": "StructureConsoleLED1x3", - "PrefabHash": -1949054743, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Color", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Default", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Percent", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": true - } - }, - { - "Key": "ThingStructureConsoleLED1x2", - "Title": "LED Display (Medium)", - "Description": "0.Default\n1.Percent\n2.Power", - "PrefabName": "StructureConsoleLED1x2", - "PrefabHash": -53151617, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Color", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Default", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Percent", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": true - } - }, - { - "Key": "ThingStructureConsoleLED5", - "Title": "LED Display (Small)", - "Description": "0.Default\n1.Percent\n2.Power", - "PrefabName": "StructureConsoleLED5", - "PrefabHash": -815193061, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Color", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Default", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Percent", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Color": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": true - } - }, - { - "Key": "ThingItemLabeller", - "Title": "Labeller", - "Description": "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.", - "PrefabName": "ItemLabeller", - "PrefabHash": -743968726, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureLadder", - "Title": "Ladder", - "Description": "", - "PrefabName": "StructureLadder", - "PrefabHash": -415420281, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureLadderEnd", - "Title": "Ladder End", - "Description": "", - "PrefabName": "StructureLadderEnd", - "PrefabHash": 1541734993, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePlatformLadderOpen", - "Title": "Ladder Platform", - "Description": "", - "PrefabName": "StructurePlatformLadderOpen", - "PrefabHash": 1559586682, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingLander", - "Title": "Lander", - "Description": "", - "PrefabName": "Lander", - "PrefabHash": 1605130615, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "Entity", - "SlotType": "Entity", - "SlotIndex": "8" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingLandingpad_BlankPiece", - "Title": "Landingpad", - "Description": "", - "PrefabName": "Landingpad_BlankPiece", - "PrefabHash": 912453390, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingLandingpad_2x2CenterPiece01", - "Title": "Landingpad 2x2 Center Piece", - "Description": "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors", - "PrefabName": "Landingpad_2x2CenterPiece01", - "PrefabHash": -1295222317, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "6" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "7" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": {} - } - }, - { - "Key": "ThingLandingpad_CenterPiece01", - "Title": "Landingpad Center", - "Description": "The target point where the trader shuttle will land. Requires a clear view of the sky.", - "PrefabName": "Landingpad_CenterPiece01", - "PrefabHash": 1070143159, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "None", - "LogicAccessTypes": "0" - }, - { - "LogicName": "NoContact", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Moving", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Holding", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Landed", - "LogicAccessTypes": "4" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": {} - } - }, - { - "Key": "ThingLandingpad_CrossPiece", - "Title": "Landingpad Cross", - "Description": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", - "PrefabName": "Landingpad_CrossPiece", - "PrefabHash": 1101296153, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingLandingpad_DataConnectionPiece", - "Title": "Landingpad Data And Power", - "Description": "Provides power to the landing pad. The data port must be connected to the data port of a computer with a communications motherboard for a trader to be called in to land.", - "PrefabName": "Landingpad_DataConnectionPiece", - "PrefabHash": -2066405918, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ContactTypeId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "None", - "LogicAccessTypes": "0" - }, - { - "LogicName": "NoContact", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Moving", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Holding", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Landed", - "LogicAccessTypes": "4" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Vertical": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "ContactTypeId": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingLandingpad_DiagonalPiece01", - "Title": "Landingpad Diagonal", - "Description": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", - "PrefabName": "Landingpad_DiagonalPiece01", - "PrefabHash": 977899131, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingLandingpad_GasConnectorInwardPiece", - "Title": "Landingpad Gas Input", - "Description": "", - "PrefabName": "Landingpad_GasConnectorInwardPiece", - "PrefabHash": 817945707, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingLandingpad_GasConnectorOutwardPiece", - "Title": "Landingpad Gas Output", - "Description": "Pumps gas purchased from a trader out of the landing pad. You can increase the landing pad's gas storage capacity by adding more Landingpad Gas Storage to the landing pad.", - "PrefabName": "Landingpad_GasConnectorOutwardPiece", - "PrefabHash": -1100218307, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "Data", - "None" - ], - [ - "Pipe", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingLandingpad_GasCylinderTankPiece", - "Title": "Landingpad Gas Storage", - "Description": "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.", - "PrefabName": "Landingpad_GasCylinderTankPiece", - "PrefabHash": 170818567, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingLandingpad_LiquidConnectorInwardPiece", - "Title": "Landingpad Liquid Input", - "Description": "", - "PrefabName": "Landingpad_LiquidConnectorInwardPiece", - "PrefabHash": -1216167727, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingLandingpad_LiquidConnectorOutwardPiece", - "Title": "Landingpad Liquid Output", - "Description": "Pumps liquid purchased from a trader out of the landing pad. You can increase the landing pad's liquid storage capacity by adding more Landingpad Gas Storage to the landing pad.", - "PrefabName": "Landingpad_LiquidConnectorOutwardPiece", - "PrefabHash": -1788929869, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingLandingpad_StraightPiece01", - "Title": "Landingpad Straight", - "Description": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", - "PrefabName": "Landingpad_StraightPiece01", - "PrefabHash": -976273247, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingLandingpad_TaxiPieceCorner", - "Title": "Landingpad Taxi Corner", - "Description": "", - "PrefabName": "Landingpad_TaxiPieceCorner", - "PrefabHash": -1872345847, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingLandingpad_TaxiPieceHold", - "Title": "Landingpad Taxi Hold", - "Description": "", - "PrefabName": "Landingpad_TaxiPieceHold", - "PrefabHash": 146051619, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingLandingpad_TaxiPieceStraight", - "Title": "Landingpad Taxi Straight", - "Description": "", - "PrefabName": "Landingpad_TaxiPieceStraight", - "PrefabHash": -1477941080, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingLandingpad_ThreshholdPiece", - "Title": "Landingpad Threshhold", - "Description": "", - "PrefabName": "Landingpad_ThreshholdPiece", - "PrefabHash": -1514298582, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Landing Pad Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "LandingPad", - "Input" - ], - [ - "Data", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemLaptop", - "Title": "Laptop", - "Description": "The Laptop functions as a portable IC editor. To operate the Laptop it must be powered with a battery, have a IC Editor Motherboard in the motherboard slot, and an Integrated Circuit (IC10) in the Programmable Chip Slot.\n\nYou must place the laptop down to interact with the onsreen UI.\n \nConnects to Logic Transmitter", - "PrefabName": "ItemLaptop", - "PrefabHash": 141535121, - "SlotInserts": [ - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "0" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "1" - }, - { - "SlotName": "Motherboard", - "SlotType": "Motherboard", - "SlotIndex": "2" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureExternal", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TemperatureExternal", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "1" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "PressureExternal": "Read", - "On": "ReadWrite", - "TemperatureExternal": "Read", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "ReferenceId": "Read" - } - }, - "WirelessLogic": true, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureLargeDirectHeatExchangeLiquidtoLiquid", - "Title": "Large Direct Heat Exchange - Liquid + Liquid", - "Description": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "PrefabName": "StructureLargeDirectHeatExchangeLiquidtoLiquid", - "PrefabHash": 792686502, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input2", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Input2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLargeDirectHeatExchangeGastoGas", - "Title": "Large Direct Heat Exchanger - Gas + Gas", - "Description": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "PrefabName": "StructureLargeDirectHeatExchangeGastoGas", - "PrefabHash": -1230658883, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Input2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLargeDirectHeatExchangeGastoLiquid", - "Title": "Large Direct Heat Exchanger - Gas + Liquid", - "Description": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "PrefabName": "StructureLargeDirectHeatExchangeGastoLiquid", - "PrefabHash": 1412338038, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "Pipe", - "Input2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLargeExtendableRadiator", - "Title": "Large Extendable Radiator", - "Description": "Omptimised for radiating heat in vacuum and low pressure environments. If pointed at the sun it will heat its contents rapidly via solar heating. The panels can fold away to stop all heat radiation/solar heating and protect them from storms.", - "PrefabName": "StructureLargeExtendableRadiator", - "PrefabHash": -566775170, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLargeHangerDoor", - "Title": "Large Hangar Door", - "Description": "1 x 3 modular door piece for building hangar doors.", - "PrefabName": "StructureLargeHangerDoor", - "PrefabHash": -1351081801, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLargeSatelliteDish", - "Title": "Large Satellite Dish", - "Description": "This large communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", - "PrefabName": "StructureLargeSatelliteDish", - "PrefabHash": 1913391845, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SignalStrength", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SignalID", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "InterrogationProgress", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TargetPadIndex", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "SizeX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SizeZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "MinimumWattsToContact", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "WattsReachingContact", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ContactTypeId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "BestContactFilter", - "LogicAccessTypes": "Read Write" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Setting": "ReadWrite", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "SignalStrength": "Read", - "SignalID": "Read", - "InterrogationProgress": "Read", - "TargetPadIndex": "ReadWrite", - "SizeX": "Read", - "SizeZ": "Read", - "MinimumWattsToContact": "Read", - "WattsReachingContact": "Read", - "ContactTypeId": "Read", - "ReferenceId": "Read", - "BestContactFilter": "ReadWrite" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTankBig", - "Title": "Large Tank", - "Description": "", - "PrefabName": "StructureTankBig", - "PrefabHash": -1606848156, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLaunchMount", - "Title": "Launch Mount", - "Description": "The first piece to place whern building a rocket. Rockets can be constructed and/or landed here. Each Launch Mount will be allocated a slot on the Space Map and assigned a Location Code.", - "PrefabName": "StructureLaunchMount", - "PrefabHash": -558953231, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureRocketTower", - "Title": "Launch Tower", - "Description": "", - "PrefabName": "StructureRocketTower", - "PrefabHash": -654619479, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureLogicSwitch", - "Title": "Lever", - "Description": "", - "PrefabName": "StructureLogicSwitch", - "PrefabHash": 1220484876, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLightRound", - "Title": "Light Round", - "Description": "Description coming.", - "PrefabName": "StructureLightRound", - "PrefabHash": 1514476632, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLightRoundAngled", - "Title": "Light Round (Angled)", - "Description": "Description coming.", - "PrefabName": "StructureLightRoundAngled", - "PrefabHash": 1592905386, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLightRoundSmall", - "Title": "Light Round (Small)", - "Description": "Description coming.", - "PrefabName": "StructureLightRoundSmall", - "PrefabHash": 1436121888, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemLightSword", - "Title": "Light Sword", - "Description": "A charming, if useless, pseudo-weapon. (Creative only.)", - "PrefabName": "ItemLightSword", - "PrefabHash": 1949076595, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureBackLiquidPressureRegulator", - "Title": "Liquid Back Volume Regulator", - "Description": "Regulates the volume ratio of liquid in the input Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", - "PrefabName": "StructureBackLiquidPressureRegulator", - "PrefabHash": 2099900163, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemLiquidCanisterEmpty", - "Title": "Liquid Canister", - "Description": "", - "PrefabName": "ItemLiquidCanisterEmpty", - "PrefabHash": -185207387, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "LiquidCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemLiquidCanisterSmart", - "Title": "Liquid Canister (Smart)", - "Description": "0.Mode0\n1.Mode1", - "PrefabName": "ItemLiquidCanisterSmart", - "PrefabHash": 777684475, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "LiquidCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingItemGasCanisterWater", - "Title": "Liquid Canister (Water)", - "Description": "", - "PrefabName": "ItemGasCanisterWater", - "PrefabHash": -1854861891, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "LiquidCanister", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingStructureMediumRocketLiquidFuelTank", - "Title": "Liquid Capsule Tank Medium", - "Description": "", - "PrefabName": "StructureMediumRocketLiquidFuelTank", - "PrefabHash": 1143639539, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Output" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureCapsuleTankLiquid", - "Title": "Liquid Capsule Tank Small", - "Description": "", - "PrefabName": "StructureCapsuleTankLiquid", - "PrefabHash": 1415396263, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWaterDigitalValve", - "Title": "Liquid Digital Valve", - "Description": "", - "PrefabName": "StructureWaterDigitalValve", - "PrefabHash": -517628750, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Output" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePipeLiquidCrossJunction3", - "Title": "Liquid Pipe (3-Way Junction)", - "Description": "You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench.", - "PrefabName": "StructurePipeLiquidCrossJunction3", - "PrefabHash": 1628087508, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructurePipeLiquidCrossJunction4", - "Title": "Liquid Pipe (4-Way Junction)", - "Description": "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "PrefabName": "StructurePipeLiquidCrossJunction4", - "PrefabHash": -9555593, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructurePipeLiquidCrossJunction5", - "Title": "Liquid Pipe (5-Way Junction)", - "Description": "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "PrefabName": "StructurePipeLiquidCrossJunction5", - "PrefabHash": -2006384159, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - } - ] - }, - { - "Key": "ThingStructurePipeLiquidCrossJunction6", - "Title": "Liquid Pipe (6-Way Junction)", - "Description": "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "PrefabName": "StructurePipeLiquidCrossJunction6", - "PrefabHash": 291524699, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "5" - } - ] - }, - { - "Key": "ThingStructurePipeLiquidCorner", - "Title": "Liquid Pipe (Corner)", - "Description": "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "PrefabName": "StructurePipeLiquidCorner", - "PrefabHash": -1856720921, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructurePipeLiquidCrossJunction", - "Title": "Liquid Pipe (Cross Junction)", - "Description": "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "PrefabName": "StructurePipeLiquidCrossJunction", - "PrefabHash": 1848735691, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructurePipeLiquidStraight", - "Title": "Liquid Pipe (Straight)", - "Description": "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "PrefabName": "StructurePipeLiquidStraight", - "PrefabHash": 667597982, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructurePipeLiquidTJunction", - "Title": "Liquid Pipe (T Junction)", - "Description": "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "PrefabName": "StructurePipeLiquidTJunction", - "PrefabHash": 262616717, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructureLiquidPipeAnalyzer", - "Title": "Liquid Pipe Analyzer", - "Description": "", - "PrefabName": "StructureLiquidPipeAnalyzer", - "PrefabHash": -2113838091, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Lock": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidPipeRadiator", - "Title": "Liquid Pipe Convection Radiator", - "Description": "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added to the liquid within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the liquid in question. Adding multiple radiators will speed up heat transfer.", - "PrefabName": "StructureLiquidPipeRadiator", - "PrefabHash": 2072805863, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWaterPipeMeter", - "Title": "Liquid Pipe Meter", - "Description": "", - "PrefabName": "StructureWaterPipeMeter", - "PrefabHash": 433184168, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidTankBig", - "Title": "Liquid Tank Big", - "Description": "", - "PrefabName": "StructureLiquidTankBig", - "PrefabHash": 1098900430, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTankConnectorLiquid", - "Title": "Liquid Tank Connector", - "Description": "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.", - "PrefabName": "StructureTankConnectorLiquid", - "PrefabHash": 1331802518, - "SlotInserts": [ - { - "SlotName": "Portable Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ] - }, - { - "Key": "ThingStructureLiquidTankSmall", - "Title": "Liquid Tank Small", - "Description": "", - "PrefabName": "StructureLiquidTankSmall", - "PrefabHash": 1988118157, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidTankStorage", - "Title": "Liquid Tank Storage", - "Description": "When connected to a liquid pipe network, the tank storage unit allows you to refill a Liquid Canister, as well as read various atmospheric data from the Gas Canister. It will not accept gas canisters.", - "PrefabName": "StructureLiquidTankStorage", - "PrefabHash": 1691898022, - "SlotInserts": [ - { - "SlotName": "Liquid Canister", - "SlotType": "LiquidCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Quantity": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidValve", - "Title": "Liquid Valve", - "Description": "", - "PrefabName": "StructureLiquidValve", - "PrefabHash": 1849974453, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "None" - ], - [ - "PipeLiquid", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidVolumePump", - "Title": "Liquid Volume Pump", - "Description": "", - "PrefabName": "StructureLiquidVolumePump", - "PrefabHash": -454028979, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Output" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidPressureRegulator", - "Title": "Liquid Volume Regulator", - "Description": "Regulates the volume ratio of liquid in the output Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", - "PrefabName": "StructureLiquidPressureRegulator", - "PrefabHash": 482248766, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWaterWallCooler", - "Title": "Liquid Wall Cooler", - "Description": "", - "PrefabName": "StructureWaterWallCooler", - "PrefabHash": -1369060582, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "DataDisk", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "None" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureStorageLocker", - "Title": "Locker", - "Description": "", - "PrefabName": "StructureStorageLocker", - "PrefabHash": -793623899, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "11" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "12" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "13" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "14" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "15" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "16" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "17" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "18" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "19" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "20" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "21" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "22" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "23" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "24" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "25" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "26" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "27" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "28" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "29" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "11": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "12": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "13": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "14": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "15": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "16": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "17": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "18": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "19": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "20": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "21": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "22": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "23": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "24": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "25": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "26": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "27": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "28": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "29": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLockerSmall", - "Title": "Locker (Small)", - "Description": "", - "PrefabName": "StructureLockerSmall", - "PrefabHash": -647164662, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicCompare", - "Title": "Logic Compare", - "Description": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", - "PrefabName": "StructureLogicCompare", - "PrefabHash": -1489728908, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Equals", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Greater", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Less", - "LogicAccessTypes": "2" - }, - { - "LogicName": "NotEquals", - "LogicAccessTypes": "3" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicGate", - "Title": "Logic Gate", - "Description": "A logic device that performs a logical operation on one or more binary inputs that produces a single binary output. An input greater than zero is considered true for operations.", - "PrefabName": "StructureLogicGate", - "PrefabHash": 1942143074, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "AND", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OR", - "LogicAccessTypes": "1" - }, - { - "LogicName": "XOR", - "LogicAccessTypes": "2" - }, - { - "LogicName": "NAND", - "LogicAccessTypes": "3" - }, - { - "LogicName": "NOR", - "LogicAccessTypes": "4" - }, - { - "LogicName": "XNOR", - "LogicAccessTypes": "5" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicHashGen", - "Title": "Logic Hash Generator", - "Description": "", - "PrefabName": "StructureLogicHashGen", - "PrefabHash": 2077593121, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicMath", - "Title": "Logic Math", - "Description": "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log", - "PrefabName": "StructureLogicMath", - "PrefabHash": 1657691323, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Add", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Subtract", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Multiply", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Divide", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Mod", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Atan2", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Pow", - "LogicAccessTypes": "6" - }, - { - "LogicName": "Log", - "LogicAccessTypes": "7" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicMemory", - "Title": "Logic Memory", - "Description": "", - "PrefabName": "StructureLogicMemory", - "PrefabHash": -851746783, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicMinMax", - "Title": "Logic Min/Max", - "Description": "0.Greater\n1.Less", - "PrefabName": "StructureLogicMinMax", - "PrefabHash": 929022276, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Greater", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Less", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicMirror", - "Title": "Logic Mirror", - "Description": "", - "PrefabName": "StructureLogicMirror", - "PrefabHash": 2096189278, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": {} - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingMotherboardLogic", - "Title": "Logic Motherboard", - "Description": "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops logic motherboard allows Stationeers to set variables and actions on specific logic-controlled items.", - "PrefabName": "MotherboardLogic", - "PrefabHash": 502555944, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Motherboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureLogicReader", - "Title": "Logic Reader", - "Description": "", - "PrefabName": "StructureLogicReader", - "PrefabHash": -345383640, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicRocketDownlink", - "Title": "Logic Rocket Downlink", - "Description": "", - "PrefabName": "StructureLogicRocketDownlink", - "PrefabHash": 876108549, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power And Data Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicSelect", - "Title": "Logic Select", - "Description": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", - "PrefabName": "StructureLogicSelect", - "PrefabHash": 1822736084, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Equals", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Greater", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Less", - "LogicAccessTypes": "2" - }, - { - "LogicName": "NotEquals", - "LogicAccessTypes": "3" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicSorter", - "Title": "Logic Sorter", - "Description": "Contains an Internal Memory which is assessed to check whether something should be sorted. When an item is in the Import Slot, the stack is checked and if result is true the thing is moved to the Export 2 slot, otherwise it is moved to the Export slot. The Mode is used in how the stack is assessed, by default the mode is ALL, so every instruction in the stack would need to return true.", - "PrefabName": "StructureLogicSorter", - "PrefabHash": 873418029, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Export 2", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "Data Disk", - "SlotType": "DataDisk", - "SlotIndex": "3" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3" - } - ], - "ModeInsert": [ - { - "LogicName": "All", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Any", - "LogicAccessTypes": "1" - }, - { - "LogicName": "None", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Output2", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Memory": { - "MemorySize": 32, - "MemorySizeReadable": "256 B", - "MemoryAccess": "ReadWrite", - "Instructions": { - "FilterPrefabHashEquals": { - "Type": "SorterInstruction", - "Value": 1, - "Description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" - }, - "FilterPrefabHashNotEquals": { - "Type": "SorterInstruction", - "Value": 2, - "Description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" - }, - "FilterSortingClassCompare": { - "Type": "SorterInstruction", - "Value": 3, - "Description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SORTING_CLASS | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" - }, - "FilterSlotTypeCompare": { - "Type": "SorterInstruction", - "Value": 4, - "Description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SLOT_TYPE | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" - }, - "FilterQuantityCompare": { - "Type": "SorterInstruction", - "Value": 5, - "Description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | QUANTITY | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" - }, - "LimitNextExecutionByCount": { - "Type": "SorterInstruction", - "Value": 6, - "Description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |" - } - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Output2" - ], - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingLogicStepSequencer8", - "Title": "Logic Step Sequencer", - "Description": "The ODA does not approve of soundtracks or other distractions.\nAs such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure.\nCentral to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. \n\nDIY MUSIC - GETTING STARTED\n\n1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side.\n\n2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver.\n\n3: Select the output speaker (eg Passive Speaker) where the sequencer will play the sounds. This needs to be connected to the logic network on the right hand side of the sequencer.\n\n4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer.\n\n5: Set the BPM on the sequencer using a Dial and a Logic Writer to write to the sequencer's BPM variable. A higher bpm will play the sequence faster. \n\n6: Insert a sound cartridge of your choosing and select which variant of sound you wish to play by pushing the arrow buttons located above and below the sound cartridge slot.\n\n7: Choose the pitch of the sounds to play by setting the dial on each of your 8 step units to the desired note. With drums, each note is a different drum sounds. You can trial your sounds by pushing the activate button on each step unit (with the sequencer inactive).\n\n8: Get freaky with the Low frequency oscillator.\n\n9: Finally, activate the sequencer, Vibeoneer.", - "PrefabName": "LogicStepSequencer8", - "PrefabHash": 1531272458, - "SlotInserts": [ - { - "SlotName": "Sound Cartridge", - "SlotType": "SoundCartridge", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Time", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Bpm", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Whole Note", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Half Note", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Quarter Note", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Eighth Note", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Sixteenth Note", - "LogicAccessTypes": "4" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "Time": "ReadWrite", - "Bpm": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Input" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicTransmitter", - "Title": "Logic Transmitter", - "Description": "Connects to Logic Transmitter", - "PrefabName": "StructureLogicTransmitter", - "PrefabHash": -693235651, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Passive", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Active", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Data Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": {} - }, - "WirelessLogic": true, - "TransmissionReceiver": true, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Input" - ], - [ - "Data", - "Input" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicRocketUplink", - "Title": "Logic Uplink", - "Description": "", - "PrefabName": "StructureLogicRocketUplink", - "PrefabHash": 546002924, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicWriter", - "Title": "Logic Writer", - "Description": "", - "PrefabName": "StructureLogicWriter", - "PrefabHash": -1326019434, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ForceWrite", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ForceWrite": "Write", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicWriterSwitch", - "Title": "Logic Writer Switch", - "Description": "", - "PrefabName": "StructureLogicWriterSwitch", - "PrefabHash": -1321250424, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ForceWrite", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ForceWrite": "Write", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingDeviceLfoVolume", - "Title": "Low frequency oscillator", - "Description": "The low frequency oscillator (or LFO) makes everything sound dark, twisted and crunchy by altering the shape of the waves output by a Logic Step Sequencer.\n \nTo set up an LFO:\n\n1. Place the LFO unit\n2. Set the LFO output to a Passive Speaker\n2. Set a sequencers' output to LFO - so the sequencer's signal runs through the LFO to a speaker.\n3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO.\n4. Use another logic writer to write the BPM to the LFO.\n5. You are ready. This is the future. You're in space. Make it sound cool.\n\nFor more info, check out the music page.", - "PrefabName": "DeviceLfoVolume", - "PrefabHash": -1844430312, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Time", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Bpm", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Whole Note", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Half Note", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Quarter Note", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Eighth Note", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Sixteenth Note", - "LogicAccessTypes": "4" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "Time": "ReadWrite", - "Bpm": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureManualHatch", - "Title": "Manual Hatch", - "Description": "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.", - "PrefabName": "StructureManualHatch", - "PrefabHash": -1808154199, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemMarineBodyArmor", - "Title": "Marine Armor", - "Description": "", - "PrefabName": "ItemMarineBodyArmor", - "PrefabHash": 1399098998, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Suit", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemMarineHelmet", - "Title": "Marine Helmet", - "Description": "", - "PrefabName": "ItemMarineHelmet", - "PrefabHash": 1073631646, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Helmet", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingUniformMarine", - "Title": "Marine Uniform", - "Description": "", - "PrefabName": "UniformMarine", - "PrefabHash": -48342840, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Access Card", - "SlotType": "AccessCard", - "SlotIndex": "2" - }, - { - "SlotName": "Credit Card", - "SlotType": "CreditCard", - "SlotIndex": "3" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Uniform", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingStructureLogicMathUnary", - "Title": "Math Unary", - "Description": "0.Ceil\n1.Floor\n2.Abs\n3.Log\n4.Exp\n5.Round\n6.Rand\n7.Sqrt\n8.Sin\n9.Cos\n10.Tan\n11.Asin\n12.Acos\n13.Atan\n14.Not", - "PrefabName": "StructureLogicMathUnary", - "PrefabHash": -1160020195, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Ceil", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Floor", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Abs", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Log", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Exp", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Round", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Rand", - "LogicAccessTypes": "6" - }, - { - "LogicName": "Sqrt", - "LogicAccessTypes": "7" - }, - { - "LogicName": "Sin", - "LogicAccessTypes": "8" - }, - { - "LogicName": "Cos", - "LogicAccessTypes": "9" - }, - { - "LogicName": "Tan", - "LogicAccessTypes": "10" - }, - { - "LogicName": "Asin", - "LogicAccessTypes": "11" - }, - { - "LogicName": "Acos", - "LogicAccessTypes": "12" - }, - { - "LogicName": "Atan", - "LogicAccessTypes": "13" - }, - { - "LogicName": "Not", - "LogicAccessTypes": "14" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingCartridgeMedicalAnalyser", - "Title": "Medical Analyzer", - "Description": "When added to the OreCore Handheld Tablet, Asura's's ReadyMed medical analyzer reveals the health, or otherwise, of users various organs. Due to a design flaw, older models were notorious for producing quasar-like levels of x-ray radiation. Recent advances in shielding have more than halved the risk to users.", - "PrefabName": "CartridgeMedicalAnalyser", - "PrefabHash": -1116110181, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureMediumConvectionRadiator", - "Title": "Medium Convection Radiator", - "Description": "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.", - "PrefabName": "StructureMediumConvectionRadiator", - "PrefabHash": -1918215845, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePassiveLargeRadiatorGas", - "Title": "Medium Convection Radiator", - "Description": "Has been replaced by Medium Convection Radiator.", - "PrefabName": "StructurePassiveLargeRadiatorGas", - "PrefabHash": 2066977095, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureMediumConvectionRadiatorLiquid", - "Title": "Medium Convection Radiator Liquid", - "Description": "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.", - "PrefabName": "StructureMediumConvectionRadiatorLiquid", - "PrefabHash": -1169014183, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePassiveLargeRadiatorLiquid", - "Title": "Medium Convection Radiator Liquid", - "Description": "Has been replaced by Medium Convection Radiator Liquid.", - "PrefabName": "StructurePassiveLargeRadiatorLiquid", - "PrefabHash": 24786172, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemGasFilterCarbonDioxideM", - "Title": "Medium Filter (Carbon Dioxide)", - "Description": "", - "PrefabName": "ItemGasFilterCarbonDioxideM", - "PrefabHash": 416897318, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "CarbonDioxide" - } - }, - { - "Key": "ThingItemGasFilterNitrogenM", - "Title": "Medium Filter (Nitrogen)", - "Description": "", - "PrefabName": "ItemGasFilterNitrogenM", - "PrefabHash": -632657357, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Nitrogen" - } - }, - { - "Key": "ThingItemGasFilterNitrousOxideM", - "Title": "Medium Filter (Nitrous Oxide)", - "Description": "", - "PrefabName": "ItemGasFilterNitrousOxideM", - "PrefabHash": 1824284061, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "NitrousOxide" - } - }, - { - "Key": "ThingItemGasFilterOxygenM", - "Title": "Medium Filter (Oxygen)", - "Description": "", - "PrefabName": "ItemGasFilterOxygenM", - "PrefabHash": -1067319543, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Oxygen" - } - }, - { - "Key": "ThingItemGasFilterPollutantsM", - "Title": "Medium Filter (Pollutants)", - "Description": "", - "PrefabName": "ItemGasFilterPollutantsM", - "PrefabHash": 63677771, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Pollutant" - } - }, - { - "Key": "ThingItemGasFilterVolatilesM", - "Title": "Medium Filter (Volatiles)", - "Description": "", - "PrefabName": "ItemGasFilterVolatilesM", - "PrefabHash": 1037507240, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Volatiles" - } - }, - { - "Key": "ThingItemGasFilterWaterM", - "Title": "Medium Filter (Water)", - "Description": "", - "PrefabName": "ItemGasFilterWaterM", - "PrefabHash": 8804422, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "GasFilter", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "FilterType": "Steam" - } - }, - { - "Key": "ThingStructureMediumHangerDoor", - "Title": "Medium Hangar Door", - "Description": "1 x 2 modular door piece for building hangar doors.", - "PrefabName": "StructureMediumHangerDoor", - "PrefabHash": -566348148, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureMediumRadiator", - "Title": "Medium Radiator", - "Description": "A stand-alone radiator unit optimized for radiating heat in vacuums.", - "PrefabName": "StructureMediumRadiator", - "PrefabHash": -975966237, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureMediumRadiatorLiquid", - "Title": "Medium Radiator Liquid", - "Description": "A stand-alone liquid radiator unit optimized for radiating heat in vacuums.", - "PrefabName": "StructureMediumRadiatorLiquid", - "PrefabHash": -1141760613, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSatelliteDish", - "Title": "Medium Satellite Dish", - "Description": "This medium communications unit can be used to communicate with nearby trade vessels.\n \nWhen connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", - "PrefabName": "StructureSatelliteDish", - "PrefabHash": 439026183, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SignalStrength", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SignalID", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "InterrogationProgress", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TargetPadIndex", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "SizeX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SizeZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "MinimumWattsToContact", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "WattsReachingContact", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ContactTypeId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "BestContactFilter", - "LogicAccessTypes": "Read Write" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Setting": "ReadWrite", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "SignalStrength": "Read", - "SignalID": "Read", - "InterrogationProgress": "Read", - "TargetPadIndex": "ReadWrite", - "SizeX": "Read", - "SizeZ": "Read", - "MinimumWattsToContact": "Read", - "WattsReachingContact": "Read", - "ContactTypeId": "Read", - "ReferenceId": "Read", - "BestContactFilter": "ReadWrite" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingMeteorite", - "Title": "Meteorite", - "Description": "", - "PrefabName": "Meteorite", - "PrefabHash": -99064335, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingApplianceMicrowave", - "Title": "Microwave", - "Description": "While countless 'better' ways of cooking Food have been invented in the last few hundred years, few are as durable or easy to fabricate as the OK-Zoomer microwave. Licensed from Xigo, the plans are based on a classic model from the mid-21st century, giving it a charmingly retro feel. But don't worry, it oscillates Water molecules more than adequately. \nJust bolt it to a Powered Bench using a Wrench to power it, follow the recipe, and you're cooking.", - "PrefabName": "ApplianceMicrowave", - "PrefabHash": -1136173965, - "SlotInserts": [ - { - "SlotName": "Output", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingStructurePowerTransmitterReceiver", - "Title": "Microwave Power Receiver", - "Description": "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.Connects to Logic Transmitter", - "PrefabName": "StructurePowerTransmitterReceiver", - "PrefabHash": 1195820278, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PowerPotential", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerActual", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Unlinked", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Linked", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "Read", - "Error": "Read", - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "WirelessLogic": true, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePowerTransmitter", - "Title": "Microwave Power Transmitter", - "Description": "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.", - "PrefabName": "StructurePowerTransmitter", - "PrefabHash": -65087121, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PowerPotential", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerActual", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PositionZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Unlinked", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Linked", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "Read", - "Error": "Read", - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemMilk", - "Title": "Milk", - "Description": "Full disclosure, it's not actually 'milk', but an Agrizero-invented synthesis of 5ml Soy Oil and 5g Fern, delicately blended in the Chemistry Station. Surprisingly filling, it can be used as an ingredient to cook other food in the Microwave or Automated Oven. Think, Muffin.", - "PrefabName": "ItemMilk", - "PrefabHash": 1327248310, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Milk": 1.0 - } - } - }, - { - "Key": "ThingItemMiningBackPack", - "Title": "Mining Backpack", - "Description": "", - "PrefabName": "ItemMiningBackPack", - "PrefabHash": -1650383245, - "SlotInserts": [ - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "0" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "1" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "2" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "3" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "4" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "5" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "6" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "7" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "8" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "9" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "10" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "11" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "12" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "13" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "14" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "15" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "16" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "17" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "18" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "19" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "20" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "21" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "22" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "23" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Back", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemMiningBelt", - "Title": "Mining Belt", - "Description": "Originally developed by Recurso Espaciais for asteroid mining, the Stationeer's mining belt has room for two tools and eight ore stacks. While wearing the belt, ore is automatically stored there when mined. Volatile and temperature-dependent remain stable in the environmentally controlled unit.", - "PrefabName": "ItemMiningBelt", - "PrefabHash": -676435305, - "SlotInserts": [ - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "0" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "1" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "2" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "3" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "4" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "5" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "6" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "7" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "8" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "9" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Belt", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemMiningBeltMKII", - "Title": "Mining Belt MK II", - "Description": "A larger and more capacious mining belt, the Mk II is similar to the Mining Belt, but has 13 slots instead of the basic 8, to increase the length of your mining trips. It also has space for two tools. ", - "PrefabName": "ItemMiningBeltMKII", - "PrefabHash": 1470787934, - "SlotInserts": [ - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "0" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "1" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "2" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "3" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "4" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "5" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "6" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "7" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "8" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "9" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "10" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "11" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "12" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "13" - }, - { - "SlotName": "Ore", - "SlotType": "Ore", - "SlotIndex": "14" - } - ], - "LogicInsert": [ - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "12": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "13": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "14": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Belt", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemMiningCharge", - "Title": "Mining Charge", - "Description": "A low cost, high yield explosive with a 10 second timer.", - "PrefabName": "ItemMiningCharge", - "PrefabHash": 15829510, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemMiningDrill", - "Title": "Mining Drill", - "Description": "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.'", - "PrefabName": "ItemMiningDrill", - "PrefabHash": 1055173191, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Default", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Flatten", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemMiningDrillHeavy", - "Title": "Mining Drill (Heavy)", - "Description": "Sometimes mining trips require something a little bigger to bring home the goods. This scaled up version of the Recurso 'Topo' design Mining Drill can literally move mountains. The heavy mining drill will remove more ground and mine ore more quickly than the standard mining drill. The heavy mining drill is also resilient to temperature and pressure. So no matter what planet or extreme weather conditions may be present, the Recurso heavy mining drill will get the job done.", - "PrefabName": "ItemMiningDrillHeavy", - "PrefabHash": -1663349918, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Default", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Flatten", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemRocketMiningDrillHead", - "Title": "Mining-Drill Head (Basic)", - "Description": "Replaceable drill head for Rocket Miner", - "PrefabName": "ItemRocketMiningDrillHead", - "PrefabHash": 2109945337, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "DrillHead", - "SortingClass": "Default", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemRocketMiningDrillHeadDurable", - "Title": "Mining-Drill Head (Durable)", - "Description": "", - "PrefabName": "ItemRocketMiningDrillHeadDurable", - "PrefabHash": 1530764483, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "DrillHead", - "SortingClass": "Default", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemRocketMiningDrillHeadHighSpeedIce", - "Title": "Mining-Drill Head (High Speed Ice)", - "Description": "", - "PrefabName": "ItemRocketMiningDrillHeadHighSpeedIce", - "PrefabHash": 653461728, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "DrillHead", - "SortingClass": "Default", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemRocketMiningDrillHeadHighSpeedMineral", - "Title": "Mining-Drill Head (High Speed Mineral)", - "Description": "", - "PrefabName": "ItemRocketMiningDrillHeadHighSpeedMineral", - "PrefabHash": 1440678625, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "DrillHead", - "SortingClass": "Default", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemRocketMiningDrillHeadIce", - "Title": "Mining-Drill Head (Ice)", - "Description": "", - "PrefabName": "ItemRocketMiningDrillHeadIce", - "PrefabHash": -380904592, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "DrillHead", - "SortingClass": "Default", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemRocketMiningDrillHeadLongTerm", - "Title": "Mining-Drill Head (Long Term)", - "Description": "", - "PrefabName": "ItemRocketMiningDrillHeadLongTerm", - "PrefabHash": -684020753, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "DrillHead", - "SortingClass": "Default", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemRocketMiningDrillHeadMineral", - "Title": "Mining-Drill Head (Mineral)", - "Description": "", - "PrefabName": "ItemRocketMiningDrillHeadMineral", - "PrefabHash": 1083675581, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "DrillHead", - "SortingClass": "Default", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingItemMKIIAngleGrinder", - "Title": "Mk II Angle Grinder", - "Description": "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.", - "PrefabName": "ItemMKIIAngleGrinder", - "PrefabHash": 240174650, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemMKIIArcWelder", - "Title": "Mk II Arc Welder", - "Description": "", - "PrefabName": "ItemMKIIArcWelder", - "PrefabHash": -2061979347, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemMKIICrowbar", - "Title": "Mk II Crowbar", - "Description": "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise. The MK II is more resistant to temperature and pressure.", - "PrefabName": "ItemMKIICrowbar", - "PrefabHash": 1440775434, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemMKIIDrill", - "Title": "Mk II Drill", - "Description": "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", - "PrefabName": "ItemMKIIDrill", - "PrefabHash": 324791548, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Activate": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemMKIIDuctTape", - "Title": "Mk II Duct Tape", - "Description": "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage.", - "PrefabName": "ItemMKIIDuctTape", - "PrefabHash": 388774906, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemMKIIMiningDrill", - "Title": "Mk II Mining Drill", - "Description": "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.' The MK II is more resistant to temperature and pressure.", - "PrefabName": "ItemMKIIMiningDrill", - "PrefabHash": -1875271296, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Default", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Flatten", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemMKIIScrewdriver", - "Title": "Mk II Screwdriver", - "Description": "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units. The MK II is more resistant to temperature and pressure.", - "PrefabName": "ItemMKIIScrewdriver", - "PrefabHash": -2015613246, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemMKIIWireCutters", - "Title": "Mk II Wire Cutters", - "Description": "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools.", - "PrefabName": "ItemMKIIWireCutters", - "PrefabHash": -178893251, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemMKIIWrench", - "Title": "Mk II Wrench", - "Description": "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures The MK II is more resistant to temperature and pressure.", - "PrefabName": "ItemMKIIWrench", - "PrefabHash": 1862001680, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingCircuitboardModeControl", - "Title": "Mode Control", - "Description": "Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.", - "PrefabName": "CircuitboardModeControl", - "PrefabHash": -1134148135, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingMothershipCore", - "Title": "Mothership Core", - "Description": "A relic of from an earlier era of space ambition, Sinotai's mothership cores formed the central element of a generation's space-going creations. While Sinotai's pivot to smaller, modular craft upset some purists, motherships continue to be built and maintained by dedicated enthusiasts.", - "PrefabName": "MothershipCore", - "PrefabHash": -1930442922, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureMotionSensor", - "Title": "Motion Sensor", - "Description": "Originally developed to monitor dance marathons, the motion sensor can also be connected to Logic systems for security purposes, automatic lighting, doors and various other applications.\nThe sensor activates whenever a player enters the grid it is placed on.", - "PrefabName": "StructureMotionSensor", - "PrefabHash": -1713470563, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Activate": "ReadWrite", - "Quantity": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemMuffin", - "Title": "Muffin", - "Description": "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.", - "PrefabName": "ItemMuffin", - "PrefabHash": -1864982322, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemMushroom", - "Title": "Mushroom", - "Description": "A tasty food item. Unlike normal plants, it consumes Oxygen and outputs Carbon Dioxide. Mushrooms will only mature at a moderate rate in darkness, and prolonged light will kill it.", - "PrefabName": "ItemMushroom", - "PrefabHash": 2044798572, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 20.0, - "Ingredient": true, - "Reagents": { - "Mushroom": 1.0 - } - } - }, - { - "Key": "ThingSeedBag_Mushroom", - "Title": "Mushroom Seeds", - "Description": "Grow a Mushroom.", - "PrefabName": "SeedBag_Mushroom", - "PrefabHash": 311593418, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingCartridgeNetworkAnalyser", - "Title": "Network Analyzer", - "Description": "A minor masterpiece of micro-electronic engineering, the network analyzer displays the current, voltage and wattage of a cable network, as well as any devices connected to it. Based on a widely-copied Sinotai design, it's used in conjunction with the OreCore Handheld Tablet.", - "PrefabName": "CartridgeNetworkAnalyser", - "PrefabHash": 1606989119, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemNVG", - "Title": "Night Vision Goggles", - "Description": "", - "PrefabName": "ItemNVG", - "PrefabHash": 982514123, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Glasses", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingStructureNitrolyzer", - "Title": "Nitrolyzer", - "Description": "This device is used to create Nitrous Oxide from Oxygen, Nitrogen, and a large amount of energy. The process does not completely transform all the available gas at once, so the output is a mix of all three gasses, which may need further processing. More NOS will be created, if the gas inside the machine is close to a 1/1 ratio of Oxygen to Nitrogen. The second gas input line in optional, and not required if the gas is pre mixed.", - "PrefabName": "StructureNitrolyzer", - "PrefabHash": 1898243702, - "SlotInserts": [ - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TemperatureOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogenOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutantOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatilesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWaterOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxideOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMolesOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionInput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionInput2", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CombustionOutput", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Idle", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Active", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "PressureInput": "Read", - "TemperatureInput": "Read", - "RatioOxygenInput": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioNitrogenInput": "Read", - "RatioPollutantInput": "Read", - "RatioVolatilesInput": "Read", - "RatioWaterInput": "Read", - "RatioNitrousOxideInput": "Read", - "TotalMolesInput": "Read", - "PressureInput2": "Read", - "TemperatureInput2": "Read", - "RatioOxygenInput2": "Read", - "RatioCarbonDioxideInput2": "Read", - "RatioNitrogenInput2": "Read", - "RatioPollutantInput2": "Read", - "RatioVolatilesInput2": "Read", - "RatioWaterInput2": "Read", - "RatioNitrousOxideInput2": "Read", - "TotalMolesInput2": "Read", - "PressureOutput": "Read", - "TemperatureOutput": "Read", - "RatioOxygenOutput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioNitrogenOutput": "Read", - "RatioPollutantOutput": "Read", - "RatioVolatilesOutput": "Read", - "RatioWaterOutput": "Read", - "RatioNitrousOxideOutput": "Read", - "TotalMolesOutput": "Read", - "CombustionInput": "Read", - "CombustionInput2": "Read", - "CombustionOutput": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Input2" - ], - [ - "Pipe", - "Output" - ], - [ - "Power", - "None" - ] - ], - "DevicesLength": 2, - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureHorizontalAutoMiner", - "Title": "OGRE", - "Description": "The Recurso OGRE (Orthogonal Ground Rotating Excavator) is a base structure with attached mining vehicle, which will mine a horizontal shaft up to X meters long. When full, the mining vehicle will return to the base to empty itself, before returning to dig. If it encounters empty space, it will also return to base and await instruction. The unit will return if deactivated.\n \nThe OGRE can be connected to a chute system, and is controllable by a logic network. Note that the OGRE outputs more ore than a conventional Mining Drill over the same area, due to more efficient processing.\n\nMODES\nIdle - 0\nMining - 1\nReturning - 2\nDepostingOre - 3\nFinished - 4\n", - "PrefabName": "StructureHorizontalAutoMiner", - "PrefabHash": 1070427573, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureOccupancySensor", - "Title": "Occupancy Sensor", - "Description": "Will be triggered if there is a player in the same room as the sensor. The quantity variable will show the number of players. You can use configure it to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet. This sensor only works when placed in a room.", - "PrefabName": "StructureOccupancySensor", - "PrefabHash": 322782515, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Activate", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Activate": "Read", - "Quantity": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePipeOneWayValve", - "Title": "One Way Valve (Gas)", - "Description": "The one way valve moves gas in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure.\n", - "PrefabName": "StructurePipeOneWayValve", - "PrefabHash": 1580412404, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidPipeOneWayValve", - "Title": "One Way Valve (Liquid)", - "Description": "The one way valve moves liquid in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure..", - "PrefabName": "StructureLiquidPipeOneWayValve", - "PrefabHash": -782453061, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemCoalOre", - "Title": "Ore (Coal)", - "Description": "Humanity wouldn't have got to space without humble, combustible coal. Burn it in a , smelt it in the Furnace to create alloys, or use it in the Reagent Processor to make Spray Paint (Black).", - "PrefabName": "ItemCoalOre", - "PrefabHash": 1724793494, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Hydrocarbon": 1.0 - } - } - }, - { - "Key": "ThingItemCobaltOre", - "Title": "Ore (Cobalt)", - "Description": "Cobalt is a chemical element with the symbol \"Co\" and is typically found in only small deposits. Cobalt is a rare substance, but used create the Heal Pill and several alloys.", - "PrefabName": "ItemCobaltOre", - "PrefabHash": -983091249, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Cobalt": 1.0 - } - } - }, - { - "Key": "ThingItemCopperOre", - "Title": "Ore (Copper)", - "Description": "Copper is a chemical element with the symbol \"Cu\". This common and highly conductive material is found on most astronomical bodies and is used in a variety of manufacturing processes including electronic components, alloys, and wires.", - "PrefabName": "ItemCopperOre", - "PrefabHash": -707307845, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Copper": 1.0 - } - } - }, - { - "Key": "ThingItemGoldOre", - "Title": "Ore (Gold)", - "Description": "Surprisingly common throughout the Solar System, Gold is thought to originate in the heart of supernovas, gathering as dust in the early stages of solar formation, then incorporating into the slowly accreting planetary bodies. Now a prized element in Stationeer construction, Gold is valued not for its beauty, but its reliability: inert, durable, conductive and highly stable, gold's strength is that it does nothing.", - "PrefabName": "ItemGoldOre", - "PrefabHash": -1348105509, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Gold": 1.0 - } - } - }, - { - "Key": "ThingItemIronOre", - "Title": "Ore (Iron)", - "Description": "Abundant throughout the Solar System, iron is the ore most commonly used by Stationeers constructing offworld bases. It can be smelted into both Ingot (Iron)s and Ingot (Steel)s.", - "PrefabName": "ItemIronOre", - "PrefabHash": 1758427767, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Iron": 1.0 - } - } - }, - { - "Key": "ThingItemLeadOre", - "Title": "Ore (Lead)", - "Description": "Lead is a chemical element with the symbol \"Pb\". It is a dense, heavy metal with a low melting point. Lead is a used to make a variety of things such as alloys like Ingot (Solder) and munitions.", - "PrefabName": "ItemLeadOre", - "PrefabHash": -190236170, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Lead": 1.0 - } - } - }, - { - "Key": "ThingItemNickelOre", - "Title": "Ore (Nickel)", - "Description": "Nickel is a chemical element with the symbol \"Ni\" and is a rare metal commonly used as a plating to prevent corrosion. Sought after by many Stationeers, Nickel is also commonly used to create several alloys.", - "PrefabName": "ItemNickelOre", - "PrefabHash": 1830218956, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Nickel": 1.0 - } - } - }, - { - "Key": "ThingItemSiliconOre", - "Title": "Ore (Silicon)", - "Description": "Silicon is a chemical element with the symbol \"Si\" and is one of the most useful elements to Stationeers. Readily available throughout the universe, silicon is used in a range of alloys, glass, plastics and various electronic components a Stationeer may need to complete their mission.", - "PrefabName": "ItemSiliconOre", - "PrefabHash": 1103972403, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Silicon": 1.0 - } - } - }, - { - "Key": "ThingItemSilverOre", - "Title": "Ore (Silver)", - "Description": "Silver is a chemical element with the symbol \"Ag\". Valued by many Stationeers for its attractive luster and sheen, it is also used in a variety of electronics components and alloys.", - "PrefabName": "ItemSilverOre", - "PrefabHash": -916518678, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Silver": 1.0 - } - } - }, - { - "Key": "ThingItemUraniumOre", - "Title": "Ore (Uranium)", - "Description": "In 1934, Enrico Fermi noticed that bombarding uranium with neutrons produced a burst of beta rays, and a new material. This process was named 'nuclear fission', and resulted in cheap energy, the Cold War, and countless thousand deaths. While reasonably common throughout the Solar System, Stationeers are wary of the material.", - "PrefabName": "ItemUraniumOre", - "PrefabHash": -1516581844, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Uranium": 1.0 - } - } - }, - { - "Key": "ThingCartridgeOreScanner", - "Title": "Ore Scanner", - "Description": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.", - "PrefabName": "CartridgeOreScanner", - "PrefabHash": -1768732546, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingCartridgeOreScannerColor", - "Title": "Ore Scanner (Color)", - "Description": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.", - "PrefabName": "CartridgeOreScannerColor", - "PrefabHash": 1738236580, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureOverheadShortCornerLocker", - "Title": "Overhead Corner Locker", - "Description": "", - "PrefabName": "StructureOverheadShortCornerLocker", - "PrefabHash": -1794932560, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureOverheadShortLocker", - "Title": "Overhead Locker", - "Description": "", - "PrefabName": "StructureOverheadShortLocker", - "PrefabHash": 1468249454, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingAppliancePaintMixer", - "Title": "Paint Mixer", - "Description": "", - "PrefabName": "AppliancePaintMixer", - "PrefabHash": -1339716113, - "SlotInserts": [ - { - "SlotName": "Output", - "SlotType": "Bottle", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingStructurePassiveLiquidDrain", - "Title": "Passive Liquid Drain", - "Description": "Moves liquids from a pipe network to the world atmosphere.", - "PrefabName": "StructurePassiveLiquidDrain", - "PrefabHash": 1812364811, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureFloorDrain", - "Title": "Passive Liquid Inlet", - "Description": "A passive liquid floor inlet that quickly removes liquids in one direction from the world into the connected pipe network. It will equalise gasses with the world atmosphere also.", - "PrefabName": "StructureFloorDrain", - "PrefabHash": 1048813293, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ] - }, - { - "Key": "ThingPassiveSpeaker", - "Title": "Passive Speaker", - "Description": "", - "PrefabName": "PassiveSpeaker", - "PrefabHash": 248893646, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Volume", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "SoundAlert", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read Write" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Volume": "ReadWrite", - "PrefabHash": "ReadWrite", - "SoundAlert": "ReadWrite", - "ReferenceId": "ReadWrite" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemPassiveVent", - "Title": "Passive Vent", - "Description": "This kit creates a Passive Vent among other variants.", - "PrefabName": "ItemPassiveVent", - "PrefabHash": 238631271, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingStructurePassiveVent", - "Title": "Passive Vent", - "Description": "Passive vents allow gases to move into and out of pipe networks, which are closed systems unless connected to a device or structure. Passive vents are not powered, merely an aperture, essentially turning an enclosed space into part of the pipe network. ", - "PrefabName": "StructurePassiveVent", - "PrefabHash": 335498166, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ] - }, - { - "Key": "ThingItemPeaceLily", - "Title": "Peace Lily", - "Description": "A fetching lily with greater resistance to cold temperatures.", - "PrefabName": "ItemPeaceLily", - "PrefabHash": 2042955224, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemPickaxe", - "Title": "Pickaxe", - "Description": "When the sun sets and the Mining Drill runs dead, its batteries drained and your Solar Panel cold and lifeless, the Autolathe empty, the way forward unclear, one thing holds back the endless night of defeat: the trusty pickaxe.", - "PrefabName": "ItemPickaxe", - "PrefabHash": -913649823, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructurePictureFrameThickLandscapeLarge", - "Title": "Picture Frame Thick Landscape Large", - "Description": "", - "PrefabName": "StructurePictureFrameThickLandscapeLarge", - "PrefabHash": -1434523206, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThickMountLandscapeLarge", - "Title": "Picture Frame Thick Landscape Large", - "Description": "", - "PrefabName": "StructurePictureFrameThickMountLandscapeLarge", - "PrefabHash": 950004659, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThickLandscapeSmall", - "Title": "Picture Frame Thick Landscape Small", - "Description": "", - "PrefabName": "StructurePictureFrameThickLandscapeSmall", - "PrefabHash": -2041566697, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThickMountLandscapeSmall", - "Title": "Picture Frame Thick Landscape Small", - "Description": "", - "PrefabName": "StructurePictureFrameThickMountLandscapeSmall", - "PrefabHash": 347154462, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThickMountPortraitLarge", - "Title": "Picture Frame Thick Mount Portrait Large", - "Description": "", - "PrefabName": "StructurePictureFrameThickMountPortraitLarge", - "PrefabHash": -1459641358, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThickMountPortraitSmall", - "Title": "Picture Frame Thick Mount Portrait Small", - "Description": "", - "PrefabName": "StructurePictureFrameThickMountPortraitSmall", - "PrefabHash": -2066653089, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThickPortraitLarge", - "Title": "Picture Frame Thick Portrait Large", - "Description": "", - "PrefabName": "StructurePictureFrameThickPortraitLarge", - "PrefabHash": -1686949570, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThickPortraitSmall", - "Title": "Picture Frame Thick Portrait Small", - "Description": "", - "PrefabName": "StructurePictureFrameThickPortraitSmall", - "PrefabHash": -1218579821, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThinLandscapeLarge", - "Title": "Picture Frame Thin Landscape Large", - "Description": "", - "PrefabName": "StructurePictureFrameThinLandscapeLarge", - "PrefabHash": -1418288625, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThinMountLandscapeLarge", - "Title": "Picture Frame Thin Landscape Large", - "Description": "", - "PrefabName": "StructurePictureFrameThinMountLandscapeLarge", - "PrefabHash": -1146760430, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThinMountLandscapeSmall", - "Title": "Picture Frame Thin Landscape Small", - "Description": "", - "PrefabName": "StructurePictureFrameThinMountLandscapeSmall", - "PrefabHash": -1752493889, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThinLandscapeSmall", - "Title": "Picture Frame Thin Landscape Small", - "Description": "", - "PrefabName": "StructurePictureFrameThinLandscapeSmall", - "PrefabHash": -2024250974, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThinPortraitLarge", - "Title": "Picture Frame Thin Portrait Large", - "Description": "", - "PrefabName": "StructurePictureFrameThinPortraitLarge", - "PrefabHash": 1212777087, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThinMountPortraitLarge", - "Title": "Picture Frame Thin Portrait Large", - "Description": "", - "PrefabName": "StructurePictureFrameThinMountPortraitLarge", - "PrefabHash": 1094895077, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThinMountPortraitSmall", - "Title": "Picture Frame Thin Portrait Small", - "Description": "", - "PrefabName": "StructurePictureFrameThinMountPortraitSmall", - "PrefabHash": 1835796040, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructurePictureFrameThinPortraitSmall", - "Title": "Picture Frame Thin Portrait Small", - "Description": "", - "PrefabName": "StructurePictureFrameThinPortraitSmall", - "PrefabHash": 1684488658, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemPillHeal", - "Title": "Pill (Medical)", - "Description": "Three centuries of pharmaceutical technology compressed into one small, easy to ingest pill: the Heal Pill, aka the Proton Pill, aka Mr Happy contains active enzymes, therapeutic proteins, modified microbial strains, and mammalian cell line analogues in a single-dose boost of high purity, efficacy, and potency that potentiates a swift parasympathetic immune response.", - "PrefabName": "ItemPillHeal", - "PrefabHash": 1118069417, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemPillStun", - "Title": "Pill (Paralysis)", - "Description": "Through rarely publicized, the existence of this pill is an open secret. For use when all else has failed, the Sayonara Suppository immobilizes and rapidly ends the average Stationeer. The delivery mode ensures that if a Stationeer chooses to take this pill, they really have to want it.", - "PrefabName": "ItemPillStun", - "PrefabHash": 418958601, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingStructurePipeCrossJunction3", - "Title": "Pipe (3-Way Junction)", - "Description": "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "PrefabName": "StructurePipeCrossJunction3", - "PrefabHash": 2038427184, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructurePipeCrossJunction4", - "Title": "Pipe (4-Way Junction)", - "Description": "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "PrefabName": "StructurePipeCrossJunction4", - "PrefabHash": -417629293, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructurePipeCrossJunction5", - "Title": "Pipe (5-Way Junction)", - "Description": "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "PrefabName": "StructurePipeCrossJunction5", - "PrefabHash": -1877193979, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - } - ] - }, - { - "Key": "ThingStructurePipeCrossJunction6", - "Title": "Pipe (6-Way Junction)", - "Description": "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "PrefabName": "StructurePipeCrossJunction6", - "PrefabHash": 152378047, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "5" - } - ] - }, - { - "Key": "ThingStructurePipeCorner", - "Title": "Pipe (Corner)", - "Description": "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.", - "PrefabName": "StructurePipeCorner", - "PrefabHash": -1785673561, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructurePipeCrossJunction", - "Title": "Pipe (Cross Junction)", - "Description": "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.", - "PrefabName": "StructurePipeCrossJunction", - "PrefabHash": -1405295588, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ] - }, - { - "Key": "ThingStructurePipeStraight", - "Title": "Pipe (Straight)", - "Description": "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.", - "PrefabName": "StructurePipeStraight", - "PrefabHash": 73728932, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructurePipeTJunction", - "Title": "Pipe (T Junction)", - "Description": "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.", - "PrefabName": "StructurePipeTJunction", - "PrefabHash": -913817472, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ] - }, - { - "Key": "ThingStructurePipeAnalysizer", - "Title": "Pipe Analyzer", - "Description": "Allegedly the outcome of a weekend father-daughter electronics project by an overzealous {ExMin engineer, the pipe analyzer is essentially a more advanced version of the Pipe Meter.\nDisplaying the internal pressure of pipe networks, it also reads out temperature and gas contents, and can be connected to a Console or Computer via a {Logic system.", - "PrefabName": "StructurePipeAnalysizer", - "PrefabHash": 435685051, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Lock": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingPipeBenderMod", - "Title": "Pipe Bender Mod", - "Description": "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "PrefabName": "PipeBenderMod", - "PrefabHash": 443947415, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructurePipeRadiator", - "Title": "Pipe Convection Radiator", - "Description": "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added the gas within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the gas in question. Adding multiple radiators will speed up heat transfer.", - "PrefabName": "StructurePipeRadiator", - "PrefabHash": 1696603168, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePipeCowl", - "Title": "Pipe Cowl", - "Description": "", - "PrefabName": "StructurePipeCowl", - "PrefabHash": 465816159, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ] - }, - { - "Key": "ThingItemPipeCowl", - "Title": "Pipe Cowl", - "Description": "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.", - "PrefabName": "ItemPipeCowl", - "PrefabHash": -38898376, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 20.0 - } - }, - { - "Key": "ThingStructurePipeHeater", - "Title": "Pipe Heater (Gas)", - "Description": "Adds 1000 joules of heat per tick to the contents of your pipe network.", - "PrefabName": "StructurePipeHeater", - "PrefabHash": -419758574, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidPipeHeater", - "Title": "Pipe Heater (Liquid)", - "Description": "Adds 1000 joules of heat per tick to the contents of your pipe network.", - "PrefabName": "StructureLiquidPipeHeater", - "PrefabHash": -287495560, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemPipeHeater", - "Title": "Pipe Heater Kit (Gas)", - "Description": "Creates a Pipe Heater (Gas).", - "PrefabName": "ItemPipeHeater", - "PrefabHash": -1751627006, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemLiquidPipeHeater", - "Title": "Pipe Heater Kit (Liquid)", - "Description": "Creates a Pipe Heater (Liquid).", - "PrefabName": "ItemLiquidPipeHeater", - "PrefabHash": -248475032, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingStructurePipeIgniter", - "Title": "Pipe Igniter", - "Description": "Ignites the atmosphere inside the attached pipe network.", - "PrefabName": "StructurePipeIgniter", - "PrefabHash": 1286441942, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePipeLabel", - "Title": "Pipe Label", - "Description": "As its perspicacious name suggests, the pipe label is designed to be attached to a straight stretch of pipe. Users can then label the label with the Labeller.", - "PrefabName": "StructurePipeLabel", - "PrefabHash": -999721119, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePipeMeter", - "Title": "Pipe Meter", - "Description": "While the Stationeers program has, thus far, inspired little in the way of classical poetry, the following haiku was found etched, ironically, on a piece of pipe wreckage found on Vulcan:\n\"Humble pipe meter\nspeaks the truth, transmits pressure\nwithin any pipe\"", - "PrefabName": "StructurePipeMeter", - "PrefabHash": -1798362329, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePipeOrgan", - "Title": "Pipe Organ", - "Description": "The pipe organ can be attached to one end of a Kit (Pipe Valve). The length of the pipe after the pipe organ changes the pitch of the note it will play when the valve is opened. Use Logic to open and close the valves to create some custom tunes for your base or an audible warning.", - "PrefabName": "StructurePipeOrgan", - "PrefabHash": 1305252611, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - } - ] - }, - { - "Key": "ThingStructurePipeRadiatorFlat", - "Title": "Pipe Radiator", - "Description": "A pipe mounted radiator optimized for radiating heat in vacuums.", - "PrefabName": "StructurePipeRadiatorFlat", - "PrefabHash": -399883995, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePipeRadiatorFlatLiquid", - "Title": "Pipe Radiator Liquid", - "Description": "A liquid pipe mounted radiator optimized for radiating heat in vacuums.", - "PrefabName": "StructurePipeRadiatorFlatLiquid", - "PrefabHash": 2024754523, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingAppliancePlantGeneticAnalyzer", - "Title": "Plant Genetic Analyzer", - "Description": "The Genetic Analyzer can be used to process samples from the Plant Sampler. Once processed, the genetic information of the sampled plant can be viewed by clicking on the search button.\n\nIndividual Gene Value Widgets: \nMost gene values will appear as a sliding bar between a minimum value on the left and a maximum value on the right. The actual value of the gene is in the middle of the bar, in orange.\n\nMultiple Gene Value Widgets: \nFor temperature and pressure ranges, four genes appear on the same widget. The orange values underneath the bar are the minimum and maximum thresholds for growth. Outside of this range, the plant will stop growing and eventually die. The blue values underneath the bar are the minimum and maximum thresholds for ideal growth. Inside of this range, the plant will grow at maximum speed. The white values above the bar are the minimum and maximum achievable values for the growth threshold.", - "PrefabName": "AppliancePlantGeneticAnalyzer", - "PrefabHash": -1303038067, - "SlotInserts": [ - { - "SlotName": "Input", - "SlotType": "Tool", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingAppliancePlantGeneticSplicer", - "Title": "Plant Genetic Splicer", - "Description": "The Genetic Splicer can be used to copy a single gene from one 'source' plant to another 'target' plant of the same type. After copying, the source plant will be destroyed.\n \nTo begin splicing, place a plant or seed bag in the left slot (source) and place another plant or seed bag of the same type in the right slot (target). You can select a gene using the arrow buttons. Close the sliding door and press the green activate button. Once splicing has begun, the device will be locked until the process has finished (which will take approximately twenty minutes). If you want to cancel splicing you can power off the bench or detach the appliance as a last resort.", - "PrefabName": "AppliancePlantGeneticSplicer", - "PrefabHash": -1094868323, - "SlotInserts": [ - { - "SlotName": "Source Plant", - "SlotType": "Plant", - "SlotIndex": "0" - }, - { - "SlotName": "Target Plant", - "SlotType": "Plant", - "SlotIndex": "1" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingAppliancePlantGeneticStabilizer", - "Title": "Plant Genetic Stabilizer", - "Description": "The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize.\nStabilize: Increases all genes stability by 50%.\nDestabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%.\n ", - "PrefabName": "AppliancePlantGeneticStabilizer", - "PrefabHash": 871432335, - "SlotInserts": [ - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Stabilize", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Destabilize", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingItemPlantSampler", - "Title": "Plant Sampler", - "Description": "The Plant Sampler allows you to take a gene sample of a growing plant. The sampler can then be placed in the Plant Genetic Analyzer to attain and interpret the results.", - "PrefabName": "ItemPlantSampler", - "PrefabHash": 173023800, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructurePlanter", - "Title": "Planter", - "Description": "A small planter for decorative or hydroponic purposes. Can be connected to Water, or watered manually using a Water Bottle or Liquid Canister (Water).", - "PrefabName": "StructurePlanter", - "PrefabHash": -1125641329, - "SlotInserts": [ - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "0" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "1" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - } - ] - }, - { - "Key": "ThingItemPlasticSheets", - "Title": "Plastic Sheets", - "Description": "", - "PrefabName": "ItemPlasticSheets", - "PrefabHash": 662053345, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingStructurePlinth", - "Title": "Plinth", - "Description": "", - "PrefabName": "StructurePlinth", - "PrefabHash": 989835703, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemMiningDrillPneumatic", - "Title": "Pneumatic Mining Drill", - "Description": "0.Default\n1.Flatten", - "PrefabName": "ItemMiningDrillPneumatic", - "PrefabHash": 1258187304, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "GasCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Default", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Flatten", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingDynamicAirConditioner", - "Title": "Portable Air Conditioner", - "Description": "The Sinotai-designed Huxi portable air conditioner cools by drawing heat from the atmosphere and storing it, or adding heat to the atmosphere from its internal tank. With a max internal pressure of 8106kPa, its capacity is relatively limited, physics being clear on this subject. To extend its temperature storage ability, bolt the Huxi to a Tank Connector, then connect it to a pipe network supplying hot or cold gases.", - "PrefabName": "DynamicAirConditioner", - "PrefabHash": 519913639, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Cold", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Hot", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingDynamicScrubber", - "Title": "Portable Air Scrubber", - "Description": "A portable scrubber does just what it sounds like: removes specific substances from the air. For instance, attaching a Filter (Carbon Dioxide) will pull Carbon Dioxide from the surrounding atmosphere. Note that the scrubber has room for one battery and two filters, which will double its operating speed. Neat. When it reaches an internal pressure of 8106kPA, an error signal will flash on the switch, indicating it needs to be emptied. Either vent it directly, or attach it to a pipe network via a Kit (Tank Connector) and a Wrench.", - "PrefabName": "DynamicScrubber", - "PrefabHash": 755048589, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Gas Filter", - "SlotType": "GasFilter", - "SlotIndex": "1" - }, - { - "SlotName": "Gas Filter", - "SlotType": "GasFilter", - "SlotIndex": "2" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingPortableComposter", - "Title": "Portable Composter", - "Description": "A simple composting device, the basic composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires a full Liquid Canister and a battery to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat.\n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for", - "PrefabName": "PortableComposter", - "PrefabHash": -1958705204, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "Battery", - "SlotIndex": "2" - }, - { - "SlotName": "Liquid Canister", - "SlotType": "LiquidCanister", - "SlotIndex": "3" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingDynamicGasCanisterEmpty", - "Title": "Portable Gas Tank", - "Description": "Portable gas tanks store gas. To refill one, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere.", - "PrefabName": "DynamicGasCanisterEmpty", - "PrefabHash": -1741267161, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingDynamicGasCanisterAir", - "Title": "Portable Gas Tank (Air)", - "Description": "Portable gas tanks do one thing: store gas. But there's lots you can do with them. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere. They also attach to rovers and rockets. Alternatively, kick it over and practice barrel rolling. The possibilities are endless.", - "PrefabName": "DynamicGasCanisterAir", - "PrefabHash": -1713611165, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingDynamicGasCanisterCarbonDioxide", - "Title": "Portable Gas Tank (CO2)", - "Description": "Portable gas tanks do one thing: store gas. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or ... boom. Once it's full, you can refill a Canister (CO2) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere ... of sorts.", - "PrefabName": "DynamicGasCanisterCarbonDioxide", - "PrefabHash": -322413931, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingDynamicGasCanisterFuel", - "Title": "Portable Gas Tank (Fuel)", - "Description": "Portable tanks store gas. They're good at it. If you need to refill a tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or things get messy. You can refill a Canister (Fuel) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later. It's really up to you.", - "PrefabName": "DynamicGasCanisterFuel", - "PrefabHash": -817051527, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingDynamicGasCanisterNitrogen", - "Title": "Portable Gas Tank (Nitrogen)", - "Description": "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll end up with Nitrogen in places you weren't expecting. You can refill a Canister (Nitrogen) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later.", - "PrefabName": "DynamicGasCanisterNitrogen", - "PrefabHash": 121951301, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingDynamicGasCanisterNitrousOxide", - "Title": "Portable Gas Tank (Nitrous Oxide)", - "Description": "", - "PrefabName": "DynamicGasCanisterNitrousOxide", - "PrefabHash": 30727200, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingDynamicGasCanisterOxygen", - "Title": "Portable Gas Tank (Oxygen)", - "Description": "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll be picking tank shards out of your face. You can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent it into a sealed room to create an atmosphere. Or even paint it pink, call it Steve and fill that sad space in your heart.", - "PrefabName": "DynamicGasCanisterOxygen", - "PrefabHash": 1360925836, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingDynamicGasCanisterPollutants", - "Title": "Portable Gas Tank (Pollutants)", - "Description": "", - "PrefabName": "DynamicGasCanisterPollutants", - "PrefabHash": 396065382, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingDynamicGasCanisterVolatiles", - "Title": "Portable Gas Tank (Volatiles)", - "Description": "Portable tanks store gas. To refill one, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Don't fill it above 10 MPa, unless you're the sort who loves complicated, flammable emergencies. You can refill a Canister (Volatiles) by attaching it to the tank's striped section. Or you could use a Wrench to attach to a rocket and show it around the Solar System.", - "PrefabName": "DynamicGasCanisterVolatiles", - "PrefabHash": 108086870, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingDynamicGasTankAdvancedOxygen", - "Title": "Portable Gas Tank Mk II (Oxygen)", - "Description": "0.Mode0\n1.Mode1", - "PrefabName": "DynamicGasTankAdvancedOxygen", - "PrefabHash": -1264455519, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingDynamicGenerator", - "Title": "Portable Generator", - "Description": "Every Stationeer's best friend, the portable generator gets you up and running, fast. Fill it with a Canister (Fuel) to power up and charge a Battery Cell (Small), or attach it to a Power Connector to link it into your electrical network. It's pressure driven, so functions more efficiently at lower temperatures, and REALLY efficiently if supercooled. Perfecting your fuel mix also makes a big difference.", - "PrefabName": "DynamicGenerator", - "PrefabHash": -82087220, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "GasCanister", - "SlotIndex": "0" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "1" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingDynamicHydroponics", - "Title": "Portable Hydroponics", - "Description": "", - "PrefabName": "DynamicHydroponics", - "PrefabHash": 587726607, - "SlotInserts": [ - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "0" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "1" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "2" - }, - { - "SlotName": "Plant", - "SlotType": "Plant", - "SlotIndex": "3" - }, - { - "SlotName": "Liquid Canister", - "SlotType": "LiquidCanister", - "SlotIndex": "4" - }, - { - "SlotName": "Liquid Canister", - "SlotType": "Plant", - "SlotIndex": "5" - }, - { - "SlotName": "Liquid Canister", - "SlotType": "Plant", - "SlotIndex": "6" - }, - { - "SlotName": "Liquid Canister", - "SlotType": "Plant", - "SlotIndex": "7" - }, - { - "SlotName": "Liquid Canister", - "SlotType": "Plant", - "SlotIndex": "8" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingDynamicLight", - "Title": "Portable Light", - "Description": "Philippe Starck might not applaud, but this battery-powered light source undarkens the corners when illumination's lacking. Powered by any battery, it's a 'no-frills' Xigo design that can be cheaply fabricated with the minimum of fuss. Unless you like fuss. In which case, fuss all you like.", - "PrefabName": "DynamicLight", - "PrefabHash": -21970188, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "None", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingDynamicLiquidCanisterEmpty", - "Title": "Portable Liquid Tank", - "Description": "This portable tank stores liquid, and liquid only. You can bolt one to a Kit (Liquid Tank Connector) using a Wrench, then connect it to a pipe network to refill it. You can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", - "PrefabName": "DynamicLiquidCanisterEmpty", - "PrefabHash": -1939209112, - "SlotInserts": [ - { - "SlotName": "Liquid Canister", - "SlotType": "LiquidCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingDynamicGasCanisterWater", - "Title": "Portable Liquid Tank (Water)", - "Description": "This portable tank stores liquid, and liquid only. You just have to fill it up. To do this, bolt one to a Kit (Tank Connector) using a Wrench, then connect it to Liquid Pipe (Straight) to supply liquid to a network. \nTry to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun.\nYou can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", - "PrefabName": "DynamicGasCanisterWater", - "PrefabHash": 197293625, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "LiquidCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingDynamicMKIILiquidCanisterEmpty", - "Title": "Portable Liquid Tank Mk II", - "Description": "An empty, insulated liquid Gas Canister.", - "PrefabName": "DynamicMKIILiquidCanisterEmpty", - "PrefabHash": 2130739600, - "SlotInserts": [ - { - "SlotName": "Liquid Canister", - "SlotType": "LiquidCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingDynamicMKIILiquidCanisterWater", - "Title": "Portable Liquid Tank Mk II (Water)", - "Description": "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.", - "PrefabName": "DynamicMKIILiquidCanisterWater", - "PrefabHash": -319510386, - "SlotInserts": [ - { - "SlotName": "Liquid Canister", - "SlotType": "LiquidCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Atmospherics" - } - }, - { - "Key": "ThingPortableSolarPanel", - "Title": "Portable Solar Panel", - "Description": "", - "PrefabName": "PortableSolarPanel", - "PrefabHash": 2043318949, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "None", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructurePortablesConnector", - "Title": "Portables Connector", - "Description": "", - "PrefabName": "StructurePortablesConnector", - "PrefabHash": -899013427, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input2", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "PipeLiquid", - "Input2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemPotato", - "Title": "Potato", - "Description": " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.", - "PrefabName": "ItemPotato", - "PrefabHash": 1929046963, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 20.0, - "Ingredient": true, - "Reagents": { - "Potato": 1.0 - } - } - }, - { - "Key": "ThingSeedBag_Potato", - "Title": "Potato Seeds", - "Description": "Grow a Potato.", - "PrefabName": "SeedBag_Potato", - "PrefabHash": 1005571172, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemCookedPowderedEggs", - "Title": "Powdered Eggs", - "Description": "A high-nutrient cooked food, which can be canned.", - "PrefabName": "ItemCookedPowderedEggs", - "PrefabHash": -1712264413, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 10.0, - "Ingredient": true, - "Reagents": { - "Egg": 1.0 - } - } - }, - { - "Key": "ThingStructurePowerConnector", - "Title": "Power Connector", - "Description": "Attaches a Kit (Portable Generator) to a power network.", - "PrefabName": "StructurePowerConnector", - "PrefabHash": -782951720, - "SlotInserts": [ - { - "SlotName": "Portable Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingCircuitboardPowerControl", - "Title": "Power Control", - "Description": "Under distant suns and demanding environments, Stationeer systems need to balance reliability, resilience and versatility. The power control board allows remote enabling and disabling of selected devices, disconnecting manual operation. \n \nThe circuit board has two modes: 'Link' switches all devices on or off; 'Toggle' switches each device to their alternate state. ", - "PrefabName": "CircuitboardPowerControl", - "PrefabHash": -1923778429, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructurePowerTransmitterOmni", - "Title": "Power Transmitter Omni", - "Description": "", - "PrefabName": "StructurePowerTransmitterOmni", - "PrefabHash": -327468845, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBench", - "Title": "Powered Bench", - "Description": "When it's time to sit, nothing supports you like a bench. This bench is powered, so you can use appliances like the Microwave.", - "PrefabName": "StructureBench", - "PrefabHash": -2042448192, - "SlotInserts": [ - { - "SlotName": "Appliance 1", - "SlotType": "Appliance", - "SlotIndex": "0" - }, - { - "SlotName": "Appliance 2", - "SlotType": "Appliance", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "On", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "On": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePoweredVent", - "Title": "Powered Vent", - "Description": "Great for moving large quantities of air into a pipe network. Its primary purpose is for the creation of multi-grid airlocks. It can effeciently pull a vacuum on a small to medium sized room.", - "PrefabName": "StructurePoweredVent", - "PrefabHash": 938836756, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureExternal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Outward", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Inward", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "PressureExternal": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePoweredVentLarge", - "Title": "Powered Vent Large", - "Description": "For building large scale airlock systems and pressurised hangers, a bigger and bolder version of the Powered Vent that can effeciently pull a vacuum in large room.", - "PrefabName": "StructurePoweredVentLarge", - "PrefabHash": -785498334, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PressureExternal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Outward", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Inward", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "PressureExternal": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePressurantValve", - "Title": "Pressurant Valve", - "Description": "Pumps gas into a liquid pipe in order to raise the pressure", - "PrefabName": "StructurePressurantValve", - "PrefabHash": 23052817, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "PipeLiquid", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePressureFedGasEngine", - "Title": "Pressure Fed Gas Engine", - "Description": "Inefficient but very powerful, the Pressure Fed Gas Engine moves gas from each of its two inputs based on the pressure of the input pipes. Control the mixing ratio of fuels by tweaking the input pressures to target a 2:1 mix of Volatiles to Oxygen gas. Chilling propellant gasses or using Nitrous Oxide as an oxydizer will result in even higher thrust outputs.", - "PrefabName": "StructurePressureFedGasEngine", - "PrefabHash": -624011170, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Throttle", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PassedMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power And Data Output", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "Throttle": "ReadWrite", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "PassedMoles": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Input2" - ], - [ - "PowerAndData", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePressureFedLiquidEngine", - "Title": "Pressure Fed Liquid Engine", - "Description": "Highly efficient and powerful, the Pressure Fed Liquid Engine is a challenging engine to run in a stable configuration. Liquid is pulled from the input into the engine based on the input gas pressure. Some gas is also moved in this process so Stationeers will need to devise a system to maintain a high gas pressure in the liquid input pipe. The second liquid pipe connection is an optional heat-exchanger connection which exchanges heat between the pipes contents and the engine bell, the Setting variable drives the effectiveness of the heat-exchanger.", - "PrefabName": "StructurePressureFedLiquidEngine", - "PrefabHash": 379750958, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Throttle", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PassedMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input2", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power And Data Output", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "Throttle": "ReadWrite", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "PassedMoles": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Input2" - ], - [ - "PowerAndData", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePressureRegulator", - "Title": "Pressure Regulator", - "Description": "Controlling the flow of gas between two pipe networks, pressure regulators shift gas until a set pressure on the outlet side is achieved, or the gas supply is exhausted. The back pressure regulator, by contrast, will only operate when pressure on the intake side exceeds the set value. With a max pressure of over 20,000kPa, it requires power to operate.", - "PrefabName": "StructurePressureRegulator", - "PrefabHash": 209854039, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureProximitySensor", - "Title": "Proximity Sensor", - "Description": "Will be triggered if there is a player in the range of the sensor (as defined by the setting dial). The quantity variable will show the number of players. You can configure the sensor to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet.", - "PrefabName": "StructureProximitySensor", - "PrefabHash": 568800213, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Activate", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Activate": "Read", - "Setting": "ReadWrite", - "Quantity": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureGovernedGasEngine", - "Title": "Pumped Gas Engine", - "Description": "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.", - "PrefabName": "StructureGovernedGasEngine", - "PrefabHash": -214232602, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Throttle", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PassedMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "Throttle": "ReadWrite", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "PassedMoles": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePumpedLiquidEngine", - "Title": "Pumped Liquid Engine", - "Description": "Liquid propellants bring greater efficiencies with Pumped Liquid Engine. Two inputs are provided so Stationeers can seperate their fuels, the Setting variable controls the mixing ratio of the inputs. The engine is designed to run on Liquid Volatiles and Liquid Oxygen, some Stationeers have reported excessive thrust values by switching to Liquid Nitrous Oxide", - "PrefabName": "StructurePumpedLiquidEngine", - "PrefabHash": -2031440019, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Throttle", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PassedMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power And Data Output", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "Throttle": "ReadWrite", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "PassedMoles": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "None" - ], - [ - "PipeLiquid", - "None" - ], - [ - "PowerAndData", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemPumpkin", - "Title": "Pumpkin", - "Description": "Pumpkins are a perennial plant, with both a long growth time, and a long time between harvests. Its low requirement for darkness allows for accelerated growing if provided with extra light.", - "PrefabName": "ItemPumpkin", - "PrefabHash": 1277828144, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 20.0, - "Ingredient": true, - "Reagents": { - "Pumpkin": 1.0 - } - } - }, - { - "Key": "ThingItemPumpkinPie", - "Title": "Pumpkin Pie", - "Description": "", - "PrefabName": "ItemPumpkinPie", - "PrefabHash": 62768076, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingSeedBag_Pumpkin", - "Title": "Pumpkin Seeds", - "Description": "Grow a Pumpkin.", - "PrefabName": "SeedBag_Pumpkin", - "PrefabHash": 1423199840, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemPumpkinSoup", - "Title": "Pumpkin Soup", - "Description": "Made using Cooked Pumpkin and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay", - "PrefabName": "ItemPumpkinSoup", - "PrefabHash": 1277979876, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemPureIceCarbonDioxide", - "Title": "Pure Ice Carbon Dioxide", - "Description": "A frozen chunk of pure Carbon Dioxide", - "PrefabName": "ItemPureIceCarbonDioxide", - "PrefabHash": -1251009404, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceHydrogen", - "Title": "Pure Ice Hydrogen", - "Description": "A frozen chunk of pure Hydrogen", - "PrefabName": "ItemPureIceHydrogen", - "PrefabHash": 944530361, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceLiquidCarbonDioxide", - "Title": "Pure Ice Liquid Carbon Dioxide", - "Description": "A frozen chunk of pure Liquid Carbon Dioxide", - "PrefabName": "ItemPureIceLiquidCarbonDioxide", - "PrefabHash": -1715945725, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceLiquidHydrogen", - "Title": "Pure Ice Liquid Hydrogen", - "Description": "A frozen chunk of pure Liquid Hydrogen", - "PrefabName": "ItemPureIceLiquidHydrogen", - "PrefabHash": -1044933269, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceLiquidNitrogen", - "Title": "Pure Ice Liquid Nitrogen", - "Description": "A frozen chunk of pure Liquid Nitrogen", - "PrefabName": "ItemPureIceLiquidNitrogen", - "PrefabHash": 1674576569, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceLiquidNitrous", - "Title": "Pure Ice Liquid Nitrous", - "Description": "A frozen chunk of pure Liquid Nitrous Oxide", - "PrefabName": "ItemPureIceLiquidNitrous", - "PrefabHash": 1428477399, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceLiquidOxygen", - "Title": "Pure Ice Liquid Oxygen", - "Description": "A frozen chunk of pure Liquid Oxygen", - "PrefabName": "ItemPureIceLiquidOxygen", - "PrefabHash": 541621589, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceLiquidPollutant", - "Title": "Pure Ice Liquid Pollutant", - "Description": "A frozen chunk of pure Liquid Pollutant", - "PrefabName": "ItemPureIceLiquidPollutant", - "PrefabHash": -1748926678, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceLiquidVolatiles", - "Title": "Pure Ice Liquid Volatiles", - "Description": "A frozen chunk of pure Liquid Volatiles", - "PrefabName": "ItemPureIceLiquidVolatiles", - "PrefabHash": -1306628937, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceNitrogen", - "Title": "Pure Ice Nitrogen", - "Description": "A frozen chunk of pure Nitrogen", - "PrefabName": "ItemPureIceNitrogen", - "PrefabHash": -1708395413, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceNitrous", - "Title": "Pure Ice NitrousOxide", - "Description": "A frozen chunk of pure Nitrous Oxide", - "PrefabName": "ItemPureIceNitrous", - "PrefabHash": 386754635, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceOxygen", - "Title": "Pure Ice Oxygen", - "Description": "A frozen chunk of pure Oxygen", - "PrefabName": "ItemPureIceOxygen", - "PrefabHash": -1150448260, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIcePollutant", - "Title": "Pure Ice Pollutant", - "Description": "A frozen chunk of pure Pollutant", - "PrefabName": "ItemPureIcePollutant", - "PrefabHash": -1755356, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIcePollutedWater", - "Title": "Pure Ice Polluted Water", - "Description": "A frozen chunk of Polluted Water", - "PrefabName": "ItemPureIcePollutedWater", - "PrefabHash": -2073202179, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceSteam", - "Title": "Pure Ice Steam", - "Description": "A frozen chunk of pure Steam", - "PrefabName": "ItemPureIceSteam", - "PrefabHash": -874791066, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIceVolatiles", - "Title": "Pure Ice Volatiles", - "Description": "A frozen chunk of pure Volatiles", - "PrefabName": "ItemPureIceVolatiles", - "PrefabHash": -633723719, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemPureIce", - "Title": "Pure Ice Water", - "Description": "A frozen chunk of pure Water", - "PrefabName": "ItemPureIce", - "PrefabHash": -1616308158, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ices", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingStructurePurgeValve", - "Title": "Purge Valve", - "Description": "Allows for removal of pressurant gas and evaporated liquids from a liquid pipe. Similar in function to a Back Pressure Regulator the Purge Valve moves gas from the input liquid pipe to the output gas pipe aiming to keep the pressure of the input at the target setting.", - "PrefabName": "StructurePurgeValve", - "PrefabHash": -737232128, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingRailingElegant01", - "Title": "Railing Elegant (Type 1)", - "Description": "", - "PrefabName": "RailingElegant01", - "PrefabHash": 399661231, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingRailingElegant02", - "Title": "Railing Elegant (Type 2)", - "Description": "", - "PrefabName": "RailingElegant02", - "PrefabHash": -1898247915, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureRailing", - "Title": "Railing Industrial (Type 1)", - "Description": "\"Safety third.\"", - "PrefabName": "StructureRailing", - "PrefabHash": -1756913871, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingRailingIndustrial02", - "Title": "Railing Industrial (Type 2)", - "Description": "", - "PrefabName": "RailingIndustrial02", - "PrefabHash": -2072792175, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemReagentMix", - "Title": "Reagent Mix", - "Description": "Reagent mix is pure potential. A slurry of undifferentiated ores, it is output by the Recycler and can be fed into the Centrifuge to separate and recover the individual materials. Reagent mix is also output by the Furnace when the current contents are ejected without smelting a specific ingot.", - "PrefabName": "ItemReagentMix", - "PrefabHash": -1641500434, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingApplianceReagentProcessor", - "Title": "Reagent Processor", - "Description": "Sitting somewhere between a high powered juicer and an alchemist's alembic, the Xigo reagent processor turns certain raw materials and food items into cooking and crafting ingredients. Indispensible in any space kitchen, just bolt it to the bench, and you're ready to go.", - "PrefabName": "ApplianceReagentProcessor", - "PrefabHash": 1260918085, - "SlotInserts": [ - { - "SlotName": "Input", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Output", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingStructureLogicReagentReader", - "Title": "Reagent Reader", - "Description": "", - "PrefabName": "StructureLogicReagentReader", - "PrefabHash": -124308857, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureRecycler", - "Title": "Recycler", - "Description": "A device for collecting the raw resources while destroying an item. Produces Reagent Mix containing packages of reagents. Pass these through the Centrifuge to gain back the source ores. Plants and organic matter passed through will create Biomass, which when passed through the Centrifuge will produce Biomass.", - "PrefabName": "StructureRecycler", - "PrefabHash": -1633947337, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureRefrigeratedVendingMachine", - "Title": "Refrigerated Vending Machine", - "Description": "The refrigerated OmniKool vending machine is an advanced version of the standard Vending Machine, which maintains an optimum pressure and constant temperature of -130 degrees C, to prevent food spoilage. It can hold up to 100 stacks.\nThe OmniKool also has an in-built Stacker, allowing players to set the stack sizes of any items ADDED to the device. The unit's default stack size is 50.\nNOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. ", - "PrefabName": "StructureRefrigeratedVendingMachine", - "PrefabHash": -1577831321, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "11" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "12" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "13" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "14" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "15" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "16" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "17" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "18" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "19" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "20" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "21" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "22" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "23" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "24" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "25" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "26" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "27" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "28" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "29" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "30" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "31" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "32" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "33" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "34" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "35" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "36" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "37" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "38" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "39" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "40" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "41" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "42" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "43" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "44" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "45" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "46" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "47" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "48" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "49" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "50" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "51" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "52" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "53" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "54" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "55" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "56" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "57" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "58" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "59" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "60" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "61" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "62" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "63" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "64" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "65" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "66" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "67" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "68" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "69" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "70" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "71" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "72" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "73" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "74" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "75" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "76" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "77" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "78" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "79" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "80" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "81" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "82" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "83" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "84" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "85" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "86" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "87" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "88" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "89" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "90" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "91" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "92" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "93" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "94" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "95" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "96" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "97" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "98" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "99" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "100" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "101" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RequestHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {}, - "2": {}, - "3": {}, - "4": {}, - "5": {}, - "6": {}, - "7": {}, - "8": {}, - "9": {}, - "10": {}, - "11": {}, - "12": {}, - "13": {}, - "14": {}, - "15": {}, - "16": {}, - "17": {}, - "18": {}, - "19": {}, - "20": {}, - "21": {}, - "22": {}, - "23": {}, - "24": {}, - "25": {}, - "26": {}, - "27": {}, - "28": {}, - "29": {}, - "30": {}, - "31": {}, - "32": {}, - "33": {}, - "34": {}, - "35": {}, - "36": {}, - "37": {}, - "38": {}, - "39": {}, - "40": {}, - "41": {}, - "42": {}, - "43": {}, - "44": {}, - "45": {}, - "46": {}, - "47": {}, - "48": {}, - "49": {}, - "50": {}, - "51": {}, - "52": {}, - "53": {}, - "54": {}, - "55": {}, - "56": {}, - "57": {}, - "58": {}, - "59": {}, - "60": {}, - "61": {}, - "62": {}, - "63": {}, - "64": {}, - "65": {}, - "66": {}, - "67": {}, - "68": {}, - "69": {}, - "70": {}, - "71": {}, - "72": {}, - "73": {}, - "74": {}, - "75": {}, - "76": {}, - "77": {}, - "78": {}, - "79": {}, - "80": {}, - "81": {}, - "82": {}, - "83": {}, - "84": {}, - "85": {}, - "86": {}, - "87": {}, - "88": {}, - "89": {}, - "90": {}, - "91": {}, - "92": {}, - "93": {}, - "94": {}, - "95": {}, - "96": {}, - "97": {}, - "98": {}, - "99": {}, - "100": {}, - "101": {} - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Ratio": "Read", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RequestHash": "ReadWrite", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureReinforcedCompositeWindowSteel", - "Title": "Reinforced Window (Composite Steel)", - "Description": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", - "PrefabName": "StructureReinforcedCompositeWindowSteel", - "PrefabHash": -816454272, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureReinforcedCompositeWindow", - "Title": "Reinforced Window (Composite)", - "Description": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", - "PrefabName": "StructureReinforcedCompositeWindow", - "PrefabHash": 2027713511, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureReinforcedWallPaddedWindow", - "Title": "Reinforced Window (Padded)", - "Description": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", - "PrefabName": "StructureReinforcedWallPaddedWindow", - "PrefabHash": 1939061729, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureReinforcedWallPaddedWindowThin", - "Title": "Reinforced Window (Thin)", - "Description": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", - "PrefabName": "StructureReinforcedWallPaddedWindowThin", - "PrefabHash": 158502707, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemRemoteDetonator", - "Title": "Remote Detonator", - "Description": "", - "PrefabName": "ItemRemoteDetonator", - "PrefabHash": 678483886, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemExplosive", - "Title": "Remote Explosive", - "Description": "", - "PrefabName": "ItemExplosive", - "PrefabHash": 235361649, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemResearchCapsule", - "Title": "Research Capsule Blue", - "Description": "", - "PrefabName": "ItemResearchCapsule", - "PrefabHash": 819096942, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemResearchCapsuleGreen", - "Title": "Research Capsule Green", - "Description": "", - "PrefabName": "ItemResearchCapsuleGreen", - "PrefabHash": -1352732550, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemResearchCapsuleRed", - "Title": "Research Capsule Red", - "Description": "", - "PrefabName": "ItemResearchCapsuleRed", - "PrefabHash": 954947943, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemResearchCapsuleYellow", - "Title": "Research Capsule Yellow", - "Description": "", - "PrefabName": "ItemResearchCapsuleYellow", - "PrefabHash": 750952701, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingStructureResearchMachine", - "Title": "Research Machine", - "Description": "", - "PrefabName": "StructureResearchMachine", - "PrefabHash": -796627526, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CurrentResearchPodType", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ManualResearchRequiredPod", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {}, - "2": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "CurrentResearchPodType": "Read", - "ManualResearchRequiredPod": "Write", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingRespawnPoint", - "Title": "Respawn Point", - "Description": "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.", - "PrefabName": "RespawnPoint", - "PrefabHash": -788672929, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingRespawnPointWallMounted", - "Title": "Respawn Point (Mounted)", - "Description": "", - "PrefabName": "RespawnPointWallMounted", - "PrefabHash": -491247370, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemRice", - "Title": "Rice", - "Description": "Rice grows at a moderate rate as long as its supplied with plenty of water. Being more dependant on water, rice plants can easily die during periods of drought.", - "PrefabName": "ItemRice", - "PrefabHash": 658916791, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 50.0, - "Ingredient": true, - "Reagents": { - "Rice": 1.0 - } - } - }, - { - "Key": "ThingSeedBag_Rice", - "Title": "Rice Seeds", - "Description": "Grow some Rice.", - "PrefabName": "SeedBag_Rice", - "PrefabHash": -1691151239, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemRoadFlare", - "Title": "Road Flare", - "Description": "Designed to burn anywhere in the Solar System, the EZC magnesium fusee supplies its own oxygen to fuel combustion, and dispel the eternal night of space.", - "PrefabName": "ItemRoadFlare", - "PrefabHash": 871811564, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Flare", - "SortingClass": "Default", - "MaxQuantity": 20.0 - } - }, - { - "Key": "ThingStructureRocketAvionics", - "Title": "Rocket Avionics", - "Description": "", - "PrefabName": "StructureRocketAvionics", - "PrefabHash": 808389066, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VelocityRelativeY", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Progress", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "DestinationCode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Acceleration", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "AutoShutOff", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mass", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "DryMass", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Thrust", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Weight", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ThrustToWeight", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TimeToDestination", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "BurnTimeRemaining", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "AutoLand", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "FlightControlRule", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReEntryAltitude", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Apex", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Discover", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Chart", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Survey", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "NavPoints", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ChartedNavPoints", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Sites", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CurrentCode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Density", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Richness", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Size", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalQuantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "MinedQuantity", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Invalid", - "LogicAccessTypes": "0" - }, - { - "LogicName": "None", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Mine", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Survey", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Discover", - "LogicAccessTypes": "4" - }, - { - "LogicName": "Chart", - "LogicAccessTypes": "5" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Temperature": "Read", - "Reagents": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "VelocityRelativeY": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "Progress": "Read", - "DestinationCode": "ReadWrite", - "Acceleration": "Read", - "ReferenceId": "Read", - "AutoShutOff": "ReadWrite", - "Mass": "Read", - "DryMass": "Read", - "Thrust": "Read", - "Weight": "Read", - "ThrustToWeight": "Read", - "TimeToDestination": "Read", - "BurnTimeRemaining": "Read", - "AutoLand": "Write", - "FlightControlRule": "Read", - "ReEntryAltitude": "Read", - "Apex": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read", - "Discover": "Read", - "Chart": "Read", - "Survey": "Read", - "NavPoints": "Read", - "ChartedNavPoints": "Read", - "Sites": "Read", - "CurrentCode": "Read", - "Density": "Read", - "Richness": "Read", - "Size": "Read", - "TotalQuantity": "Read", - "MinedQuantity": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureRocketCelestialTracker", - "Title": "Rocket Celestial Tracker", - "Description": "The Celestial Tracker can be placed in Rockets and when turned on will provide data that can be used to orientate devices such as the Telescope. The Horizontal and Vertical output is localized to the orientation of the tracker. You can calibrate your alignment by comparing the result for the primary body with the output from the Daylight Sensor. Full functionality will only be available in orbit, but you can configure using the primary body. For aligning with the telescope, have the face plate facing up and the cables facing in the same direction as for the telescope and the output values will be aligned.", - "PrefabName": "StructureRocketCelestialTracker", - "PrefabHash": 997453927, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Index", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "CelestialHash", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Horizontal": "Read", - "Vertical": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "Index": "ReadWrite", - "CelestialHash": "Read" - } - }, - "Memory": { - "MemorySize": 12, - "MemorySizeReadable": "96 B", - "MemoryAccess": "Read", - "Instructions": { - "BodyOrientation": { - "Type": "CelestialTracking", - "Value": 1, - "Description": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CELESTIAL_INDEX | BYTE_8 |\r\n| 16-31 | HORIZONTAL_DECI_DEGREES | SHORT_16 |\r\n| 32-47 | VERTICAL_DECI_DEGREES | SHORT_16 |\r\n| 48-63 | UNUSED | 16 |" - } - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureRocketCircuitHousing", - "Title": "Rocket Circuit Housing", - "Description": "", - "PrefabName": "StructureRocketCircuitHousing", - "PrefabHash": 150135861, - "SlotInserts": [ - { - "SlotName": "Programmable Chip", - "SlotType": "ProgrammableChip", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "LineNumber", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "LineNumber", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power And Data Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "LineNumber": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "LineNumber": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Memory": { - "MemorySize": 0, - "MemorySizeReadable": "0 B", - "MemoryAccess": "ReadWrite" - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "Input" - ] - ], - "DevicesLength": 6, - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingMotherboardRockets", - "Title": "Rocket Control Motherboard", - "Description": "", - "PrefabName": "MotherboardRockets", - "PrefabHash": -806986392, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Motherboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureRocketEngineTiny", - "Title": "Rocket Engine (Tiny)", - "Description": "", - "PrefabName": "StructureRocketEngineTiny", - "PrefabHash": 178472613, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureRocketManufactory", - "Title": "Rocket Manufactory", - "Description": "", - "PrefabName": "StructureRocketManufactory", - "PrefabHash": 1781051034, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Ingot", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "CompletionRatio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RecipeHash": "ReadWrite", - "CompletionRatio": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureRocketMiner", - "Title": "Rocket Miner", - "Description": "Gathers available resources at the rocket's current space location.", - "PrefabName": "StructureRocketMiner", - "PrefabHash": -2087223687, - "SlotInserts": [ - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Drill Head Slot", - "SlotType": "DrillHead", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "DrillCondition", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "DrillCondition": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureRocketScanner", - "Title": "Rocket Scanner", - "Description": "", - "PrefabName": "StructureRocketScanner", - "PrefabHash": 2014252591, - "SlotInserts": [ - { - "SlotName": "Scanner Head Slot", - "SlotType": "ScanningHead", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemRocketScanningHead", - "Title": "Rocket Scanner Head", - "Description": "", - "PrefabName": "ItemRocketScanningHead", - "PrefabHash": -1198702771, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "ScanningHead", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingRoverCargo", - "Title": "Rover (Cargo)", - "Description": "Connects to Logic Transmitter", - "PrefabName": "RoverCargo", - "PrefabHash": 350726273, - "SlotInserts": [ - { - "SlotName": "Entity", - "SlotType": "Entity", - "SlotIndex": "0" - }, - { - "SlotName": "Entity", - "SlotType": "Entity", - "SlotIndex": "1" - }, - { - "SlotName": "Gas Filter", - "SlotType": "GasFilter", - "SlotIndex": "2" - }, - { - "SlotName": "Gas Filter", - "SlotType": "GasFilter", - "SlotIndex": "3" - }, - { - "SlotName": "Gas Filter", - "SlotType": "GasFilter", - "SlotIndex": "4" - }, - { - "SlotName": "Gas Canister", - "SlotType": "GasCanister", - "SlotIndex": "5" - }, - { - "SlotName": "Gas Canister", - "SlotType": "GasCanister", - "SlotIndex": "6" - }, - { - "SlotName": "Gas Canister", - "SlotType": "GasCanister", - "SlotIndex": "7" - }, - { - "SlotName": "Gas Canister", - "SlotType": "GasCanister", - "SlotIndex": "8" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "9" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "10" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "11" - }, - { - "SlotName": "Container Slot", - "SlotType": "None", - "SlotIndex": "12" - }, - { - "SlotName": "Container Slot", - "SlotType": "None", - "SlotIndex": "13" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "14" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "15" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "5, 6, 7, 8" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "5, 6, 7, 8" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "9, 10, 11" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "9, 10, 11" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15" - }, - { - "LogicName": "FilterType", - "LogicAccessTypes": "2, 3, 4" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "FilterType": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "FilterType": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "FilterType": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "12": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "13": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "14": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "15": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "WirelessLogic": true, - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureRover", - "Title": "Rover Frame", - "Description": "", - "PrefabName": "StructureRover", - "PrefabHash": 806513938, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingRover_MkI_build_states", - "Title": "Rover MKI", - "Description": "", - "PrefabName": "Rover_MkI_build_states", - "PrefabHash": 861674123, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingRover_MkI", - "Title": "Rover MkI", - "Description": "A distant cousin of the jeep, the Mk I {Sinotai electric rover is one of the most simple and durable light vehicles in the known universe. Able to carry two passengers and cargo such as the Portable Gas Tank (Air) or , it is powered by up to three batteries, accepting everything including Battery Cell (Nuclear).\nA quad-array of hub-mounted electric engines propels the reinforced aluminium frame over most terrain and modest obstacles. While the Mk I is designed for stability in low-horizontality circumstances, if it rolls, try using your Crowbar to put it right way up.Connects to Logic Transmitter", - "PrefabName": "Rover_MkI", - "PrefabHash": -2049946335, - "SlotInserts": [ - { - "SlotName": "Entity", - "SlotType": "Entity", - "SlotIndex": "0" - }, - { - "SlotName": "Entity", - "SlotType": "Entity", - "SlotIndex": "1" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "2" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "3" - }, - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "10" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "2, 3, 4" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "2, 3, 4" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Pressure": "Read", - "Temperature": "Read", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "TotalMoles": "Read", - "RatioNitrousOxide": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "WirelessLogic": true, - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureSDBHopper", - "Title": "SDB Hopper", - "Description": "", - "PrefabName": "StructureSDBHopper", - "PrefabHash": -1875856925, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Open": "ReadWrite", - "ClearMemory": "Write", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSDBHopperAdvanced", - "Title": "SDB Hopper Advanced", - "Description": "", - "PrefabName": "StructureSDBHopperAdvanced", - "PrefabHash": 467225612, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "ClearMemory": "Write", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "Chute", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSDBSilo", - "Title": "SDB Silo", - "Description": "The majestic silo holds large quantities of almost anything. While it is doing that, it cannot be deconstructed. Note also, that any food you put into a silo is likely to decay extremely rapidly. The silo can hold up to 600 stacks.", - "PrefabName": "StructureSDBSilo", - "PrefabHash": 1155865682, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingSMGMagazine", - "Title": "SMG Magazine", - "Description": "", - "PrefabName": "SMGMagazine", - "PrefabHash": -256607540, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Magazine", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemScrewdriver", - "Title": "Screwdriver", - "Description": "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units.", - "PrefabName": "ItemScrewdriver", - "PrefabHash": 687940869, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemSecurityCamera", - "Title": "Security Camera", - "Description": "Security cameras can be paired with a Motion Sensor, then connected to a Console fitted with a Camera Display for that 'always watched' feeling.", - "PrefabName": "ItemSecurityCamera", - "PrefabHash": -1981101032, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default", - "MaxQuantity": 5.0 - } - }, - { - "Key": "ThingStructureSecurityPrinter", - "Title": "Security Printer", - "Description": "Any Stationeer concerned about security needs the Harkwell-designed Vigilant-E security printer. Use the Vigilant-E to create a Cartridge (Access Controller), in order to restrict access to different parts of your base via keycards like the Access Card (Blue). The printer also makes a variety of weapons and ammunitions to defend your base against any hostile, aggressive or just slightly rude entites you encounter as you explore the Solar System.\n", - "PrefabName": "StructureSecurityPrinter", - "PrefabHash": -641491515, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Ingot", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "CompletionRatio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RecipeHash": "ReadWrite", - "CompletionRatio": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemSensorLenses", - "Title": "Sensor Lenses", - "Description": "These Norsec glasses might not be the most fashionable thing, but when a Sensor Processing Unit (Ore Scanner) is inserted, Stationeers can use these handy glasses to x-ray the ground and find ores that are hidden beneath the surface.", - "PrefabName": "ItemSensorLenses", - "PrefabHash": -1176140051, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Sensor Processing Unit", - "SlotType": "SensorProcessingUnit", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Glasses", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemSensorProcessingUnitCelestialScanner", - "Title": "Sensor Processing Unit (Celestial Scanner)", - "Description": "", - "PrefabName": "ItemSensorProcessingUnitCelestialScanner", - "PrefabHash": -1154200014, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "SensorProcessingUnit", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSensorProcessingUnitOreScanner", - "Title": "Sensor Processing Unit (Ore Scanner)", - "Description": "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.", - "PrefabName": "ItemSensorProcessingUnitOreScanner", - "PrefabHash": -1219128491, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "SensorProcessingUnit", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSensorProcessingUnitMesonScanner", - "Title": "Sensor Processing Unit (T-Ray Scanner)", - "Description": "The T-Ray Scanner Sensor Processing Unit can be inserted into the Sensor Lenses to show an overlay of pipes and cables. This can be useful when building behind walls or other structures.", - "PrefabName": "ItemSensorProcessingUnitMesonScanner", - "PrefabHash": -1730464583, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "SensorProcessingUnit", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureShelf", - "Title": "Shelf", - "Description": "", - "PrefabName": "StructureShelf", - "PrefabHash": 1172114950, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureShelfMedium", - "Title": "Shelf Medium", - "Description": "A shelf for putting things on, so you can see them.", - "PrefabName": "StructureShelfMedium", - "PrefabHash": 182006674, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "11" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "12" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "13" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "14" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "11": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "12": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "13": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "14": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingCircuitboardShipDisplay", - "Title": "Ship Display", - "Description": "When the original Stationeer Handbook collapsed under its own weight into a singularity, certain information was irretrievably lost. Amongst this mysterious corpus of knowledge is the exact purpose of the ship display board.", - "PrefabName": "CircuitboardShipDisplay", - "PrefabHash": -2044446819, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureShortCornerLocker", - "Title": "Short Corner Locker", - "Description": "", - "PrefabName": "StructureShortCornerLocker", - "PrefabHash": 1330754486, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureShortLocker", - "Title": "Short Locker", - "Description": "", - "PrefabName": "StructureShortLocker", - "PrefabHash": -554553467, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - } - ], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureShower", - "Title": "Shower", - "Description": "", - "PrefabName": "StructureShower", - "PrefabHash": -775128944, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Activate": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureShowerPowered", - "Title": "Shower (Powered)", - "Description": "", - "PrefabName": "StructureShowerPowered", - "PrefabHash": -1081797501, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSign1x1", - "Title": "Sign 1x1", - "Description": "", - "PrefabName": "StructureSign1x1", - "PrefabHash": 879058460, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSign2x1", - "Title": "Sign 2x1", - "Description": "", - "PrefabName": "StructureSign2x1", - "PrefabHash": 908320837, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSingleBed", - "Title": "Single Bed", - "Description": "Description coming.", - "PrefabName": "StructureSingleBed", - "PrefabHash": -492611, - "SlotInserts": [ - { - "SlotName": "Bed", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingDynamicSkeleton", - "Title": "Skeleton", - "Description": "", - "PrefabName": "DynamicSkeleton", - "PrefabHash": 106953348, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureSleeper", - "Title": "Sleeper", - "Description": "", - "PrefabName": "StructureSleeper", - "PrefabHash": -1467449329, - "SlotInserts": [ - { - "SlotName": "Bed", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "EntityState", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "EntityState": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSleeperLeft", - "Title": "Sleeper Left", - "Description": "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", - "PrefabName": "StructureSleeperLeft", - "PrefabHash": 1213495833, - "SlotInserts": [ - { - "SlotName": "Player", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "EntityState", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Safe", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Unsafe", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Unpowered", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "EntityState": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSleeperRight", - "Title": "Sleeper Right", - "Description": "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", - "PrefabName": "StructureSleeperRight", - "PrefabHash": -1812330717, - "SlotInserts": [ - { - "SlotName": "Player", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "EntityState", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Safe", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Unsafe", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Unpowered", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "EntityState": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSleeperVertical", - "Title": "Sleeper Vertical", - "Description": "The vertical variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", - "PrefabName": "StructureSleeperVertical", - "PrefabHash": -1300059018, - "SlotInserts": [ - { - "SlotName": "Player", - "SlotType": "Entity", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "EntityState", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Safe", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Unsafe", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Unpowered", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "EntityState": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicSlotReader", - "Title": "Slot Reader", - "Description": "", - "PrefabName": "StructureLogicSlotReader", - "PrefabHash": -767867194, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Data Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Setting": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Data", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSmallTableBacklessDouble", - "Title": "Small (Table Backless Double)", - "Description": "", - "PrefabName": "StructureSmallTableBacklessDouble", - "PrefabHash": -1633000411, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureSmallTableBacklessSingle", - "Title": "Small (Table Backless Single)", - "Description": "", - "PrefabName": "StructureSmallTableBacklessSingle", - "PrefabHash": -1897221677, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureSmallTableDinnerSingle", - "Title": "Small (Table Dinner Single)", - "Description": "", - "PrefabName": "StructureSmallTableDinnerSingle", - "PrefabHash": 1260651529, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureSmallTableRectangleDouble", - "Title": "Small (Table Rectangle Double)", - "Description": "", - "PrefabName": "StructureSmallTableRectangleDouble", - "PrefabHash": -660451023, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureSmallTableRectangleSingle", - "Title": "Small (Table Rectangle Single)", - "Description": "", - "PrefabName": "StructureSmallTableRectangleSingle", - "PrefabHash": -924678969, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureSmallTableThickDouble", - "Title": "Small (Table Thick Double)", - "Description": "", - "PrefabName": "StructureSmallTableThickDouble", - "PrefabHash": -19246131, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureSmallDirectHeatExchangeGastoGas", - "Title": "Small Direct Heat Exchanger - Gas + Gas", - "Description": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "PrefabName": "StructureSmallDirectHeatExchangeGastoGas", - "PrefabHash": 1310303582, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Input2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSmallDirectHeatExchangeLiquidtoGas", - "Title": "Small Direct Heat Exchanger - Liquid + Gas ", - "Description": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "PrefabName": "StructureSmallDirectHeatExchangeLiquidtoGas", - "PrefabHash": 1825212016, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "Pipe", - "Input2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSmallDirectHeatExchangeLiquidtoLiquid", - "Title": "Small Direct Heat Exchanger - Liquid + Liquid", - "Description": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "PrefabName": "StructureSmallDirectHeatExchangeLiquidtoLiquid", - "PrefabHash": -507770416, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input2", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Input2" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureFlagSmall", - "Title": "Small Flag", - "Description": "", - "PrefabName": "StructureFlagSmall", - "PrefabHash": -1529819532, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureAirlockGate", - "Title": "Small Hangar Door", - "Description": "1 x 1 modular door piece for building hangar doors.", - "PrefabName": "StructureAirlockGate", - "PrefabHash": 1736080881, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSmallSatelliteDish", - "Title": "Small Satellite Dish", - "Description": "This small communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", - "PrefabName": "StructureSmallSatelliteDish", - "PrefabHash": -2138748650, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SignalStrength", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SignalID", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "InterrogationProgress", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TargetPadIndex", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "SizeX", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SizeZ", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "MinimumWattsToContact", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "WattsReachingContact", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ContactTypeId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "BestContactFilter", - "LogicAccessTypes": "Read Write" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Setting": "ReadWrite", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "SignalStrength": "Read", - "SignalID": "Read", - "InterrogationProgress": "Read", - "TargetPadIndex": "ReadWrite", - "SizeX": "Read", - "SizeZ": "Read", - "MinimumWattsToContact": "Read", - "WattsReachingContact": "Read", - "ContactTypeId": "Read", - "ReferenceId": "Read", - "BestContactFilter": "ReadWrite" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSmallTableThickSingle", - "Title": "Small Table (Thick Single)", - "Description": "", - "PrefabName": "StructureSmallTableThickSingle", - "PrefabHash": -291862981, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureTankSmall", - "Title": "Small Tank", - "Description": "", - "PrefabName": "StructureTankSmall", - "PrefabHash": 1013514688, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTankSmallAir", - "Title": "Small Tank (Air)", - "Description": "", - "PrefabName": "StructureTankSmallAir", - "PrefabHash": 955744474, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTankSmallFuel", - "Title": "Small Tank (Fuel)", - "Description": "", - "PrefabName": "StructureTankSmallFuel", - "PrefabHash": 2102454415, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingCircuitboardSolarControl", - "Title": "Solar Control", - "Description": "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.", - "PrefabName": "CircuitboardSolarControl", - "PrefabHash": 2020180320, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Circuitboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureSolarPanel", - "Title": "Solar Panel", - "Description": "Sinotai's standard solar panels are used for generating power from sunlight. They can be connected to Logic systems, in order to track sunlight, but their reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", - "PrefabName": "StructureSolarPanel", - "PrefabHash": -2045627372, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSolarPanel45", - "Title": "Solar Panel (Angled)", - "Description": "Sinotai basic solar panels generate power from sunlight, sitting at 45 degrees to the ground. Their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", - "PrefabName": "StructureSolarPanel45", - "PrefabHash": -1554349863, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSolarPanelDual", - "Title": "Solar Panel (Dual)", - "Description": "Sinotai dual solar panels are used for generating power from sunlight, with dedicated data and power ports. They can be connected to {Logic systems, in order to track sunlight, but their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", - "PrefabName": "StructureSolarPanelDual", - "PrefabHash": -539224550, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSolarPanelFlat", - "Title": "Solar Panel (Flat)", - "Description": "Sinotai basic solar panels generate power from sunlight. They lie flat to the ground, and their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", - "PrefabName": "StructureSolarPanelFlat", - "PrefabHash": 1968102968, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSolarPanel45Reinforced", - "Title": "Solar Panel (Heavy Angled)", - "Description": "This solar panel is resistant to storm damage.", - "PrefabName": "StructureSolarPanel45Reinforced", - "PrefabHash": 930865127, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSolarPanelDualReinforced", - "Title": "Solar Panel (Heavy Dual)", - "Description": "This solar panel is resistant to storm damage.", - "PrefabName": "StructureSolarPanelDualReinforced", - "PrefabHash": -1545574413, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSolarPanelFlatReinforced", - "Title": "Solar Panel (Heavy Flat)", - "Description": "This solar panel is resistant to storm damage.", - "PrefabName": "StructureSolarPanelFlatReinforced", - "PrefabHash": 1697196770, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSolarPanelReinforced", - "Title": "Solar Panel (Heavy)", - "Description": "This solar panel is resistant to storm damage.", - "PrefabName": "StructureSolarPanelReinforced", - "PrefabHash": -934345724, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemSolidFuel", - "Title": "Solid Fuel (Hydrocarbon)", - "Description": "", - "PrefabName": "ItemSolidFuel", - "PrefabHash": -365253871, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Resources", - "MaxQuantity": 500.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Hydrocarbon": 1.0 - } - } - }, - { - "Key": "ThingStructureSorter", - "Title": "Sorter", - "Description": "No amount of automation is complete without some way of moving different items to different parts of a system. The Xigo A2B sorter can be programmed via a computer with a Sorter Motherboard to direct various items into different chute networks. Filtered items are always passed out the righthand side of the sorter, while non filtered items continue straight through.", - "PrefabName": "StructureSorter", - "PrefabHash": -1009150565, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Export 2", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "Data Disk", - "SlotType": "DataDisk", - "SlotIndex": "3" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Output", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2, 3" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3" - } - ], - "ModeInsert": [ - { - "LogicName": "Split", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Filter", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Output2", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "Output": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Output2" - ], - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingMotherboardSorter", - "Title": "Sorter Motherboard", - "Description": "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops 10-10 sorter motherboard permits Stationeers to control which items a Sorter does, and does not, permit to pass.", - "PrefabName": "MotherboardSorter", - "PrefabHash": -1908268220, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Motherboard", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSoundCartridgeBass", - "Title": "Sound Cartridge Bass", - "Description": "", - "PrefabName": "ItemSoundCartridgeBass", - "PrefabHash": -1883441704, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "SoundCartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSoundCartridgeDrums", - "Title": "Sound Cartridge Drums", - "Description": "", - "PrefabName": "ItemSoundCartridgeDrums", - "PrefabHash": -1901500508, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "SoundCartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSoundCartridgeLeads", - "Title": "Sound Cartridge Leads", - "Description": "", - "PrefabName": "ItemSoundCartridgeLeads", - "PrefabHash": -1174735962, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "SoundCartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSoundCartridgeSynth", - "Title": "Sound Cartridge Synth", - "Description": "", - "PrefabName": "ItemSoundCartridgeSynth", - "PrefabHash": -1971419310, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "SoundCartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSoyOil", - "Title": "Soy Oil", - "Description": "", - "PrefabName": "ItemSoyOil", - "PrefabHash": 1387403148, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Consumable": true, - "Ingredient": true, - "Reagents": { - "Oil": 1.0 - } - } - }, - { - "Key": "ThingItemSoybean", - "Title": "Soybean", - "Description": " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil", - "PrefabName": "ItemSoybean", - "PrefabHash": 1924673028, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 100.0, - "Ingredient": true, - "Reagents": { - "Soy": 1.0 - } - } - }, - { - "Key": "ThingSeedBag_Soybean", - "Title": "Soybean Seeds", - "Description": "Grow some Soybean.", - "PrefabName": "SeedBag_Soybean", - "PrefabHash": 1783004244, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemSpaceCleaner", - "Title": "Space Cleaner", - "Description": "There was a time when humanity really wanted to keep space clean. That time has passed.", - "PrefabName": "ItemSpaceCleaner", - "PrefabHash": -1737666461, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSpaceHelmet", - "Title": "Space Helmet", - "Description": "The basic space helmet insulates Stationeers against everything from hard vacuum to weird cooking smells. Providing a pressure-controlled, breathable atmosphere, it comes with a built-in light powered by your Eva Suit Battery Cell (Small).\nIt also incorporates a lock/unlock feature to avoid accidental opening, as well as a flush function to expel and replace the internal atmosphere. If damaged, use Duct Tape to fix it, or paint it any color you like using the Paint Mixer.", - "PrefabName": "ItemSpaceHelmet", - "PrefabHash": 714830451, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Flush", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "SoundAlert", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Lock": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "On": "ReadWrite", - "TotalMoles": "Read", - "Volume": "ReadWrite", - "RatioNitrousOxide": "Read", - "Combustion": "Read", - "Flush": "Write", - "SoundAlert": "ReadWrite", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Item": { - "SlotClass": "Helmet", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemSpaceIce", - "Title": "Space Ice", - "Description": "", - "PrefabName": "ItemSpaceIce", - "PrefabHash": 675686937, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Ore", - "SortingClass": "Ores", - "MaxQuantity": 100.0 - } - }, - { - "Key": "ThingSpaceShuttle", - "Title": "Space Shuttle", - "Description": "An antiquated Sinotai transport craft, long since decommissioned.", - "PrefabName": "SpaceShuttle", - "PrefabHash": -1991297271, - "SlotInserts": [ - { - "SlotName": "Captain's Seat", - "SlotType": "Entity", - "SlotIndex": "0" - }, - { - "SlotName": "Passenger Seat Left", - "SlotType": "Entity", - "SlotIndex": "1" - }, - { - "SlotName": "Passenger Seat Right", - "SlotType": "Entity", - "SlotIndex": "2" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemSpacepack", - "Title": "Spacepack", - "Description": "The basic CHAC spacepack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Jetpack Basic or Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", - "PrefabName": "ItemSpacepack", - "PrefabHash": -1260618380, - "SlotInserts": [ - { - "SlotName": "Propellant", - "SlotType": "GasCanister", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "9" - } - ], - "LogicInsert": [ - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Back", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemSprayGun", - "Title": "Spray Gun", - "Description": "Use with Spray cans in the Spray Can to paint structures, cables and pipes. Much more efficient and faster than doing it with individual spray cans.", - "PrefabName": "ItemSprayGun", - "PrefabHash": 1289723966, - "SlotInserts": [ - { - "SlotName": "Spray Can", - "SlotType": "Bottle", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemSprayCanBlack", - "Title": "Spray Paint (Black)", - "Description": "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.", - "PrefabName": "ItemSprayCanBlack", - "PrefabHash": -688107795, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanBlue", - "Title": "Spray Paint (Blue)", - "Description": "What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'", - "PrefabName": "ItemSprayCanBlue", - "PrefabHash": -498464883, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanBrown", - "Title": "Spray Paint (Brown)", - "Description": "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.", - "PrefabName": "ItemSprayCanBrown", - "PrefabHash": 845176977, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanGreen", - "Title": "Spray Paint (Green)", - "Description": "Green is the color of life, and longing. Paradoxically, it's also the color of envy, and tolerance. It denotes sickness, youth, and wealth. But really, it's just what light does at around 500 billionths of a meter.", - "PrefabName": "ItemSprayCanGreen", - "PrefabHash": -1880941852, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanGrey", - "Title": "Spray Paint (Grey)", - "Description": "Arguably the most popular color in the universe, grey was invented so designers had something to do.", - "PrefabName": "ItemSprayCanGrey", - "PrefabHash": -1645266981, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanKhaki", - "Title": "Spray Paint (Khaki)", - "Description": "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.", - "PrefabName": "ItemSprayCanKhaki", - "PrefabHash": 1918456047, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanOrange", - "Title": "Spray Paint (Orange)", - "Description": "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.", - "PrefabName": "ItemSprayCanOrange", - "PrefabHash": -158007629, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanPink", - "Title": "Spray Paint (Pink)", - "Description": "With the invention of enduring chemical dyes, the 20th century bestowed associations with innocence and tenderness upon this pale tint of red. Yet classically, it was the color of seduction and eroticism. Things change.", - "PrefabName": "ItemSprayCanPink", - "PrefabHash": 1344257263, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanPurple", - "Title": "Spray Paint (Purple)", - "Description": "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.", - "PrefabName": "ItemSprayCanPurple", - "PrefabHash": 30686509, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanRed", - "Title": "Spray Paint (Red)", - "Description": "The king of colors, red is perhaps the defining tone of the universe. Linked to blood, royalty, fire and damnation, it is the chromatic expression of power.", - "PrefabName": "ItemSprayCanRed", - "PrefabHash": 1514393921, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanWhite", - "Title": "Spray Paint (White)", - "Description": "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.", - "PrefabName": "ItemSprayCanWhite", - "PrefabHash": 498481505, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemSprayCanYellow", - "Title": "Spray Paint (Yellow)", - "Description": "A caricature of light itself, yellow lacks the self-confidence of red, or the swagger of purple. It's less fun than orange, but less emotionally limp than khaki. It's hard to know when yellow is appropriate, but it persists as a primary color regardless. Suggesting that yellow gonna yellow, no matter what anyone thinks.", - "PrefabName": "ItemSprayCanYellow", - "PrefabHash": 995468116, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Bottle", - "SortingClass": "Default", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingStructureStackerReverse", - "Title": "Stacker", - "Description": "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs. The reversed stacker has power and data on the opposite side.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", - "PrefabName": "StructureStackerReverse", - "PrefabHash": 1585641623, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "2" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Output", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2" - } - ], - "ModeInsert": [ - { - "LogicName": "Automatic", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "Output": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ], - [ - "Chute", - "Output" - ], - [ - "Chute", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureStacker", - "Title": "Stacker", - "Description": "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", - "PrefabName": "StructureStacker", - "PrefabHash": -2020231820, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Processing", - "SlotType": "None", - "SlotIndex": "2" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Output", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2" - } - ], - "ModeInsert": [ - { - "LogicName": "Automatic", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "Output": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ], - [ - "Chute", - "Output" - ], - [ - "Chute", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureStairs4x2", - "Title": "Stairs", - "Description": "", - "PrefabName": "StructureStairs4x2", - "PrefabHash": 1405018945, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairs4x2RailL", - "Title": "Stairs with Rail (Left)", - "Description": "", - "PrefabName": "StructureStairs4x2RailL", - "PrefabHash": 155214029, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairs4x2RailR", - "Title": "Stairs with Rail (Right)", - "Description": "", - "PrefabName": "StructureStairs4x2RailR", - "PrefabHash": -212902482, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairs4x2Rails", - "Title": "Stairs with Rails", - "Description": "", - "PrefabName": "StructureStairs4x2Rails", - "PrefabHash": -1088008720, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairwellBackLeft", - "Title": "Stairwell (Back Left)", - "Description": "", - "PrefabName": "StructureStairwellBackLeft", - "PrefabHash": 505924160, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairwellBackPassthrough", - "Title": "Stairwell (Back Passthrough)", - "Description": "", - "PrefabName": "StructureStairwellBackPassthrough", - "PrefabHash": -862048392, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairwellBackRight", - "Title": "Stairwell (Back Right)", - "Description": "", - "PrefabName": "StructureStairwellBackRight", - "PrefabHash": -2128896573, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairwellFrontLeft", - "Title": "Stairwell (Front Left)", - "Description": "", - "PrefabName": "StructureStairwellFrontLeft", - "PrefabHash": -37454456, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairwellFrontPassthrough", - "Title": "Stairwell (Front Passthrough)", - "Description": "", - "PrefabName": "StructureStairwellFrontPassthrough", - "PrefabHash": -1625452928, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairwellFrontRight", - "Title": "Stairwell (Front Right)", - "Description": "", - "PrefabName": "StructureStairwellFrontRight", - "PrefabHash": 340210934, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureStairwellNoDoors", - "Title": "Stairwell (No Doors)", - "Description": "", - "PrefabName": "StructureStairwellNoDoors", - "PrefabHash": 2049879875, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureBattery", - "Title": "Station Battery", - "Description": "Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 3600000W of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large).", - "PrefabName": "StructureBattery", - "PrefabHash": -400115994, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerPotential", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerActual", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "Input" - ], - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureBatteryLarge", - "Title": "Station Battery (Large)", - "Description": "Providing even better large-scale, reliable power storage than the {THING;StructureBattery}, the Sinotai 'Da Dianchi' large station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 9000001 watts of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large). ", - "PrefabName": "StructureBatteryLarge", - "PrefabHash": -1388288459, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerPotential", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerActual", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Charge": "Read", - "Maximum": "Read", - "Ratio": "Read", - "PowerPotential": "Read", - "PowerActual": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "Input" - ], - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureFrame", - "Title": "Steel Frame", - "Description": "More durable than the Iron Frame, steel frames also have several variations for more complex constructions, such as the Steel Frame (Corner) and Steel Frame (Corner Cut). Like iron frames, they are placed then completed by welding Steel Sheets to the open framework.", - "PrefabName": "StructureFrame", - "PrefabHash": 1432512808, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureFrameCornerCut", - "Title": "Steel Frame (Corner Cut)", - "Description": "0.Mode0\n1.Mode1", - "PrefabName": "StructureFrameCornerCut", - "PrefabHash": 271315669, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureFrameCorner", - "Title": "Steel Frame (Corner)", - "Description": "More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. \nWith a little patience and maneuvering, the corner frame's Gothic-inspired silhouette allows the creation of ogival arches and even more ambitious architecture, although they are not airtight and cannot be built on.", - "PrefabName": "StructureFrameCorner", - "PrefabHash": -2112390778, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureFrameSide", - "Title": "Steel Frame (Side)", - "Description": "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.", - "PrefabName": "StructureFrameSide", - "PrefabHash": -302420053, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemSteelFrames", - "Title": "Steel Frames", - "Description": "An advanced and stronger version of Iron Frames, steel frames are placed by right-clicking. To complete construction, use Steel Sheets and a Welding Torch in your active hand.", - "PrefabName": "ItemSteelFrames", - "PrefabHash": -1448105779, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Kits", - "MaxQuantity": 30.0 - } - }, - { - "Key": "ThingItemSteelSheets", - "Title": "Steel Sheets", - "Description": "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.", - "PrefabName": "ItemSteelSheets", - "PrefabHash": 38555961, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingItemStelliteGlassSheets", - "Title": "Stellite Glass Sheets", - "Description": "A stronger glass substitute.", - "PrefabName": "ItemStelliteGlassSheets", - "PrefabHash": -2038663432, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Resources", - "MaxQuantity": 50.0 - } - }, - { - "Key": "ThingStructureStirlingEngine", - "Title": "Stirling Engine", - "Description": "Harnessing an ancient thermal exploit, the Recurso 'Libra' Stirling Engine generates power via the expansion and contraction of a working gas to drive pistons operating an electrical generator.\n \nWhen high pressure hot gas is supplied into the input pipe, this gas will heat the hot side of the unit, then pass into the output pipe. The cooler side uses the room's ambient atmosphere, which must be kept at a lower temperature and pressure in order to create a differential. Add a working gas by inserting a Gas Canister. The unit must be deactivated when adding or removing canisters, or the working gas may leak into the surrounding atmosphere.\n \nGases with a low molecular mass make the most efficient working gases. Increasing the moles of working gas can result in a greater potential power output. However, overpressuring the unit may have ... sub-optimal results.", - "PrefabName": "StructureStirlingEngine", - "PrefabHash": -260316435, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "GasCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PowerGeneration", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "EnvironmentEfficiency", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "WorkingGasEfficiency", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PowerGeneration": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "EnvironmentEfficiency": "Read", - "WorkingGasEfficiency": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Output" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStopWatch", - "Title": "Stop Watch", - "Description": "", - "PrefabName": "StopWatch", - "PrefabHash": -1527229051, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Time", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "Time": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "Input" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureSuitStorage", - "Title": "Suit Storage", - "Description": "As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic.\nWhen powered and connected to and , it will recharge the suit's batteries, refill the Canister (Oxygen) and your Filter (Nitrogen) Gas Canister. The wastetank will be pumped out to the pipe connected to the waste outlet.\nAll the rack's pipes must be connected or the unit will show an error state, but it will still charge the battery.", - "PrefabName": "StructureSuitStorage", - "PrefabHash": 255034731, - "SlotInserts": [ - { - "SlotName": "Helmet", - "SlotType": "Helmet", - "SlotIndex": "0" - }, - { - "SlotName": "Suit", - "SlotType": "Suit", - "SlotIndex": "1" - }, - { - "SlotName": "Back", - "SlotType": "Back", - "SlotIndex": "2" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "PressureWaste", - "LogicAccessTypes": "1" - }, - { - "LogicName": "PressureAir", - "LogicAccessTypes": "1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "0" - }, - { - "LogicName": "On", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1, 2" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Input2", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Open": "ReadWrite", - "On": "ReadWrite", - "Lock": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "PressureWaste": "Read", - "PressureAir": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "Pipe", - "Input" - ], - [ - "Pipe", - "Input2" - ], - [ - "Pipe", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLogicSwitch2", - "Title": "Switch", - "Description": "", - "PrefabName": "StructureLogicSwitch2", - "PrefabHash": 321604921, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Lock": "ReadWrite", - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemPlantSwitchGrass", - "Title": "Switch Grass", - "Description": "", - "PrefabName": "ItemPlantSwitchGrass", - "PrefabHash": -532672323, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingSeedBag_Switchgrass", - "Title": "Switchgrass Seed", - "Description": "", - "PrefabName": "SeedBag_Switchgrass", - "PrefabHash": 488360169, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingApplianceTabletDock", - "Title": "Tablet Dock", - "Description": "", - "PrefabName": "ApplianceTabletDock", - "PrefabHash": 1853941363, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "Tool", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Appliance", - "SortingClass": "Appliances" - } - }, - { - "Key": "ThingStructureTankBigInsulated", - "Title": "Tank Big (Insulated)", - "Description": "", - "PrefabName": "StructureTankBigInsulated", - "PrefabHash": 1280378227, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTankConnector", - "Title": "Tank Connector", - "Description": "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.", - "PrefabName": "StructureTankConnector", - "PrefabHash": -1276379454, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ] - }, - { - "Key": "ThingStructureTankSmallInsulated", - "Title": "Tank Small (Insulated)", - "Description": "", - "PrefabName": "StructureTankSmallInsulated", - "PrefabHash": 272136332, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RatioOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioWater", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TotalMoles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Combustion", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "VolumeOfLiquid", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidOxygen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidVolatiles", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioSteam", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidCarbonDioxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidPollutant", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidNitrousOxide", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioLiquidHydrogen", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RatioPollutedWater", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Open": "ReadWrite", - "Pressure": "Read", - "Temperature": "Read", - "Setting": "ReadWrite", - "RatioOxygen": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Maximum": "Read", - "Ratio": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "RatioNitrousOxide": "Read", - "PrefabHash": "Read", - "Combustion": "Read", - "RatioLiquidNitrogen": "Read", - "VolumeOfLiquid": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidVolatiles": "Read", - "RatioSteam": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidNitrousOxide": "Read", - "ReferenceId": "Read", - "RatioHydrogen": "Read", - "RatioLiquidHydrogen": "Read", - "RatioPollutedWater": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": true, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureGroundBasedTelescope", - "Title": "Telescope", - "Description": "A telescope that can be oriented to observe Celestial Bodies. When within full alignment will show orbital information for that celestial object. Atmospheric conditions may disrupt the ability to observe some objects at some times of day. To collect Horizontal and Vertical values you can use a Rocket Celestial Tracker while it is in orbit, or a Daylight Sensor for primary body data.", - "PrefabName": "StructureGroundBasedTelescope", - "PrefabHash": -619745681, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Horizontal", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Vertical", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "HorizontalRatio", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "VerticalRatio", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CelestialHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "AlignmentError", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "DistanceAu", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "OrbitPeriod", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Inclination", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Eccentricity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "SemiMajorAxis", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "DistanceKm", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "CelestialParentHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "TrueAnomaly", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Horizontal": "ReadWrite", - "Vertical": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "HorizontalRatio": "ReadWrite", - "VerticalRatio": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "CelestialHash": "Read", - "AlignmentError": "Read", - "DistanceAu": "Read", - "OrbitPeriod": "Read", - "Inclination": "Read", - "Eccentricity": "Read", - "SemiMajorAxis": "Read", - "DistanceKm": "Read", - "CelestialParentHash": "Read", - "TrueAnomaly": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemTerrainManipulator", - "Title": "Terrain Manipulator", - "Description": "0.Mode0\n1.Mode1", - "PrefabName": "ItemTerrainManipulator", - "PrefabHash": 111280987, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - }, - { - "SlotName": "Dirt Canister", - "SlotType": "Ore", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [ - { - "LogicName": "Mode0", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Mode1", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Tool", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemPlantThermogenic_Creative", - "Title": "Thermogenic Plant Creative", - "Description": "", - "PrefabName": "ItemPlantThermogenic_Creative", - "PrefabHash": -1208890208, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemTomato", - "Title": "Tomato", - "Description": "Tomato plants are perennial, and will produce multiple harvests without needing to be replanted. Once the plant is mature, it will fruit at a moderate pace.", - "PrefabName": "ItemTomato", - "PrefabHash": -998592080, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 20.0, - "Ingredient": true, - "Reagents": { - "Tomato": 1.0 - } - } - }, - { - "Key": "ThingSeedBag_Tomato", - "Title": "Tomato Seeds", - "Description": "Grow a Tomato.", - "PrefabName": "SeedBag_Tomato", - "PrefabHash": -1922066841, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemTomatoSoup", - "Title": "Tomato Soup", - "Description": "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.", - "PrefabName": "ItemTomatoSoup", - "PrefabHash": 688734890, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Food", - "MaxQuantity": 1.0 - } - }, - { - "Key": "ThingItemToolBelt", - "Title": "Tool Belt", - "Description": "If there's one piece of equipment that embodies Stationeer life above all else, it's the humble toolbelt (Editor's note: a recent ODA survey of iconic Stationeer equipment also rated the smoking, toxic ruins of an over-pressurized Furnace lying amid the charred remains of your latest base very highly).\nDesigned to meet the most strict-ish ODA safety standards, the toolbelt's eight slots hold one thing: tools, and Cable Coil. Not to be confused with the Mining Belt.", - "PrefabName": "ItemToolBelt", - "PrefabHash": -355127880, - "SlotInserts": [ - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "0" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "1" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "2" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "3" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "4" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "5" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "6" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "7" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Belt", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingItemMkIIToolbelt", - "Title": "Tool Belt MK II", - "Description": "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.", - "PrefabName": "ItemMkIIToolbelt", - "PrefabHash": 1467558064, - "SlotInserts": [ - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "0" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "1" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "2" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "3" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "4" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "5" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "6" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "7" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "8" - }, - { - "SlotName": "Tool", - "SlotType": "Tool", - "SlotIndex": "9" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "11" - } - ], - "LogicInsert": [ - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Belt", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingStructureToolManufactory", - "Title": "Tool Manufactory", - "Description": "No mission can be completed without the proper tools. The Norsec ThuulDek manufactory can fabricate almost any tool or hand-held device a Stationeer may need to complete their mission, as well as a variety of delightful paints.\nUpgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds.", - "PrefabName": "StructureToolManufactory", - "PrefabHash": -465741100, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Ingot", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Reagents", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RecipeHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "CompletionRatio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {} - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Reagents": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RecipeHash": "ReadWrite", - "CompletionRatio": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": true, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingToolPrinterMod", - "Title": "Tool Printer Mod", - "Description": "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "PrefabName": "ToolPrinterMod", - "PrefabHash": 1700018136, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingWeaponTorpedo", - "Title": "Torpedo", - "Description": "", - "PrefabName": "WeaponTorpedo", - "PrefabHash": -1102977898, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Torpedo", - "SortingClass": "Default" - } - }, - { - "Key": "ThingStructureTorpedoRack", - "Title": "Torpedo Rack", - "Description": "", - "PrefabName": "StructureTorpedoRack", - "PrefabHash": 1473807953, - "SlotInserts": [ - { - "SlotName": "Torpedo", - "SlotType": "Torpedo", - "SlotIndex": "0" - }, - { - "SlotName": "Torpedo", - "SlotType": "Torpedo", - "SlotIndex": "1" - }, - { - "SlotName": "Torpedo", - "SlotType": "Torpedo", - "SlotIndex": "2" - }, - { - "SlotName": "Torpedo", - "SlotType": "Torpedo", - "SlotIndex": "3" - }, - { - "SlotName": "Torpedo", - "SlotType": "Torpedo", - "SlotIndex": "4" - }, - { - "SlotName": "Torpedo", - "SlotType": "Torpedo", - "SlotIndex": "5" - }, - { - "SlotName": "Torpedo", - "SlotType": "Torpedo", - "SlotIndex": "6" - }, - { - "SlotName": "Torpedo", - "SlotType": "Torpedo", - "SlotIndex": "7" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingToyLuna", - "Title": "Toy Luna", - "Description": "", - "PrefabName": "ToyLuna", - "PrefabHash": 94730034, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "None", - "SortingClass": "Default" - } - }, - { - "Key": "ThingCartridgeTracker", - "Title": "Tracker", - "Description": "", - "PrefabName": "CartridgeTracker", - "PrefabHash": 81488783, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemBeacon", - "Title": "Tracking Beacon", - "Description": "", - "PrefabName": "ItemBeacon", - "PrefabHash": -869869491, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "None", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureTraderWaypoint", - "Title": "Trader Waypoint", - "Description": "", - "PrefabName": "StructureTraderWaypoint", - "PrefabHash": 1570931620, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTransformer", - "Title": "Transformer (Large)", - "Description": "The large Norsec transformer is a critical component of extended electrical networks, controlling the maximum power that will flow down a cable. To prevent overloading, output can be set from 0 to 50,000W. \nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", - "PrefabName": "StructureTransformer", - "PrefabHash": -1423212473, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "Input" - ], - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTransformerMedium", - "Title": "Transformer (Medium)", - "Description": "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", - "PrefabName": "StructureTransformerMedium", - "PrefabHash": -1065725831, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power And Data Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "Input" - ], - [ - "PowerAndData", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTransformerSmall", - "Title": "Transformer (Small)", - "Description": "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", - "PrefabName": "StructureTransformerSmall", - "PrefabHash": -890946730, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power And Data Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "Input" - ], - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTransformerMediumReversed", - "Title": "Transformer Reversed (Medium)", - "Description": "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", - "PrefabName": "StructureTransformerMediumReversed", - "PrefabHash": 833912764, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power And Data Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "Output" - ], - [ - "PowerAndData", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTransformerSmallReversed", - "Title": "Transformer Reversed (Small)", - "Description": "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", - "PrefabName": "StructureTransformerSmallReversed", - "PrefabHash": 1054059374, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power And Data Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "Output" - ], - [ - "PowerAndData", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureRocketTransformerSmall", - "Title": "Transformer Small (Rocket)", - "Description": "", - "PrefabName": "StructureRocketTransformerSmall", - "PrefabHash": 518925193, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "Input" - ], - [ - "Power", - "Output" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePressurePlateLarge", - "Title": "Trigger Plate (Large)", - "Description": "", - "PrefabName": "StructurePressurePlateLarge", - "PrefabHash": -2008706143, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePressurePlateMedium", - "Title": "Trigger Plate (Medium)", - "Description": "", - "PrefabName": "StructurePressurePlateMedium", - "PrefabHash": 1269458680, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePressurePlateSmall", - "Title": "Trigger Plate (Small)", - "Description": "", - "PrefabName": "StructurePressurePlateSmall", - "PrefabHash": -1536471028, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingItemTropicalPlant", - "Title": "Tropical Lily", - "Description": "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.", - "PrefabName": "ItemTropicalPlant", - "PrefabHash": -800947386, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingStructureTurbineGenerator", - "Title": "Turbine Generator", - "Description": "", - "PrefabName": "StructureTurbineGenerator", - "PrefabHash": 1282191063, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PowerGeneration", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureTurboVolumePump", - "Title": "Turbo Volume Pump (Gas)", - "Description": "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.", - "PrefabName": "StructureTurboVolumePump", - "PrefabHash": 1310794736, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Right", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Left", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "Pipe", - "Output" - ], - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidTurboVolumePump", - "Title": "Turbo Volume Pump (Liquid)", - "Description": "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.", - "PrefabName": "StructureLiquidTurboVolumePump", - "PrefabHash": -1051805505, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Right", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Left", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteUmbilicalMale", - "Title": "Umbilical (Chute)", - "Description": "0.Left\n1.Center\n2.Right", - "PrefabName": "StructureChuteUmbilicalMale", - "PrefabHash": -958884053, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [ - { - "LogicName": "Left", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Center", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Right", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureGasUmbilicalMale", - "Title": "Umbilical (Gas)", - "Description": "0.Left\n1.Center\n2.Right", - "PrefabName": "StructureGasUmbilicalMale", - "PrefabHash": -1814939203, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Left", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Center", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Right", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidUmbilicalMale", - "Title": "Umbilical (Liquid)", - "Description": "0.Left\n1.Center\n2.Right", - "PrefabName": "StructureLiquidUmbilicalMale", - "PrefabHash": -1798420047, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Left", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Center", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Right", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePowerUmbilicalMale", - "Title": "Umbilical (Power)", - "Description": "0.Left\n1.Center\n2.Right", - "PrefabName": "StructurePowerUmbilicalMale", - "PrefabHash": 1529453938, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Left", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Center", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Right", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Power Input", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteUmbilicalFemale", - "Title": "Umbilical Socket (Chute)", - "Description": "", - "PrefabName": "StructureChuteUmbilicalFemale", - "PrefabHash": -1918892177, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureGasUmbilicalFemale", - "Title": "Umbilical Socket (Gas)", - "Description": "", - "PrefabName": "StructureGasUmbilicalFemale", - "PrefabHash": -1680477930, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidUmbilicalFemale", - "Title": "Umbilical Socket (Liquid)", - "Description": "", - "PrefabName": "StructureLiquidUmbilicalFemale", - "PrefabHash": 1734723642, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePowerUmbilicalFemale", - "Title": "Umbilical Socket (Power)", - "Description": "", - "PrefabName": "StructurePowerUmbilicalFemale", - "PrefabHash": 101488029, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power Output", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureChuteUmbilicalFemaleSide", - "Title": "Umbilical Socket Angle (Chute)", - "Description": "", - "PrefabName": "StructureChuteUmbilicalFemaleSide", - "PrefabHash": -659093969, - "SlotInserts": [ - { - "SlotName": "Transport Slot", - "SlotType": "None", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureGasUmbilicalFemaleSide", - "Title": "Umbilical Socket Angle (Gas)", - "Description": "", - "PrefabName": "StructureGasUmbilicalFemaleSide", - "PrefabHash": -648683847, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLiquidUmbilicalFemaleSide", - "Title": "Umbilical Socket Angle (Liquid)", - "Description": "", - "PrefabName": "StructureLiquidUmbilicalFemaleSide", - "PrefabHash": 1220870319, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructurePowerUmbilicalFemaleSide", - "Title": "Umbilical Socket Angle (Power)", - "Description": "", - "PrefabName": "StructurePowerUmbilicalFemaleSide", - "PrefabHash": 1922506192, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Power Output", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "Output" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingUniformCommander", - "Title": "Uniform Commander", - "Description": "", - "PrefabName": "UniformCommander", - "PrefabHash": -2083426457, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Access Card", - "SlotType": "AccessCard", - "SlotIndex": "2" - }, - { - "SlotName": "Access Card", - "SlotType": "AccessCard", - "SlotIndex": "3" - }, - { - "SlotName": "Credit Card", - "SlotType": "CreditCard", - "SlotIndex": "4" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Uniform", - "SortingClass": "Clothing" - } - }, - { - "Key": "ThingStructureUnloader", - "Title": "Unloader", - "Description": "The Xigo Re:Gurge is a handy unit for unloading any items inserted into it, and feeding them into a chute network. For instance, if you add a full Mining Belt, the Re:Gurge will empty a mining belt of its contents, insert them into the chute network, then insert the mining belt itself. A Sorter is recommended to reclaim the mining belt.\n\nOutput = 0 exporting the main item\nOutput = 1 exporting items inside and eventually the main item.", - "PrefabName": "StructureUnloader", - "PrefabHash": 750118160, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Output", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [ - { - "LogicName": "Automatic", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Mode": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "Output": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ], - [ - "Chute", - "Output" - ], - [ - "Chute", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingStructureUprightWindTurbine", - "Title": "Upright Wind Turbine", - "Description": "Norsec's basic wind turbine is an easily fabricated, rapidly deployed design that is strong enough to withstand the worst that environments can throw at it. \nWhile the wind turbine is optimized to produce power even on low atmosphere worlds (up to 200W), it performs best in denser environments. Output varies with wind speed, and during storms, may increase dramatically (up to 800W), so be careful to design your power networks with that in mind.", - "PrefabName": "StructureUprightWindTurbine", - "PrefabHash": 1622183451, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PowerGeneration", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureValve", - "Title": "Valve", - "Description": "", - "PrefabName": "StructureValve", - "PrefabHash": -692036078, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "None" - ], - [ - "Pipe", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureVendingMachine", - "Title": "Vending Machine", - "Description": "The Xigo-designed 'Slot Mate' vending machine allows storage of almost any item, while also operating as a distribution point for working with Traders. You cannot trade without a vending machine, or its more advanced equivalent, the Refrigerated Vending Machine. Each vending machine can hold up to 100 stacks.", - "PrefabName": "StructureVendingMachine", - "PrefabHash": -443130773, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "None", - "SlotIndex": "0" - }, - { - "SlotName": "Export", - "SlotType": "None", - "SlotIndex": "1" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "2" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "3" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "4" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "5" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "6" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "7" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "8" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "9" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "10" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "11" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "12" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "13" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "14" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "15" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "16" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "17" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "18" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "19" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "20" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "21" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "22" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "23" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "24" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "25" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "26" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "27" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "28" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "29" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "30" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "31" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "32" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "33" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "34" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "35" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "36" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "37" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "38" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "39" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "40" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "41" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "42" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "43" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "44" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "45" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "46" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "47" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "48" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "49" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "50" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "51" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "52" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "53" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "54" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "55" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "56" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "57" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "58" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "59" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "60" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "61" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "62" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "63" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "64" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "65" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "66" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "67" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "68" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "69" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "70" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "71" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "72" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "73" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "74" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "75" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "76" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "77" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "78" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "79" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "80" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "81" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "82" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "83" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "84" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "85" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "86" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "87" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "88" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "89" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "90" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "91" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "92" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "93" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "94" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "95" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "96" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "97" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "98" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "99" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "100" - }, - { - "SlotName": "Storage", - "SlotType": "None", - "SlotIndex": "101" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "RequestHash", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ExportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Chute Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Chute Output", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {}, - "1": {}, - "2": {}, - "3": {}, - "4": {}, - "5": {}, - "6": {}, - "7": {}, - "8": {}, - "9": {}, - "10": {}, - "11": {}, - "12": {}, - "13": {}, - "14": {}, - "15": {}, - "16": {}, - "17": {}, - "18": {}, - "19": {}, - "20": {}, - "21": {}, - "22": {}, - "23": {}, - "24": {}, - "25": {}, - "26": {}, - "27": {}, - "28": {}, - "29": {}, - "30": {}, - "31": {}, - "32": {}, - "33": {}, - "34": {}, - "35": {}, - "36": {}, - "37": {}, - "38": {}, - "39": {}, - "40": {}, - "41": {}, - "42": {}, - "43": {}, - "44": {}, - "45": {}, - "46": {}, - "47": {}, - "48": {}, - "49": {}, - "50": {}, - "51": {}, - "52": {}, - "53": {}, - "54": {}, - "55": {}, - "56": {}, - "57": {}, - "58": {}, - "59": {}, - "60": {}, - "61": {}, - "62": {}, - "63": {}, - "64": {}, - "65": {}, - "66": {}, - "67": {}, - "68": {}, - "69": {}, - "70": {}, - "71": {}, - "72": {}, - "73": {}, - "74": {}, - "75": {}, - "76": {}, - "77": {}, - "78": {}, - "79": {}, - "80": {}, - "81": {}, - "82": {}, - "83": {}, - "84": {}, - "85": {}, - "86": {}, - "87": {}, - "88": {}, - "89": {}, - "90": {}, - "91": {}, - "92": {}, - "93": {}, - "94": {}, - "95": {}, - "96": {}, - "97": {}, - "98": {}, - "99": {}, - "100": {}, - "101": {} - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "Ratio": "Read", - "Quantity": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "RequestHash": "ReadWrite", - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Chute", - "Input" - ], - [ - "Chute", - "Output" - ], - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureVolumePump", - "Title": "Volume Pump", - "Description": "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.", - "PrefabName": "StructureVolumePump", - "PrefabHash": -321403609, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Output", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "2" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "Output" - ], - [ - "Pipe", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWallArchArrow", - "Title": "Wall (Arch Arrow)", - "Description": "", - "PrefabName": "StructureWallArchArrow", - "PrefabHash": 1649708822, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallArchCornerRound", - "Title": "Wall (Arch Corner Round)", - "Description": "", - "PrefabName": "StructureWallArchCornerRound", - "PrefabHash": 1794588890, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallArchCornerSquare", - "Title": "Wall (Arch Corner Square)", - "Description": "", - "PrefabName": "StructureWallArchCornerSquare", - "PrefabHash": -1963016580, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallArchCornerTriangle", - "Title": "Wall (Arch Corner Triangle)", - "Description": "", - "PrefabName": "StructureWallArchCornerTriangle", - "PrefabHash": 1281911841, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallArchPlating", - "Title": "Wall (Arch Plating)", - "Description": "", - "PrefabName": "StructureWallArchPlating", - "PrefabHash": 1182510648, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallArchTwoTone", - "Title": "Wall (Arch Two Tone)", - "Description": "", - "PrefabName": "StructureWallArchTwoTone", - "PrefabHash": 782529714, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallArch", - "Title": "Wall (Arch)", - "Description": "", - "PrefabName": "StructureWallArch", - "PrefabHash": -858143148, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallFlatCornerRound", - "Title": "Wall (Flat Corner Round)", - "Description": "", - "PrefabName": "StructureWallFlatCornerRound", - "PrefabHash": 898708250, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallFlatCornerSquare", - "Title": "Wall (Flat Corner Square)", - "Description": "", - "PrefabName": "StructureWallFlatCornerSquare", - "PrefabHash": 298130111, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallFlatCornerTriangleFlat", - "Title": "Wall (Flat Corner Triangle Flat)", - "Description": "", - "PrefabName": "StructureWallFlatCornerTriangleFlat", - "PrefabHash": -1161662836, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallFlatCornerTriangle", - "Title": "Wall (Flat Corner Triangle)", - "Description": "", - "PrefabName": "StructureWallFlatCornerTriangle", - "PrefabHash": 2097419366, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallFlat", - "Title": "Wall (Flat)", - "Description": "", - "PrefabName": "StructureWallFlat", - "PrefabHash": 1635864154, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallGeometryCorner", - "Title": "Wall (Geometry Corner)", - "Description": "", - "PrefabName": "StructureWallGeometryCorner", - "PrefabHash": 1979212240, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallGeometryStreight", - "Title": "Wall (Geometry Straight)", - "Description": "", - "PrefabName": "StructureWallGeometryStreight", - "PrefabHash": 1049735537, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallGeometryTMirrored", - "Title": "Wall (Geometry T Mirrored)", - "Description": "", - "PrefabName": "StructureWallGeometryTMirrored", - "PrefabHash": -1427845483, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallGeometryT", - "Title": "Wall (Geometry T)", - "Description": "", - "PrefabName": "StructureWallGeometryT", - "PrefabHash": 1602758612, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallLargePanelArrow", - "Title": "Wall (Large Panel Arrow)", - "Description": "", - "PrefabName": "StructureWallLargePanelArrow", - "PrefabHash": -776581573, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallLargePanel", - "Title": "Wall (Large Panel)", - "Description": "", - "PrefabName": "StructureWallLargePanel", - "PrefabHash": 1492930217, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedArchCorner", - "Title": "Wall (Padded Arch Corner)", - "Description": "", - "PrefabName": "StructureWallPaddedArchCorner", - "PrefabHash": -1126688298, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedArchLightFittingTop", - "Title": "Wall (Padded Arch Light Fitting Top)", - "Description": "", - "PrefabName": "StructureWallPaddedArchLightFittingTop", - "PrefabHash": 1171987947, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedArchLightsFittings", - "Title": "Wall (Padded Arch Lights Fittings)", - "Description": "", - "PrefabName": "StructureWallPaddedArchLightsFittings", - "PrefabHash": -1546743960, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedArch", - "Title": "Wall (Padded Arch)", - "Description": "", - "PrefabName": "StructureWallPaddedArch", - "PrefabHash": 1590330637, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedCornerThin", - "Title": "Wall (Padded Corner Thin)", - "Description": "", - "PrefabName": "StructureWallPaddedCornerThin", - "PrefabHash": 1183203913, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedCorner", - "Title": "Wall (Padded Corner)", - "Description": "", - "PrefabName": "StructureWallPaddedCorner", - "PrefabHash": -155945899, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedNoBorderCorner", - "Title": "Wall (Padded No Border Corner)", - "Description": "", - "PrefabName": "StructureWallPaddedNoBorderCorner", - "PrefabHash": 179694804, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedNoBorder", - "Title": "Wall (Padded No Border)", - "Description": "", - "PrefabName": "StructureWallPaddedNoBorder", - "PrefabHash": 8846501, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedThinNoBorderCorner", - "Title": "Wall (Padded Thin No Border Corner)", - "Description": "", - "PrefabName": "StructureWallPaddedThinNoBorderCorner", - "PrefabHash": 1769527556, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedThinNoBorder", - "Title": "Wall (Padded Thin No Border)", - "Description": "", - "PrefabName": "StructureWallPaddedThinNoBorder", - "PrefabHash": -1611559100, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedWindowThin", - "Title": "Wall (Padded Window Thin)", - "Description": "", - "PrefabName": "StructureWallPaddedWindowThin", - "PrefabHash": -37302931, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddedWindow", - "Title": "Wall (Padded Window)", - "Description": "", - "PrefabName": "StructureWallPaddedWindow", - "PrefabHash": 2087628940, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddingArchVent", - "Title": "Wall (Padding Arch Vent)", - "Description": "", - "PrefabName": "StructureWallPaddingArchVent", - "PrefabHash": -1243329828, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddingLightFitting", - "Title": "Wall (Padding Light Fitting)", - "Description": "", - "PrefabName": "StructureWallPaddingLightFitting", - "PrefabHash": 2024882687, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPaddingThin", - "Title": "Wall (Padding Thin)", - "Description": "", - "PrefabName": "StructureWallPaddingThin", - "PrefabHash": -1102403554, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPadding", - "Title": "Wall (Padding)", - "Description": "", - "PrefabName": "StructureWallPadding", - "PrefabHash": 635995024, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallPlating", - "Title": "Wall (Plating)", - "Description": "", - "PrefabName": "StructureWallPlating", - "PrefabHash": 26167457, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallSmallPanelsAndHatch", - "Title": "Wall (Small Panels And Hatch)", - "Description": "", - "PrefabName": "StructureWallSmallPanelsAndHatch", - "PrefabHash": 619828719, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallSmallPanelsArrow", - "Title": "Wall (Small Panels Arrow)", - "Description": "", - "PrefabName": "StructureWallSmallPanelsArrow", - "PrefabHash": -639306697, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallSmallPanelsMonoChrome", - "Title": "Wall (Small Panels Mono Chrome)", - "Description": "", - "PrefabName": "StructureWallSmallPanelsMonoChrome", - "PrefabHash": 386820253, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallSmallPanelsOpen", - "Title": "Wall (Small Panels Open)", - "Description": "", - "PrefabName": "StructureWallSmallPanelsOpen", - "PrefabHash": -1407480603, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallSmallPanelsTwoTone", - "Title": "Wall (Small Panels Two Tone)", - "Description": "", - "PrefabName": "StructureWallSmallPanelsTwoTone", - "PrefabHash": 1709994581, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingStructureWallCooler", - "Title": "Wall Cooler", - "Description": "The Xigo Freezy Boi wall cooler complements the wall heater, which can only raise the temperature. The wall cooler functions by drawing heat from the surrounding atmosphere and adding that heat into its pipe network.\nIn order to run the wall cooler properly, you will need to connect pipes to the wall cooler and fill the connected pipe network with any type of gas. The gas's heat capacity and volume will determine how fast it reacts to temperature changes.\n\nEFFICIENCY\nThe higher the difference in temperature between the gas stored in the pipes and the room, the less efficient the wall cooler will be. So to keep the wall cooler running at an acceptable efficiency you will need to get rid of the heat that accumulates in the pipes connected to it. A common practice would be to run the pipes to the outside and use radiators on the outside section of the pipes to get rid of the heat.\nThe less efficient the wall cooler, the less power it consumes. It will consume 1010W at max efficiency. The wall cooler can be controlled by logic chips to run when the temperature hits a certain degree.\nERRORS\nIf the wall cooler is flashing an error then it is missing one of the following:\n\n- Pipe connection to the wall cooler.\n- Gas in the connected pipes, or pressure is too low.\n- Atmosphere in the surrounding environment or pressure is too low.\n\nFor more information about how to control temperatures, consult the temperature control Guides page.", - "PrefabName": "StructureWallCooler", - "PrefabHash": -739292323, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "DataDisk", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Maximum", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Ratio", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Setting": "ReadWrite", - "Maximum": "Read", - "Ratio": "Read", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Pipe", - "None" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWallHeater", - "Title": "Wall Heater", - "Description": "The Xigo wall heater is a simple device that can be installed on a wall or frame and connected to power. When switched on, it will start heating the surrounding environment. It consumes 1010W of power and can be controlled by logic chips to run when the temperature hits a certain level.", - "PrefabName": "StructureWallHeater", - "PrefabHash": 24258244, - "SlotInserts": [ - { - "SlotName": "", - "SlotType": "DataDisk", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWallLight", - "Title": "Wall Light", - "Description": "", - "PrefabName": "StructureWallLight", - "PrefabHash": -1860064656, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWallLightBattery", - "Title": "Wall Light (Battery)", - "Description": "", - "PrefabName": "StructureWallLightBattery", - "PrefabHash": -1306415132, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLightLongAngled", - "Title": "Wall Light (Long Angled)", - "Description": "", - "PrefabName": "StructureLightLongAngled", - "PrefabHash": 1847265835, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLightLongWide", - "Title": "Wall Light (Long Wide)", - "Description": "", - "PrefabName": "StructureLightLongWide", - "PrefabHash": 555215790, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureLightLong", - "Title": "Wall Light (Long)", - "Description": "", - "PrefabName": "StructureLightLong", - "PrefabHash": 797794350, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWallVent", - "Title": "Wall Vent", - "Description": "Used to mix atmospheres passively between two walls.", - "PrefabName": "StructureWallVent", - "PrefabHash": -1177469307, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [] - }, - { - "Key": "ThingItemWaterBottle", - "Title": "Water Bottle", - "Description": "Delicious and pure H20, refined from local sources as varied as Venusian ice and trans-Solar comets. Empty bottles can be refilled using the Water Bottle Filler.", - "PrefabName": "ItemWaterBottle", - "PrefabHash": 107741229, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "LiquidBottle", - "SortingClass": "Default", - "MaxQuantity": 1.5 - } - }, - { - "Key": "ThingStructureWaterBottleFiller", - "Title": "Water Bottle Filler", - "Description": "", - "PrefabName": "StructureWaterBottleFiller", - "PrefabHash": -1178961954, - "SlotInserts": [ - { - "SlotName": "Bottle Slot", - "SlotType": "LiquidBottle", - "SlotIndex": "0" - }, - { - "SlotName": "Bottle Slot", - "SlotType": "LiquidBottle", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Error": "Read", - "Activate": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWaterBottleFillerBottom", - "Title": "Water Bottle Filler Bottom", - "Description": "", - "PrefabName": "StructureWaterBottleFillerBottom", - "PrefabHash": 1433754995, - "SlotInserts": [ - { - "SlotName": "Bottle Slot", - "SlotType": "LiquidBottle", - "SlotIndex": "0" - }, - { - "SlotName": "Bottle Slot", - "SlotType": "LiquidBottle", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Error": "Read", - "Activate": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWaterPurifier", - "Title": "Water Purifier", - "Description": "Cleans Polluted Water and outputs Water. The purification process requires Charcoal which can be added to the machine via the import bin. The procesing throughput can be improved by increasing the gas pressure of the input pipe relative to the gas pressure of the output pipe.", - "PrefabName": "StructureWaterPurifier", - "PrefabHash": 887383294, - "SlotInserts": [ - { - "SlotName": "Import", - "SlotType": "Ore", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ClearMemory", - "LogicAccessTypes": "Write" - }, - { - "LogicName": "ImportCount", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "1" - }, - { - "LogicName": "Pipe Liquid Output", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Chute Input", - "LogicAccessTypes": "4" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": {} - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "ClearMemory": "Write", - "ImportCount": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "PipeLiquid", - "Input" - ], - [ - "PipeLiquid", - "Output" - ], - [ - "Power", - "None" - ], - [ - "Chute", - "Input" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWaterBottleFillerPowered", - "Title": "Waterbottle Filler", - "Description": "", - "PrefabName": "StructureWaterBottleFillerPowered", - "PrefabHash": -756587791, - "SlotInserts": [ - { - "SlotName": "Bottle Slot", - "SlotType": "LiquidBottle", - "SlotIndex": "0" - }, - { - "SlotName": "Bottle Slot", - "SlotType": "LiquidBottle", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Pipe Liquid Input", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "Input" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWaterBottleFillerPoweredBottom", - "Title": "Waterbottle Filler", - "Description": "", - "PrefabName": "StructureWaterBottleFillerPoweredBottom", - "PrefabHash": 1986658780, - "SlotInserts": [ - { - "SlotName": "Bottle Slot", - "SlotType": "LiquidBottle", - "SlotIndex": "0" - }, - { - "SlotName": "Bottle Slot", - "SlotType": "LiquidBottle", - "SlotIndex": "1" - } - ], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Pressure", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Temperature", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Volume", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "SortingClass", - "LogicAccessTypes": "0, 1" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0, 1" - } - ], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - }, - "1": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Pressure": "Read", - "Temperature": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "PrefabHash": "Read", - "Volume": "Read", - "Open": "ReadWrite", - "SortingClass": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "Power": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "PipeLiquid", - "None" - ], - [ - "PowerAndData", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingWeaponEnergy", - "Title": "Weapon Energy", - "Description": "", - "PrefabName": "WeaponEnergy", - "PrefabHash": 789494694, - "SlotInserts": [ - { - "SlotName": "Battery", - "SlotType": "Battery", - "SlotIndex": "0" - } - ], - "LogicInsert": [ - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [ - { - "LogicName": "Occupied", - "LogicAccessTypes": "0" - }, - { - "LogicName": "OccupantHash", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Quantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Damage", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Charge", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ChargeRatio", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Class", - "LogicAccessTypes": "0" - }, - { - "LogicName": "MaxQuantity", - "LogicAccessTypes": "0" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "0" - } - ], - "ModeInsert": [], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": { - "0": { - "Occupied": "Read", - "OccupantHash": "Read", - "Quantity": "Read", - "Damage": "Read", - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "MaxQuantity": "Read", - "ReferenceId": "Read" - } - }, - "LogicTypes": { - "On": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "None", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingStructureWeatherStation", - "Title": "Weather Station", - "Description": "0.NoStorm\n1.StormIncoming\n2.InStorm", - "PrefabName": "StructureWeatherStation", - "PrefabHash": 1997212478, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Activate", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Lock", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "NextWeatherEventTime", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "NoStorm", - "LogicAccessTypes": "0" - }, - { - "LogicName": "StormIncoming", - "LogicAccessTypes": "1" - }, - { - "LogicName": "InStorm", - "LogicAccessTypes": "2" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Mode": "Read", - "Error": "Read", - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "PrefabHash": "Read", - "NextWeatherEventTime": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": true, - "HasOpenState": false, - "HasOnOffState": true, - "HasActivateState": true, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemWeldingTorch", - "Title": "Welding Torch", - "Description": "Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures.\nAn upgraded version of the classic 'Zairo' model first manufactured by ExMin for modular space habitat assembly, the Arlite is powered by a single Canister (Fuel) and designed to function equally well in deep space and deep gravity wells.", - "PrefabName": "ItemWeldingTorch", - "PrefabHash": -2066892079, - "SlotInserts": [ - { - "SlotName": "Gas Canister", - "SlotType": "GasCanister", - "SlotIndex": "0" - } - ], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemWheat", - "Title": "Wheat", - "Description": "A classical symbol of growth and new life, wheat takes a moderate time to grow. Its main use is to create flour using the Reagent Processor.", - "PrefabName": "ItemWheat", - "PrefabHash": -1057658015, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Default", - "MaxQuantity": 100.0, - "Ingredient": true, - "Reagents": { - "Carbon": 1.0 - } - } - }, - { - "Key": "ThingSeedBag_Wheet", - "Title": "Wheat Seeds", - "Description": "Grow some Wheat.", - "PrefabName": "SeedBag_Wheet", - "PrefabHash": -654756733, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Food", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingStructureWindTurbine", - "Title": "Wind Turbine", - "Description": "The Stationeers wind turbine was first designed by Norsec atmospheric engineers, looking to create a wind-driven power generation system that would operate even on exceedingly low atmosphere worlds. The ultra-light blades respond to exceedingly low atmospheric densities, while being strong enough to function even under huge strain in much more demanding environments.\nWhile the wind turbine is optimized to produce power (up to 500W) even on low atmosphere worlds, it performs best in denser environments. Output varies with wind speed and, during storms, may increase dramatically (up to 10,000W), so be careful to design your power networks with that in mind.", - "PrefabName": "StructureWindTurbine", - "PrefabHash": -2082355173, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "PowerGeneration", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Power", - "None" - ], - [ - "Data", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": false, - "HasOnOffState": false, - "HasActivateState": false, - "HasModeState": false, - "HasColorState": false - } - }, - { - "Key": "ThingStructureWindowShutter", - "Title": "Window Shutter", - "Description": "For those special, private moments, a window that can be closed to prying eyes. \n \nWhen closed, has the heat transfer characteristics of a basic wall. Requires power, and can be connected to logic systems.", - "PrefabName": "StructureWindowShutter", - "PrefabHash": 2056377335, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Power", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Open", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "Error", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Setting", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "On", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "RequiredPower", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "Idle", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "PrefabHash", - "LogicAccessTypes": "Read" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Operate", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Logic", - "LogicAccessTypes": "1" - } - ], - "ConnectionInsert": [ - { - "LogicName": "Connection", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Connection", - "LogicAccessTypes": "1" - } - ], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Power": "Read", - "Open": "ReadWrite", - "Mode": "ReadWrite", - "Error": "Read", - "Setting": "ReadWrite", - "On": "ReadWrite", - "RequiredPower": "Read", - "Idle": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - } - }, - "Device": { - "ConnectionList": [ - [ - "Data", - "None" - ], - [ - "Power", - "None" - ] - ], - "HasReagents": false, - "HasAtmosphere": false, - "HasLockState": false, - "HasOpenState": true, - "HasOnOffState": true, - "HasActivateState": false, - "HasModeState": true, - "HasColorState": false - } - }, - { - "Key": "ThingItemPlantEndothermic_Genepool1", - "Title": "Winterspawn (Alpha variant)", - "Description": "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings, when supplied with sufficient Nitrogen. The alpha variant has a peak cooling and electrolysis capacity of 90Watts and is most efficient operating in air temperatures of 0 to 40 Degrees Celsius.", - "PrefabName": "ItemPlantEndothermic_Genepool1", - "PrefabHash": 851290561, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemPlantEndothermic_Genepool2", - "Title": "Winterspawn (Beta variant)", - "Description": "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings when supplied with sufficient Nitrogen. The beta variant has a peak cooling and electrolysis capacity of 150Watts and is most efficient operating in air temperatures of 14 to 24 Degrees Celsius.", - "PrefabName": "ItemPlantEndothermic_Genepool2", - "PrefabHash": -1414203269, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Plant", - "SortingClass": "Resources", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWireCutters", - "Title": "Wire Cutters", - "Description": "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools.", - "PrefabName": "ItemWireCutters", - "PrefabHash": 1535854074, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingItemWirelessBatteryCellExtraLarge", - "Title": "Wireless Battery Cell Extra Large", - "Description": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "PrefabName": "ItemWirelessBatteryCellExtraLarge", - "PrefabHash": -504717121, - "SlotInserts": [], - "LogicInsert": [ - { - "LogicName": "Mode", - "LogicAccessTypes": "Read Write" - }, - { - "LogicName": "ReferenceId", - "LogicAccessTypes": "Read" - } - ], - "LogicSlotInsert": [], - "ModeInsert": [ - { - "LogicName": "Empty", - "LogicAccessTypes": "0" - }, - { - "LogicName": "Critical", - "LogicAccessTypes": "1" - }, - { - "LogicName": "VeryLow", - "LogicAccessTypes": "2" - }, - { - "LogicName": "Low", - "LogicAccessTypes": "3" - }, - { - "LogicName": "Medium", - "LogicAccessTypes": "4" - }, - { - "LogicName": "High", - "LogicAccessTypes": "5" - }, - { - "LogicName": "Full", - "LogicAccessTypes": "6" - } - ], - "ConnectionInsert": [], - "LogicInfo": { - "LogicSlotTypes": {}, - "LogicTypes": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - } - }, - "Item": { - "SlotClass": "Battery", - "SortingClass": "Default" - } - }, - { - "Key": "ThingItemWreckageAirConditioner2", - "Title": "Wreckage Air Conditioner", - "Description": "", - "PrefabName": "ItemWreckageAirConditioner2", - "PrefabHash": 169888054, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageAirConditioner1", - "Title": "Wreckage Air Conditioner", - "Description": "", - "PrefabName": "ItemWreckageAirConditioner1", - "PrefabHash": -1826023284, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageHydroponicsTray1", - "Title": "Wreckage Hydroponics Tray", - "Description": "", - "PrefabName": "ItemWreckageHydroponicsTray1", - "PrefabHash": -310178617, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageLargeExtendableRadiator01", - "Title": "Wreckage Large Extendable Radiator", - "Description": "", - "PrefabName": "ItemWreckageLargeExtendableRadiator01", - "PrefabHash": -997763, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageStructureRTG1", - "Title": "Wreckage Structure RTG", - "Description": "", - "PrefabName": "ItemWreckageStructureRTG1", - "PrefabHash": 391453348, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageStructureWeatherStation003", - "Title": "Wreckage Structure Weather Station", - "Description": "", - "PrefabName": "ItemWreckageStructureWeatherStation003", - "PrefabHash": 542009679, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageStructureWeatherStation002", - "Title": "Wreckage Structure Weather Station", - "Description": "", - "PrefabName": "ItemWreckageStructureWeatherStation002", - "PrefabHash": 1464424921, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageStructureWeatherStation005", - "Title": "Wreckage Structure Weather Station", - "Description": "", - "PrefabName": "ItemWreckageStructureWeatherStation005", - "PrefabHash": -919745414, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageStructureWeatherStation007", - "Title": "Wreckage Structure Weather Station", - "Description": "", - "PrefabName": "ItemWreckageStructureWeatherStation007", - "PrefabHash": 656649558, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageStructureWeatherStation001", - "Title": "Wreckage Structure Weather Station", - "Description": "", - "PrefabName": "ItemWreckageStructureWeatherStation001", - "PrefabHash": -834664349, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageStructureWeatherStation006", - "Title": "Wreckage Structure Weather Station", - "Description": "", - "PrefabName": "ItemWreckageStructureWeatherStation006", - "PrefabHash": 1344576960, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageStructureWeatherStation004", - "Title": "Wreckage Structure Weather Station", - "Description": "", - "PrefabName": "ItemWreckageStructureWeatherStation004", - "PrefabHash": -1104478996, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageStructureWeatherStation008", - "Title": "Wreckage Structure Weather Station", - "Description": "", - "PrefabName": "ItemWreckageStructureWeatherStation008", - "PrefabHash": -1214467897, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageTurbineGenerator1", - "Title": "Wreckage Turbine Generator", - "Description": "", - "PrefabName": "ItemWreckageTurbineGenerator1", - "PrefabHash": -1662394403, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageTurbineGenerator2", - "Title": "Wreckage Turbine Generator", - "Description": "", - "PrefabName": "ItemWreckageTurbineGenerator2", - "PrefabHash": 98602599, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageTurbineGenerator3", - "Title": "Wreckage Turbine Generator", - "Description": "", - "PrefabName": "ItemWreckageTurbineGenerator3", - "PrefabHash": 1927790321, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageWallCooler1", - "Title": "Wreckage Wall Cooler", - "Description": "", - "PrefabName": "ItemWreckageWallCooler1", - "PrefabHash": -1682930158, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWreckageWallCooler2", - "Title": "Wreckage Wall Cooler", - "Description": "", - "PrefabName": "ItemWreckageWallCooler2", - "PrefabHash": 45733800, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Wreckage", - "SortingClass": "Default", - "MaxQuantity": 10.0 - } - }, - { - "Key": "ThingItemWrench", - "Title": "Wrench", - "Description": "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures", - "PrefabName": "ItemWrench", - "PrefabHash": -1886261558, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Tool", - "SortingClass": "Tools" - } - }, - { - "Key": "ThingCartridgeElectronicReader", - "Title": "eReader", - "Description": "", - "PrefabName": "CartridgeElectronicReader", - "PrefabHash": -1462180176, - "SlotInserts": [], - "LogicInsert": [], - "LogicSlotInsert": [], - "ModeInsert": [], - "ConnectionInsert": [], - "Item": { - "SlotClass": "Cartridge", - "SortingClass": "Default" - } - } - ], - "reagents": { - "Alcohol": { - "Hash": 1565803737, - "Unit": "ml" - }, - "Astroloy": { - "Hash": -1493155787, - "Unit": "g", - "Sources": { - "ItemAstroloyIngot": 1.0 - } - }, - "Biomass": { - "Hash": 925270362, - "Unit": "", - "Sources": { - "ItemBiomass": 1.0 - } - }, - "Carbon": { - "Hash": 1582746610, - "Unit": "g", - "Sources": { - "HumanSkull": 1.0, - "ItemCharcoal": 1.0 - } - }, - "Cobalt": { - "Hash": 1702246124, - "Unit": "g", - "Sources": { - "ItemCobaltOre": 1.0 - } - }, - "ColorBlue": { - "Hash": 557517660, - "Unit": "g", - "Sources": { - "ReagentColorBlue": 10.0 - } - }, - "ColorGreen": { - "Hash": 2129955242, - "Unit": "g", - "Sources": { - "ReagentColorGreen": 10.0 - } - }, - "ColorOrange": { - "Hash": 1728153015, - "Unit": "g", - "Sources": { - "ReagentColorOrange": 10.0 - } - }, - "ColorRed": { - "Hash": 667001276, - "Unit": "g", - "Sources": { - "ReagentColorRed": 10.0 - } - }, - "ColorYellow": { - "Hash": -1430202288, - "Unit": "g", - "Sources": { - "ReagentColorYellow": 10.0 - } - }, - "Constantan": { - "Hash": 1731241392, - "Unit": "g", - "Sources": { - "ItemConstantanIngot": 1.0 - } - }, - "Copper": { - "Hash": -1172078909, - "Unit": "g", - "Sources": { - "ItemCopperIngot": 1.0, - "ItemCopperOre": 1.0 - } - }, - "Corn": { - "Hash": 1550709753, - "Unit": "", - "Sources": { - "ItemCookedCorn": 1.0, - "ItemCorn": 1.0 - } - }, - "Egg": { - "Hash": 1887084450, - "Unit": "", - "Sources": { - "ItemCookedPowderedEggs": 1.0, - "ItemEgg": 1.0, - "ItemFertilizedEgg": 1.0 - } - }, - "Electrum": { - "Hash": 478264742, - "Unit": "g", - "Sources": { - "ItemElectrumIngot": 1.0 - } - }, - "Fenoxitone": { - "Hash": -865687737, - "Unit": "g", - "Sources": { - "ItemFern": 1.0 - } - }, - "Flour": { - "Hash": -811006991, - "Unit": "g", - "Sources": { - "ItemFlour": 50.0 - } - }, - "Gold": { - "Hash": -409226641, - "Unit": "g", - "Sources": { - "ItemGoldIngot": 1.0, - "ItemGoldOre": 1.0 - } - }, - "Hastelloy": { - "Hash": 2019732679, - "Unit": "g", - "Sources": { - "ItemHastelloyIngot": 1.0 - } - }, - "Hydrocarbon": { - "Hash": 2003628602, - "Unit": "g", - "Sources": { - "ItemCoalOre": 1.0, - "ItemSolidFuel": 1.0 - } - }, - "Inconel": { - "Hash": -586072179, - "Unit": "g", - "Sources": { - "ItemInconelIngot": 1.0 - } - }, - "Invar": { - "Hash": -626453759, - "Unit": "g", - "Sources": { - "ItemInvarIngot": 1.0 - } - }, - "Iron": { - "Hash": -666742878, - "Unit": "g", - "Sources": { - "ItemIronIngot": 1.0, - "ItemIronOre": 1.0 - } - }, - "Lead": { - "Hash": -2002530571, - "Unit": "g", - "Sources": { - "ItemLeadIngot": 1.0, - "ItemLeadOre": 1.0 - } - }, - "Milk": { - "Hash": 471085864, - "Unit": "ml", - "Sources": { - "ItemCookedCondensedMilk": 1.0, - "ItemMilk": 1.0 - } - }, - "Mushroom": { - "Hash": 516242109, - "Unit": "g", - "Sources": { - "ItemCookedMushroom": 1.0, - "ItemMushroom": 1.0 - } - }, - "Nickel": { - "Hash": 556601662, - "Unit": "g", - "Sources": { - "ItemNickelIngot": 1.0, - "ItemNickelOre": 1.0 - } - }, - "Oil": { - "Hash": 1958538866, - "Unit": "ml", - "Sources": { - "ItemSoyOil": 1.0 - } - }, - "Plastic": { - "Hash": 791382247, - "Unit": "g" - }, - "Potato": { - "Hash": -1657266385, - "Unit": "", - "Sources": { - "ItemPotato": 1.0, - "ItemPotatoBaked": 1.0 - } - }, - "Pumpkin": { - "Hash": -1250164309, - "Unit": "", - "Sources": { - "ItemCookedPumpkin": 1.0, - "ItemPumpkin": 1.0 - } - }, - "Rice": { - "Hash": 1951286569, - "Unit": "g", - "Sources": { - "ItemCookedRice": 1.0, - "ItemRice": 1.0 - } - }, - "SalicylicAcid": { - "Hash": -2086114347, - "Unit": "g" - }, - "Silicon": { - "Hash": -1195893171, - "Unit": "g", - "Sources": { - "ItemSiliconIngot": 0.1, - "ItemSiliconOre": 1.0 - } - }, - "Silver": { - "Hash": 687283565, - "Unit": "g", - "Sources": { - "ItemSilverIngot": 1.0, - "ItemSilverOre": 1.0 - } - }, - "Solder": { - "Hash": -1206542381, - "Unit": "g", - "Sources": { - "ItemSolderIngot": 1.0 - } - }, - "Soy": { - "Hash": 1510471435, - "Unit": "", - "Sources": { - "ItemCookedSoybean": 1.0, - "ItemSoybean": 1.0 - } - }, - "Steel": { - "Hash": 1331613335, - "Unit": "g", - "Sources": { - "ItemEmptyCan": 1.0, - "ItemSteelIngot": 1.0 - } - }, - "Stellite": { - "Hash": -500544800, - "Unit": "g", - "Sources": { - "ItemStelliteIngot": 1.0 - } - }, - "Tomato": { - "Hash": 733496620, - "Unit": "", - "Sources": { - "ItemCookedTomato": 1.0, - "ItemTomato": 1.0 - } - }, - "Uranium": { - "Hash": -208860272, - "Unit": "g", - "Sources": { - "ItemUraniumOre": 1.0 - } - }, - "Waspaloy": { - "Hash": 1787814293, - "Unit": "g", - "Sources": { - "ItemWaspaloyIngot": 1.0 - } - }, - "Wheat": { - "Hash": -686695134, - "Unit": "", - "Sources": { - "ItemWheat": 1.0 - } - } - }, - "scriptCommands": { - "l": { - "desc": "Loads device LogicType to register by housing index value.", - "example": "l r? d? logicType" - }, - "s": { - "desc": "Stores register value to LogicType on device by housing index value.", - "example": "s d? logicType r?" - }, - "ls": { - "desc": "Loads slot LogicSlotType on device to register.", - "example": "ls r? d? slotIndex logicSlotType" - }, - "lr": { - "desc": "Loads reagent of device's ReagentMode where a hash of the reagent type to check for. ReagentMode can be either Contents (0), Required (1), Recipe (2). Can use either the word, or the number.", - "example": "lr r? d? reagentMode int" - }, - "sb": { - "desc": "Stores register value to LogicType on all output network devices with provided type hash.", - "example": "sb deviceHash logicType r?" - }, - "lb": { - "desc": "Loads LogicType from all output network devices with provided type hash using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number.", - "example": "lb r? deviceHash logicType batchMode" - }, - "alias": { - "desc": "Labels register or device reference with name, device references also affect what shows on the screws on the IC base.", - "example": "alias str r?|d?" - }, - "move": { - "desc": "Register = provided num or register value.", - "example": "move r? a(r?|num)" - }, - "add": { - "desc": "Register = a + b.", - "example": "add r? a(r?|num) b(r?|num)" - }, - "sub": { - "desc": "Register = a - b.", - "example": "sub r? a(r?|num) b(r?|num)" - }, - "sdse": { - "desc": "Register = 1 if device is set, otherwise 0.", - "example": "sdse r? d?" - }, - "sdns": { - "desc": "Register = 1 if device is not set, otherwise 0", - "example": "sdns r? d?" - }, - "slt": { - "desc": "Register = 1 if a < b, otherwise 0", - "example": "slt r? a(r?|num) b(r?|num)" - }, - "sgt": { - "desc": "Register = 1 if a > b, otherwise 0", - "example": "sgt r? a(r?|num) b(r?|num)" - }, - "sle": { - "desc": "Register = 1 if a <= b, otherwise 0", - "example": "sle r? a(r?|num) b(r?|num)" - }, - "sge": { - "desc": "Register = 1 if a >= b, otherwise 0", - "example": "sge r? a(r?|num) b(r?|num)" - }, - "seq": { - "desc": "Register = 1 if a == b, otherwise 0", - "example": "seq r? a(r?|num) b(r?|num)" - }, - "sne": { - "desc": "Register = 1 if a != b, otherwise 0", - "example": "sne r? a(r?|num) b(r?|num)" - }, - "sap": { - "desc": "Register = 1 if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8), otherwise 0", - "example": "sap r? a(r?|num) b(r?|num) c(r?|num)" - }, - "sna": { - "desc": "Register = 1 if abs(a - b) > max(c * max(abs(a), abs(b)), float.epsilon * 8), otherwise 0", - "example": "sna r? a(r?|num) b(r?|num) c(r?|num)" - }, - "and": { - "desc": "Performs a bitwise logical AND operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If both bits are 1, the resulting bit is set to 1. Otherwise the resulting bit is set to 0.", - "example": "and r? a(r?|num) b(r?|num)" - }, - "or": { - "desc": "Performs a bitwise logical OR operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If either bit is 1, the resulting bit is set to 1. If both bits are 0, the resulting bit is set to 0.", - "example": "or r? a(r?|num) b(r?|num)" - }, - "xor": { - "desc": "Performs a bitwise logical XOR (exclusive OR) operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If the bits are different (one bit is 0 and the other is 1), the resulting bit is set to 1. If the bits are the same (both 0 or both 1), the resulting bit is set to 0.", - "example": "xor r? a(r?|num) b(r?|num)" - }, - "nor": { - "desc": "Performs a bitwise logical NOR (NOT OR) operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If both bits are 0, the resulting bit is set to 1. Otherwise, if at least one bit is 1, the resulting bit is set to 0.", - "example": "nor r? a(r?|num) b(r?|num)" - }, - "mul": { - "desc": "Register = a * b", - "example": "mul r? a(r?|num) b(r?|num)" - }, - "div": { - "desc": "Register = a / b", - "example": "div r? a(r?|num) b(r?|num)" - }, - "mod": { - "desc": "Register = a mod b (note: NOT a % b)", - "example": "mod r? a(r?|num) b(r?|num)" - }, - "j": { - "desc": "Jump execution to line a", - "example": "j int" - }, - "bltz": { - "desc": "Branch to line b if a < 0", - "example": "bltz a(r?|num) b(r?|num)" - }, - "bgez": { - "desc": "Branch to line b if a >= 0", - "example": "bgez a(r?|num) b(r?|num)" - }, - "blez": { - "desc": "Branch to line b if a <= 0", - "example": "blez a(r?|num) b(r?|num)" - }, - "bgtz": { - "desc": "Branch to line b if a > 0", - "example": "bgtz a(r?|num) b(r?|num)" - }, - "bdse": { - "desc": "Branch to line a if device d is set", - "example": "bdse d? a(r?|num)" - }, - "bdns": { - "desc": "Branch to line a if device d isn't set", - "example": "bdns d? a(r?|num)" - }, - "beq": { - "desc": "Branch to line c if a == b", - "example": "beq a(r?|num) b(r?|num) c(r?|num)" - }, - "bne": { - "desc": "Branch to line c if a != b", - "example": "bne a(r?|num) b(r?|num) c(r?|num)" - }, - "bap": { - "desc": "Branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8)", - "example": "bap a(r?|num) b(r?|num) c(r?|num) d(r?|num)" - }, - "bna": { - "desc": "Branch to line d if abs(a - b) > max(c * max(abs(a), abs(b)), float.epsilon * 8)", - "example": "bna a(r?|num) b(r?|num) c(r?|num) d(r?|num)" - }, - "jal": { - "desc": "Jump execution to line a and store next line number in ra", - "example": "jal int" - }, - "brdse": { - "desc": "Relative jump to line a if device is set", - "example": "brdse d? a(r?|num)" - }, - "brdns": { - "desc": "Relative jump to line a if device is not set", - "example": "brdns d? a(r?|num)" - }, - "bltzal": { - "desc": "Branch to line b if a < 0 and store next line number in ra", - "example": "bltzal a(r?|num) b(r?|num)" - }, - "bgezal": { - "desc": "Branch to line b if a >= 0 and store next line number in ra", - "example": "bgezal a(r?|num) b(r?|num)" - }, - "blezal": { - "desc": "Branch to line b if a <= 0 and store next line number in ra", - "example": "blezal a(r?|num) b(r?|num)" - }, - "bgtzal": { - "desc": "Branch to line b if a > 0 and store next line number in ra", - "example": "bgtzal a(r?|num) b(r?|num)" - }, - "beqal": { - "desc": "Branch to line c if a == b and store next line number in ra", - "example": "beqal a(r?|num) b(r?|num) c(r?|num)" - }, - "bneal": { - "desc": "Branch to line c if a != b and store next line number in ra", - "example": "bneal a(r?|num) b(r?|num) c(r?|num)" - }, - "jr": { - "desc": "Relative jump to line a", - "example": "jr int" - }, - "bdseal": { - "desc": "Jump execution to line a and store next line number if device is set", - "example": "bdseal d? a(r?|num)" - }, - "bdnsal": { - "desc": "Jump execution to line a and store next line number if device is not set", - "example": "bdnsal d? a(r?|num)" - }, - "brltz": { - "desc": "Relative branch to line b if a < 0", - "example": "brltz a(r?|num) b(r?|num)" - }, - "brgez": { - "desc": "Relative branch to line b if a >= 0", - "example": "brgez a(r?|num) b(r?|num)" - }, - "brlez": { - "desc": "Relative branch to line b if a <= 0", - "example": "brlez a(r?|num) b(r?|num)" - }, - "brgtz": { - "desc": "Relative branch to line b if a > 0", - "example": "brgtz a(r?|num) b(r?|num)" - }, - "breq": { - "desc": "Relative branch to line c if a == b", - "example": "breq a(r?|num) b(r?|num) c(r?|num)" - }, - "brne": { - "desc": "Relative branch to line c if a != b", - "example": "brne a(r?|num) b(r?|num) c(r?|num)" - }, - "brap": { - "desc": "Relative branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8)", - "example": "brap a(r?|num) b(r?|num) c(r?|num) d(r?|num)" - }, - "brna": { - "desc": "Relative branch to line d if abs(a - b) > max(c * max(abs(a), abs(b)), float.epsilon * 8)", - "example": "brna a(r?|num) b(r?|num) c(r?|num) d(r?|num)" - }, - "sqrt": { - "desc": "Register = square root of a", - "example": "sqrt r? a(r?|num)" - }, - "round": { - "desc": "Register = a rounded to nearest integer", - "example": "round r? a(r?|num)" - }, - "trunc": { - "desc": "Register = a with fractional part removed", - "example": "trunc r? a(r?|num)" - }, - "ceil": { - "desc": "Register = smallest integer greater than a", - "example": "ceil r? a(r?|num)" - }, - "floor": { - "desc": "Register = largest integer less than a", - "example": "floor r? a(r?|num)" - }, - "max": { - "desc": "Register = max of a or b", - "example": "max r? a(r?|num) b(r?|num)" - }, - "min": { - "desc": "Register = min of a or b", - "example": "min r? a(r?|num) b(r?|num)" - }, - "abs": { - "desc": "Register = the absolute value of a", - "example": "abs r? a(r?|num)" - }, - "log": { - "desc": "Register = log(a)", - "example": "log r? a(r?|num)" - }, - "exp": { - "desc": "Register = exp(a)", - "example": "exp r? a(r?|num)" - }, - "rand": { - "desc": "Register = a random value x with 0 <= x < 1", - "example": "rand r?" - }, - "yield": { - "desc": "Pauses execution for 1 tick", - "example": "yield" - }, - "label": { - "desc": "DEPRECATED", - "example": "label d? str" - }, - "peek": { - "desc": "Register = the value at the top of the stack", - "example": "peek r?" - }, - "push": { - "desc": "Pushes the value of a to the stack at sp and increments sp", - "example": "push a(r?|num)" - }, - "pop": { - "desc": "Register = the value at the top of the stack and decrements sp", - "example": "pop r?" - }, - "hcf": { - "desc": "Halt and catch fire", - "example": "hcf" - }, - "select": { - "desc": "Register = b if a is non-zero, otherwise c", - "example": "select r? a(r?|num) b(r?|num) c(r?|num)" - }, - "blt": { - "desc": "Branch to line c if a < b", - "example": "blt a(r?|num) b(r?|num) c(r?|num)" - }, - "bgt": { - "desc": "Branch to line c if a > b", - "example": "bgt a(r?|num) b(r?|num) c(r?|num)" - }, - "ble": { - "desc": "Branch to line c if a <= b", - "example": "ble a(r?|num) b(r?|num) c(r?|num)" - }, - "bge": { - "desc": "Branch to line c if a >= b", - "example": "bge a(r?|num) b(r?|num) c(r?|num)" - }, - "brlt": { - "desc": "Relative jump to line c if a < b", - "example": "brlt a(r?|num) b(r?|num) c(r?|num)" - }, - "brgt": { - "desc": "relative jump to line c if a > b", - "example": "brgt a(r?|num) b(r?|num) c(r?|num)" - }, - "brle": { - "desc": "Relative jump to line c if a <= b", - "example": "brle a(r?|num) b(r?|num) c(r?|num)" - }, - "brge": { - "desc": "Relative jump to line c if a >= b", - "example": "brge a(r?|num) b(r?|num) c(r?|num)" - }, - "bltal": { - "desc": "Branch to line c if a < b and store next line number in ra", - "example": "bltal a(r?|num) b(r?|num) c(r?|num)" - }, - "bgtal": { - "desc": "Branch to line c if a > b and store next line number in ra", - "example": "bgtal a(r?|num) b(r?|num) c(r?|num)" - }, - "bleal": { - "desc": "Branch to line c if a <= b and store next line number in ra", - "example": "bleal a(r?|num) b(r?|num) c(r?|num)" - }, - "bgeal": { - "desc": "Branch to line c if a >= b and store next line number in ra", - "example": "bgeal a(r?|num) b(r?|num) c(r?|num)" - }, - "bapal": { - "desc": "Branch to line c if a != b and store next line number in ra", - "example": "bapal a(r?|num) b(r?|num) c(r?|num) d(r?|num)" - }, - "bnaal": { - "desc": "Branch to line d if abs(a - b) <= max(c * max(abs(a), abs(b)), float.epsilon * 8) and store next line number in ra", - "example": "bnaal a(r?|num) b(r?|num) c(r?|num) d(r?|num)" - }, - "beqz": { - "desc": "Branch to line b if a == 0", - "example": "beqz a(r?|num) b(r?|num)" - }, - "bnez": { - "desc": "branch to line b if a != 0", - "example": "bnez a(r?|num) b(r?|num)" - }, - "bapz": { - "desc": "Branch to line c if abs(a) <= float.epsilon * 8", - "example": "bapz a(r?|num) b(r?|num) c(r?|num)" - }, - "bnaz": { - "desc": "Branch to line c if abs(a) > float.epsilon * 8", - "example": "bnaz a(r?|num) b(r?|num) c(r?|num)" - }, - "breqz": { - "desc": "Relative branch to line b if a == 0", - "example": "breqz a(r?|num) b(r?|num)" - }, - "brnez": { - "desc": "Relative branch to line b if a != 0", - "example": "brnez a(r?|num) b(r?|num)" - }, - "brapz": { - "desc": "Relative branch to line c if abs(a) <= float.epsilon * 8", - "example": "brapz a(r?|num) b(r?|num) c(r?|num)" - }, - "brnaz": { - "desc": "Relative branch to line c if abs(a) > float.epsilon * 8", - "example": "brnaz a(r?|num) b(r?|num) c(r?|num)" - }, - "beqzal": { - "desc": "Branch to line b if a == 0 and store next line number in ra", - "example": "beqzal a(r?|num) b(r?|num)" - }, - "bnezal": { - "desc": "Branch to line b if a != 0 and store next line number in ra", - "example": "bnezal a(r?|num) b(r?|num)" - }, - "bapzal": { - "desc": "Branch to line c if abs(a) <= float.epsilon * 8", - "example": "bapzal a(r?|num) b(r?|num) c(r?|num)" - }, - "bnazal": { - "desc": "Branch to line c if abs(a) > float.epsilon * 8", - "example": "bnazal a(r?|num) b(r?|num) c(r?|num)" - }, - "sltz": { - "desc": "Register = 1 if a < 0, otherwise 0", - "example": "sltz r? a(r?|num)" - }, - "sgtz": { - "desc": "Register = 1 if a > 0, otherwise 0", - "example": "sgtz r? a(r?|num)" - }, - "slez": { - "desc": "Register = 1 if a <= 0, otherwise 0", - "example": "slez r? a(r?|num)" - }, - "sgez": { - "desc": "Register = 1 if a >= 0, otherwise 0", - "example": "sgez r? a(r?|num)" - }, - "seqz": { - "desc": "Register = 1 if a == 0, otherwise 0", - "example": "seqz r? a(r?|num)" - }, - "snez": { - "desc": "Register = 1 if a != 0, otherwise 0", - "example": "snez r? a(r?|num)" - }, - "sapz": { - "desc": "Register = 1 if |a| <= float.epsilon * 8, otherwise 0", - "example": "sapz r? a(r?|num) b(r?|num)" - }, - "snaz": { - "desc": "Register = 1 if |a| > float.epsilon, otherwise 0", - "example": "snaz r? a(r?|num) b(r?|num)" - }, - "define": { - "desc": "Creates a label that will be replaced throughout the program with the provided value.", - "example": "define str num" - }, - "sleep": { - "desc": "Pauses execution on the IC for a seconds", - "example": "sleep a(r?|num)" - }, - "sin": { - "desc": "Returns the sine of the specified angle (radians)", - "example": "sin r? a(r?|num)" - }, - "asin": { - "desc": "Returns the angle (radians) whos sine is the specified value", - "example": "asin r? a(r?|num)" - }, - "tan": { - "desc": "Returns the tan of the specified angle (radians) ", - "example": "tan r? a(r?|num)" - }, - "atan": { - "desc": "Returns the angle (radians) whos tan is the specified value", - "example": "atan r? a(r?|num)" - }, - "cos": { - "desc": "Returns the cosine of the specified angle (radians)", - "example": "cos r? a(r?|num)" - }, - "acos": { - "desc": "Returns the cosine of the specified angle (radians)", - "example": "acos r? a(r?|num)" - }, - "atan2": { - "desc": "Returns the angle (radians) whose tangent is the quotient of two specified values: a (y) and b (x)", - "example": "atan2 r? a(r?|num) b(r?|num)" - }, - "brnan": { - "desc": "Relative branch to line b if a is not a number (NaN)", - "example": "brnan a(r?|num) b(r?|num)" - }, - "bnan": { - "desc": "Branch to line b if a is not a number (NaN)", - "example": "bnan a(r?|num) b(r?|num)" - }, - "snan": { - "desc": "Register = 1 if a is NaN, otherwise 0", - "example": "snan r? a(r?|num)" - }, - "snanz": { - "desc": "Register = 0 if a is NaN, otherwise 1", - "example": "snanz r? a(r?|num)" - }, - "lbs": { - "desc": "Loads LogicSlotType from slotIndex from all output network devices with provided type hash using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number.", - "example": "lbs r? deviceHash slotIndex logicSlotType batchMode" - }, - "lbn": { - "desc": "Loads LogicType from all output network devices with provided type and name hashes using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number.", - "example": "lbn r? deviceHash nameHash logicType batchMode" - }, - "sbn": { - "desc": "Stores register value to LogicType on all output network devices with provided type hash and name.", - "example": "sbn deviceHash nameHash logicType r?" - }, - "lbns": { - "desc": "Loads LogicSlotType from slotIndex from all output network devices with provided type and name hashes using the provide batch mode. Average (0), Sum (1), Minimum (2), Maximum (3). Can use either the word, or the number.", - "example": "lbns r? deviceHash nameHash slotIndex logicSlotType batchMode" - }, - "ss": { - "desc": "Stores register value to device stored in a slot LogicSlotType on device.", - "example": "ss d? slotIndex logicSlotType r?" - }, - "sbs": { - "desc": "Stores register value to LogicSlotType on all output network devices with provided type hash in the provided slot.", - "example": "sbs deviceHash slotIndex logicSlotType r?" - }, - "srl": { - "desc": "Performs a bitwise logical right shift operation on the binary representation of a value. It shifts the bits to the right and fills the vacated leftmost bits with zeros", - "example": "srl r? a(r?|num) b(r?|num)" - }, - "sra": { - "desc": "Performs a bitwise arithmetic right shift operation on the binary representation of a value. It shifts the bits to the right and fills the vacated leftmost bits with a copy of the sign bit (the most significant bit).", - "example": "sra r? a(r?|num) b(r?|num)" - }, - "sll": { - "desc": "Performs a bitwise logical left shift operation on the binary representation of a value. It shifts the bits to the left and fills the vacated rightmost bits with zeros.", - "example": "sll r? a(r?|num) b(r?|num)" - }, - "sla": { - "desc": "Performs a bitwise arithmetic left shift operation on the binary representation of a value. It shifts the bits to the left and fills the vacated rightmost bits with a copy of the sign bit (the most significant bit).", - "example": "sla r? a(r?|num) b(r?|num)" - }, - "not": { - "desc": "Performs a bitwise logical NOT operation flipping each bit of the input value, resulting in a binary complement. If a bit is 1, it becomes 0, and if a bit is 0, it becomes 1.", - "example": "not r? a(r?|num)" - }, - "ld": { - "desc": "Loads device LogicType to register by direct ID reference.", - "example": "ld r? id(r?|num) logicType" - }, - "sd": { - "desc": "Stores register value to LogicType on device by direct ID reference.", - "example": "sd id(r?|num) logicType r?" - }, - "poke": { - "desc": "Stores the provided value at the provided address in the stack.", - "example": "poke address(r?|num) value(r?|num)" - }, - "getd": { - "desc": "Seeks directly for the provided device id, attempts to read the stack value at the provided address, and places it in the register.", - "example": "getd r? id(r?|num) address(r?|num)" - }, - "putd": { - "desc": "Seeks directly for the provided device id, attempts to write the provided value to the stack at the provided address.", - "example": "putd id(r?|num) address(r?|num) value(r?|num)" - }, - "get": { - "desc": "Using the provided device, attempts to read the stack value at the provided address, and places it in the register.", - "example": "get r? d? address(r?|num)" - }, - "put": { - "desc": "Using the provided device, attempts to write the provided value to the stack at the provided address.", - "example": "put d? address(r?|num) value(r?|num)" - }, - "clr": { - "desc": "Clears the stack memory for the provided device.", - "example": "clr d?" - } - } -} \ No newline at end of file diff --git a/www/data/database.json b/www/data/database.json deleted file mode 100644 index f37f96b..0000000 --- a/www/data/database.json +++ /dev/null @@ -1,46799 +0,0 @@ -{ - "db": { - "AccessCardBlack": { - "desc": "", - "hash": -1330388999, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardBlack", - "receiver": false, - "title": "Access Card (Black)", - "transmitter": false - }, - "AccessCardBlue": { - "desc": "", - "hash": -1411327657, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardBlue", - "receiver": false, - "title": "Access Card (Blue)", - "transmitter": false - }, - "AccessCardBrown": { - "desc": "", - "hash": 1412428165, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardBrown", - "receiver": false, - "title": "Access Card (Brown)", - "transmitter": false - }, - "AccessCardGray": { - "desc": "", - "hash": -1339479035, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardGray", - "receiver": false, - "title": "Access Card (Gray)", - "transmitter": false - }, - "AccessCardGreen": { - "desc": "", - "hash": -374567952, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardGreen", - "receiver": false, - "title": "Access Card (Green)", - "transmitter": false - }, - "AccessCardKhaki": { - "desc": "", - "hash": 337035771, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardKhaki", - "receiver": false, - "title": "Access Card (Khaki)", - "transmitter": false - }, - "AccessCardOrange": { - "desc": "", - "hash": -332896929, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardOrange", - "receiver": false, - "title": "Access Card (Orange)", - "transmitter": false - }, - "AccessCardPink": { - "desc": "", - "hash": 431317557, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardPink", - "receiver": false, - "title": "Access Card (Pink)", - "transmitter": false - }, - "AccessCardPurple": { - "desc": "", - "hash": 459843265, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardPurple", - "receiver": false, - "title": "Access Card (Purple)", - "transmitter": false - }, - "AccessCardRed": { - "desc": "", - "hash": -1713748313, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardRed", - "receiver": false, - "title": "Access Card (Red)", - "transmitter": false - }, - "AccessCardWhite": { - "desc": "", - "hash": 2079959157, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardWhite", - "receiver": false, - "title": "Access Card (White)", - "transmitter": false - }, - "AccessCardYellow": { - "desc": "", - "hash": 568932536, - "item": { - "slotclass": "AccessCard", - "sorting": "Default" - }, - "name": "AccessCardYellow", - "receiver": false, - "title": "Access Card (Yellow)", - "transmitter": false - }, - "ApplianceChemistryStation": { - "desc": "", - "hash": 1365789392, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "ApplianceChemistryStation", - "receiver": false, - "slots": [ - { - "name": "Output", - "typ": "None" - } - ], - "title": "Chemistry Station", - "transmitter": false - }, - "ApplianceDeskLampLeft": { - "desc": "", - "hash": -1683849799, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "ApplianceDeskLampLeft", - "receiver": false, - "title": "Appliance Desk Lamp Left", - "transmitter": false - }, - "ApplianceDeskLampRight": { - "desc": "", - "hash": 1174360780, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "ApplianceDeskLampRight", - "receiver": false, - "title": "Appliance Desk Lamp Right", - "transmitter": false - }, - "ApplianceMicrowave": { - "desc": "While countless 'better' ways of cooking Food have been invented in the last few hundred years, few are as durable or easy to fabricate as the OK-Zoomer microwave. Licensed from Xigo, the plans are based on a classic model from the mid-21st century, giving it a charmingly retro feel. But don't worry, it oscillates Water molecules more than adequately. \nJust bolt it to a Powered Bench using a Wrench to power it, follow the recipe, and you're cooking.", - "hash": -1136173965, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "ApplianceMicrowave", - "receiver": false, - "slots": [ - { - "name": "Output", - "typ": "None" - } - ], - "title": "Microwave", - "transmitter": false - }, - "AppliancePackagingMachine": { - "desc": "The Xigo Cannifier requires Empty Can and cooked food to create long-lasting, easily stored sustenance. Note that the Cannifier must be bolted to a Powered Bench for power, and only accepts cooked food and tin cans.\n\nOPERATION\n\n1. Add the correct ingredients to the device via the hopper in the TOP.\n\n2. Close the device using the dropdown handle.\n\n3. Activate the device.\n\n4. Remove canned goods from the outlet in the FRONT.\n\nNote: the Cannifier will flash an error on its activation switch if you attempt to activate it before closing it.\n\n\n ", - "hash": -749191906, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "AppliancePackagingMachine", - "receiver": false, - "slots": [ - { - "name": "Export", - "typ": "None" - } - ], - "title": "Basic Packaging Machine", - "transmitter": false - }, - "AppliancePaintMixer": { - "desc": "", - "hash": -1339716113, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "AppliancePaintMixer", - "receiver": false, - "slots": [ - { - "name": "Output", - "typ": "Bottle" - } - ], - "title": "Paint Mixer", - "transmitter": false - }, - "AppliancePlantGeneticAnalyzer": { - "desc": "The Genetic Analyzer can be used to process samples from the Plant Sampler. Once processed, the genetic information of the sampled plant can be viewed by clicking on the search button.\n\nIndividual Gene Value Widgets: \nMost gene values will appear as a sliding bar between a minimum value on the left and a maximum value on the right. The actual value of the gene is in the middle of the bar, in orange.\n\nMultiple Gene Value Widgets: \nFor temperature and pressure ranges, four genes appear on the same widget. The orange values underneath the bar are the minimum and maximum thresholds for growth. Outside of this range, the plant will stop growing and eventually die. The blue values underneath the bar are the minimum and maximum thresholds for ideal growth. Inside of this range, the plant will grow at maximum speed. The white values above the bar are the minimum and maximum achievable values for the growth threshold.", - "hash": -1303038067, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "AppliancePlantGeneticAnalyzer", - "receiver": false, - "slots": [ - { - "name": "Input", - "typ": "Tool" - } - ], - "title": "Plant Genetic Analyzer", - "transmitter": false - }, - "AppliancePlantGeneticSplicer": { - "desc": "The Genetic Splicer can be used to copy a single gene from one 'source' plant to another 'target' plant of the same type. After copying, the source plant will be destroyed.\n \nTo begin splicing, place a plant or seed bag in the left slot (source) and place another plant or seed bag of the same type in the right slot (target). You can select a gene using the arrow buttons. Close the sliding door and press the green activate button. Once splicing has begun, the device will be locked until the process has finished (which will take approximately twenty minutes). If you want to cancel splicing you can power off the bench or detach the appliance as a last resort.", - "hash": -1094868323, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "AppliancePlantGeneticSplicer", - "receiver": false, - "slots": [ - { - "name": "Source Plant", - "typ": "Plant" - }, - { - "name": "Target Plant", - "typ": "Plant" - } - ], - "title": "Plant Genetic Splicer", - "transmitter": false - }, - "AppliancePlantGeneticStabilizer": { - "desc": "The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize.\nStabilize: Increases all genes stability by 50%.\nDestabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%.\n ", - "hash": 871432335, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "modes": { - "0": "Stabilize", - "1": "Destabilize" - }, - "name": "AppliancePlantGeneticStabilizer", - "receiver": false, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - } - ], - "title": "Plant Genetic Stabilizer", - "transmitter": false - }, - "ApplianceReagentProcessor": { - "desc": "Sitting somewhere between a high powered juicer and an alchemist's alembic, the Xigo reagent processor turns certain raw materials and food items into cooking and crafting ingredients. Indispensible in any space kitchen, just bolt it to the bench, and you're ready to go.", - "hash": 1260918085, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "ApplianceReagentProcessor", - "receiver": false, - "slots": [ - { - "name": "Input", - "typ": "None" - }, - { - "name": "Output", - "typ": "None" - } - ], - "title": "Reagent Processor", - "transmitter": false - }, - "ApplianceSeedTray": { - "desc": "The seed tray can hold up to twelve plants or seeds and can be used to facilitate fast experimentation and testing of plant genetics.", - "hash": 142831994, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "ApplianceSeedTray", - "receiver": false, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - } - ], - "title": "Appliance Seed Tray", - "transmitter": false - }, - "ApplianceTabletDock": { - "desc": "", - "hash": 1853941363, - "item": { - "slotclass": "Appliance", - "sorting": "Appliances" - }, - "name": "ApplianceTabletDock", - "receiver": false, - "slots": [ - { - "name": "Tablet", - "typ": "Tool" - } - ], - "title": "Tablet Dock", - "transmitter": false - }, - "AutolathePrinterMod": { - "desc": "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "hash": 221058307, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "AutolathePrinterMod", - "receiver": false, - "title": "Autolathe Printer Mod", - "transmitter": false - }, - "Battery_Wireless_cell": { - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "hash": -462415758, - "item": { - "slotclass": "Battery", - "sorting": "Default" - }, - "logic": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "Battery_Wireless_cell", - "receiver": false, - "title": "Battery Wireless Cell", - "transmitter": false - }, - "Battery_Wireless_cell_Big": { - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "hash": -41519077, - "item": { - "slotclass": "Battery", - "sorting": "Default" - }, - "logic": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "Battery_Wireless_cell_Big", - "receiver": false, - "title": "Battery Wireless Cell (Big)", - "transmitter": false - }, - "CardboardBox": { - "desc": "", - "hash": -1976947556, - "item": { - "slotclass": "None", - "sorting": "Storage" - }, - "name": "CardboardBox", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Cardboard Box", - "transmitter": false - }, - "CartridgeAccessController": { - "desc": "", - "hash": -1634532552, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeAccessController", - "receiver": false, - "title": "Cartridge (Access Controller)", - "transmitter": false - }, - "CartridgeAtmosAnalyser": { - "desc": "The Lorenz atmos analyzer is a multi-functional mass-spectrometer designed by ExMin for use with the OreCore Handheld Tablet. It displays the pressure, concentration and molar quantity of gas in rooms, tanks, or pipe networks.", - "hash": -1550278665, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeAtmosAnalyser", - "receiver": false, - "title": "Atmos Analyzer", - "transmitter": false - }, - "CartridgeConfiguration": { - "desc": "", - "hash": -932136011, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeConfiguration", - "receiver": false, - "title": "Configuration", - "transmitter": false - }, - "CartridgeElectronicReader": { - "desc": "", - "hash": -1462180176, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeElectronicReader", - "receiver": false, - "title": "eReader", - "transmitter": false - }, - "CartridgeGPS": { - "desc": "", - "hash": -1957063345, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeGPS", - "receiver": false, - "title": "GPS", - "transmitter": false - }, - "CartridgeGuide": { - "desc": "", - "hash": 872720793, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeGuide", - "receiver": false, - "title": "Guide", - "transmitter": false - }, - "CartridgeMedicalAnalyser": { - "desc": "When added to the OreCore Handheld Tablet, Asura's's ReadyMed medical analyzer reveals the health, or otherwise, of users various organs. Due to a design flaw, older models were notorious for producing quasar-like levels of x-ray radiation. Recent advances in shielding have more than halved the risk to users.", - "hash": -1116110181, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeMedicalAnalyser", - "receiver": false, - "title": "Medical Analyzer", - "transmitter": false - }, - "CartridgeNetworkAnalyser": { - "desc": "A minor masterpiece of micro-electronic engineering, the network analyzer displays the current, voltage and wattage of a cable network, as well as any devices connected to it. Based on a widely-copied Sinotai design, it's used in conjunction with the OreCore Handheld Tablet.", - "hash": 1606989119, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeNetworkAnalyser", - "receiver": false, - "title": "Network Analyzer", - "transmitter": false - }, - "CartridgeOreScanner": { - "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet.", - "hash": -1768732546, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeOreScanner", - "receiver": false, - "title": "Ore Scanner", - "transmitter": false - }, - "CartridgeOreScannerColor": { - "desc": "When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet.", - "hash": 1738236580, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeOreScannerColor", - "receiver": false, - "title": "Ore Scanner (Color)", - "transmitter": false - }, - "CartridgePlantAnalyser": { - "desc": "", - "hash": 1101328282, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgePlantAnalyser", - "receiver": false, - "title": "Cartridge Plant Analyser", - "transmitter": false - }, - "CartridgeTracker": { - "desc": "", - "hash": 81488783, - "item": { - "slotclass": "Cartridge", - "sorting": "Default" - }, - "name": "CartridgeTracker", - "receiver": false, - "title": "Tracker", - "transmitter": false - }, - "CircuitboardAdvAirlockControl": { - "desc": "", - "hash": 1633663176, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardAdvAirlockControl", - "receiver": false, - "title": "Advanced Airlock", - "transmitter": false - }, - "CircuitboardAirControl": { - "desc": "When added to a Console, air control circuit boards allow you to program an Active Vent. As with small dogs and 83% of people, air control circuits have only three modes: Pressure, Draft and Offline. Pressure mode maintains a 100kPa atmosphere, switching the active vent between inward and outward flow until target pressure is achieved. Draft mode allows you to pair active vents to circulate air. Offline mode deactivates the vent. ", - "hash": 1618019559, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardAirControl", - "receiver": false, - "title": "Air Control", - "transmitter": false - }, - "CircuitboardAirlockControl": { - "desc": "Rumored to have been first sketched on a Norsec toilet wall by a disgruntled engineer, the Exgress airlock control circuit board\u00e2\u20ac\u2122s versatility and ease of fabrication has made it the Stationeers control system of choice for Airlock cycling protocols. \n\nTo enter setup mode, insert the board into a Console along with a data disk. In this mode, you can see all data-accessible objects currently connected to the Console. Doors, lights, gas sensors and slave consoles can be selected (highlighted green), and will be controlled once the data disk is removed.", - "hash": 912176135, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardAirlockControl", - "receiver": false, - "title": "Airlock", - "transmitter": false - }, - "CircuitboardCameraDisplay": { - "desc": "Surveillance is sometimes necessary when building bases in highly hostile environments. The camera display circuit board allows wary Stationeers to turn a Console into a security display when connected to a Camera.", - "hash": -412104504, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardCameraDisplay", - "receiver": false, - "title": "Camera Display", - "transmitter": false - }, - "CircuitboardDoorControl": { - "desc": "A basic tool of Stationeer base construction, this circuit board provides a way to open and close a Composite Door, Blast Door or Glass Door remotely, when connected to a Console. This system can be further linked to Motion Sensor to create automatic doors.", - "hash": 855694771, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardDoorControl", - "receiver": false, - "title": "Door Control", - "transmitter": false - }, - "CircuitboardGasDisplay": { - "desc": "Information is power. Place this circuitboard into a Console to create a display that shows gas pressure or temperature of any connected tank, storage cannister, Kit (Pipe Analyzer) or Kit (Gas Sensor).", - "hash": -82343730, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardGasDisplay", - "receiver": false, - "title": "Gas Display", - "transmitter": false - }, - "CircuitboardGraphDisplay": { - "desc": "", - "hash": 1344368806, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardGraphDisplay", - "receiver": false, - "title": "Graph Display", - "transmitter": false - }, - "CircuitboardHashDisplay": { - "desc": "", - "hash": 1633074601, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardHashDisplay", - "receiver": false, - "title": "Hash Display", - "transmitter": false - }, - "CircuitboardModeControl": { - "desc": "Can't decide which mode you love most? This circuit board allows you to switch any connected device between operation modes.", - "hash": -1134148135, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardModeControl", - "receiver": false, - "title": "Mode Control", - "transmitter": false - }, - "CircuitboardPowerControl": { - "desc": "Under distant suns and demanding environments, Stationeer systems need to balance reliability, resilience and versatility. The power control board allows remote enabling and disabling of selected devices, disconnecting manual operation. \n \nThe circuit board has two modes: 'Link' switches all devices on or off; 'Toggle' switches each device to their alternate state. ", - "hash": -1923778429, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardPowerControl", - "receiver": false, - "title": "Power Control", - "transmitter": false - }, - "CircuitboardShipDisplay": { - "desc": "When the original Stationeer Handbook collapsed under its own weight into a singularity, certain information was irretrievably lost. Amongst this mysterious corpus of knowledge is the exact purpose of the ship display board.", - "hash": -2044446819, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardShipDisplay", - "receiver": false, - "title": "Ship Display", - "transmitter": false - }, - "CircuitboardSolarControl": { - "desc": "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel.", - "hash": 2020180320, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "CircuitboardSolarControl", - "receiver": false, - "title": "Solar Control", - "transmitter": false - }, - "CompositeRollCover": { - "desc": "0.Operate\n1.Logic", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1228794916, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "CompositeRollCover", - "receiver": false, - "title": "Composite Roll Cover", - "transmitter": false - }, - "CrateMkII": { - "desc": "A more heavily reinforced version of the iconic Dynamic Crate, the Crate Mk II is resistant to incredibly high pressures and temperatures. Short of disposing of it in a black hole, the Mk II is about as safe as luggage gets.", - "hash": 8709219, - "item": { - "slotclass": "None", - "sorting": "Storage" - }, - "name": "CrateMkII", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Crate Mk II", - "transmitter": false - }, - "DecayedFood": { - "desc": "When your food decays, it turns into this. ODA scientists have attempted to determine the exact constituents of this substance, but it remains evasive and mysterious. Suffice to say, eating it is a bad idea. Research has determined, however, that The exact speed of decay varies individually by:\n\n- TEMPERATURE - Refrigeration will slow decay, but many foods will be damaged by exposure to extreme low pressure, as well as extreme heat. The optimum temperature is 0 kelvin (-272 C).\n\n- FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance.\n\n- PRESSURE - Food decays faster when the pressure drops below 1 atmosphere (101kPa). Decay happens exponentially more quickly as the atmosphere approaches a perfect vacuum. There is no effect from higher pressures. \n\n- ATMOSPHERE - Different gases can slow and accelerate the decay process. The process will take account of respective gas ratios in mixed atmospheres in calculating the decay modifier. The following rates apply across all foods:\n\n> Oxygen x 1.3\n> Nitrogen x 0.6\n> Carbon Dioxide x 0.8\n> Volatiles x 1\n> Pollutant x 3\n> Nitrous Oxide x 1.5\n> Steam x 2\n> Vacuum (see PRESSURE above)\n\n", - "hash": 1531087544, - "item": { - "maxquantity": 25, - "slotclass": "None", - "sorting": "Default" - }, - "name": "DecayedFood", - "receiver": false, - "title": "Decayed Food", - "transmitter": false - }, - "DeviceLfoVolume": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "The low frequency oscillator (or LFO) makes everything sound dark, twisted and crunchy by altering the shape of the waves output by a Logic Step Sequencer.\n \nTo set up an LFO:\n\n1. Place the LFO unit\n2. Set the LFO output to a Passive Speaker\n2. Set a sequencers' output to LFO - so the sequencer's signal runs through the LFO to a speaker.\n3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO.\n4. Use another logic writer to write the BPM to the LFO.\n5. You are ready. This is the future. You're in space. Make it sound cool.\n\nFor more info, check out the music page.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -1844430312, - "logic": { - "Activate": "ReadWrite", - "Bpm": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Time": "ReadWrite" - }, - "modes": { - "0": "Whole Note", - "1": "Half Note", - "2": "Quarter Note", - "3": "Eighth Note", - "4": "Sixteenth Note" - }, - "name": "DeviceLfoVolume", - "receiver": false, - "title": "Low frequency oscillator", - "transmitter": false - }, - "DeviceStepUnit": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "0.C-2\n1.C#-2\n2.D-2\n3.D#-2\n4.E-2\n5.F-2\n6.F#-2\n7.G-2\n8.G#-2\n9.A-2\n10.A#-2\n11.B-2\n12.C-1\n13.C#-1\n14.D-1\n15.D#-1\n16.E-1\n17.F-1\n18.F#-1\n19.G-1\n20.G#-1\n21.A-1\n22.A#-1\n23.B-1\n24.C0\n25.C#0\n26.D0\n27.D#0\n28.E0\n29.F0\n30.F#0\n31.G0\n32.G#0\n33.A0\n34.A#0\n35.B0\n36.C1\n37.C#1\n38.D1\n39.D#1\n40.E1\n41.F1\n42.F#1\n43.G1\n44.G#1\n45.A1\n46.A#1\n47.B1\n48.C2\n49.C#2\n50.D2\n51.D#2\n52.E2\n53.F2\n54.F#2\n55.G2\n56.G#2\n57.A2\n58.A#2\n59.B2\n60.C3\n61.C#3\n62.D3\n63.D#3\n64.E3\n65.F3\n66.F#3\n67.G3\n68.G#3\n69.A3\n70.A#3\n71.B3\n72.C4\n73.C#4\n74.D4\n75.D#4\n76.E4\n77.F4\n78.F#4\n79.G4\n80.G#4\n81.A4\n82.A#4\n83.B4\n84.C5\n85.C#5\n86.D5\n87.D#5\n88.E5\n89.F5\n90.F#5\n91.G5 \n92.G#5\n93.A5\n94.A#5\n95.B5\n96.C6\n97.C#6\n98.D6\n99.D#6\n100.E6\n101.F6\n102.F#6\n103.G6\n104.G#6\n105.A6\n106.A#6\n107.B6\n108.C7\n109.C#7\n110.D7\n111.D#7\n112.E7\n113.F7\n114.F#7\n115.G7\n116.G#7\n117.A7\n118.A#7\n119.B7\n120.C8\n121.C#8\n122.D8\n123.D#8\n124.E8\n125.F8\n126.F#8\n127.G8", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1762696475, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Volume": "ReadWrite" - }, - "modes": { - "0": "C-2", - "1": "C#-2", - "2": "D-2", - "3": "D#-2", - "4": "E-2", - "5": "F-2", - "6": "F#-2", - "7": "G-2", - "8": "G#-2", - "9": "A-2", - "10": "A#-2", - "11": "B-2", - "12": "C-1", - "13": "C#-1", - "14": "D-1", - "15": "D#-1", - "16": "E-1", - "17": "F-1", - "18": "F#-1", - "19": "G-1", - "20": "G#-1", - "21": "A-1", - "22": "A#-1", - "23": "B-1", - "24": "C0", - "25": "C#0", - "26": "D0", - "27": "D#0", - "28": "E0", - "29": "F0", - "30": "F#0", - "31": "G0", - "32": "G#0", - "33": "A0", - "34": "A#0", - "35": "B0", - "36": "C1", - "37": "C#1", - "38": "D1", - "39": "D#1", - "40": "E1", - "41": "F1", - "42": "F#1", - "43": "G1", - "44": "G#1", - "45": "A1", - "46": "A#1", - "47": "B1", - "48": "C2", - "49": "C#2", - "50": "D2", - "51": "D#2", - "52": "E2", - "53": "F2", - "54": "F#2", - "55": "G2", - "56": "G#2", - "57": "A2", - "58": "A#2", - "59": "B2", - "60": "C3", - "61": "C#3", - "62": "D3", - "63": "D#3", - "64": "E3", - "65": "F3", - "66": "F#3", - "67": "G3", - "68": "G#3", - "69": "A3", - "70": "A#3", - "71": "B3", - "72": "C4", - "73": "C#4", - "74": "D4", - "75": "D#4", - "76": "E4", - "77": "F4", - "78": "F#4", - "79": "G4", - "80": "G#4", - "81": "A4", - "82": "A#4", - "83": "B4", - "84": "C5", - "85": "C#5", - "86": "D5", - "87": "D#5", - "88": "E5", - "89": "F5", - "90": "F#5", - "91": "G5 ", - "92": "G#5", - "93": "A5", - "94": "A#5", - "95": "B5", - "96": "C6", - "97": "C#6", - "98": "D6", - "99": "D#6", - "100": "E6", - "101": "F6", - "102": "F#6", - "103": "G6", - "104": "G#6", - "105": "A6", - "106": "A#6", - "107": "B6", - "108": "C7", - "109": "C#7", - "110": "D7", - "111": "D#7", - "112": "E7", - "113": "F7", - "114": "F#7", - "115": "G7", - "116": "G#7", - "117": "A7", - "118": "A#7", - "119": "B7", - "120": "C8", - "121": "C#8", - "122": "D8", - "123": "D#8", - "124": "E8", - "125": "F8", - "126": "F#8", - "127": "G8" - }, - "name": "DeviceStepUnit", - "receiver": false, - "title": "Device Step Unit", - "transmitter": false - }, - "DynamicAirConditioner": { - "desc": "The Sinotai-designed Huxi portable air conditioner cools by drawing heat from the atmosphere and storing it, or adding heat to the atmosphere from its internal tank. With a max internal pressure of 8106kPa, its capacity is relatively limited, physics being clear on this subject. To extend its temperature storage ability, bolt the Huxi to a Tank Connector, then connect it to a pipe network supplying hot or cold gases.", - "hash": 519913639, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "modes": { - "0": "Cold", - "1": "Hot" - }, - "name": "DynamicAirConditioner", - "receiver": false, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Portable Air Conditioner", - "transmitter": false - }, - "DynamicCrate": { - "desc": "The humble dynamic crate has become a symbol of Stationeer invention and independence. With twelve slots and handles at either end for ease of carriage, it's both standard issue and critical kit for cadets and Commanders alike.", - "hash": 1941079206, - "item": { - "slotclass": "None", - "sorting": "Storage" - }, - "name": "DynamicCrate", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Dynamic Crate", - "transmitter": false - }, - "DynamicGPR": { - "desc": "DynamicGPR", - "hash": -2085885850, - "item": { - "slotclass": "None", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "DynamicGPR", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "DynamicGPR", - "transmitter": false - }, - "DynamicGasCanisterAir": { - "desc": "Portable gas tanks do one thing: store gas. But there's lots you can do with them. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere. They also attach to rovers and rockets. Alternatively, kick it over and practice barrel rolling. The possibilities are endless.", - "hash": -1713611165, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "name": "DynamicGasCanisterAir", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank (Air)", - "transmitter": false - }, - "DynamicGasCanisterCarbonDioxide": { - "desc": "Portable gas tanks do one thing: store gas. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or ... boom. Once it's full, you can refill a Canister (CO2) by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere ... of sorts.", - "hash": -322413931, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicGasCanisterCarbonDioxide", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank (CO2)", - "transmitter": false - }, - "DynamicGasCanisterEmpty": { - "desc": "Portable gas tanks store gas. To refill one, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it's full, you can refill a Canister by attaching it to the tank's striped section. Or you could vent the tank's variable flow rate valve into a room and create an atmosphere.", - "hash": -1741267161, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicGasCanisterEmpty", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank", - "transmitter": false - }, - "DynamicGasCanisterFuel": { - "desc": "Portable tanks store gas. They're good at it. If you need to refill a tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or things get messy. You can refill a Canister (Fuel) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later. It's really up to you.", - "hash": -817051527, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicGasCanisterFuel", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank (Fuel)", - "transmitter": false - }, - "DynamicGasCanisterNitrogen": { - "desc": "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll end up with Nitrogen in places you weren't expecting. You can refill a Canister (Nitrogen) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rover or rocket for later.", - "hash": 121951301, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicGasCanisterNitrogen", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank (Nitrogen)", - "transmitter": false - }, - "DynamicGasCanisterNitrousOxide": { - "desc": "", - "hash": 30727200, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicGasCanisterNitrousOxide", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank (Nitrous Oxide)", - "transmitter": false - }, - "DynamicGasCanisterOxygen": { - "desc": "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you'll be picking tank shards out of your face. You can refill a Canister (Oxygen) by attaching it to the tank's striped section. Or you could vent it into a sealed room to create an atmosphere. Or even paint it pink, call it Steve and fill that sad space in your heart.", - "hash": 1360925836, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicGasCanisterOxygen", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank (Oxygen)", - "transmitter": false - }, - "DynamicGasCanisterPollutants": { - "desc": "", - "hash": 396065382, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicGasCanisterPollutants", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank (Pollutants)", - "transmitter": false - }, - "DynamicGasCanisterRocketFuel": { - "desc": "", - "hash": -8883951, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicGasCanisterRocketFuel", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Dynamic Gas Canister Rocket Fuel", - "transmitter": false - }, - "DynamicGasCanisterVolatiles": { - "desc": "Portable tanks store gas. To refill one, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Don't fill it above 10 MPa, unless you're the sort who loves complicated, flammable emergencies. You can refill a Canister (Volatiles) by attaching it to the tank's striped section. Or you could use a Wrench to attach to a rocket and show it around the Solar System.", - "hash": 108086870, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicGasCanisterVolatiles", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank (Volatiles)", - "transmitter": false - }, - "DynamicGasCanisterWater": { - "desc": "This portable tank stores liquid, and liquid only. You just have to fill it up. To do this, bolt one to a Kit (Tank Connector) using a Wrench, then connect it to Liquid Pipe (Straight) to supply liquid to a network. \nTry to keep pressure under 10 MPa, or you'll end up wet, hurt and sorry, without any of the fun.\nYou can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", - "hash": 197293625, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "name": "DynamicGasCanisterWater", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "LiquidCanister" - } - ], - "title": "Portable Liquid Tank (Water)", - "transmitter": false - }, - "DynamicGasTankAdvanced": { - "desc": "0.Mode0\n1.Mode1", - "hash": -386375420, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "DynamicGasTankAdvanced", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Gas Tank Mk II", - "transmitter": false - }, - "DynamicGasTankAdvancedOxygen": { - "desc": "0.Mode0\n1.Mode1", - "hash": -1264455519, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "DynamicGasTankAdvancedOxygen", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "None" - } - ], - "title": "Portable Gas Tank Mk II (Oxygen)", - "transmitter": false - }, - "DynamicGenerator": { - "desc": "Every Stationeer's best friend, the portable generator gets you up and running, fast. Fill it with a Canister (Fuel) to power up and charge a Battery Cell (Small), or attach it to a Power Connector to link it into your electrical network. It's pressure driven, so functions more efficiently at lower temperatures, and REALLY efficiently if supercooled. Perfecting your fuel mix also makes a big difference.", - "hash": -82087220, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "name": "DynamicGenerator", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - }, - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Portable Generator", - "transmitter": false - }, - "DynamicHydroponics": { - "desc": "", - "hash": 587726607, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "name": "DynamicHydroponics", - "receiver": false, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - }, - { - "name": "Liquid Canister", - "typ": "Plant" - }, - { - "name": "Liquid Canister", - "typ": "Plant" - }, - { - "name": "Liquid Canister", - "typ": "Plant" - }, - { - "name": "Liquid Canister", - "typ": "Plant" - } - ], - "title": "Portable Hydroponics", - "transmitter": false - }, - "DynamicLight": { - "desc": "Philippe Starck might not applaud, but this battery-powered light source undarkens the corners when illumination's lacking. Powered by any battery, it's a 'no-frills' Xigo design that can be cheaply fabricated with the minimum of fuss. Unless you like fuss. In which case, fuss all you like.", - "hash": -21970188, - "item": { - "slotclass": "None", - "sorting": "Tools" - }, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "DynamicLight", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Portable Light", - "transmitter": false - }, - "DynamicLiquidCanisterEmpty": { - "desc": "This portable tank stores liquid, and liquid only. You can bolt one to a Kit (Liquid Tank Connector) using a Wrench, then connect it to a pipe network to refill it. You can refill a Liquid Canister (Water) by attaching it to the tank's striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself.", - "hash": -1939209112, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "name": "DynamicLiquidCanisterEmpty", - "receiver": false, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ], - "title": "Portable Liquid Tank", - "transmitter": false - }, - "DynamicMKIILiquidCanisterEmpty": { - "desc": "An empty, insulated liquid Gas Canister.", - "hash": 2130739600, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "name": "DynamicMKIILiquidCanisterEmpty", - "receiver": false, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ], - "title": "Portable Liquid Tank Mk II", - "transmitter": false - }, - "DynamicMKIILiquidCanisterWater": { - "desc": "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature.", - "hash": -319510386, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "name": "DynamicMKIILiquidCanisterWater", - "receiver": false, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ], - "title": "Portable Liquid Tank Mk II (Water)", - "transmitter": false - }, - "DynamicScrubber": { - "desc": "A portable scrubber does just what it sounds like: removes specific substances from the air. For instance, attaching a Filter (Carbon Dioxide) will pull Carbon Dioxide from the surrounding atmosphere. Note that the scrubber has room for one battery and two filters, which will double its operating speed. Neat. When it reaches an internal pressure of 8106kPA, an error signal will flash on the switch, indicating it needs to be emptied. Either vent it directly, or attach it to a pipe network via a Kit (Tank Connector) and a Wrench.", - "hash": 755048589, - "item": { - "slotclass": "None", - "sorting": "Atmospherics" - }, - "name": "DynamicScrubber", - "receiver": false, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Gas Filter", - "typ": "GasFilter" - }, - { - "name": "Gas Filter", - "typ": "GasFilter" - } - ], - "title": "Portable Air Scrubber", - "transmitter": false - }, - "DynamicSkeleton": { - "desc": "", - "hash": 106953348, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "DynamicSkeleton", - "receiver": false, - "title": "Skeleton", - "transmitter": false - }, - "ElectronicPrinterMod": { - "desc": "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "hash": -311170652, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ElectronicPrinterMod", - "receiver": false, - "title": "Electronic Printer Mod", - "transmitter": false - }, - "ElevatorCarrage": { - "desc": "", - "hash": -110788403, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ElevatorCarrage", - "receiver": false, - "title": "Elevator", - "transmitter": false - }, - "EntityChick": { - "desc": "Once a chick is hatched, it gets hungry. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", - "hash": 1730165908, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "EntityChick", - "receiver": false, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ], - "title": "Entity Chick", - "transmitter": false - }, - "EntityChickenBrown": { - "desc": "Like so many of its brethren, this is a chicken. A brown one. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", - "hash": 334097180, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "EntityChickenBrown", - "receiver": false, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ], - "title": "Entity Chicken Brown", - "transmitter": false - }, - "EntityChickenWhite": { - "desc": "It's a chicken, as white as moondust. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not.", - "hash": 1010807532, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "EntityChickenWhite", - "receiver": false, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ], - "title": "Entity Chicken White", - "transmitter": false - }, - "EntityRoosterBlack": { - "desc": "This is a rooster. It is black. There is dignity in this.", - "hash": 966959649, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "EntityRoosterBlack", - "receiver": false, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ], - "title": "Entity Rooster Black", - "transmitter": false - }, - "EntityRoosterBrown": { - "desc": "The common brown rooster. Don't let it hear you say that.", - "hash": -583103395, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "EntityRoosterBrown", - "receiver": false, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - } - ], - "title": "Entity Rooster Brown", - "transmitter": false - }, - "Fertilizer": { - "desc": "Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter.\nFertilizer's affects depend on its ingredients:\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for\n\nThe effect of these ingredients depends on their respective proportions in the composter when processing is activated. ", - "hash": 1517856652, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Default" - }, - "name": "Fertilizer", - "receiver": false, - "title": "Fertilizer", - "transmitter": false - }, - "FireArmSMG": { - "desc": "0.Single\n1.Auto", - "hash": -86315541, - "item": { - "slotclass": "None", - "sorting": "Tools" - }, - "modes": { - "0": "Single", - "1": "Auto" - }, - "name": "FireArmSMG", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "Magazine" - } - ], - "title": "Fire Arm SMG", - "transmitter": false - }, - "Flag_ODA_10m": { - "desc": "", - "hash": 1845441951, - "name": "Flag_ODA_10m", - "receiver": false, - "title": "Flag (ODA 10m)", - "transmitter": false - }, - "Flag_ODA_4m": { - "desc": "", - "hash": 1159126354, - "name": "Flag_ODA_4m", - "receiver": false, - "title": "Flag (ODA 4m)", - "transmitter": false - }, - "Flag_ODA_6m": { - "desc": "", - "hash": 1998634960, - "name": "Flag_ODA_6m", - "receiver": false, - "title": "Flag (ODA 6m)", - "transmitter": false - }, - "Flag_ODA_8m": { - "desc": "", - "hash": -375156130, - "name": "Flag_ODA_8m", - "receiver": false, - "title": "Flag (ODA 8m)", - "transmitter": false - }, - "FlareGun": { - "desc": "", - "hash": 118685786, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "FlareGun", - "receiver": false, - "slots": [ - { - "name": "Magazine", - "typ": "Flare" - }, - { - "name": "Chamber", - "typ": "Blocked" - } - ], - "title": "Flare Gun", - "transmitter": false - }, - "H2Combustor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Adapted slightly from its original Recurso design, the Volatiles Combustor does exactly what its name suggests - it burns a mixture of volatiles and Oxygen to create water. Extremely useful in hot or arid environments, users need to be aware that the combustor outputs considerable waste heat. The device is also less than perfectly efficient, resulting in the autoignition of volatiles in the chamber, and the production of waste gases which must be dealt with.", - "device": { - "atmosphere": true, - "pins": 2, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1840108251, - "logic": { - "Activate": "ReadWrite", - "Combustion": "Read", - "CombustionInput": "Read", - "CombustionOutput": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "PressureInput": "Read", - "PressureOutput": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrogenInput": "Read", - "RatioNitrogenOutput": "Read", - "RatioNitrousOxide": "Read", - "RatioNitrousOxideInput": "Read", - "RatioNitrousOxideOutput": "Read", - "RatioOxygen": "Read", - "RatioOxygenInput": "Read", - "RatioOxygenOutput": "Read", - "RatioPollutant": "Read", - "RatioPollutantInput": "Read", - "RatioPollutantOutput": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioVolatilesInput": "Read", - "RatioVolatilesOutput": "Read", - "RatioWater": "Read", - "RatioWaterInput": "Read", - "RatioWaterOutput": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TemperatureInput": "Read", - "TemperatureOutput": "Read", - "TotalMoles": "Read", - "TotalMolesInput": "Read", - "TotalMolesOutput": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "name": "H2Combustor", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "title": "H2 Combustor", - "transmitter": false - }, - "Handgun": { - "desc": "", - "hash": 247238062, - "item": { - "slotclass": "None", - "sorting": "Tools" - }, - "name": "Handgun", - "receiver": false, - "slots": [ - { - "name": "Magazine", - "typ": "Magazine" - } - ], - "title": "Handgun", - "transmitter": false - }, - "HandgunMagazine": { - "desc": "", - "hash": 1254383185, - "item": { - "slotclass": "Magazine", - "sorting": "Default" - }, - "name": "HandgunMagazine", - "receiver": false, - "title": "Handgun Magazine", - "transmitter": false - }, - "HumanSkull": { - "desc": "", - "hash": -857713709, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "HumanSkull", - "receiver": false, - "title": "Human Skull", - "transmitter": false - }, - "ImGuiCircuitboardAirlockControl": { - "desc": "", - "hash": -73796547, - "item": { - "slotclass": "Circuitboard", - "sorting": "Default" - }, - "name": "ImGuiCircuitboardAirlockControl", - "receiver": false, - "title": "Airlock (Experimental)", - "transmitter": false - }, - "ItemActiveVent": { - "desc": "When constructed, this kit places an Active Vent on any support structure.", - "hash": -842048328, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemActiveVent", - "receiver": false, - "title": "Kit (Active Vent)", - "transmitter": false - }, - "ItemAdhesiveInsulation": { - "desc": "", - "hash": 1871048978, - "item": { - "maxquantity": 20, - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemAdhesiveInsulation", - "receiver": false, - "title": "Adhesive Insulation", - "transmitter": false - }, - "ItemAdvancedTablet": { - "desc": "The advanced Xigo Padi 2 tablet is an improved version of the basic Handheld Tablet, boasting two cartridge slots. The Padi 2 accepts Atmos Analyzer, Tracker, Medical Analyzer, Ore Scanner, eReader, and various other cartridges.\n\t \n\t With a Integrated Circuit (IC10) in the Programmable Chip, you can access variable slots on the carrying human using the device numbers (d0, d1, etc...), so long as the item can be access via logic, such as the Hardsuit.Connects to Logic Transmitter", - "hash": 1722785341, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read", - "SoundAlert": "ReadWrite", - "Volume": "ReadWrite" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "ItemAdvancedTablet", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Cartridge", - "typ": "Cartridge" - }, - { - "name": "Cartridge1", - "typ": "Cartridge" - }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "title": "Advanced Tablet", - "transmitter": true - }, - "ItemAlienMushroom": { - "desc": "", - "hash": 176446172, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Default" - }, - "name": "ItemAlienMushroom", - "receiver": false, - "title": "Alien Mushroom", - "transmitter": false - }, - "ItemAmmoBox": { - "desc": "", - "hash": -9559091, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemAmmoBox", - "receiver": false, - "title": "Ammo Box", - "transmitter": false - }, - "ItemAngleGrinder": { - "desc": "Angles-be-gone with the trusty angle grinder.", - "hash": 201215010, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemAngleGrinder", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Angle Grinder", - "transmitter": false - }, - "ItemArcWelder": { - "desc": "", - "hash": 1385062886, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemArcWelder", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Arc Welder", - "transmitter": false - }, - "ItemAreaPowerControl": { - "desc": "This kit places a Area Power Control (APC) on any support structure. The APC kit has two options, selecting which direction you would like the APC power to flow.", - "hash": 1757673317, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemAreaPowerControl", - "receiver": false, - "title": "Kit (Power Controller)", - "transmitter": false - }, - "ItemAstroloyIngot": { - "desc": "Due to the original Stationeer manual collapsing into a singularity, Astroloy recipes have been warped by spacetime contortions. The correct Astroloy recipe, as memorialized for all time in a series of charming plastic icons, is 1.0 Copper, 1.0 Cobalt, and 2.0 Steel.", - "hash": 412924554, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Astroloy": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemAstroloyIngot", - "receiver": false, - "title": "Ingot (Astroloy)", - "transmitter": false - }, - "ItemAstroloySheets": { - "desc": "", - "hash": -1662476145, - "item": { - "maxquantity": 50, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemAstroloySheets", - "receiver": false, - "title": "Astroloy Sheets", - "transmitter": false - }, - "ItemAuthoringTool": { - "desc": "", - "hash": 789015045, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemAuthoringTool", - "receiver": false, - "title": "Authoring Tool", - "transmitter": false - }, - "ItemAuthoringToolRocketNetwork": { - "desc": "ItemAuthoringToolRocketNetwork", - "hash": -1731627004, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemAuthoringToolRocketNetwork", - "receiver": false, - "title": "ItemAuthoringToolRocketNetwork", - "transmitter": false - }, - "ItemBasketBall": { - "desc": "", - "hash": -1262580790, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemBasketBall", - "receiver": false, - "title": "Basket Ball", - "transmitter": false - }, - "ItemBatteryCell": { - "desc": "Harnessing a design pioneered in the early 21st century, the small battery cell is the Stationeer's basic unit of portable electrical power. While it lacks the charge of a Battery Cell (Large) or Battery Cell (Nuclear), it has the humble advantage of being fabricated from basic resources.\n\nPOWER OUTPUT\nThe small cell stores up to 36000 watts of power.", - "hash": 700133157, - "item": { - "slotclass": "Battery", - "sorting": "Default" - }, - "logic": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "ItemBatteryCell", - "receiver": false, - "title": "Battery Cell (Small)", - "transmitter": false - }, - "ItemBatteryCellLarge": { - "desc": "First mass-produced by Xigo in 2155 on the basis of a unattributed prototype, the classic silicon anode solid-state design extends its optimum temperature range.\n\nPOWER OUTPUT\nThe large power cell can discharge 288kW of power. \n", - "hash": -459827268, - "item": { - "slotclass": "Battery", - "sorting": "Default" - }, - "logic": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "ItemBatteryCellLarge", - "receiver": false, - "title": "Battery Cell (Large)", - "transmitter": false - }, - "ItemBatteryCellNuclear": { - "desc": "Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld.\n\nPOWER OUTPUT\nPushing the power-weight balance to its limits, the 'nuke' has a 2.3 megawatt charge (2304000W), reflecting its reliance on exotic superalloys.", - "hash": 544617306, - "item": { - "slotclass": "Battery", - "sorting": "Default" - }, - "logic": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "ItemBatteryCellNuclear", - "receiver": false, - "title": "Battery Cell (Nuclear)", - "transmitter": false - }, - "ItemBatteryCharger": { - "desc": "This kit produces a 5-slot Kit (Battery Charger).", - "hash": -1866880307, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemBatteryCharger", - "receiver": false, - "title": "Kit (Battery Charger)", - "transmitter": false - }, - "ItemBatteryChargerSmall": { - "desc": "", - "hash": 1008295833, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemBatteryChargerSmall", - "receiver": false, - "title": "Battery Charger Small", - "transmitter": false - }, - "ItemBeacon": { - "desc": "", - "hash": -869869491, - "item": { - "slotclass": "None", - "sorting": "Tools" - }, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemBeacon", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Tracking Beacon", - "transmitter": false - }, - "ItemBiomass": { - "desc": "Diced organic material that is returned when food and organic matter is passed through the Recycler and Centrifuge. Can be burned in a Furnace into Charcoal for use in the Generator (Solid Fuel).", - "hash": -831480639, - "item": { - "ingredient": true, - "maxquantity": 100, - "reagents": { - "Biomass": 1.0 - }, - "slotclass": "Ore", - "sorting": "Resources" - }, - "name": "ItemBiomass", - "receiver": false, - "title": "Biomass", - "transmitter": false - }, - "ItemBreadLoaf": { - "desc": "", - "hash": 893514943, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemBreadLoaf", - "receiver": false, - "title": "Bread Loaf", - "transmitter": false - }, - "ItemCableAnalyser": { - "desc": "", - "hash": -1792787349, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemCableAnalyser", - "receiver": false, - "title": "Kit (Cable Analyzer)", - "transmitter": false - }, - "ItemCableCoil": { - "desc": "Bodily metaphors are tired and anthropocentric, but it was Frida Stuppen, the first ODA Administrator, who said, 'Let the cabling be as the nerve and the vessel, transmitting power and data alike through systems we forge among the stars.' Later commentators suggested that she was simply putting a romantic gloss on a piece of dubious economy. Whatever the case, standard cabling is where any Stationeer's network begins. \nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "hash": -466050668, - "item": { - "maxquantity": 50, - "slotclass": "Tool", - "sorting": "Resources" - }, - "name": "ItemCableCoil", - "receiver": false, - "title": "Cable Coil", - "transmitter": false - }, - "ItemCableCoilHeavy": { - "desc": "Use heavy cable coil for power systems with large draws. Unlike StructureCableCoil, which can only safely conduct 5kW, heavy cables can transmit up to 100kW.", - "hash": 2060134443, - "item": { - "maxquantity": 50, - "slotclass": "Tool", - "sorting": "Resources" - }, - "name": "ItemCableCoilHeavy", - "receiver": false, - "title": "Cable Coil (Heavy)", - "transmitter": false - }, - "ItemCableFuse": { - "desc": "", - "hash": 195442047, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemCableFuse", - "receiver": false, - "title": "Kit (Cable Fuses)", - "transmitter": false - }, - "ItemCannedCondensedMilk": { - "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Condensed Milk and an Empty Can, canned condensed milk is fairly high in nutrition, and does not decay.", - "hash": -2104175091, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCannedCondensedMilk", - "receiver": false, - "title": "Canned Condensed Milk", - "transmitter": false - }, - "ItemCannedEdamame": { - "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Soybean and an Empty Can, canned edamame beans are fairly high in nutrition, and do not decay.", - "hash": -999714082, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCannedEdamame", - "receiver": false, - "title": "Canned Edamame", - "transmitter": false - }, - "ItemCannedMushroom": { - "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Mushroom and a Empty Can, delicious mushroom soup is fairly high in nutrition, and does not decay.", - "hash": -1344601965, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCannedMushroom", - "receiver": false, - "title": "Canned Mushroom", - "transmitter": false - }, - "ItemCannedPowderedEggs": { - "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Powdered Eggs and an Empty Can, canned powdered eggs are an exciting, dynamic food that's fairly high in nutrition, and does not decay.", - "hash": 1161510063, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCannedPowderedEggs", - "receiver": false, - "title": "Canned Powdered Eggs", - "transmitter": false - }, - "ItemCannedRicePudding": { - "desc": "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Rice and an Empty Can, canned rice pudding is a sweet treat, fairly high in nutrition, and does not decay.", - "hash": -1185552595, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCannedRicePudding", - "receiver": false, - "title": "Canned Rice Pudding", - "transmitter": false - }, - "ItemCerealBar": { - "desc": "Sustains, without decay. If only all our relationships were so well balanced.", - "hash": 791746840, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCerealBar", - "receiver": false, - "title": "Cereal Bar", - "transmitter": false - }, - "ItemCharcoal": { - "desc": "Charcoal is a lightweight, black carbon residue produced by heating Biomass in a Arc Furnace. It contains less energy potential than Ore (Coal), but can be used as a basic fuel source. Charcoal can also be substituted for coal in alloy recipes.", - "hash": 252561409, - "item": { - "ingredient": true, - "maxquantity": 200, - "reagents": { - "Carbon": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemCharcoal", - "receiver": false, - "title": "Charcoal", - "transmitter": false - }, - "ItemChemLightBlue": { - "desc": "A safe and slightly rave-some source of blue light. Snap to activate.", - "hash": -772542081, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemChemLightBlue", - "receiver": false, - "title": "Chem Light (Blue)", - "transmitter": false - }, - "ItemChemLightGreen": { - "desc": "Enliven the dreariest, airless rock with this glowy green light. Snap to activate.", - "hash": -597479390, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemChemLightGreen", - "receiver": false, - "title": "Chem Light (Green)", - "transmitter": false - }, - "ItemChemLightRed": { - "desc": "A red glowstick. Snap to activate. Then reach for the lasers.", - "hash": -525810132, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemChemLightRed", - "receiver": false, - "title": "Chem Light (Red)", - "transmitter": false - }, - "ItemChemLightWhite": { - "desc": "Snap the glowstick to activate a pale radiance that keeps the darkness at bay.", - "hash": 1312166823, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemChemLightWhite", - "receiver": false, - "title": "Chem Light (White)", - "transmitter": false - }, - "ItemChemLightYellow": { - "desc": "Dispel the darkness with this yellow glowstick.", - "hash": 1224819963, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemChemLightYellow", - "receiver": false, - "title": "Chem Light (Yellow)", - "transmitter": false - }, - "ItemCoalOre": { - "desc": "Humanity wouldn't have got to space without humble, combustible coal. Burn it in a SolidFuelGenerator, smelt it in the Furnace to create alloys, or use it in the Reagent Processor to make Spray Paint (Black).", - "hash": 1724793494, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Hydrocarbon": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemCoalOre", - "receiver": false, - "title": "Ore (Coal)", - "transmitter": false - }, - "ItemCobaltOre": { - "desc": "Cobalt is a chemical element with the symbol \"Co\" and is typically found in only small deposits. Cobalt is a rare substance, but used create the Heal Pill and several alloys.", - "hash": -983091249, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Cobalt": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemCobaltOre", - "receiver": false, - "title": "Ore (Cobalt)", - "transmitter": false - }, - "ItemCoffeeMug": { - "desc": "", - "hash": 1800622698, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemCoffeeMug", - "receiver": false, - "title": "Coffee Mug", - "transmitter": false - }, - "ItemConstantanIngot": { - "desc": "", - "hash": 1058547521, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Constantan": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemConstantanIngot", - "receiver": false, - "title": "Ingot (Constantan)", - "transmitter": false - }, - "ItemCookedCondensedMilk": { - "desc": "A high-nutrient cooked food, which can be canned.", - "hash": 1715917521, - "item": { - "ingredient": true, - "maxquantity": 10, - "reagents": { - "Milk": 100.0 - }, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCookedCondensedMilk", - "receiver": false, - "title": "Condensed Milk", - "transmitter": false - }, - "ItemCookedCorn": { - "desc": "A high-nutrient cooked food, which can be canned.", - "hash": 1344773148, - "item": { - "ingredient": true, - "maxquantity": 10, - "reagents": { - "Corn": 1.0 - }, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCookedCorn", - "receiver": false, - "title": "Cooked Corn", - "transmitter": false - }, - "ItemCookedMushroom": { - "desc": "A high-nutrient cooked food, which can be canned.", - "hash": -1076892658, - "item": { - "ingredient": true, - "maxquantity": 10, - "reagents": { - "Mushroom": 1.0 - }, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCookedMushroom", - "receiver": false, - "title": "Cooked Mushroom", - "transmitter": false - }, - "ItemCookedPowderedEggs": { - "desc": "A high-nutrient cooked food, which can be canned.", - "hash": -1712264413, - "item": { - "ingredient": true, - "maxquantity": 10, - "reagents": { - "Egg": 1.0 - }, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCookedPowderedEggs", - "receiver": false, - "title": "Powdered Eggs", - "transmitter": false - }, - "ItemCookedPumpkin": { - "desc": "A high-nutrient cooked food, which can be canned.", - "hash": 1849281546, - "item": { - "ingredient": true, - "maxquantity": 10, - "reagents": { - "Pumpkin": 1.0 - }, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCookedPumpkin", - "receiver": false, - "title": "Cooked Pumpkin", - "transmitter": false - }, - "ItemCookedRice": { - "desc": "A high-nutrient cooked food, which can be canned.", - "hash": 2013539020, - "item": { - "ingredient": true, - "maxquantity": 10, - "reagents": { - "Rice": 1.0 - }, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCookedRice", - "receiver": false, - "title": "Cooked Rice", - "transmitter": false - }, - "ItemCookedSoybean": { - "desc": "A high-nutrient cooked food, which can be canned.", - "hash": 1353449022, - "item": { - "ingredient": true, - "maxquantity": 10, - "reagents": { - "Soy": 5.0 - }, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCookedSoybean", - "receiver": false, - "title": "Cooked Soybean", - "transmitter": false - }, - "ItemCookedTomato": { - "desc": "A high-nutrient cooked food, which can be canned.", - "hash": -709086714, - "item": { - "ingredient": true, - "maxquantity": 10, - "reagents": { - "Tomato": 1.0 - }, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCookedTomato", - "receiver": false, - "title": "Cooked Tomato", - "transmitter": false - }, - "ItemCopperIngot": { - "desc": "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items.", - "hash": -404336834, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Copper": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemCopperIngot", - "receiver": false, - "title": "Ingot (Copper)", - "transmitter": false - }, - "ItemCopperOre": { - "desc": "Copper is a chemical element with the symbol \"Cu\". This common and highly conductive material is found on most astronomical bodies and is used in a variety of manufacturing processes including electronic components, alloys, and wires.", - "hash": -707307845, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Copper": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemCopperOre", - "receiver": false, - "title": "Ore (Copper)", - "transmitter": false - }, - "ItemCorn": { - "desc": "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light.", - "hash": 258339687, - "item": { - "ingredient": true, - "maxquantity": 20, - "reagents": { - "Corn": 1.0 - }, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemCorn", - "receiver": false, - "title": "Corn", - "transmitter": false - }, - "ItemCornSoup": { - "desc": "Made using Cooked Corn and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Faily high in nutrition, canned food does not decay.", - "hash": 545034114, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemCornSoup", - "receiver": false, - "title": "Corn Soup", - "transmitter": false - }, - "ItemCreditCard": { - "desc": "", - "hash": -1756772618, - "item": { - "slotclass": "CreditCard", - "sorting": "Tools" - }, - "name": "ItemCreditCard", - "receiver": false, - "title": "Credit Card", - "transmitter": false - }, - "ItemCropHay": { - "desc": "", - "hash": 215486157, - "item": { - "maxquantity": 100, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemCropHay", - "receiver": false, - "title": "Hay", - "transmitter": false - }, - "ItemCrowbar": { - "desc": "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise.", - "hash": 856108234, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemCrowbar", - "receiver": false, - "title": "Crowbar", - "transmitter": false - }, - "ItemDataDisk": { - "desc": "", - "hash": 1005843700, - "item": { - "slotclass": "DataDisk", - "sorting": "Default" - }, - "name": "ItemDataDisk", - "receiver": false, - "title": "Data Disk", - "transmitter": false - }, - "ItemDirtCanister": { - "desc": "A container the will fill with Dirt when using a Mining Drill when placed inside a Mining Belt. You can then use this Dirt Canister with the Terrain Manipulator to adjust the terrain to suit your needs.", - "hash": 902565329, - "item": { - "slotclass": "Ore", - "sorting": "Default" - }, - "name": "ItemDirtCanister", - "receiver": false, - "title": "Dirt Canister", - "transmitter": false - }, - "ItemDirtyOre": { - "desc": "Ore mined from bedrock via the Deep Miner which then can be used in the Centrifuge, or Combustion Centrifuge. Once processed, it produces ore in a ratio similar to the average found on the planet's surface. ", - "hash": -1234745580, - "item": { - "maxquantity": 50, - "slotclass": "None", - "sorting": "Ores" - }, - "name": "ItemDirtyOre", - "receiver": false, - "title": "Dirty Ore", - "transmitter": false - }, - "ItemDisposableBatteryCharger": { - "desc": "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery.", - "hash": -2124435700, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemDisposableBatteryCharger", - "receiver": false, - "title": "Disposable Battery Charger", - "transmitter": false - }, - "ItemDrill": { - "desc": "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", - "hash": 2009673399, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemDrill", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Hand Drill", - "transmitter": false - }, - "ItemDuctTape": { - "desc": "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage.", - "hash": -1943134693, - "item": { - "maxquantity": 1, - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemDuctTape", - "receiver": false, - "title": "Duct Tape", - "transmitter": false - }, - "ItemDynamicAirCon": { - "desc": "", - "hash": 1072914031, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemDynamicAirCon", - "receiver": false, - "title": "Kit (Portable Air Conditioner)", - "transmitter": false - }, - "ItemDynamicScrubber": { - "desc": "", - "hash": -971920158, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemDynamicScrubber", - "receiver": false, - "title": "Kit (Portable Scrubber)", - "transmitter": false - }, - "ItemEggCarton": { - "desc": "Within, eggs reside in mysterious, marmoreal silence.", - "hash": -524289310, - "item": { - "slotclass": "None", - "sorting": "Storage" - }, - "name": "ItemEggCarton", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - }, - { - "name": "", - "typ": "Egg" - } - ], - "title": "Egg Carton", - "transmitter": false - }, - "ItemElectronicParts": { - "desc": "", - "hash": 731250882, - "item": { - "maxquantity": 20, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemElectronicParts", - "receiver": false, - "title": "Electronic Parts", - "transmitter": false - }, - "ItemElectrumIngot": { - "desc": "", - "hash": 502280180, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Electrum": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemElectrumIngot", - "receiver": false, - "title": "Ingot (Electrum)", - "transmitter": false - }, - "ItemEmergencyAngleGrinder": { - "desc": "", - "hash": -351438780, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemEmergencyAngleGrinder", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Emergency Angle Grinder", - "transmitter": false - }, - "ItemEmergencyArcWelder": { - "desc": "", - "hash": -1056029600, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemEmergencyArcWelder", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Emergency Arc Welder", - "transmitter": false - }, - "ItemEmergencyCrowbar": { - "desc": "", - "hash": 976699731, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemEmergencyCrowbar", - "receiver": false, - "title": "Emergency Crowbar", - "transmitter": false - }, - "ItemEmergencyDrill": { - "desc": "", - "hash": -2052458905, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemEmergencyDrill", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Emergency Drill", - "transmitter": false - }, - "ItemEmergencyEvaSuit": { - "desc": "", - "hash": 1791306431, - "item": { - "slotclass": "Suit", - "sorting": "Clothing" - }, - "name": "ItemEmergencyEvaSuit", - "receiver": false, - "slots": [ - { - "name": "Air Tank", - "typ": "GasCanister" - }, - { - "name": "Waste Tank", - "typ": "GasCanister" - }, - { - "name": "Life Support", - "typ": "Battery" - }, - { - "name": "Filter", - "typ": "GasFilter" - }, - { - "name": "Filter", - "typ": "GasFilter" - }, - { - "name": "Filter", - "typ": "GasFilter" - } - ], - "title": "Emergency Eva Suit", - "transmitter": false - }, - "ItemEmergencyPickaxe": { - "desc": "", - "hash": -1061510408, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemEmergencyPickaxe", - "receiver": false, - "title": "Emergency Pickaxe", - "transmitter": false - }, - "ItemEmergencyScrewdriver": { - "desc": "", - "hash": 266099983, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemEmergencyScrewdriver", - "receiver": false, - "title": "Emergency Screwdriver", - "transmitter": false - }, - "ItemEmergencySpaceHelmet": { - "desc": "", - "hash": 205916793, - "item": { - "slotclass": "Helmet", - "sorting": "Clothing" - }, - "logic": { - "Combustion": "Read", - "Flush": "Write", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "SoundAlert": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "ReadWrite" - }, - "name": "ItemEmergencySpaceHelmet", - "receiver": false, - "title": "Emergency Space Helmet", - "transmitter": false - }, - "ItemEmergencyToolBelt": { - "desc": "", - "hash": 1661941301, - "item": { - "slotclass": "Belt", - "sorting": "Clothing" - }, - "name": "ItemEmergencyToolBelt", - "receiver": false, - "slots": [ - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - } - ], - "title": "Emergency Tool Belt", - "transmitter": false - }, - "ItemEmergencyWireCutters": { - "desc": "", - "hash": 2102803952, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemEmergencyWireCutters", - "receiver": false, - "title": "Emergency Wire Cutters", - "transmitter": false - }, - "ItemEmergencyWrench": { - "desc": "", - "hash": 162553030, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemEmergencyWrench", - "receiver": false, - "title": "Emergency Wrench", - "transmitter": false - }, - "ItemEmptyCan": { - "desc": "Used for making soups when combined with food in the Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay.", - "hash": 1013818348, - "item": { - "ingredient": true, - "maxquantity": 10, - "reagents": { - "Steel": 1.0 - }, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemEmptyCan", - "receiver": false, - "title": "Empty Can", - "transmitter": false - }, - "ItemEvaSuit": { - "desc": "The EVA suit is the basic suit Stationeers need to survive in the inhospitable environment of space. For more information on EVA suits, consult the EVA suit guide.", - "hash": 1677018918, - "item": { - "slotclass": "Suit", - "sorting": "Clothing" - }, - "name": "ItemEvaSuit", - "receiver": false, - "slots": [ - { - "name": "Air Tank", - "typ": "GasCanister" - }, - { - "name": "Waste Tank", - "typ": "GasCanister" - }, - { - "name": "Life Support", - "typ": "Battery" - }, - { - "name": "Filter", - "typ": "GasFilter" - }, - { - "name": "Filter", - "typ": "GasFilter" - }, - { - "name": "Filter", - "typ": "GasFilter" - } - ], - "title": "Eva Suit", - "transmitter": false - }, - "ItemExplosive": { - "desc": "", - "hash": 235361649, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemExplosive", - "receiver": false, - "title": "Remote Explosive", - "transmitter": false - }, - "ItemFern": { - "desc": "There was a time, when Stationeers had to make Fenoxitone Powder using the Reagent Processor. Recent advances in technology allow you to use equivalent quantities of fern directly in recipes.", - "hash": 892110467, - "item": { - "ingredient": true, - "maxquantity": 100, - "reagents": { - "Fenoxitone": 1.0 - }, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemFern", - "receiver": false, - "title": "Fern", - "transmitter": false - }, - "ItemFertilizedEgg": { - "desc": "To hatch it requires an incubation temperature of between 35 and 45 degrees Celsius and will hatch into a Chick. If the egg is exposed to tepratures below 10 degrees it will no longer be viable.", - "hash": -383972371, - "item": { - "ingredient": true, - "reagents": { - "Egg": 1.0 - }, - "slotclass": "Egg", - "sorting": "Resources" - }, - "name": "ItemFertilizedEgg", - "receiver": false, - "title": "Egg", - "transmitter": false - }, - "ItemFilterFern": { - "desc": "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant.", - "hash": 266654416, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemFilterFern", - "receiver": false, - "title": "Darga Fern", - "transmitter": false - }, - "ItemFlagSmall": { - "desc": "", - "hash": 2011191088, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemFlagSmall", - "receiver": false, - "title": "Kit (Small Flag)", - "transmitter": false - }, - "ItemFlashingLight": { - "desc": "", - "hash": -2107840748, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemFlashingLight", - "receiver": false, - "title": "Kit (Flashing Light)", - "transmitter": false - }, - "ItemFlashlight": { - "desc": "A flashlight with a narrow and wide beam options.", - "hash": -838472102, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Low Power", - "1": "High Power" - }, - "name": "ItemFlashlight", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Flashlight", - "transmitter": false - }, - "ItemFlour": { - "desc": "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven).", - "hash": -665995854, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Flour": 50.0 - }, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemFlour", - "receiver": false, - "title": "Flour", - "transmitter": false - }, - "ItemFlowerBlue": { - "desc": "", - "hash": -1573623434, - "item": { - "maxquantity": 100, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemFlowerBlue", - "receiver": false, - "title": "Flower (Blue)", - "transmitter": false - }, - "ItemFlowerGreen": { - "desc": "", - "hash": -1513337058, - "item": { - "maxquantity": 100, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemFlowerGreen", - "receiver": false, - "title": "Flower (Green)", - "transmitter": false - }, - "ItemFlowerOrange": { - "desc": "", - "hash": -1411986716, - "item": { - "maxquantity": 100, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemFlowerOrange", - "receiver": false, - "title": "Flower (Orange)", - "transmitter": false - }, - "ItemFlowerRed": { - "desc": "", - "hash": -81376085, - "item": { - "maxquantity": 100, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemFlowerRed", - "receiver": false, - "title": "Flower (Red)", - "transmitter": false - }, - "ItemFlowerYellow": { - "desc": "", - "hash": 1712822019, - "item": { - "maxquantity": 100, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemFlowerYellow", - "receiver": false, - "title": "Flower (Yellow)", - "transmitter": false - }, - "ItemFrenchFries": { - "desc": "Because space would suck without 'em.", - "hash": -57608687, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemFrenchFries", - "receiver": false, - "title": "Canned French Fries", - "transmitter": false - }, - "ItemFries": { - "desc": "", - "hash": 1371786091, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemFries", - "receiver": false, - "title": "French Fries", - "transmitter": false - }, - "ItemGasCanisterCarbonDioxide": { - "desc": "", - "hash": -767685874, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "name": "ItemGasCanisterCarbonDioxide", - "receiver": false, - "title": "Canister (CO2)", - "transmitter": false - }, - "ItemGasCanisterEmpty": { - "desc": "", - "hash": 42280099, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "name": "ItemGasCanisterEmpty", - "receiver": false, - "title": "Canister", - "transmitter": false - }, - "ItemGasCanisterFuel": { - "desc": "", - "hash": -1014695176, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "name": "ItemGasCanisterFuel", - "receiver": false, - "title": "Canister (Fuel)", - "transmitter": false - }, - "ItemGasCanisterNitrogen": { - "desc": "", - "hash": 2145068424, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "name": "ItemGasCanisterNitrogen", - "receiver": false, - "title": "Canister (Nitrogen)", - "transmitter": false - }, - "ItemGasCanisterNitrousOxide": { - "desc": "", - "hash": -1712153401, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "name": "ItemGasCanisterNitrousOxide", - "receiver": false, - "title": "Gas Canister (Sleeping)", - "transmitter": false - }, - "ItemGasCanisterOxygen": { - "desc": "", - "hash": -1152261938, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "name": "ItemGasCanisterOxygen", - "receiver": false, - "title": "Canister (Oxygen)", - "transmitter": false - }, - "ItemGasCanisterPollutants": { - "desc": "", - "hash": -1552586384, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "name": "ItemGasCanisterPollutants", - "receiver": false, - "title": "Canister (Pollutants)", - "transmitter": false - }, - "ItemGasCanisterSmart": { - "desc": "0.Mode0\n1.Mode1", - "hash": -668314371, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "ItemGasCanisterSmart", - "receiver": false, - "title": "Gas Canister (Smart)", - "transmitter": false - }, - "ItemGasCanisterVolatiles": { - "desc": "", - "hash": -472094806, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "name": "ItemGasCanisterVolatiles", - "receiver": false, - "title": "Canister (Volatiles)", - "transmitter": false - }, - "ItemGasCanisterWater": { - "desc": "", - "hash": -1854861891, - "item": { - "slotclass": "LiquidCanister", - "sorting": "Atmospherics" - }, - "name": "ItemGasCanisterWater", - "receiver": false, - "title": "Liquid Canister (Water)", - "transmitter": false - }, - "ItemGasFilterCarbonDioxide": { - "desc": "Given humanity's obsession with exhaling Carbon Dioxide, all Stationeers are issued two basic Sinotai Carbon Dioxide Gas Filter as part of their standard deployment kit (SDK). These filters allow passage of Carbon Dioxide into the suit's waste Canister, but are also critical components of the Portable Air Scrubber and the Filtration. The Medium Filter (Carbon Dioxide) and Heavy Filter (Carbon Dioxide) are also available.", - "hash": 1635000764, - "item": { - "filtertype": "CarbonDioxide", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterCarbonDioxide", - "receiver": false, - "title": "Filter (Carbon Dioxide)", - "transmitter": false - }, - "ItemGasFilterCarbonDioxideInfinite": { - "desc": "A filter that selectively targets Carbon Dioxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "hash": -185568964, - "item": { - "filtertype": "CarbonDioxide", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterCarbonDioxideInfinite", - "receiver": false, - "title": "Catalytic Filter (Carbon Dioxide)", - "transmitter": false - }, - "ItemGasFilterCarbonDioxideL": { - "desc": "", - "hash": 1876847024, - "item": { - "filtertype": "CarbonDioxide", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterCarbonDioxideL", - "receiver": false, - "title": "Heavy Filter (Carbon Dioxide)", - "transmitter": false - }, - "ItemGasFilterCarbonDioxideM": { - "desc": "", - "hash": 416897318, - "item": { - "filtertype": "CarbonDioxide", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterCarbonDioxideM", - "receiver": false, - "title": "Medium Filter (Carbon Dioxide)", - "transmitter": false - }, - "ItemGasFilterNitrogen": { - "desc": "Filters are used to capture various gases, which can be disposed of or used elsewhere. Nitrogen is a byproduct of smelting various ores, notably Ice (Nitrice), which may be combined with Oxygen to make a breathable - and considerably less flammable - atmosphere.", - "hash": 632853248, - "item": { - "filtertype": "Nitrogen", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterNitrogen", - "receiver": false, - "title": "Filter (Nitrogen)", - "transmitter": false - }, - "ItemGasFilterNitrogenInfinite": { - "desc": "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "hash": 152751131, - "item": { - "filtertype": "Nitrogen", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterNitrogenInfinite", - "receiver": false, - "title": "Catalytic Filter (Nitrogen)", - "transmitter": false - }, - "ItemGasFilterNitrogenL": { - "desc": "", - "hash": -1387439451, - "item": { - "filtertype": "Nitrogen", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterNitrogenL", - "receiver": false, - "title": "Heavy Filter (Nitrogen)", - "transmitter": false - }, - "ItemGasFilterNitrogenM": { - "desc": "", - "hash": -632657357, - "item": { - "filtertype": "Nitrogen", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterNitrogenM", - "receiver": false, - "title": "Medium Filter (Nitrogen)", - "transmitter": false - }, - "ItemGasFilterNitrousOxide": { - "desc": "", - "hash": -1247674305, - "item": { - "filtertype": "NitrousOxide", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterNitrousOxide", - "receiver": false, - "title": "Filter (Nitrous Oxide)", - "transmitter": false - }, - "ItemGasFilterNitrousOxideInfinite": { - "desc": "A filter that selectively targets Nitrous Oxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "hash": -123934842, - "item": { - "filtertype": "NitrousOxide", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterNitrousOxideInfinite", - "receiver": false, - "title": "Catalytic Filter (Nitrous Oxide)", - "transmitter": false - }, - "ItemGasFilterNitrousOxideL": { - "desc": "", - "hash": 465267979, - "item": { - "filtertype": "NitrousOxide", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterNitrousOxideL", - "receiver": false, - "title": "Heavy Filter (Nitrous Oxide)", - "transmitter": false - }, - "ItemGasFilterNitrousOxideM": { - "desc": "", - "hash": 1824284061, - "item": { - "filtertype": "NitrousOxide", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterNitrousOxideM", - "receiver": false, - "title": "Medium Filter (Nitrous Oxide)", - "transmitter": false - }, - "ItemGasFilterOxygen": { - "desc": "Sinotai have cornered the market in filter design. Their trademarked templates are simple to print and highly efficient at capturing various gases, which can be disposed of or used elsewhere. Oxygen is a common byproduct of smelting various ores, but must be filtered of such impurities as Nitrogen using this filter and various devices, such as the Kit (Portable Scrubber).", - "hash": -721824748, - "item": { - "filtertype": "Oxygen", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterOxygen", - "receiver": false, - "title": "Filter (Oxygen)", - "transmitter": false - }, - "ItemGasFilterOxygenInfinite": { - "desc": "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "hash": -1055451111, - "item": { - "filtertype": "Oxygen", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterOxygenInfinite", - "receiver": false, - "title": "Catalytic Filter (Oxygen)", - "transmitter": false - }, - "ItemGasFilterOxygenL": { - "desc": "", - "hash": -1217998945, - "item": { - "filtertype": "Oxygen", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterOxygenL", - "receiver": false, - "title": "Heavy Filter (Oxygen)", - "transmitter": false - }, - "ItemGasFilterOxygenM": { - "desc": "", - "hash": -1067319543, - "item": { - "filtertype": "Oxygen", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterOxygenM", - "receiver": false, - "title": "Medium Filter (Oxygen)", - "transmitter": false - }, - "ItemGasFilterPollutants": { - "desc": "Filters are used to capture various gases, such as waste emissions from a Furnace or Arc Furnace. Adding Sinotai-designed Pollutant filters to a Kit (Portable Scrubber) allows you to isolate this gas, then add it to a pipe network and employ its excellent coolant properties in a Wall Cooler. Try not to inhale.", - "hash": 1915566057, - "item": { - "filtertype": "Pollutant", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterPollutants", - "receiver": false, - "title": "Filter (Pollutant)", - "transmitter": false - }, - "ItemGasFilterPollutantsInfinite": { - "desc": "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "hash": -503738105, - "item": { - "filtertype": "Pollutant", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterPollutantsInfinite", - "receiver": false, - "title": "Catalytic Filter (Pollutants)", - "transmitter": false - }, - "ItemGasFilterPollutantsL": { - "desc": "", - "hash": 1959564765, - "item": { - "filtertype": "Pollutant", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterPollutantsL", - "receiver": false, - "title": "Heavy Filter (Pollutants)", - "transmitter": false - }, - "ItemGasFilterPollutantsM": { - "desc": "", - "hash": 63677771, - "item": { - "filtertype": "Pollutant", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterPollutantsM", - "receiver": false, - "title": "Medium Filter (Pollutants)", - "transmitter": false - }, - "ItemGasFilterVolatiles": { - "desc": "Filters are used to capture various gases, which can be disposed of or used elsewhere. Volatiles are created by exposing Ice (Volatiles) to heat. The product can then be collected and combined with Oxygen to create fuel, or used within a Furnace to smelt ores and create alloys.", - "hash": 15011598, - "item": { - "filtertype": "Volatiles", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterVolatiles", - "receiver": false, - "title": "Filter (Volatiles)", - "transmitter": false - }, - "ItemGasFilterVolatilesInfinite": { - "desc": "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "hash": -1916176068, - "item": { - "filtertype": "Volatiles", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterVolatilesInfinite", - "receiver": false, - "title": "Catalytic Filter (Volatiles)", - "transmitter": false - }, - "ItemGasFilterVolatilesL": { - "desc": "", - "hash": 1255156286, - "item": { - "filtertype": "Volatiles", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterVolatilesL", - "receiver": false, - "title": "Heavy Filter (Volatiles)", - "transmitter": false - }, - "ItemGasFilterVolatilesM": { - "desc": "", - "hash": 1037507240, - "item": { - "filtertype": "Volatiles", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterVolatilesM", - "receiver": false, - "title": "Medium Filter (Volatiles)", - "transmitter": false - }, - "ItemGasFilterWater": { - "desc": "Sinotai filters are used to capture various gases, which can be disposed of, or used elsewhere. Water can be collected by filtering smelted Ice (Water)", - "hash": -1993197973, - "item": { - "filtertype": "Steam", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterWater", - "receiver": false, - "title": "Filter (Water)", - "transmitter": false - }, - "ItemGasFilterWaterInfinite": { - "desc": "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle.", - "hash": -1678456554, - "item": { - "filtertype": "Steam", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterWaterInfinite", - "receiver": false, - "title": "Catalytic Filter (Water)", - "transmitter": false - }, - "ItemGasFilterWaterL": { - "desc": "", - "hash": 2004969680, - "item": { - "filtertype": "Steam", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterWaterL", - "receiver": false, - "title": "Heavy Filter (Water)", - "transmitter": false - }, - "ItemGasFilterWaterM": { - "desc": "", - "hash": 8804422, - "item": { - "filtertype": "Steam", - "maxquantity": 100, - "slotclass": "GasFilter", - "sorting": "Resources" - }, - "name": "ItemGasFilterWaterM", - "receiver": false, - "title": "Medium Filter (Water)", - "transmitter": false - }, - "ItemGasSensor": { - "desc": "", - "hash": 1717593480, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemGasSensor", - "receiver": false, - "title": "Kit (Gas Sensor)", - "transmitter": false - }, - "ItemGasTankStorage": { - "desc": "This kit produces a Kit (Canister Storage) for refilling a Canister.", - "hash": -2113012215, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemGasTankStorage", - "receiver": false, - "title": "Kit (Canister Storage)", - "transmitter": false - }, - "ItemGlassSheets": { - "desc": "A fundamental construction component, glass sheets are created from Silicon. Fabricated on the Autolathe, they are used to make {THING:StructureSolarPanel;Solar Panels}, and many other structures.", - "hash": 1588896491, - "item": { - "maxquantity": 50, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemGlassSheets", - "receiver": false, - "title": "Glass Sheets", - "transmitter": false - }, - "ItemGlasses": { - "desc": "", - "hash": -1068925231, - "item": { - "slotclass": "Glasses", - "sorting": "Clothing" - }, - "name": "ItemGlasses", - "receiver": false, - "title": "Glasses", - "transmitter": false - }, - "ItemGoldIngot": { - "desc": "There is an enduring paradox at the heart of the Stationeers project: An initiative conceived as 'cut-price space exploration' uses Gold as a fundamental ingredient in fabricating so much of its equipment and materiel. ", - "hash": 226410516, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Gold": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemGoldIngot", - "receiver": false, - "title": "Ingot (Gold)", - "transmitter": false - }, - "ItemGoldOre": { - "desc": "Surprisingly common throughout the Solar System, Gold is thought to originate in the heart of supernovas, gathering as dust in the early stages of solar formation, then incorporating into the slowly accreting planetary bodies. Now a prized element in Stationeer construction, Gold is valued not for its beauty, but its reliability: inert, durable, conductive and highly stable, gold's strength is that it does nothing.", - "hash": -1348105509, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Gold": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemGoldOre", - "receiver": false, - "title": "Ore (Gold)", - "transmitter": false - }, - "ItemGrenade": { - "desc": "Invented by the Romans, who threw Greek Fire at their enemies in ceramic jars, the word 'grenade' is derived from the Old French word for 'pomegranate', as many modern grenades resemble this round, many-seeded fruit. Also like many grenades before it, this one goes boom and breaks stuff.", - "hash": 1544275894, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemGrenade", - "receiver": false, - "title": "Hand Grenade", - "transmitter": false - }, - "ItemHEMDroidRepairKit": { - "desc": "Repairs damaged HEM-Droids to full health.", - "hash": 470636008, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemHEMDroidRepairKit", - "receiver": false, - "title": "HEMDroid Repair Kit", - "transmitter": false - }, - "ItemHardBackpack": { - "desc": "This backpack can be useful when you are working inside and don't need to fly around.", - "hash": 374891127, - "item": { - "slotclass": "Back", - "sorting": "Clothing" - }, - "logic": { - "ReferenceId": "Read" - }, - "name": "ItemHardBackpack", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Hardsuit Backpack", - "transmitter": false - }, - "ItemHardJetpack": { - "desc": "The Norsec jetpack isn't 'technically' a jetpack at all, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nThe hardsuit jetpack is capable of much higher speeds than the Jetpack Basic - up to 15m/s. Indispensable for building, mining and general movement, it has fourteen storage slots.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", - "hash": -412551656, - "item": { - "slotclass": "Back", - "sorting": "Clothing" - }, - "logic": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "name": "ItemHardJetpack", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "12": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "13": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "14": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Pressure": { - "0": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Temperature": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Propellant", - "typ": "GasCanister" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Hardsuit Jetpack", - "transmitter": false - }, - "ItemHardMiningBackPack": { - "desc": "", - "hash": 900366130, - "item": { - "slotclass": "Back", - "sorting": "Clothing" - }, - "name": "ItemHardMiningBackPack", - "receiver": false, - "slots": [ - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - } - ], - "title": "Hard Mining Backpack", - "transmitter": false - }, - "ItemHardSuit": { - "desc": "Connects to Logic Transmitter", - "hash": -1758310454, - "item": { - "slotclass": "Suit", - "sorting": "Clothing" - }, - "logic": { - "Activate": "ReadWrite", - "AirRelease": "ReadWrite", - "Combustion": "Read", - "EntityState": "Read", - "Error": "ReadWrite", - "Filtration": "ReadWrite", - "ForwardX": "Read", - "ForwardY": "Read", - "ForwardZ": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Orientation": "Read", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "Power": "Read", - "Pressure": "Read", - "PressureExternal": "Read", - "PressureSetting": "ReadWrite", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "SoundAlert": "ReadWrite", - "Temperature": "Read", - "TemperatureExternal": "Read", - "TemperatureSetting": "ReadWrite", - "TotalMoles": "Read", - "VelocityMagnitude": "Read", - "VelocityRelativeX": "Read", - "VelocityRelativeY": "Read", - "VelocityRelativeZ": "Read", - "VelocityX": "Read", - "VelocityY": "Read", - "VelocityZ": "Read", - "Volume": "ReadWrite" - }, - "memory": { - "access": "ReadWrite", - "size": 0, - "sizeDisplay": "0 B" - }, - "name": "ItemHardSuit", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "2": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "FilterType": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "FilterType": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "FilterType": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "FilterType": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "2": "Read" - }, - "ChargeRatio": { - "2": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "FilterType": { - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Pressure": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Temperature": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Air Tank", - "typ": "GasCanister" - }, - { - "name": "Waste Tank", - "typ": "GasCanister" - }, - { - "name": "Life Support", - "typ": "Battery" - }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - }, - { - "name": "Filter", - "typ": "GasFilter" - }, - { - "name": "Filter", - "typ": "GasFilter" - }, - { - "name": "Filter", - "typ": "GasFilter" - }, - { - "name": "Filter", - "typ": "GasFilter" - } - ], - "title": "Hardsuit", - "transmitter": true - }, - "ItemHardsuitHelmet": { - "desc": "The Hardsuit Helmet is similar to the Space Helmet, but can withstand higher temperatures and pressures. It's perfect for enduring harsh environments like Venus and Vulcan.", - "hash": -84573099, - "item": { - "slotclass": "Helmet", - "sorting": "Clothing" - }, - "logic": { - "Combustion": "Read", - "Flush": "Write", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "SoundAlert": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "ReadWrite" - }, - "name": "ItemHardsuitHelmet", - "receiver": false, - "title": "Hardsuit Helmet", - "transmitter": false - }, - "ItemHastelloyIngot": { - "desc": "", - "hash": 1579842814, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Hastelloy": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemHastelloyIngot", - "receiver": false, - "title": "Ingot (Hastelloy)", - "transmitter": false - }, - "ItemHat": { - "desc": "As the name suggests, this is a hat.", - "hash": 299189339, - "item": { - "slotclass": "Helmet", - "sorting": "Clothing" - }, - "name": "ItemHat", - "receiver": false, - "title": "Hat", - "transmitter": false - }, - "ItemHighVolumeGasCanisterEmpty": { - "desc": "", - "hash": 998653377, - "item": { - "slotclass": "GasCanister", - "sorting": "Atmospherics" - }, - "name": "ItemHighVolumeGasCanisterEmpty", - "receiver": false, - "title": "High Volume Gas Canister", - "transmitter": false - }, - "ItemHorticultureBelt": { - "desc": "", - "hash": -1117581553, - "item": { - "slotclass": "Belt", - "sorting": "Clothing" - }, - "name": "ItemHorticultureBelt", - "receiver": false, - "slots": [ - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - } - ], - "title": "Horticulture Belt", - "transmitter": false - }, - "ItemHydroponicTray": { - "desc": "This kits creates a Hydroponics Tray for growing various plants.", - "hash": -1193543727, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemHydroponicTray", - "receiver": false, - "title": "Kit (Hydroponic Tray)", - "transmitter": false - }, - "ItemIce": { - "desc": "Water ice can be found on most planets in the Solar System, though not all worlds visited by Stationeers possess this resource. Highly sensitive to temperature, ice will begin to melt as soon as it is mined, unless kept in the Mining Belt. When melting, ice produces a mixture of Steam and Nitrogen gas.", - "hash": 1217489948, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemIce", - "receiver": false, - "title": "Ice (Water)", - "transmitter": false - }, - "ItemIgniter": { - "desc": "This kit creates an Kit (Igniter) unit.", - "hash": 890106742, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemIgniter", - "receiver": false, - "title": "Kit (Igniter)", - "transmitter": false - }, - "ItemInconelIngot": { - "desc": "", - "hash": -787796599, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Inconel": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemInconelIngot", - "receiver": false, - "title": "Ingot (Inconel)", - "transmitter": false - }, - "ItemInsulation": { - "desc": "Mysterious in the extreme, the function of this item is lost to the ages.", - "hash": 897176943, - "item": { - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemInsulation", - "receiver": false, - "title": "Insulation", - "transmitter": false - }, - "ItemIntegratedCircuit10": { - "desc": "", - "hash": -744098481, - "item": { - "slotclass": "ProgrammableChip", - "sorting": "Default" - }, - "logic": { - "LineNumber": "Read", - "ReferenceId": "Read" - }, - "memory": { - "access": "ReadWrite", - "size": 512, - "sizeDisplay": "4096 KB" - }, - "name": "ItemIntegratedCircuit10", - "receiver": false, - "title": "Integrated Circuit (IC10)", - "transmitter": false - }, - "ItemInvarIngot": { - "desc": "", - "hash": -297990285, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Invar": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemInvarIngot", - "receiver": false, - "title": "Ingot (Invar)", - "transmitter": false - }, - "ItemIronFrames": { - "desc": "", - "hash": 1225836666, - "item": { - "maxquantity": 30, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemIronFrames", - "receiver": false, - "title": "Iron Frames", - "transmitter": false - }, - "ItemIronIngot": { - "desc": "The most basic unit of construction available to Stationeer-kind, iron ingots are created by smelting Ore (Iron) in the Furnace and Arc Furnace, and used to create a variety of items.", - "hash": -1301215609, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Iron": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemIronIngot", - "receiver": false, - "title": "Ingot (Iron)", - "transmitter": false - }, - "ItemIronOre": { - "desc": "Abundant throughout the Solar System, iron is the ore most commonly used by Stationeers constructing offworld bases. It can be smelted into both Ingot (Iron)s and Ingot (Steel)s.", - "hash": 1758427767, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Iron": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemIronOre", - "receiver": false, - "title": "Ore (Iron)", - "transmitter": false - }, - "ItemIronSheets": { - "desc": "", - "hash": -487378546, - "item": { - "maxquantity": 50, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemIronSheets", - "receiver": false, - "title": "Iron Sheets", - "transmitter": false - }, - "ItemJetpackBasic": { - "desc": "The basic CHAC jetpack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stabilizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", - "hash": 1969189000, - "item": { - "slotclass": "Back", - "sorting": "Clothing" - }, - "logic": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "name": "ItemJetpackBasic", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Pressure": { - "0": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Temperature": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Propellant", - "typ": "GasCanister" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Jetpack Basic", - "transmitter": false - }, - "ItemKitAIMeE": { - "desc": "", - "hash": 496830914, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAIMeE", - "receiver": false, - "title": "Kit (AIMeE)", - "transmitter": false - }, - "ItemKitAccessBridge": { - "desc": "", - "hash": 513258369, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAccessBridge", - "receiver": false, - "title": "Kit (Access Bridge)", - "transmitter": false - }, - "ItemKitAdvancedComposter": { - "desc": "", - "hash": -1431998347, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAdvancedComposter", - "receiver": false, - "title": "Kit (Advanced Composter)", - "transmitter": false - }, - "ItemKitAdvancedFurnace": { - "desc": "", - "hash": -616758353, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAdvancedFurnace", - "receiver": false, - "title": "Kit (Advanced Furnace)", - "transmitter": false - }, - "ItemKitAdvancedPackagingMachine": { - "desc": "", - "hash": -598545233, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAdvancedPackagingMachine", - "receiver": false, - "title": "Kit (Advanced Packaging Machine)", - "transmitter": false - }, - "ItemKitAirlock": { - "desc": "", - "hash": 964043875, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAirlock", - "receiver": false, - "title": "Kit (Airlock)", - "transmitter": false - }, - "ItemKitAirlockGate": { - "desc": "", - "hash": 682546947, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAirlockGate", - "receiver": false, - "title": "Kit (Hangar Door)", - "transmitter": false - }, - "ItemKitArcFurnace": { - "desc": "", - "hash": -98995857, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitArcFurnace", - "receiver": false, - "title": "Kit (Arc Furnace)", - "transmitter": false - }, - "ItemKitAtmospherics": { - "desc": "", - "hash": 1222286371, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAtmospherics", - "receiver": false, - "title": "Kit (Atmospherics)", - "transmitter": false - }, - "ItemKitAutoMinerSmall": { - "desc": "", - "hash": 1668815415, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAutoMinerSmall", - "receiver": false, - "title": "Kit (Autominer Small)", - "transmitter": false - }, - "ItemKitAutolathe": { - "desc": "", - "hash": -1753893214, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAutolathe", - "receiver": false, - "title": "Kit (Autolathe)", - "transmitter": false - }, - "ItemKitAutomatedOven": { - "desc": "", - "hash": -1931958659, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitAutomatedOven", - "receiver": false, - "title": "Kit (Automated Oven)", - "transmitter": false - }, - "ItemKitBasket": { - "desc": "", - "hash": 148305004, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitBasket", - "receiver": false, - "title": "Kit (Basket)", - "transmitter": false - }, - "ItemKitBattery": { - "desc": "", - "hash": 1406656973, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitBattery", - "receiver": false, - "title": "Kit (Battery)", - "transmitter": false - }, - "ItemKitBatteryLarge": { - "desc": "", - "hash": -21225041, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitBatteryLarge", - "receiver": false, - "title": "Kit (Battery Large)", - "transmitter": false - }, - "ItemKitBeacon": { - "desc": "", - "hash": 249073136, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitBeacon", - "receiver": false, - "title": "Kit (Beacon)", - "transmitter": false - }, - "ItemKitBeds": { - "desc": "", - "hash": -1241256797, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitBeds", - "receiver": false, - "title": "Kit (Beds)", - "transmitter": false - }, - "ItemKitBlastDoor": { - "desc": "", - "hash": -1755116240, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitBlastDoor", - "receiver": false, - "title": "Kit (Blast Door)", - "transmitter": false - }, - "ItemKitCentrifuge": { - "desc": "", - "hash": 578182956, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitCentrifuge", - "receiver": false, - "title": "Kit (Centrifuge)", - "transmitter": false - }, - "ItemKitChairs": { - "desc": "", - "hash": -1394008073, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitChairs", - "receiver": false, - "title": "Kit (Chairs)", - "transmitter": false - }, - "ItemKitChute": { - "desc": "", - "hash": 1025254665, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitChute", - "receiver": false, - "title": "Kit (Basic Chutes)", - "transmitter": false - }, - "ItemKitChuteUmbilical": { - "desc": "", - "hash": -876560854, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitChuteUmbilical", - "receiver": false, - "title": "Kit (Chute Umbilical)", - "transmitter": false - }, - "ItemKitCompositeCladding": { - "desc": "", - "hash": -1470820996, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitCompositeCladding", - "receiver": false, - "title": "Kit (Cladding)", - "transmitter": false - }, - "ItemKitCompositeFloorGrating": { - "desc": "", - "hash": 1182412869, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitCompositeFloorGrating", - "receiver": false, - "title": "Kit (Floor Grating)", - "transmitter": false - }, - "ItemKitComputer": { - "desc": "", - "hash": 1990225489, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitComputer", - "receiver": false, - "title": "Kit (Computer)", - "transmitter": false - }, - "ItemKitConsole": { - "desc": "", - "hash": -1241851179, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitConsole", - "receiver": false, - "title": "Kit (Consoles)", - "transmitter": false - }, - "ItemKitCrate": { - "desc": "", - "hash": 429365598, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitCrate", - "receiver": false, - "title": "Kit (Crate)", - "transmitter": false - }, - "ItemKitCrateMkII": { - "desc": "", - "hash": -1585956426, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitCrateMkII", - "receiver": false, - "title": "Kit (Crate Mk II)", - "transmitter": false - }, - "ItemKitCrateMount": { - "desc": "", - "hash": -551612946, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitCrateMount", - "receiver": false, - "title": "Kit (Container Mount)", - "transmitter": false - }, - "ItemKitCryoTube": { - "desc": "", - "hash": -545234195, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitCryoTube", - "receiver": false, - "title": "Kit (Cryo Tube)", - "transmitter": false - }, - "ItemKitDeepMiner": { - "desc": "", - "hash": -1935075707, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitDeepMiner", - "receiver": false, - "title": "Kit (Deep Miner)", - "transmitter": false - }, - "ItemKitDockingPort": { - "desc": "", - "hash": 77421200, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitDockingPort", - "receiver": false, - "title": "Kit (Docking Port)", - "transmitter": false - }, - "ItemKitDoor": { - "desc": "", - "hash": 168615924, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitDoor", - "receiver": false, - "title": "Kit (Door)", - "transmitter": false - }, - "ItemKitDrinkingFountain": { - "desc": "", - "hash": -1743663875, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitDrinkingFountain", - "receiver": false, - "title": "Kit (Drinking Fountain)", - "transmitter": false - }, - "ItemKitDynamicCanister": { - "desc": "", - "hash": -1061945368, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitDynamicCanister", - "receiver": false, - "title": "Kit (Portable Gas Tank)", - "transmitter": false - }, - "ItemKitDynamicGasTankAdvanced": { - "desc": "", - "hash": 1533501495, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitDynamicGasTankAdvanced", - "receiver": false, - "title": "Kit (Portable Gas Tank Mk II)", - "transmitter": false - }, - "ItemKitDynamicGenerator": { - "desc": "", - "hash": -732720413, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitDynamicGenerator", - "receiver": false, - "title": "Kit (Portable Generator)", - "transmitter": false - }, - "ItemKitDynamicHydroponics": { - "desc": "", - "hash": -1861154222, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitDynamicHydroponics", - "receiver": false, - "title": "Kit (Portable Hydroponics)", - "transmitter": false - }, - "ItemKitDynamicLiquidCanister": { - "desc": "", - "hash": 375541286, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitDynamicLiquidCanister", - "receiver": false, - "title": "Kit (Portable Liquid Tank)", - "transmitter": false - }, - "ItemKitDynamicMKIILiquidCanister": { - "desc": "", - "hash": -638019974, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitDynamicMKIILiquidCanister", - "receiver": false, - "title": "Kit (Portable Liquid Tank Mk II)", - "transmitter": false - }, - "ItemKitElectricUmbilical": { - "desc": "", - "hash": 1603046970, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitElectricUmbilical", - "receiver": false, - "title": "Kit (Power Umbilical)", - "transmitter": false - }, - "ItemKitElectronicsPrinter": { - "desc": "", - "hash": -1181922382, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitElectronicsPrinter", - "receiver": false, - "title": "Kit (Electronics Printer)", - "transmitter": false - }, - "ItemKitElevator": { - "desc": "", - "hash": -945806652, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitElevator", - "receiver": false, - "title": "Kit (Elevator)", - "transmitter": false - }, - "ItemKitEngineLarge": { - "desc": "", - "hash": 755302726, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitEngineLarge", - "receiver": false, - "title": "Kit (Engine Large)", - "transmitter": false - }, - "ItemKitEngineMedium": { - "desc": "", - "hash": 1969312177, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitEngineMedium", - "receiver": false, - "title": "Kit (Engine Medium)", - "transmitter": false - }, - "ItemKitEngineSmall": { - "desc": "", - "hash": 19645163, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitEngineSmall", - "receiver": false, - "title": "Kit (Engine Small)", - "transmitter": false - }, - "ItemKitEvaporationChamber": { - "desc": "", - "hash": 1587787610, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitEvaporationChamber", - "receiver": false, - "title": "Kit (Phase Change Device)", - "transmitter": false - }, - "ItemKitFlagODA": { - "desc": "", - "hash": 1701764190, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitFlagODA", - "receiver": false, - "title": "Kit (ODA Flag)", - "transmitter": false - }, - "ItemKitFridgeBig": { - "desc": "", - "hash": -1168199498, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitFridgeBig", - "receiver": false, - "title": "Kit (Fridge Large)", - "transmitter": false - }, - "ItemKitFridgeSmall": { - "desc": "", - "hash": 1661226524, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitFridgeSmall", - "receiver": false, - "title": "Kit (Fridge Small)", - "transmitter": false - }, - "ItemKitFurnace": { - "desc": "", - "hash": -806743925, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitFurnace", - "receiver": false, - "title": "Kit (Furnace)", - "transmitter": false - }, - "ItemKitFurniture": { - "desc": "", - "hash": 1162905029, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitFurniture", - "receiver": false, - "title": "Kit (Furniture)", - "transmitter": false - }, - "ItemKitFuselage": { - "desc": "", - "hash": -366262681, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitFuselage", - "receiver": false, - "title": "Kit (Fuselage)", - "transmitter": false - }, - "ItemKitGasGenerator": { - "desc": "", - "hash": 377745425, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitGasGenerator", - "receiver": false, - "title": "Kit (Gas Fuel Generator)", - "transmitter": false - }, - "ItemKitGasUmbilical": { - "desc": "", - "hash": -1867280568, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitGasUmbilical", - "receiver": false, - "title": "Kit (Gas Umbilical)", - "transmitter": false - }, - "ItemKitGovernedGasRocketEngine": { - "desc": "", - "hash": 206848766, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitGovernedGasRocketEngine", - "receiver": false, - "title": "Kit (Pumped Gas Rocket Engine)", - "transmitter": false - }, - "ItemKitGroundTelescope": { - "desc": "", - "hash": -2140672772, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitGroundTelescope", - "receiver": false, - "title": "Kit (Telescope)", - "transmitter": false - }, - "ItemKitGrowLight": { - "desc": "", - "hash": 341030083, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitGrowLight", - "receiver": false, - "title": "Kit (Grow Light)", - "transmitter": false - }, - "ItemKitHarvie": { - "desc": "", - "hash": -1022693454, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitHarvie", - "receiver": false, - "title": "Kit (Harvie)", - "transmitter": false - }, - "ItemKitHeatExchanger": { - "desc": "", - "hash": -1710540039, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitHeatExchanger", - "receiver": false, - "title": "Kit Heat Exchanger", - "transmitter": false - }, - "ItemKitHorizontalAutoMiner": { - "desc": "", - "hash": 844391171, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitHorizontalAutoMiner", - "receiver": false, - "title": "Kit (OGRE)", - "transmitter": false - }, - "ItemKitHydraulicPipeBender": { - "desc": "", - "hash": -2098556089, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitHydraulicPipeBender", - "receiver": false, - "title": "Kit (Hydraulic Pipe Bender)", - "transmitter": false - }, - "ItemKitHydroponicAutomated": { - "desc": "", - "hash": -927931558, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitHydroponicAutomated", - "receiver": false, - "title": "Kit (Automated Hydroponics)", - "transmitter": false - }, - "ItemKitHydroponicStation": { - "desc": "", - "hash": 2057179799, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitHydroponicStation", - "receiver": false, - "title": "Kit (Hydroponic Station)", - "transmitter": false - }, - "ItemKitIceCrusher": { - "desc": "", - "hash": 288111533, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitIceCrusher", - "receiver": false, - "title": "Kit (Ice Crusher)", - "transmitter": false - }, - "ItemKitInsulatedLiquidPipe": { - "desc": "", - "hash": 2067655311, - "item": { - "maxquantity": 20, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitInsulatedLiquidPipe", - "receiver": false, - "title": "Kit (Insulated Liquid Pipe)", - "transmitter": false - }, - "ItemKitInsulatedPipe": { - "desc": "", - "hash": 452636699, - "item": { - "maxquantity": 20, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitInsulatedPipe", - "receiver": false, - "title": "Kit (Insulated Pipe)", - "transmitter": false - }, - "ItemKitInsulatedPipeUtility": { - "desc": "", - "hash": -27284803, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitInsulatedPipeUtility", - "receiver": false, - "title": "Kit (Insulated Pipe Utility Gas)", - "transmitter": false - }, - "ItemKitInsulatedPipeUtilityLiquid": { - "desc": "", - "hash": -1831558953, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitInsulatedPipeUtilityLiquid", - "receiver": false, - "title": "Kit (Insulated Pipe Utility Liquid)", - "transmitter": false - }, - "ItemKitInteriorDoors": { - "desc": "", - "hash": 1935945891, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitInteriorDoors", - "receiver": false, - "title": "Kit (Interior Doors)", - "transmitter": false - }, - "ItemKitLadder": { - "desc": "", - "hash": 489494578, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLadder", - "receiver": false, - "title": "Kit (Ladder)", - "transmitter": false - }, - "ItemKitLandingPadAtmos": { - "desc": "", - "hash": 1817007843, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLandingPadAtmos", - "receiver": false, - "title": "Kit (Landing Pad Atmospherics)", - "transmitter": false - }, - "ItemKitLandingPadBasic": { - "desc": "", - "hash": 293581318, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLandingPadBasic", - "receiver": false, - "title": "Kit (Landing Pad Basic)", - "transmitter": false - }, - "ItemKitLandingPadWaypoint": { - "desc": "", - "hash": -1267511065, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLandingPadWaypoint", - "receiver": false, - "title": "Kit (Landing Pad Runway)", - "transmitter": false - }, - "ItemKitLargeDirectHeatExchanger": { - "desc": "", - "hash": 450164077, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLargeDirectHeatExchanger", - "receiver": false, - "title": "Kit (Large Direct Heat Exchanger)", - "transmitter": false - }, - "ItemKitLargeExtendableRadiator": { - "desc": "", - "hash": 847430620, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLargeExtendableRadiator", - "receiver": false, - "title": "Kit (Large Extendable Radiator)", - "transmitter": false - }, - "ItemKitLargeSatelliteDish": { - "desc": "", - "hash": -2039971217, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLargeSatelliteDish", - "receiver": false, - "title": "Kit (Large Satellite Dish)", - "transmitter": false - }, - "ItemKitLaunchMount": { - "desc": "", - "hash": -1854167549, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLaunchMount", - "receiver": false, - "title": "Kit (Launch Mount)", - "transmitter": false - }, - "ItemKitLaunchTower": { - "desc": "", - "hash": -174523552, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLaunchTower", - "receiver": false, - "title": "Kit (Rocket Launch Tower)", - "transmitter": false - }, - "ItemKitLiquidRegulator": { - "desc": "", - "hash": 1951126161, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLiquidRegulator", - "receiver": false, - "title": "Kit (Liquid Regulator)", - "transmitter": false - }, - "ItemKitLiquidTank": { - "desc": "", - "hash": -799849305, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLiquidTank", - "receiver": false, - "title": "Kit (Liquid Tank)", - "transmitter": false - }, - "ItemKitLiquidTankInsulated": { - "desc": "", - "hash": 617773453, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLiquidTankInsulated", - "receiver": false, - "title": "Kit (Insulated Liquid Tank)", - "transmitter": false - }, - "ItemKitLiquidTurboVolumePump": { - "desc": "", - "hash": -1805020897, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLiquidTurboVolumePump", - "receiver": false, - "title": "Kit (Turbo Volume Pump - Liquid)", - "transmitter": false - }, - "ItemKitLiquidUmbilical": { - "desc": "", - "hash": 1571996765, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLiquidUmbilical", - "receiver": false, - "title": "Kit (Liquid Umbilical)", - "transmitter": false - }, - "ItemKitLocker": { - "desc": "", - "hash": 882301399, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLocker", - "receiver": false, - "title": "Kit (Locker)", - "transmitter": false - }, - "ItemKitLogicCircuit": { - "desc": "", - "hash": 1512322581, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLogicCircuit", - "receiver": false, - "title": "Kit (IC Housing)", - "transmitter": false - }, - "ItemKitLogicInputOutput": { - "desc": "", - "hash": 1997293610, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLogicInputOutput", - "receiver": false, - "title": "Kit (Logic I/O)", - "transmitter": false - }, - "ItemKitLogicMemory": { - "desc": "", - "hash": -2098214189, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLogicMemory", - "receiver": false, - "title": "Kit (Logic Memory)", - "transmitter": false - }, - "ItemKitLogicProcessor": { - "desc": "", - "hash": 220644373, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLogicProcessor", - "receiver": false, - "title": "Kit (Logic Processor)", - "transmitter": false - }, - "ItemKitLogicSwitch": { - "desc": "", - "hash": 124499454, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLogicSwitch", - "receiver": false, - "title": "Kit (Logic Switch)", - "transmitter": false - }, - "ItemKitLogicTransmitter": { - "desc": "", - "hash": 1005397063, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitLogicTransmitter", - "receiver": false, - "title": "Kit (Logic Transmitter)", - "transmitter": false - }, - "ItemKitMotherShipCore": { - "desc": "", - "hash": -344968335, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitMotherShipCore", - "receiver": false, - "title": "Kit (Mothership)", - "transmitter": false - }, - "ItemKitMusicMachines": { - "desc": "", - "hash": -2038889137, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitMusicMachines", - "receiver": false, - "title": "Kit (Music Machines)", - "transmitter": false - }, - "ItemKitPassiveLargeRadiatorGas": { - "desc": "", - "hash": -1752768283, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitPassiveLargeRadiatorGas", - "receiver": false, - "title": "Kit (Medium Radiator)", - "transmitter": false - }, - "ItemKitPassiveLargeRadiatorLiquid": { - "desc": "", - "hash": 1453961898, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPassiveLargeRadiatorLiquid", - "receiver": false, - "title": "Kit (Medium Radiator Liquid)", - "transmitter": false - }, - "ItemKitPassthroughHeatExchanger": { - "desc": "", - "hash": 636112787, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPassthroughHeatExchanger", - "receiver": false, - "title": "Kit (CounterFlow Heat Exchanger)", - "transmitter": false - }, - "ItemKitPictureFrame": { - "desc": "", - "hash": -2062364768, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPictureFrame", - "receiver": false, - "title": "Kit Picture Frame", - "transmitter": false - }, - "ItemKitPipe": { - "desc": "", - "hash": -1619793705, - "item": { - "maxquantity": 20, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPipe", - "receiver": false, - "title": "Kit (Pipe)", - "transmitter": false - }, - "ItemKitPipeLiquid": { - "desc": "", - "hash": -1166461357, - "item": { - "maxquantity": 20, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPipeLiquid", - "receiver": false, - "title": "Kit (Liquid Pipe)", - "transmitter": false - }, - "ItemKitPipeOrgan": { - "desc": "", - "hash": -827125300, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPipeOrgan", - "receiver": false, - "title": "Kit (Pipe Organ)", - "transmitter": false - }, - "ItemKitPipeRadiator": { - "desc": "", - "hash": 920411066, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitPipeRadiator", - "receiver": false, - "title": "Kit (Pipe Radiator)", - "transmitter": false - }, - "ItemKitPipeRadiatorLiquid": { - "desc": "", - "hash": -1697302609, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitPipeRadiatorLiquid", - "receiver": false, - "title": "Kit (Pipe Radiator Liquid)", - "transmitter": false - }, - "ItemKitPipeUtility": { - "desc": "", - "hash": 1934508338, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPipeUtility", - "receiver": false, - "title": "Kit (Pipe Utility Gas)", - "transmitter": false - }, - "ItemKitPipeUtilityLiquid": { - "desc": "", - "hash": 595478589, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPipeUtilityLiquid", - "receiver": false, - "title": "Kit (Pipe Utility Liquid)", - "transmitter": false - }, - "ItemKitPlanter": { - "desc": "", - "hash": 119096484, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPlanter", - "receiver": false, - "title": "Kit (Planter)", - "transmitter": false - }, - "ItemKitPortablesConnector": { - "desc": "", - "hash": 1041148999, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPortablesConnector", - "receiver": false, - "title": "Kit (Portables Connector)", - "transmitter": false - }, - "ItemKitPowerTransmitter": { - "desc": "", - "hash": 291368213, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPowerTransmitter", - "receiver": false, - "title": "Kit (Power Transmitter)", - "transmitter": false - }, - "ItemKitPowerTransmitterOmni": { - "desc": "", - "hash": -831211676, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPowerTransmitterOmni", - "receiver": false, - "title": "Kit (Power Transmitter Omni)", - "transmitter": false - }, - "ItemKitPoweredVent": { - "desc": "", - "hash": 2015439334, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPoweredVent", - "receiver": false, - "title": "Kit (Powered Vent)", - "transmitter": false - }, - "ItemKitPressureFedGasEngine": { - "desc": "", - "hash": -121514007, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPressureFedGasEngine", - "receiver": false, - "title": "Kit (Pressure Fed Gas Engine)", - "transmitter": false - }, - "ItemKitPressureFedLiquidEngine": { - "desc": "", - "hash": -99091572, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPressureFedLiquidEngine", - "receiver": false, - "title": "Kit (Pressure Fed Liquid Engine)", - "transmitter": false - }, - "ItemKitPressurePlate": { - "desc": "", - "hash": 123504691, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPressurePlate", - "receiver": false, - "title": "Kit (Trigger Plate)", - "transmitter": false - }, - "ItemKitPumpedLiquidEngine": { - "desc": "", - "hash": 1921918951, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitPumpedLiquidEngine", - "receiver": false, - "title": "Kit (Pumped Liquid Engine)", - "transmitter": false - }, - "ItemKitRailing": { - "desc": "", - "hash": 750176282, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRailing", - "receiver": false, - "title": "Kit (Railing)", - "transmitter": false - }, - "ItemKitRecycler": { - "desc": "", - "hash": 849148192, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRecycler", - "receiver": false, - "title": "Kit (Recycler)", - "transmitter": false - }, - "ItemKitRegulator": { - "desc": "", - "hash": 1181371795, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRegulator", - "receiver": false, - "title": "Kit (Pressure Regulator)", - "transmitter": false - }, - "ItemKitReinforcedWindows": { - "desc": "", - "hash": 1459985302, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitReinforcedWindows", - "receiver": false, - "title": "Kit (Reinforced Windows)", - "transmitter": false - }, - "ItemKitResearchMachine": { - "desc": "", - "hash": 724776762, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitResearchMachine", - "receiver": false, - "title": "Kit Research Machine", - "transmitter": false - }, - "ItemKitRespawnPointWallMounted": { - "desc": "", - "hash": 1574688481, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRespawnPointWallMounted", - "receiver": false, - "title": "Kit (Respawn)", - "transmitter": false - }, - "ItemKitRocketAvionics": { - "desc": "", - "hash": 1396305045, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketAvionics", - "receiver": false, - "title": "Kit (Avionics)", - "transmitter": false - }, - "ItemKitRocketBattery": { - "desc": "", - "hash": -314072139, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketBattery", - "receiver": false, - "title": "Kit (Rocket Battery)", - "transmitter": false - }, - "ItemKitRocketCargoStorage": { - "desc": "", - "hash": 479850239, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketCargoStorage", - "receiver": false, - "title": "Kit (Rocket Cargo Storage)", - "transmitter": false - }, - "ItemKitRocketCelestialTracker": { - "desc": "", - "hash": -303008602, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketCelestialTracker", - "receiver": false, - "title": "Kit (Rocket Celestial Tracker)", - "transmitter": false - }, - "ItemKitRocketCircuitHousing": { - "desc": "", - "hash": 721251202, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketCircuitHousing", - "receiver": false, - "title": "Kit (Rocket Circuit Housing)", - "transmitter": false - }, - "ItemKitRocketDatalink": { - "desc": "", - "hash": -1256996603, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketDatalink", - "receiver": false, - "title": "Kit (Rocket Datalink)", - "transmitter": false - }, - "ItemKitRocketGasFuelTank": { - "desc": "", - "hash": -1629347579, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketGasFuelTank", - "receiver": false, - "title": "Kit (Rocket Gas Fuel Tank)", - "transmitter": false - }, - "ItemKitRocketLiquidFuelTank": { - "desc": "", - "hash": 2032027950, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketLiquidFuelTank", - "receiver": false, - "title": "Kit (Rocket Liquid Fuel Tank)", - "transmitter": false - }, - "ItemKitRocketManufactory": { - "desc": "", - "hash": -636127860, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketManufactory", - "receiver": false, - "title": "Kit (Rocket Manufactory)", - "transmitter": false - }, - "ItemKitRocketMiner": { - "desc": "", - "hash": -867969909, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketMiner", - "receiver": false, - "title": "Kit (Rocket Miner)", - "transmitter": false - }, - "ItemKitRocketScanner": { - "desc": "", - "hash": 1753647154, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketScanner", - "receiver": false, - "title": "Kit (Rocket Scanner)", - "transmitter": false - }, - "ItemKitRocketTransformerSmall": { - "desc": "", - "hash": -932335800, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRocketTransformerSmall", - "receiver": false, - "title": "Kit (Transformer Small (Rocket))", - "transmitter": false - }, - "ItemKitRoverFrame": { - "desc": "", - "hash": 1827215803, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRoverFrame", - "receiver": false, - "title": "Kit (Rover Frame)", - "transmitter": false - }, - "ItemKitRoverMKI": { - "desc": "", - "hash": 197243872, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitRoverMKI", - "receiver": false, - "title": "Kit (Rover Mk I)", - "transmitter": false - }, - "ItemKitSDBHopper": { - "desc": "", - "hash": 323957548, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSDBHopper", - "receiver": false, - "title": "Kit (SDB Hopper)", - "transmitter": false - }, - "ItemKitSatelliteDish": { - "desc": "", - "hash": 178422810, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSatelliteDish", - "receiver": false, - "title": "Kit (Medium Satellite Dish)", - "transmitter": false - }, - "ItemKitSecurityPrinter": { - "desc": "", - "hash": 578078533, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSecurityPrinter", - "receiver": false, - "title": "Kit (Security Printer)", - "transmitter": false - }, - "ItemKitSensor": { - "desc": "", - "hash": -1776897113, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSensor", - "receiver": false, - "title": "Kit (Sensors)", - "transmitter": false - }, - "ItemKitShower": { - "desc": "", - "hash": 735858725, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitShower", - "receiver": false, - "title": "Kit (Shower)", - "transmitter": false - }, - "ItemKitSign": { - "desc": "", - "hash": 529996327, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSign", - "receiver": false, - "title": "Kit (Sign)", - "transmitter": false - }, - "ItemKitSleeper": { - "desc": "", - "hash": 326752036, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSleeper", - "receiver": false, - "title": "Kit (Sleeper)", - "transmitter": false - }, - "ItemKitSmallDirectHeatExchanger": { - "desc": "", - "hash": -1332682164, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitSmallDirectHeatExchanger", - "receiver": false, - "title": "Kit (Small Direct Heat Exchanger)", - "transmitter": false - }, - "ItemKitSmallSatelliteDish": { - "desc": "", - "hash": 1960952220, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSmallSatelliteDish", - "receiver": false, - "title": "Kit (Small Satellite Dish)", - "transmitter": false - }, - "ItemKitSolarPanel": { - "desc": "", - "hash": -1924492105, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSolarPanel", - "receiver": false, - "title": "Kit (Solar Panel)", - "transmitter": false - }, - "ItemKitSolarPanelBasic": { - "desc": "", - "hash": 844961456, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitSolarPanelBasic", - "receiver": false, - "title": "Kit (Solar Panel Basic)", - "transmitter": false - }, - "ItemKitSolarPanelBasicReinforced": { - "desc": "", - "hash": -528695432, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitSolarPanelBasicReinforced", - "receiver": false, - "title": "Kit (Solar Panel Basic Heavy)", - "transmitter": false - }, - "ItemKitSolarPanelReinforced": { - "desc": "", - "hash": -364868685, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSolarPanelReinforced", - "receiver": false, - "title": "Kit (Solar Panel Heavy)", - "transmitter": false - }, - "ItemKitSolidGenerator": { - "desc": "", - "hash": 1293995736, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSolidGenerator", - "receiver": false, - "title": "Kit (Solid Generator)", - "transmitter": false - }, - "ItemKitSorter": { - "desc": "", - "hash": 969522478, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSorter", - "receiver": false, - "title": "Kit (Sorter)", - "transmitter": false - }, - "ItemKitSpeaker": { - "desc": "", - "hash": -126038526, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSpeaker", - "receiver": false, - "title": "Kit (Speaker)", - "transmitter": false - }, - "ItemKitStacker": { - "desc": "", - "hash": 1013244511, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitStacker", - "receiver": false, - "title": "Kit (Stacker)", - "transmitter": false - }, - "ItemKitStairs": { - "desc": "", - "hash": 170878959, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitStairs", - "receiver": false, - "title": "Kit (Stairs)", - "transmitter": false - }, - "ItemKitStairwell": { - "desc": "", - "hash": -1868555784, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitStairwell", - "receiver": false, - "title": "Kit (Stairwell)", - "transmitter": false - }, - "ItemKitStandardChute": { - "desc": "", - "hash": 2133035682, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitStandardChute", - "receiver": false, - "title": "Kit (Powered Chutes)", - "transmitter": false - }, - "ItemKitStirlingEngine": { - "desc": "", - "hash": -1821571150, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitStirlingEngine", - "receiver": false, - "title": "Kit (Stirling Engine)", - "transmitter": false - }, - "ItemKitSuitStorage": { - "desc": "", - "hash": 1088892825, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitSuitStorage", - "receiver": false, - "title": "Kit (Suit Storage)", - "transmitter": false - }, - "ItemKitTables": { - "desc": "", - "hash": -1361598922, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitTables", - "receiver": false, - "title": "Kit (Tables)", - "transmitter": false - }, - "ItemKitTank": { - "desc": "", - "hash": 771439840, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitTank", - "receiver": false, - "title": "Kit (Tank)", - "transmitter": false - }, - "ItemKitTankInsulated": { - "desc": "", - "hash": 1021053608, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitTankInsulated", - "receiver": false, - "title": "Kit (Tank Insulated)", - "transmitter": false - }, - "ItemKitToolManufactory": { - "desc": "", - "hash": 529137748, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitToolManufactory", - "receiver": false, - "title": "Kit (Tool Manufactory)", - "transmitter": false - }, - "ItemKitTransformer": { - "desc": "", - "hash": -453039435, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitTransformer", - "receiver": false, - "title": "Kit (Transformer Large)", - "transmitter": false - }, - "ItemKitTransformerSmall": { - "desc": "", - "hash": 665194284, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitTransformerSmall", - "receiver": false, - "title": "Kit (Transformer Small)", - "transmitter": false - }, - "ItemKitTurbineGenerator": { - "desc": "", - "hash": -1590715731, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitTurbineGenerator", - "receiver": false, - "title": "Kit (Turbine Generator)", - "transmitter": false - }, - "ItemKitTurboVolumePump": { - "desc": "", - "hash": -1248429712, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitTurboVolumePump", - "receiver": false, - "title": "Kit (Turbo Volume Pump - Gas)", - "transmitter": false - }, - "ItemKitUprightWindTurbine": { - "desc": "", - "hash": -1798044015, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitUprightWindTurbine", - "receiver": false, - "title": "Kit (Upright Wind Turbine)", - "transmitter": false - }, - "ItemKitVendingMachine": { - "desc": "", - "hash": -2038384332, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitVendingMachine", - "receiver": false, - "title": "Kit (Vending Machine)", - "transmitter": false - }, - "ItemKitVendingMachineRefrigerated": { - "desc": "", - "hash": -1867508561, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitVendingMachineRefrigerated", - "receiver": false, - "title": "Kit (Vending Machine Refrigerated)", - "transmitter": false - }, - "ItemKitWall": { - "desc": "", - "hash": -1826855889, - "item": { - "maxquantity": 30, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWall", - "receiver": false, - "title": "Kit (Wall)", - "transmitter": false - }, - "ItemKitWallArch": { - "desc": "", - "hash": 1625214531, - "item": { - "maxquantity": 30, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWallArch", - "receiver": false, - "title": "Kit (Arched Wall)", - "transmitter": false - }, - "ItemKitWallFlat": { - "desc": "", - "hash": -846838195, - "item": { - "maxquantity": 30, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWallFlat", - "receiver": false, - "title": "Kit (Flat Wall)", - "transmitter": false - }, - "ItemKitWallGeometry": { - "desc": "", - "hash": -784733231, - "item": { - "maxquantity": 30, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWallGeometry", - "receiver": false, - "title": "Kit (Geometric Wall)", - "transmitter": false - }, - "ItemKitWallIron": { - "desc": "", - "hash": -524546923, - "item": { - "maxquantity": 30, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWallIron", - "receiver": false, - "title": "Kit (Iron Wall)", - "transmitter": false - }, - "ItemKitWallPadded": { - "desc": "", - "hash": -821868990, - "item": { - "maxquantity": 30, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWallPadded", - "receiver": false, - "title": "Kit (Padded Wall)", - "transmitter": false - }, - "ItemKitWaterBottleFiller": { - "desc": "", - "hash": 159886536, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWaterBottleFiller", - "receiver": false, - "title": "Kit (Water Bottle Filler)", - "transmitter": false - }, - "ItemKitWaterPurifier": { - "desc": "", - "hash": 611181283, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWaterPurifier", - "receiver": false, - "title": "Kit (Water Purifier)", - "transmitter": false - }, - "ItemKitWeatherStation": { - "desc": "", - "hash": 337505889, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemKitWeatherStation", - "receiver": false, - "title": "Kit (Weather Station)", - "transmitter": false - }, - "ItemKitWindTurbine": { - "desc": "", - "hash": -868916503, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWindTurbine", - "receiver": false, - "title": "Kit (Wind Turbine)", - "transmitter": false - }, - "ItemKitWindowShutter": { - "desc": "", - "hash": 1779979754, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemKitWindowShutter", - "receiver": false, - "title": "Kit (Window Shutter)", - "transmitter": false - }, - "ItemLabeller": { - "desc": "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic.", - "hash": -743968726, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemLabeller", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Labeller", - "transmitter": false - }, - "ItemLaptop": { - "desc": "The Laptop functions as a portable IC editor. To operate the Laptop it must be powered with a battery, have a IC Editor Motherboard in the motherboard slot, and an Integrated Circuit (IC10) in the Programmable Chip Slot.\n\nYou must place the laptop down to interact with the onsreen UI.\n \nConnects to Logic Transmitter", - "hash": 141535121, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "Power": "Read", - "PressureExternal": "Read", - "ReferenceId": "Read", - "TemperatureExternal": "Read" - }, - "name": "ItemLaptop", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "1": "Read" - }, - "ChargeRatio": { - "1": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read" - } - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Motherboard", - "typ": "Motherboard" - } - ], - "title": "Laptop", - "transmitter": true - }, - "ItemLeadIngot": { - "desc": "", - "hash": 2134647745, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Lead": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemLeadIngot", - "receiver": false, - "title": "Ingot (Lead)", - "transmitter": false - }, - "ItemLeadOre": { - "desc": "Lead is a chemical element with the symbol \"Pb\". It is a dense, heavy metal with a low melting point. Lead is a used to make a variety of things such as alloys like Ingot (Solder) and munitions.", - "hash": -190236170, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Lead": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemLeadOre", - "receiver": false, - "title": "Ore (Lead)", - "transmitter": false - }, - "ItemLightSword": { - "desc": "A charming, if useless, pseudo-weapon. (Creative only.)", - "hash": 1949076595, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemLightSword", - "receiver": false, - "title": "Light Sword", - "transmitter": false - }, - "ItemLiquidCanisterEmpty": { - "desc": "", - "hash": -185207387, - "item": { - "slotclass": "LiquidCanister", - "sorting": "Atmospherics" - }, - "name": "ItemLiquidCanisterEmpty", - "receiver": false, - "title": "Liquid Canister", - "transmitter": false - }, - "ItemLiquidCanisterSmart": { - "desc": "0.Mode0\n1.Mode1", - "hash": 777684475, - "item": { - "slotclass": "LiquidCanister", - "sorting": "Atmospherics" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "ItemLiquidCanisterSmart", - "receiver": false, - "title": "Liquid Canister (Smart)", - "transmitter": false - }, - "ItemLiquidDrain": { - "desc": "", - "hash": 2036225202, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemLiquidDrain", - "receiver": false, - "title": "Kit (Liquid Drain)", - "transmitter": false - }, - "ItemLiquidPipeAnalyzer": { - "desc": "", - "hash": 226055671, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemLiquidPipeAnalyzer", - "receiver": false, - "title": "Kit (Liquid Pipe Analyzer)", - "transmitter": false - }, - "ItemLiquidPipeHeater": { - "desc": "Creates a Pipe Heater (Liquid).", - "hash": -248475032, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemLiquidPipeHeater", - "receiver": false, - "title": "Pipe Heater Kit (Liquid)", - "transmitter": false - }, - "ItemLiquidPipeValve": { - "desc": "This kit creates a Liquid Valve.", - "hash": -2126113312, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemLiquidPipeValve", - "receiver": false, - "title": "Kit (Liquid Pipe Valve)", - "transmitter": false - }, - "ItemLiquidPipeVolumePump": { - "desc": "", - "hash": -2106280569, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemLiquidPipeVolumePump", - "receiver": false, - "title": "Kit (Liquid Volume Pump)", - "transmitter": false - }, - "ItemLiquidTankStorage": { - "desc": "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister.", - "hash": 2037427578, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemLiquidTankStorage", - "receiver": false, - "title": "Kit (Liquid Canister Storage)", - "transmitter": false - }, - "ItemMKIIAngleGrinder": { - "desc": "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure.", - "hash": 240174650, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemMKIIAngleGrinder", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Mk II Angle Grinder", - "transmitter": false - }, - "ItemMKIIArcWelder": { - "desc": "", - "hash": -2061979347, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemMKIIArcWelder", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Mk II Arc Welder", - "transmitter": false - }, - "ItemMKIICrowbar": { - "desc": "Recurso's entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise. The MK II is more resistant to temperature and pressure.", - "hash": 1440775434, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemMKIICrowbar", - "receiver": false, - "title": "Mk II Crowbar", - "transmitter": false - }, - "ItemMKIIDrill": { - "desc": "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature.", - "hash": 324791548, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemMKIIDrill", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Mk II Drill", - "transmitter": false - }, - "ItemMKIIDuctTape": { - "desc": "In the distant past, one of Earth's great champions taught a generation of 'Fix-It People' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage.", - "hash": 388774906, - "item": { - "maxquantity": 1, - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemMKIIDuctTape", - "receiver": false, - "title": "Mk II Duct Tape", - "transmitter": false - }, - "ItemMKIIMiningDrill": { - "desc": "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.' The MK II is more resistant to temperature and pressure.", - "hash": -1875271296, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Default", - "1": "Flatten" - }, - "name": "ItemMKIIMiningDrill", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Mk II Mining Drill", - "transmitter": false - }, - "ItemMKIIScrewdriver": { - "desc": "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units. The MK II is more resistant to temperature and pressure.", - "hash": -2015613246, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemMKIIScrewdriver", - "receiver": false, - "title": "Mk II Screwdriver", - "transmitter": false - }, - "ItemMKIIWireCutters": { - "desc": "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools.", - "hash": -178893251, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemMKIIWireCutters", - "receiver": false, - "title": "Mk II Wire Cutters", - "transmitter": false - }, - "ItemMKIIWrench": { - "desc": "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures The MK II is more resistant to temperature and pressure.", - "hash": 1862001680, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemMKIIWrench", - "receiver": false, - "title": "Mk II Wrench", - "transmitter": false - }, - "ItemMarineBodyArmor": { - "desc": "", - "hash": 1399098998, - "item": { - "slotclass": "Suit", - "sorting": "Clothing" - }, - "name": "ItemMarineBodyArmor", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Marine Armor", - "transmitter": false - }, - "ItemMarineHelmet": { - "desc": "", - "hash": 1073631646, - "item": { - "slotclass": "Helmet", - "sorting": "Clothing" - }, - "name": "ItemMarineHelmet", - "receiver": false, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Marine Helmet", - "transmitter": false - }, - "ItemMilk": { - "desc": "Full disclosure, it's not actually 'milk', but an Agrizero-invented synthesis of 5ml Soy Oil and 5g Fern, delicately blended in the Chemistry Station. Surprisingly filling, it can be used as an ingredient to cook other food in the Microwave or Automated Oven. Think, Muffin.", - "hash": 1327248310, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 100, - "reagents": { - "Milk": 1.0 - }, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemMilk", - "receiver": false, - "title": "Milk", - "transmitter": false - }, - "ItemMiningBackPack": { - "desc": "", - "hash": -1650383245, - "item": { - "slotclass": "Back", - "sorting": "Clothing" - }, - "name": "ItemMiningBackPack", - "receiver": false, - "slots": [ - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - } - ], - "title": "Mining Backpack", - "transmitter": false - }, - "ItemMiningBelt": { - "desc": "Originally developed by Recurso Espaciais for asteroid mining, the Stationeer's mining belt has room for two tools and eight ore stacks. While wearing the belt, ore is automatically stored there when mined. Volatile and temperature-dependent remain stable in the environmentally controlled unit.", - "hash": -676435305, - "item": { - "slotclass": "Belt", - "sorting": "Clothing" - }, - "name": "ItemMiningBelt", - "receiver": false, - "slots": [ - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - } - ], - "title": "Mining Belt", - "transmitter": false - }, - "ItemMiningBeltMKII": { - "desc": "A larger and more capacious mining belt, the Mk II is similar to the Mining Belt, but has 13 slots instead of the basic 8, to increase the length of your mining trips. It also has space for two tools. ", - "hash": 1470787934, - "item": { - "slotclass": "Belt", - "sorting": "Clothing" - }, - "logic": { - "ReferenceId": "Read" - }, - "name": "ItemMiningBeltMKII", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "12": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "13": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "14": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - } - ], - "title": "Mining Belt MK II", - "transmitter": false - }, - "ItemMiningCharge": { - "desc": "A low cost, high yield explosive with a 10 second timer.", - "hash": 15829510, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "ItemMiningCharge", - "receiver": false, - "title": "Mining Charge", - "transmitter": false - }, - "ItemMiningDrill": { - "desc": "The handheld 'Topo' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, 'The Topo don't stopo.'", - "hash": 1055173191, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Default", - "1": "Flatten" - }, - "name": "ItemMiningDrill", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Mining Drill", - "transmitter": false - }, - "ItemMiningDrillHeavy": { - "desc": "Sometimes mining trips require something a little bigger to bring home the goods. This scaled up version of the Recurso 'Topo' design Mining Drill can literally move mountains. The heavy mining drill will remove more ground and mine ore more quickly than the standard mining drill. The heavy mining drill is also resilient to temperature and pressure. So no matter what planet or extreme weather conditions may be present, the Recurso heavy mining drill will get the job done.", - "hash": -1663349918, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Default", - "1": "Flatten" - }, - "name": "ItemMiningDrillHeavy", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Mining Drill (Heavy)", - "transmitter": false - }, - "ItemMiningDrillPneumatic": { - "desc": "0.Default\n1.Flatten", - "hash": 1258187304, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "modes": { - "0": "Default", - "1": "Flatten" - }, - "name": "ItemMiningDrillPneumatic", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - } - ], - "title": "Pneumatic Mining Drill", - "transmitter": false - }, - "ItemMkIIToolbelt": { - "desc": "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy.", - "hash": 1467558064, - "item": { - "slotclass": "Belt", - "sorting": "Clothing" - }, - "logic": { - "ReferenceId": "Read" - }, - "name": "ItemMkIIToolbelt", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Tool Belt MK II", - "transmitter": false - }, - "ItemMuffin": { - "desc": "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin.", - "hash": -1864982322, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemMuffin", - "receiver": false, - "title": "Muffin", - "transmitter": false - }, - "ItemMushroom": { - "desc": "A tasty food item. Unlike normal plants, it consumes Oxygen and outputs Carbon Dioxide. Mushrooms will only mature at a moderate rate in darkness, and prolonged light will kill it.", - "hash": 2044798572, - "item": { - "ingredient": true, - "maxquantity": 20, - "reagents": { - "Mushroom": 1.0 - }, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemMushroom", - "receiver": false, - "title": "Mushroom", - "transmitter": false - }, - "ItemNVG": { - "desc": "", - "hash": 982514123, - "item": { - "slotclass": "Glasses", - "sorting": "Clothing" - }, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemNVG", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Night Vision Goggles", - "transmitter": false - }, - "ItemNickelIngot": { - "desc": "", - "hash": -1406385572, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Nickel": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemNickelIngot", - "receiver": false, - "title": "Ingot (Nickel)", - "transmitter": false - }, - "ItemNickelOre": { - "desc": "Nickel is a chemical element with the symbol \"Ni\" and is a rare metal commonly used as a plating to prevent corrosion. Sought after by many Stationeers, Nickel is also commonly used to create several alloys.", - "hash": 1830218956, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Nickel": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemNickelOre", - "receiver": false, - "title": "Ore (Nickel)", - "transmitter": false - }, - "ItemNitrice": { - "desc": "Nitrice is the nickname given to solid Nitrogen Ice, and found on many planets and moons in the Solar System. Given the inert nature of the Nitrogen it produces, the ice is useful when making breathable atmospheres with low flammability.\n\nHighly sensitive to temperature, nitrice will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small.", - "hash": -1499471529, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemNitrice", - "receiver": false, - "title": "Ice (Nitrice)", - "transmitter": false - }, - "ItemOxite": { - "desc": "Oxite ice is largely composed of frozen Oxygen, and found on many planets in the Solar System. Highly valuable and sought after, not all planets a Stationeer visits will have some. \n\nHighly sensitive to temperature, oxite will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small. When melting, oxite produces a mixture of Oxygen and Nitrogen.", - "hash": -1805394113, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemOxite", - "receiver": false, - "title": "Ice (Oxite)", - "transmitter": false - }, - "ItemPassiveVent": { - "desc": "This kit creates a Passive Vent among other variants.", - "hash": 238631271, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPassiveVent", - "receiver": false, - "title": "Passive Vent", - "transmitter": false - }, - "ItemPassiveVentInsulated": { - "desc": "", - "hash": -1397583760, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPassiveVentInsulated", - "receiver": false, - "title": "Kit (Insulated Passive Vent)", - "transmitter": false - }, - "ItemPeaceLily": { - "desc": "A fetching lily with greater resistance to cold temperatures.", - "hash": 2042955224, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemPeaceLily", - "receiver": false, - "title": "Peace Lily", - "transmitter": false - }, - "ItemPickaxe": { - "desc": "When the sun sets and the Mining Drill runs dead, its batteries drained and your Solar Panel cold and lifeless, the Autolathe empty, the way forward unclear, one thing holds back the endless night of defeat: the trusty pickaxe.", - "hash": -913649823, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemPickaxe", - "receiver": false, - "title": "Pickaxe", - "transmitter": false - }, - "ItemPillHeal": { - "desc": "Three centuries of pharmaceutical technology compressed into one small, easy to ingest pill: the Heal Pill, aka the Proton Pill, aka Mr Happy contains active enzymes, therapeutic proteins, modified microbial strains, and mammalian cell line analogues in a single-dose boost of high purity, efficacy, and potency that potentiates a swift parasympathetic immune response.", - "hash": 1118069417, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemPillHeal", - "receiver": false, - "title": "Pill (Medical)", - "transmitter": false - }, - "ItemPillStun": { - "desc": "Through rarely publicized, the existence of this pill is an open secret. For use when all else has failed, the Sayonara Suppository immobilizes and rapidly ends the average Stationeer. The delivery mode ensures that if a Stationeer chooses to take this pill, they really have to want it.", - "hash": 418958601, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemPillStun", - "receiver": false, - "title": "Pill (Paralysis)", - "transmitter": false - }, - "ItemPipeAnalyizer": { - "desc": "This kit creates a Pipe Analyzer.", - "hash": -767597887, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeAnalyizer", - "receiver": false, - "title": "Kit (Pipe Analyzer)", - "transmitter": false - }, - "ItemPipeCowl": { - "desc": "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres.", - "hash": -38898376, - "item": { - "maxquantity": 20, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeCowl", - "receiver": false, - "title": "Pipe Cowl", - "transmitter": false - }, - "ItemPipeDigitalValve": { - "desc": "This kit creates a Digital Valve.", - "hash": -1532448832, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeDigitalValve", - "receiver": false, - "title": "Kit (Digital Valve)", - "transmitter": false - }, - "ItemPipeGasMixer": { - "desc": "This kit creates a Gas Mixer.", - "hash": -1134459463, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeGasMixer", - "receiver": false, - "title": "Kit (Gas Mixer)", - "transmitter": false - }, - "ItemPipeHeater": { - "desc": "Creates a Pipe Heater (Gas).", - "hash": -1751627006, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemPipeHeater", - "receiver": false, - "title": "Pipe Heater Kit (Gas)", - "transmitter": false - }, - "ItemPipeIgniter": { - "desc": "", - "hash": 1366030599, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeIgniter", - "receiver": false, - "title": "Kit (Pipe Igniter)", - "transmitter": false - }, - "ItemPipeLabel": { - "desc": "This kit creates a Pipe Label.", - "hash": 391769637, - "item": { - "maxquantity": 20, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeLabel", - "receiver": false, - "title": "Kit (Pipe Label)", - "transmitter": false - }, - "ItemPipeLiquidRadiator": { - "desc": "This kit creates a Liquid Pipe Convection Radiator.", - "hash": -906521320, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeLiquidRadiator", - "receiver": false, - "title": "Kit (Liquid Radiator)", - "transmitter": false - }, - "ItemPipeMeter": { - "desc": "This kit creates a Pipe Meter.", - "hash": 1207939683, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeMeter", - "receiver": false, - "title": "Kit (Pipe Meter)", - "transmitter": false - }, - "ItemPipeRadiator": { - "desc": "This kit creates a Pipe Convection Radiator.", - "hash": -1796655088, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeRadiator", - "receiver": false, - "title": "Kit (Radiator)", - "transmitter": false - }, - "ItemPipeValve": { - "desc": "This kit creates a Valve.", - "hash": 799323450, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemPipeValve", - "receiver": false, - "title": "Kit (Pipe Valve)", - "transmitter": false - }, - "ItemPipeVolumePump": { - "desc": "This kit creates a Volume Pump.", - "hash": -1766301997, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPipeVolumePump", - "receiver": false, - "title": "Kit (Volume Pump)", - "transmitter": false - }, - "ItemPlantEndothermic_Creative": { - "desc": "", - "hash": -1159179557, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemPlantEndothermic_Creative", - "receiver": false, - "title": "Endothermic Plant Creative", - "transmitter": false - }, - "ItemPlantEndothermic_Genepool1": { - "desc": "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings, when supplied with sufficient Nitrogen. The alpha variant has a peak cooling and electrolysis capacity of 90Watts and is most efficient operating in air temperatures of 0 to 40 Degrees Celsius.", - "hash": 851290561, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemPlantEndothermic_Genepool1", - "receiver": false, - "title": "Winterspawn (Alpha variant)", - "transmitter": false - }, - "ItemPlantEndothermic_Genepool2": { - "desc": "Agrizero's Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings when supplied with sufficient Nitrogen. The beta variant has a peak cooling and electrolysis capacity of 150Watts and is most efficient operating in air temperatures of 14 to 24 Degrees Celsius.", - "hash": -1414203269, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemPlantEndothermic_Genepool2", - "receiver": false, - "title": "Winterspawn (Beta variant)", - "transmitter": false - }, - "ItemPlantSampler": { - "desc": "The Plant Sampler allows you to take a gene sample of a growing plant. The sampler can then be placed in the Plant Genetic Analyzer to attain and interpret the results.", - "hash": 173023800, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Activate": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "ItemPlantSampler", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Plant Sampler", - "transmitter": false - }, - "ItemPlantSwitchGrass": { - "desc": "", - "hash": -532672323, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Default" - }, - "name": "ItemPlantSwitchGrass", - "receiver": false, - "title": "Switch Grass", - "transmitter": false - }, - "ItemPlantThermogenic_Creative": { - "desc": "", - "hash": -1208890208, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemPlantThermogenic_Creative", - "receiver": false, - "title": "Thermogenic Plant Creative", - "transmitter": false - }, - "ItemPlantThermogenic_Genepool1": { - "desc": "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant.", - "hash": -177792789, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemPlantThermogenic_Genepool1", - "receiver": false, - "title": "Hades Flower (Alpha strain)", - "transmitter": false - }, - "ItemPlantThermogenic_Genepool2": { - "desc": "The Agrizero's-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant. The beta strain is notably more efficient than the earlier, more experimental alpha variant.", - "hash": 1819167057, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemPlantThermogenic_Genepool2", - "receiver": false, - "title": "Hades Flower (Beta strain)", - "transmitter": false - }, - "ItemPlasticSheets": { - "desc": "", - "hash": 662053345, - "item": { - "maxquantity": 50, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemPlasticSheets", - "receiver": false, - "title": "Plastic Sheets", - "transmitter": false - }, - "ItemPotato": { - "desc": " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies.", - "hash": 1929046963, - "item": { - "ingredient": true, - "maxquantity": 20, - "reagents": { - "Potato": 1.0 - }, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemPotato", - "receiver": false, - "title": "Potato", - "transmitter": false - }, - "ItemPotatoBaked": { - "desc": "", - "hash": -2111886401, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 1, - "reagents": { - "Potato": 1.0 - }, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemPotatoBaked", - "receiver": false, - "title": "Baked Potato", - "transmitter": false - }, - "ItemPowerConnector": { - "desc": "This kit creates a Power Connector.", - "hash": 839924019, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemPowerConnector", - "receiver": false, - "title": "Kit (Power Connector)", - "transmitter": false - }, - "ItemPumpkin": { - "desc": "Pumpkins are a perennial plant, with both a long growth time, and a long time between harvests. Its low requirement for darkness allows for accelerated growing if provided with extra light.", - "hash": 1277828144, - "item": { - "ingredient": true, - "maxquantity": 20, - "reagents": { - "Pumpkin": 1.0 - }, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemPumpkin", - "receiver": false, - "title": "Pumpkin", - "transmitter": false - }, - "ItemPumpkinPie": { - "desc": "", - "hash": 62768076, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemPumpkinPie", - "receiver": false, - "title": "Pumpkin Pie", - "transmitter": false - }, - "ItemPumpkinSoup": { - "desc": "Made using Cooked Pumpkin and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay", - "hash": 1277979876, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemPumpkinSoup", - "receiver": false, - "title": "Pumpkin Soup", - "transmitter": false - }, - "ItemPureIce": { - "desc": "A frozen chunk of pure Water", - "hash": -1616308158, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIce", - "receiver": false, - "title": "Pure Ice Water", - "transmitter": false - }, - "ItemPureIceCarbonDioxide": { - "desc": "A frozen chunk of pure Carbon Dioxide", - "hash": -1251009404, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceCarbonDioxide", - "receiver": false, - "title": "Pure Ice Carbon Dioxide", - "transmitter": false - }, - "ItemPureIceHydrogen": { - "desc": "A frozen chunk of pure Hydrogen", - "hash": 944530361, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceHydrogen", - "receiver": false, - "title": "Pure Ice Hydrogen", - "transmitter": false - }, - "ItemPureIceLiquidCarbonDioxide": { - "desc": "A frozen chunk of pure Liquid Carbon Dioxide", - "hash": -1715945725, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceLiquidCarbonDioxide", - "receiver": false, - "title": "Pure Ice Liquid Carbon Dioxide", - "transmitter": false - }, - "ItemPureIceLiquidHydrogen": { - "desc": "A frozen chunk of pure Liquid Hydrogen", - "hash": -1044933269, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceLiquidHydrogen", - "receiver": false, - "title": "Pure Ice Liquid Hydrogen", - "transmitter": false - }, - "ItemPureIceLiquidNitrogen": { - "desc": "A frozen chunk of pure Liquid Nitrogen", - "hash": 1674576569, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceLiquidNitrogen", - "receiver": false, - "title": "Pure Ice Liquid Nitrogen", - "transmitter": false - }, - "ItemPureIceLiquidNitrous": { - "desc": "A frozen chunk of pure Liquid Nitrous Oxide", - "hash": 1428477399, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceLiquidNitrous", - "receiver": false, - "title": "Pure Ice Liquid Nitrous", - "transmitter": false - }, - "ItemPureIceLiquidOxygen": { - "desc": "A frozen chunk of pure Liquid Oxygen", - "hash": 541621589, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceLiquidOxygen", - "receiver": false, - "title": "Pure Ice Liquid Oxygen", - "transmitter": false - }, - "ItemPureIceLiquidPollutant": { - "desc": "A frozen chunk of pure Liquid Pollutant", - "hash": -1748926678, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceLiquidPollutant", - "receiver": false, - "title": "Pure Ice Liquid Pollutant", - "transmitter": false - }, - "ItemPureIceLiquidVolatiles": { - "desc": "A frozen chunk of pure Liquid Volatiles", - "hash": -1306628937, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceLiquidVolatiles", - "receiver": false, - "title": "Pure Ice Liquid Volatiles", - "transmitter": false - }, - "ItemPureIceNitrogen": { - "desc": "A frozen chunk of pure Nitrogen", - "hash": -1708395413, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceNitrogen", - "receiver": false, - "title": "Pure Ice Nitrogen", - "transmitter": false - }, - "ItemPureIceNitrous": { - "desc": "A frozen chunk of pure Nitrous Oxide", - "hash": 386754635, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceNitrous", - "receiver": false, - "title": "Pure Ice NitrousOxide", - "transmitter": false - }, - "ItemPureIceOxygen": { - "desc": "A frozen chunk of pure Oxygen", - "hash": -1150448260, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceOxygen", - "receiver": false, - "title": "Pure Ice Oxygen", - "transmitter": false - }, - "ItemPureIcePollutant": { - "desc": "A frozen chunk of pure Pollutant", - "hash": -1755356, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIcePollutant", - "receiver": false, - "title": "Pure Ice Pollutant", - "transmitter": false - }, - "ItemPureIcePollutedWater": { - "desc": "A frozen chunk of Polluted Water", - "hash": -2073202179, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIcePollutedWater", - "receiver": false, - "title": "Pure Ice Polluted Water", - "transmitter": false - }, - "ItemPureIceSteam": { - "desc": "A frozen chunk of pure Steam", - "hash": -874791066, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceSteam", - "receiver": false, - "title": "Pure Ice Steam", - "transmitter": false - }, - "ItemPureIceVolatiles": { - "desc": "A frozen chunk of pure Volatiles", - "hash": -633723719, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemPureIceVolatiles", - "receiver": false, - "title": "Pure Ice Volatiles", - "transmitter": false - }, - "ItemRTG": { - "desc": "This kit creates that miracle of modern science, a Kit (Creative RTG).", - "hash": 495305053, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemRTG", - "receiver": false, - "title": "Kit (Creative RTG)", - "transmitter": false - }, - "ItemRTGSurvival": { - "desc": "This kit creates a Kit (RTG).", - "hash": 1817645803, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemRTGSurvival", - "receiver": false, - "title": "Kit (RTG)", - "transmitter": false - }, - "ItemReagentMix": { - "desc": "Reagent mix is pure potential. A slurry of undifferentiated ores, it is output by the Recycler and can be fed into the Centrifuge to separate and recover the individual materials. Reagent mix is also output by the Furnace when the current contents are ejected without smelting a specific ingot.", - "hash": -1641500434, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemReagentMix", - "receiver": false, - "title": "Reagent Mix", - "transmitter": false - }, - "ItemRemoteDetonator": { - "desc": "", - "hash": 678483886, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemRemoteDetonator", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Remote Detonator", - "transmitter": false - }, - "ItemResearchCapsule": { - "desc": "", - "hash": 819096942, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemResearchCapsule", - "receiver": false, - "title": "Research Capsule Blue", - "transmitter": false - }, - "ItemResearchCapsuleGreen": { - "desc": "", - "hash": -1352732550, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemResearchCapsuleGreen", - "receiver": false, - "title": "Research Capsule Green", - "transmitter": false - }, - "ItemResearchCapsuleRed": { - "desc": "", - "hash": 954947943, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemResearchCapsuleRed", - "receiver": false, - "title": "Research Capsule Red", - "transmitter": false - }, - "ItemResearchCapsuleYellow": { - "desc": "", - "hash": 750952701, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemResearchCapsuleYellow", - "receiver": false, - "title": "Research Capsule Yellow", - "transmitter": false - }, - "ItemReusableFireExtinguisher": { - "desc": "Requires a canister filled with any inert liquid to opperate.", - "hash": -1773192190, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemReusableFireExtinguisher", - "receiver": false, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ], - "title": "Fire Extinguisher (Reusable)", - "transmitter": false - }, - "ItemRice": { - "desc": "Rice grows at a moderate rate as long as its supplied with plenty of water. Being more dependant on water, rice plants can easily die during periods of drought.", - "hash": 658916791, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Rice": 1.0 - }, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemRice", - "receiver": false, - "title": "Rice", - "transmitter": false - }, - "ItemRoadFlare": { - "desc": "Designed to burn anywhere in the Solar System, the EZC magnesium fusee supplies its own oxygen to fuel combustion, and dispel the eternal night of space.", - "hash": 871811564, - "item": { - "maxquantity": 20, - "slotclass": "Flare", - "sorting": "Default" - }, - "name": "ItemRoadFlare", - "receiver": false, - "title": "Road Flare", - "transmitter": false - }, - "ItemRocketMiningDrillHead": { - "desc": "Replaceable drill head for Rocket Miner", - "hash": 2109945337, - "item": { - "maxquantity": 100, - "slotclass": "DrillHead", - "sorting": "Default" - }, - "name": "ItemRocketMiningDrillHead", - "receiver": false, - "title": "Mining-Drill Head (Basic)", - "transmitter": false - }, - "ItemRocketMiningDrillHeadDurable": { - "desc": "", - "hash": 1530764483, - "item": { - "maxquantity": 100, - "slotclass": "DrillHead", - "sorting": "Default" - }, - "name": "ItemRocketMiningDrillHeadDurable", - "receiver": false, - "title": "Mining-Drill Head (Durable)", - "transmitter": false - }, - "ItemRocketMiningDrillHeadHighSpeedIce": { - "desc": "", - "hash": 653461728, - "item": { - "maxquantity": 100, - "slotclass": "DrillHead", - "sorting": "Default" - }, - "name": "ItemRocketMiningDrillHeadHighSpeedIce", - "receiver": false, - "title": "Mining-Drill Head (High Speed Ice)", - "transmitter": false - }, - "ItemRocketMiningDrillHeadHighSpeedMineral": { - "desc": "", - "hash": 1440678625, - "item": { - "maxquantity": 100, - "slotclass": "DrillHead", - "sorting": "Default" - }, - "name": "ItemRocketMiningDrillHeadHighSpeedMineral", - "receiver": false, - "title": "Mining-Drill Head (High Speed Mineral)", - "transmitter": false - }, - "ItemRocketMiningDrillHeadIce": { - "desc": "", - "hash": -380904592, - "item": { - "maxquantity": 100, - "slotclass": "DrillHead", - "sorting": "Default" - }, - "name": "ItemRocketMiningDrillHeadIce", - "receiver": false, - "title": "Mining-Drill Head (Ice)", - "transmitter": false - }, - "ItemRocketMiningDrillHeadLongTerm": { - "desc": "", - "hash": -684020753, - "item": { - "maxquantity": 100, - "slotclass": "DrillHead", - "sorting": "Default" - }, - "name": "ItemRocketMiningDrillHeadLongTerm", - "receiver": false, - "title": "Mining-Drill Head (Long Term)", - "transmitter": false - }, - "ItemRocketMiningDrillHeadMineral": { - "desc": "", - "hash": 1083675581, - "item": { - "maxquantity": 100, - "slotclass": "DrillHead", - "sorting": "Default" - }, - "name": "ItemRocketMiningDrillHeadMineral", - "receiver": false, - "title": "Mining-Drill Head (Mineral)", - "transmitter": false - }, - "ItemRocketScanningHead": { - "desc": "", - "hash": -1198702771, - "item": { - "maxquantity": 1, - "slotclass": "ScanningHead", - "sorting": "Default" - }, - "name": "ItemRocketScanningHead", - "receiver": false, - "title": "Rocket Scanner Head", - "transmitter": false - }, - "ItemScanner": { - "desc": "A mysterious piece of technology, rumored to have Zrillian origins.", - "hash": 1661270830, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemScanner", - "receiver": false, - "title": "Handheld Scanner", - "transmitter": false - }, - "ItemScrewdriver": { - "desc": "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It's definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units.", - "hash": 687940869, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemScrewdriver", - "receiver": false, - "title": "Screwdriver", - "transmitter": false - }, - "ItemSecurityCamera": { - "desc": "Security cameras can be paired with a Motion Sensor, then connected to a Console fitted with a Camera Display for that 'always watched' feeling.", - "hash": -1981101032, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemSecurityCamera", - "receiver": false, - "title": "Security Camera", - "transmitter": false - }, - "ItemSensorLenses": { - "desc": "These Norsec glasses might not be the most fashionable thing, but when a Sensor Processing Unit (Ore Scanner) is inserted, Stationeers can use these handy glasses to x-ray the ground and find ores that are hidden beneath the surface.", - "hash": -1176140051, - "item": { - "slotclass": "Glasses", - "sorting": "Clothing" - }, - "logic": { - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemSensorLenses", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Sensor Processing Unit", - "typ": "SensorProcessingUnit" - } - ], - "title": "Sensor Lenses", - "transmitter": false - }, - "ItemSensorProcessingUnitCelestialScanner": { - "desc": "", - "hash": -1154200014, - "item": { - "slotclass": "SensorProcessingUnit", - "sorting": "Default" - }, - "name": "ItemSensorProcessingUnitCelestialScanner", - "receiver": false, - "title": "Sensor Processing Unit (Celestial Scanner)", - "transmitter": false - }, - "ItemSensorProcessingUnitMesonScanner": { - "desc": "The T-Ray Scanner Sensor Processing Unit can be inserted into the Sensor Lenses to show an overlay of pipes and cables. This can be useful when building behind walls or other structures.", - "hash": -1730464583, - "item": { - "slotclass": "SensorProcessingUnit", - "sorting": "Default" - }, - "name": "ItemSensorProcessingUnitMesonScanner", - "receiver": false, - "title": "Sensor Processing Unit (T-Ray Scanner)", - "transmitter": false - }, - "ItemSensorProcessingUnitOreScanner": { - "desc": "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD.", - "hash": -1219128491, - "item": { - "slotclass": "SensorProcessingUnit", - "sorting": "Default" - }, - "name": "ItemSensorProcessingUnitOreScanner", - "receiver": false, - "title": "Sensor Processing Unit (Ore Scanner)", - "transmitter": false - }, - "ItemSiliconIngot": { - "desc": "", - "hash": -290196476, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Silicon": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemSiliconIngot", - "receiver": false, - "title": "Ingot (Silicon)", - "transmitter": false - }, - "ItemSiliconOre": { - "desc": "Silicon is a chemical element with the symbol \"Si\" and is one of the most useful elements to Stationeers. Readily available throughout the universe, silicon is used in a range of alloys, glass, plastics and various electronic components a Stationeer may need to complete their mission.", - "hash": 1103972403, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Silicon": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemSiliconOre", - "receiver": false, - "title": "Ore (Silicon)", - "transmitter": false - }, - "ItemSilverIngot": { - "desc": "", - "hash": -929742000, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Silver": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemSilverIngot", - "receiver": false, - "title": "Ingot (Silver)", - "transmitter": false - }, - "ItemSilverOre": { - "desc": "Silver is a chemical element with the symbol \"Ag\". Valued by many Stationeers for its attractive luster and sheen, it is also used in a variety of electronics components and alloys.", - "hash": -916518678, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Silver": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemSilverOre", - "receiver": false, - "title": "Ore (Silver)", - "transmitter": false - }, - "ItemSolderIngot": { - "desc": "", - "hash": -82508479, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Solder": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemSolderIngot", - "receiver": false, - "title": "Ingot (Solder)", - "transmitter": false - }, - "ItemSolidFuel": { - "desc": "", - "hash": -365253871, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Hydrocarbon": 1.0 - }, - "slotclass": "Ore", - "sorting": "Resources" - }, - "name": "ItemSolidFuel", - "receiver": false, - "title": "Solid Fuel (Hydrocarbon)", - "transmitter": false - }, - "ItemSoundCartridgeBass": { - "desc": "", - "hash": -1883441704, - "item": { - "slotclass": "SoundCartridge", - "sorting": "Default" - }, - "name": "ItemSoundCartridgeBass", - "receiver": false, - "title": "Sound Cartridge Bass", - "transmitter": false - }, - "ItemSoundCartridgeDrums": { - "desc": "", - "hash": -1901500508, - "item": { - "slotclass": "SoundCartridge", - "sorting": "Default" - }, - "name": "ItemSoundCartridgeDrums", - "receiver": false, - "title": "Sound Cartridge Drums", - "transmitter": false - }, - "ItemSoundCartridgeLeads": { - "desc": "", - "hash": -1174735962, - "item": { - "slotclass": "SoundCartridge", - "sorting": "Default" - }, - "name": "ItemSoundCartridgeLeads", - "receiver": false, - "title": "Sound Cartridge Leads", - "transmitter": false - }, - "ItemSoundCartridgeSynth": { - "desc": "", - "hash": -1971419310, - "item": { - "slotclass": "SoundCartridge", - "sorting": "Default" - }, - "name": "ItemSoundCartridgeSynth", - "receiver": false, - "title": "Sound Cartridge Synth", - "transmitter": false - }, - "ItemSoyOil": { - "desc": "", - "hash": 1387403148, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 100, - "reagents": { - "Oil": 1.0 - }, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemSoyOil", - "receiver": false, - "title": "Soy Oil", - "transmitter": false - }, - "ItemSoybean": { - "desc": " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil", - "hash": 1924673028, - "item": { - "ingredient": true, - "maxquantity": 100, - "reagents": { - "Soy": 1.0 - }, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemSoybean", - "receiver": false, - "title": "Soybean", - "transmitter": false - }, - "ItemSpaceCleaner": { - "desc": "There was a time when humanity really wanted to keep space clean. That time has passed.", - "hash": -1737666461, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ItemSpaceCleaner", - "receiver": false, - "title": "Space Cleaner", - "transmitter": false - }, - "ItemSpaceHelmet": { - "desc": "The basic space helmet insulates Stationeers against everything from hard vacuum to weird cooking smells. Providing a pressure-controlled, breathable atmosphere, it comes with a built-in light powered by your Eva Suit Battery Cell (Small).\nIt also incorporates a lock/unlock feature to avoid accidental opening, as well as a flush function to expel and replace the internal atmosphere. If damaged, use Duct Tape to fix it, or paint it any color you like using the Paint Mixer.", - "hash": 714830451, - "item": { - "slotclass": "Helmet", - "sorting": "Clothing" - }, - "logic": { - "Combustion": "Read", - "Flush": "Write", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "SoundAlert": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "ReadWrite" - }, - "name": "ItemSpaceHelmet", - "receiver": false, - "title": "Space Helmet", - "transmitter": false - }, - "ItemSpaceIce": { - "desc": "", - "hash": 675686937, - "item": { - "maxquantity": 100, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemSpaceIce", - "receiver": false, - "title": "Space Ice", - "transmitter": false - }, - "ItemSpaceOre": { - "desc": "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores.", - "hash": 2131916219, - "item": { - "maxquantity": 100, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemSpaceOre", - "receiver": false, - "title": "Dirty Ore", - "transmitter": false - }, - "ItemSpacepack": { - "desc": "The basic CHAC spacepack isn't 'technically' a jetpack, it's a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Jetpack Basic or Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nUSE: 'J' to activate; 'space' to fly up; 'left ctrl' to descend; and 'WASD' to move.", - "hash": -1260618380, - "item": { - "slotclass": "Back", - "sorting": "Clothing" - }, - "logic": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "name": "ItemSpacepack", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Pressure": { - "0": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Temperature": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Propellant", - "typ": "GasCanister" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Spacepack", - "transmitter": false - }, - "ItemSprayCanBlack": { - "desc": "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses.", - "hash": -688107795, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanBlack", - "receiver": false, - "title": "Spray Paint (Black)", - "transmitter": false - }, - "ItemSprayCanBlue": { - "desc": "What kind of a color is blue? The kind of of color that says, 'Hey, what about me?'", - "hash": -498464883, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanBlue", - "receiver": false, - "title": "Spray Paint (Blue)", - "transmitter": false - }, - "ItemSprayCanBrown": { - "desc": "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed.", - "hash": 845176977, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanBrown", - "receiver": false, - "title": "Spray Paint (Brown)", - "transmitter": false - }, - "ItemSprayCanGreen": { - "desc": "Green is the color of life, and longing. Paradoxically, it's also the color of envy, and tolerance. It denotes sickness, youth, and wealth. But really, it's just what light does at around 500 billionths of a meter.", - "hash": -1880941852, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanGreen", - "receiver": false, - "title": "Spray Paint (Green)", - "transmitter": false - }, - "ItemSprayCanGrey": { - "desc": "Arguably the most popular color in the universe, grey was invented so designers had something to do.", - "hash": -1645266981, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanGrey", - "receiver": false, - "title": "Spray Paint (Grey)", - "transmitter": false - }, - "ItemSprayCanKhaki": { - "desc": "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode.", - "hash": 1918456047, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanKhaki", - "receiver": false, - "title": "Spray Paint (Khaki)", - "transmitter": false - }, - "ItemSprayCanOrange": { - "desc": "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove.", - "hash": -158007629, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanOrange", - "receiver": false, - "title": "Spray Paint (Orange)", - "transmitter": false - }, - "ItemSprayCanPink": { - "desc": "With the invention of enduring chemical dyes, the 20th century bestowed associations with innocence and tenderness upon this pale tint of red. Yet classically, it was the color of seduction and eroticism. Things change.", - "hash": 1344257263, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanPink", - "receiver": false, - "title": "Spray Paint (Pink)", - "transmitter": false - }, - "ItemSprayCanPurple": { - "desc": "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong.", - "hash": 30686509, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanPurple", - "receiver": false, - "title": "Spray Paint (Purple)", - "transmitter": false - }, - "ItemSprayCanRed": { - "desc": "The king of colors, red is perhaps the defining tone of the universe. Linked to blood, royalty, fire and damnation, it is the chromatic expression of power.", - "hash": 1514393921, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanRed", - "receiver": false, - "title": "Spray Paint (Red)", - "transmitter": false - }, - "ItemSprayCanWhite": { - "desc": "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff.", - "hash": 498481505, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanWhite", - "receiver": false, - "title": "Spray Paint (White)", - "transmitter": false - }, - "ItemSprayCanYellow": { - "desc": "A caricature of light itself, yellow lacks the self-confidence of red, or the swagger of purple. It's less fun than orange, but less emotionally limp than khaki. It's hard to know when yellow is appropriate, but it persists as a primary color regardless. Suggesting that yellow gonna yellow, no matter what anyone thinks.", - "hash": 995468116, - "item": { - "maxquantity": 1, - "slotclass": "Bottle", - "sorting": "Default" - }, - "name": "ItemSprayCanYellow", - "receiver": false, - "title": "Spray Paint (Yellow)", - "transmitter": false - }, - "ItemSprayGun": { - "desc": "Use with Spray cans in the Spray Can to paint structures, cables and pipes. Much more efficient and faster than doing it with individual spray cans.", - "hash": 1289723966, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemSprayGun", - "receiver": false, - "slots": [ - { - "name": "Spray Can", - "typ": "Bottle" - } - ], - "title": "Spray Gun", - "transmitter": false - }, - "ItemSteelFrames": { - "desc": "An advanced and stronger version of Iron Frames, steel frames are placed by right-clicking. To complete construction, use Steel Sheets and a Welding Torch in your active hand.", - "hash": -1448105779, - "item": { - "maxquantity": 30, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemSteelFrames", - "receiver": false, - "title": "Steel Frames", - "transmitter": false - }, - "ItemSteelIngot": { - "desc": "Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1.\nIt may not be elegant, but Ice (Oxite) and Ice (Volatiles) can be combined at a ratio of 1:2 in a furnace to create the necessary gas mixture for smelting.", - "hash": -654790771, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Steel": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemSteelIngot", - "receiver": false, - "title": "Ingot (Steel)", - "transmitter": false - }, - "ItemSteelSheets": { - "desc": "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types.", - "hash": 38555961, - "item": { - "maxquantity": 50, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemSteelSheets", - "receiver": false, - "title": "Steel Sheets", - "transmitter": false - }, - "ItemStelliteGlassSheets": { - "desc": "A stronger glass substitute.", - "hash": -2038663432, - "item": { - "maxquantity": 50, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ItemStelliteGlassSheets", - "receiver": false, - "title": "Stellite Glass Sheets", - "transmitter": false - }, - "ItemStelliteIngot": { - "desc": "", - "hash": -1897868623, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Stellite": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemStelliteIngot", - "receiver": false, - "title": "Ingot (Stellite)", - "transmitter": false - }, - "ItemSuitModCryogenicUpgrade": { - "desc": "Enables suits with basic cooling functionality to work with cryogenic liquid.", - "hash": -1274308304, - "item": { - "slotclass": "SuitMod", - "sorting": "Default" - }, - "name": "ItemSuitModCryogenicUpgrade", - "receiver": false, - "title": "Cryogenic Suit Upgrade", - "transmitter": false - }, - "ItemTablet": { - "desc": "The Xigo handheld 'Padi' tablet is an all-purpose data platform, provided as standard issue to all Stationeers. A dynamic multi-tool that accepts a range of cartridges, the Padi becomes an Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, eReader, and various other functions.", - "hash": -229808600, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemTablet", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Cartridge", - "typ": "Cartridge" - } - ], - "title": "Handheld Tablet", - "transmitter": false - }, - "ItemTerrainManipulator": { - "desc": "0.Mode0\n1.Mode1", - "hash": 111280987, - "item": { - "slotclass": "Tool", - "sorting": "Default" - }, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "ItemTerrainManipulator", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Dirt Canister", - "typ": "Ore" - } - ], - "title": "Terrain Manipulator", - "transmitter": false - }, - "ItemTomato": { - "desc": "Tomato plants are perennial, and will produce multiple harvests without needing to be replanted. Once the plant is mature, it will fruit at a moderate pace.", - "hash": -998592080, - "item": { - "ingredient": true, - "maxquantity": 20, - "reagents": { - "Tomato": 1.0 - }, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemTomato", - "receiver": false, - "title": "Tomato", - "transmitter": false - }, - "ItemTomatoSoup": { - "desc": "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine.", - "hash": 688734890, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Food" - }, - "name": "ItemTomatoSoup", - "receiver": false, - "title": "Tomato Soup", - "transmitter": false - }, - "ItemToolBelt": { - "desc": "If there's one piece of equipment that embodies Stationeer life above all else, it's the humble toolbelt (Editor's note: a recent ODA survey of iconic Stationeer equipment also rated the smoking, toxic ruins of an over-pressurized Furnace lying amid the charred remains of your latest base very highly).\nDesigned to meet the most strict-ish ODA safety standards, the toolbelt's eight slots hold one thing: tools, and Cable Coil. Not to be confused with the Mining Belt.", - "hash": -355127880, - "item": { - "slotclass": "Belt", - "sorting": "Clothing" - }, - "name": "ItemToolBelt", - "receiver": false, - "slots": [ - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - }, - { - "name": "Tool", - "typ": "Tool" - } - ], - "title": "Tool Belt", - "transmitter": false - }, - "ItemTropicalPlant": { - "desc": "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants.", - "hash": -800947386, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Resources" - }, - "name": "ItemTropicalPlant", - "receiver": false, - "title": "Tropical Lily", - "transmitter": false - }, - "ItemUraniumOre": { - "desc": "In 1934, Enrico Fermi noticed that bombarding uranium with neutrons produced a burst of beta rays, and a new material. This process was named 'nuclear fission', and resulted in cheap energy, the Cold War, and countless thousand deaths. While reasonably common throughout the Solar System, Stationeers are wary of the material.", - "hash": -1516581844, - "item": { - "ingredient": true, - "maxquantity": 50, - "reagents": { - "Uranium": 1.0 - }, - "slotclass": "Ore", - "sorting": "Ores" - }, - "name": "ItemUraniumOre", - "receiver": false, - "title": "Ore (Uranium)", - "transmitter": false - }, - "ItemVolatiles": { - "desc": "An extremely reactive ice with numerous hydrocarbons trapped inside. For simplicity's sake, these are often displayed as H2 by devices like the Atmos Analyzer.\n \nVolatiles combust in a 2:1 ratio with Oxygen, creating Carbon Dioxide and pollutants. However when catalysed via devices such as the H2 Combustor in the presence of Oxygen, they produce\n Steam and heat with a modicum of Carbon Dioxide and Pollutant due to the autoignition of the volatiles in the chamber. Along with Oxygen, volatiles gas is also the major component of fuel for such devices as the Welding Torch.\n", - "hash": 1253102035, - "item": { - "maxquantity": 50, - "slotclass": "Ore", - "sorting": "Ices" - }, - "name": "ItemVolatiles", - "receiver": false, - "title": "Ice (Volatiles)", - "transmitter": false - }, - "ItemWallCooler": { - "desc": "This kit creates a Wall Cooler.", - "hash": -1567752627, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemWallCooler", - "receiver": false, - "title": "Kit (Wall Cooler)", - "transmitter": false - }, - "ItemWallHeater": { - "desc": "This kit creates a Kit (Wall Heater).", - "hash": 1880134612, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemWallHeater", - "receiver": false, - "title": "Kit (Wall Heater)", - "transmitter": false - }, - "ItemWallLight": { - "desc": "This kit creates any one of ten Kit (Lights) variants.", - "hash": 1108423476, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemWallLight", - "receiver": false, - "title": "Kit (Lights)", - "transmitter": false - }, - "ItemWaspaloyIngot": { - "desc": "", - "hash": 156348098, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 500, - "reagents": { - "Waspaloy": 1.0 - }, - "slotclass": "Ingot", - "sorting": "Resources" - }, - "name": "ItemWaspaloyIngot", - "receiver": false, - "title": "Ingot (Waspaloy)", - "transmitter": false - }, - "ItemWaterBottle": { - "desc": "Delicious and pure H20, refined from local sources as varied as Venusian ice and trans-Solar comets. Empty bottles can be refilled using the Water Bottle Filler.", - "hash": 107741229, - "item": { - "maxquantity": 1, - "slotclass": "LiquidBottle", - "sorting": "Default" - }, - "name": "ItemWaterBottle", - "receiver": false, - "title": "Water Bottle", - "transmitter": false - }, - "ItemWaterPipeDigitalValve": { - "desc": "", - "hash": 309693520, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemWaterPipeDigitalValve", - "receiver": false, - "title": "Kit (Liquid Digital Valve)", - "transmitter": false - }, - "ItemWaterPipeMeter": { - "desc": "", - "hash": -90898877, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemWaterPipeMeter", - "receiver": false, - "title": "Kit (Liquid Pipe Meter)", - "transmitter": false - }, - "ItemWaterWallCooler": { - "desc": "", - "hash": -1721846327, - "item": { - "maxquantity": 5, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "ItemWaterWallCooler", - "receiver": false, - "title": "Kit (Liquid Wall Cooler)", - "transmitter": false - }, - "ItemWearLamp": { - "desc": "", - "hash": -598730959, - "item": { - "slotclass": "Helmet", - "sorting": "Clothing" - }, - "logic": { - "On": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "name": "ItemWearLamp", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Headlamp", - "transmitter": false - }, - "ItemWeldingTorch": { - "desc": "Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures.\nAn upgraded version of the classic 'Zairo' model first manufactured by ExMin for modular space habitat assembly, the Arlite is powered by a single Canister (Fuel) and designed to function equally well in deep space and deep gravity wells.", - "hash": -2066892079, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemWeldingTorch", - "receiver": false, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - } - ], - "title": "Welding Torch", - "transmitter": false - }, - "ItemWheat": { - "desc": "A classical symbol of growth and new life, wheat takes a moderate time to grow. Its main use is to create flour using the Reagent Processor.", - "hash": -1057658015, - "item": { - "ingredient": true, - "maxquantity": 100, - "reagents": { - "Carbon": 1.0 - }, - "slotclass": "Plant", - "sorting": "Default" - }, - "name": "ItemWheat", - "receiver": false, - "title": "Wheat", - "transmitter": false - }, - "ItemWireCutters": { - "desc": "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools.", - "hash": 1535854074, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemWireCutters", - "receiver": false, - "title": "Wire Cutters", - "transmitter": false - }, - "ItemWirelessBatteryCellExtraLarge": { - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "hash": -504717121, - "item": { - "slotclass": "Battery", - "sorting": "Default" - }, - "logic": { - "Mode": "ReadWrite", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "ItemWirelessBatteryCellExtraLarge", - "receiver": false, - "title": "Wireless Battery Cell Extra Large", - "transmitter": false - }, - "ItemWreckageAirConditioner1": { - "desc": "", - "hash": -1826023284, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageAirConditioner1", - "receiver": false, - "title": "Wreckage Air Conditioner", - "transmitter": false - }, - "ItemWreckageAirConditioner2": { - "desc": "", - "hash": 169888054, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageAirConditioner2", - "receiver": false, - "title": "Wreckage Air Conditioner", - "transmitter": false - }, - "ItemWreckageHydroponicsTray1": { - "desc": "", - "hash": -310178617, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageHydroponicsTray1", - "receiver": false, - "title": "Wreckage Hydroponics Tray", - "transmitter": false - }, - "ItemWreckageLargeExtendableRadiator01": { - "desc": "", - "hash": -997763, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageLargeExtendableRadiator01", - "receiver": false, - "title": "Wreckage Large Extendable Radiator", - "transmitter": false - }, - "ItemWreckageStructureRTG1": { - "desc": "", - "hash": 391453348, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageStructureRTG1", - "receiver": false, - "title": "Wreckage Structure RTG", - "transmitter": false - }, - "ItemWreckageStructureWeatherStation001": { - "desc": "", - "hash": -834664349, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageStructureWeatherStation001", - "receiver": false, - "title": "Wreckage Structure Weather Station", - "transmitter": false - }, - "ItemWreckageStructureWeatherStation002": { - "desc": "", - "hash": 1464424921, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageStructureWeatherStation002", - "receiver": false, - "title": "Wreckage Structure Weather Station", - "transmitter": false - }, - "ItemWreckageStructureWeatherStation003": { - "desc": "", - "hash": 542009679, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageStructureWeatherStation003", - "receiver": false, - "title": "Wreckage Structure Weather Station", - "transmitter": false - }, - "ItemWreckageStructureWeatherStation004": { - "desc": "", - "hash": -1104478996, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageStructureWeatherStation004", - "receiver": false, - "title": "Wreckage Structure Weather Station", - "transmitter": false - }, - "ItemWreckageStructureWeatherStation005": { - "desc": "", - "hash": -919745414, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageStructureWeatherStation005", - "receiver": false, - "title": "Wreckage Structure Weather Station", - "transmitter": false - }, - "ItemWreckageStructureWeatherStation006": { - "desc": "", - "hash": 1344576960, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageStructureWeatherStation006", - "receiver": false, - "title": "Wreckage Structure Weather Station", - "transmitter": false - }, - "ItemWreckageStructureWeatherStation007": { - "desc": "", - "hash": 656649558, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageStructureWeatherStation007", - "receiver": false, - "title": "Wreckage Structure Weather Station", - "transmitter": false - }, - "ItemWreckageStructureWeatherStation008": { - "desc": "", - "hash": -1214467897, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageStructureWeatherStation008", - "receiver": false, - "title": "Wreckage Structure Weather Station", - "transmitter": false - }, - "ItemWreckageTurbineGenerator1": { - "desc": "", - "hash": -1662394403, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageTurbineGenerator1", - "receiver": false, - "title": "Wreckage Turbine Generator", - "transmitter": false - }, - "ItemWreckageTurbineGenerator2": { - "desc": "", - "hash": 98602599, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageTurbineGenerator2", - "receiver": false, - "title": "Wreckage Turbine Generator", - "transmitter": false - }, - "ItemWreckageTurbineGenerator3": { - "desc": "", - "hash": 1927790321, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageTurbineGenerator3", - "receiver": false, - "title": "Wreckage Turbine Generator", - "transmitter": false - }, - "ItemWreckageWallCooler1": { - "desc": "", - "hash": -1682930158, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageWallCooler1", - "receiver": false, - "title": "Wreckage Wall Cooler", - "transmitter": false - }, - "ItemWreckageWallCooler2": { - "desc": "", - "hash": 45733800, - "item": { - "maxquantity": 10, - "slotclass": "Wreckage", - "sorting": "Default" - }, - "name": "ItemWreckageWallCooler2", - "receiver": false, - "title": "Wreckage Wall Cooler", - "transmitter": false - }, - "ItemWrench": { - "desc": "One of humanity's enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures", - "hash": -1886261558, - "item": { - "slotclass": "Tool", - "sorting": "Tools" - }, - "name": "ItemWrench", - "receiver": false, - "title": "Wrench", - "transmitter": false - }, - "KitSDBSilo": { - "desc": "This kit creates a SDB Silo.", - "hash": 1932952652, - "item": { - "maxquantity": 10, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "KitSDBSilo", - "receiver": false, - "title": "Kit (SDB Silo)", - "transmitter": false - }, - "KitStructureCombustionCentrifuge": { - "desc": "", - "hash": 231903234, - "item": { - "maxquantity": 1, - "slotclass": "None", - "sorting": "Kits" - }, - "name": "KitStructureCombustionCentrifuge", - "receiver": false, - "title": "Kit (Combustion Centrifuge)", - "transmitter": false - }, - "KitchenTableShort": { - "desc": "", - "hash": -1427415566, - "name": "KitchenTableShort", - "receiver": false, - "title": "Kitchen Table (Short)", - "transmitter": false - }, - "KitchenTableSimpleShort": { - "desc": "", - "hash": -78099334, - "name": "KitchenTableSimpleShort", - "receiver": false, - "title": "Kitchen Table (Simple Short)", - "transmitter": false - }, - "KitchenTableSimpleTall": { - "desc": "", - "hash": -1068629349, - "name": "KitchenTableSimpleTall", - "receiver": false, - "title": "Kitchen Table (Simple Tall)", - "transmitter": false - }, - "KitchenTableTall": { - "desc": "", - "hash": -1386237782, - "name": "KitchenTableTall", - "receiver": false, - "title": "Kitchen Table (Tall)", - "transmitter": false - }, - "Lander": { - "desc": "", - "hash": 1605130615, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "Lander", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "Entity", - "typ": "Entity" - } - ], - "title": "Lander", - "transmitter": false - }, - "Landingpad_2x2CenterPiece01": { - "desc": "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors", - "hash": -1295222317, - "name": "Landingpad_2x2CenterPiece01", - "receiver": false, - "title": "Landingpad 2x2 Center Piece", - "transmitter": false - }, - "Landingpad_BlankPiece": { - "desc": "", - "hash": 912453390, - "name": "Landingpad_BlankPiece", - "receiver": false, - "title": "Landingpad", - "transmitter": false - }, - "Landingpad_CenterPiece01": { - "desc": "The target point where the trader shuttle will land. Requires a clear view of the sky.", - "hash": 1070143159, - "modes": { - "0": "None", - "1": "NoContact", - "2": "Moving", - "3": "Holding", - "4": "Landed" - }, - "name": "Landingpad_CenterPiece01", - "receiver": false, - "title": "Landingpad Center", - "transmitter": false - }, - "Landingpad_CrossPiece": { - "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", - "hash": 1101296153, - "name": "Landingpad_CrossPiece", - "receiver": false, - "title": "Landingpad Cross", - "transmitter": false - }, - "Landingpad_DataConnectionPiece": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "2": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "3": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "4": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - } - }, - "desc": "Provides power to the landing pad. The data port must be connected to the data port of a computer with a communications motherboard for a trader to be called in to land.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -2066405918, - "logic": { - "Activate": "ReadWrite", - "Combustion": "Read", - "ContactTypeId": "Read", - "Error": "Read", - "Mode": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Temperature": "Read", - "TotalMoles": "Read", - "Vertical": "ReadWrite" - }, - "modes": { - "0": "None", - "1": "NoContact", - "2": "Moving", - "3": "Holding", - "4": "Landed" - }, - "name": "Landingpad_DataConnectionPiece", - "receiver": false, - "title": "Landingpad Data And Power", - "transmitter": false - }, - "Landingpad_DiagonalPiece01": { - "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", - "hash": 977899131, - "name": "Landingpad_DiagonalPiece01", - "receiver": false, - "title": "Landingpad Diagonal", - "transmitter": false - }, - "Landingpad_GasConnectorInwardPiece": { - "conn": { - "0": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "1": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "2": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "4": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 817945707, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "Landingpad_GasConnectorInwardPiece", - "receiver": false, - "title": "Landingpad Gas Input", - "transmitter": false - }, - "Landingpad_GasConnectorOutwardPiece": { - "conn": { - "0": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "1": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "2": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "4": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - } - }, - "desc": "Pumps gas purchased from a trader out of the landing pad. You can increase the landing pad's gas storage capacity by adding more Landingpad Gas Storage to the landing pad.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1100218307, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "Landingpad_GasConnectorOutwardPiece", - "receiver": false, - "title": "Landingpad Gas Output", - "transmitter": false - }, - "Landingpad_GasCylinderTankPiece": { - "desc": "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders.", - "hash": 170818567, - "name": "Landingpad_GasCylinderTankPiece", - "receiver": false, - "title": "Landingpad Gas Storage", - "transmitter": false - }, - "Landingpad_LiquidConnectorInwardPiece": { - "conn": { - "0": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "1": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "2": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "4": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1216167727, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "Landingpad_LiquidConnectorInwardPiece", - "receiver": false, - "title": "Landingpad Liquid Input", - "transmitter": false - }, - "Landingpad_LiquidConnectorOutwardPiece": { - "conn": { - "0": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "1": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "2": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "4": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "Pumps liquid purchased from a trader out of the landing pad. You can increase the landing pad's liquid storage capacity by adding more Landingpad Gas Storage to the landing pad.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1788929869, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "Landingpad_LiquidConnectorOutwardPiece", - "receiver": false, - "title": "Landingpad Liquid Output", - "transmitter": false - }, - "Landingpad_StraightPiece01": { - "desc": "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area.", - "hash": -976273247, - "name": "Landingpad_StraightPiece01", - "receiver": false, - "title": "Landingpad Straight", - "transmitter": false - }, - "Landingpad_TaxiPieceCorner": { - "desc": "", - "hash": -1872345847, - "name": "Landingpad_TaxiPieceCorner", - "receiver": false, - "title": "Landingpad Taxi Corner", - "transmitter": false - }, - "Landingpad_TaxiPieceHold": { - "desc": "", - "hash": 146051619, - "name": "Landingpad_TaxiPieceHold", - "receiver": false, - "title": "Landingpad Taxi Hold", - "transmitter": false - }, - "Landingpad_TaxiPieceStraight": { - "desc": "", - "hash": -1477941080, - "name": "Landingpad_TaxiPieceStraight", - "receiver": false, - "title": "Landingpad Taxi Straight", - "transmitter": false - }, - "Landingpad_ThreshholdPiece": { - "conn": { - "0": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "1": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "2": { - "name": "Landing Pad Input", - "role": "Input", - "typ": "LandingPad" - }, - "3": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1514298582, - "logic": { - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "Landingpad_ThreshholdPiece", - "receiver": false, - "title": "Landingpad Threshhold", - "transmitter": false - }, - "LogicStepSequencer8": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "2": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "The ODA does not approve of soundtracks or other distractions.\nAs such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure.\nCentral to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. \n\nDIY MUSIC - GETTING STARTED\n\n1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side.\n\n2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver.\n\n3: Select the output speaker (eg Passive Speaker) where the sequencer will play the sounds. This needs to be connected to the logic network on the right hand side of the sequencer.\n\n4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer.\n\n5: Set the BPM on the sequencer using a Dial and a Logic Writer to write to the sequencer's BPM variable. A higher bpm will play the sequence faster. \n\n6: Insert a sound cartridge of your choosing and select which variant of sound you wish to play by pushing the arrow buttons located above and below the sound cartridge slot.\n\n7: Choose the pitch of the sounds to play by setting the dial on each of your 8 step units to the desired note. With drums, each note is a different drum sounds. You can trial your sounds by pushing the activate button on each step unit (with the sequencer inactive).\n\n8: Get freaky with the Low frequency oscillator.\n\n9: Finally, activate the sequencer, Vibeoneer.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1531272458, - "logic": { - "Activate": "ReadWrite", - "Bpm": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Time": "ReadWrite" - }, - "modes": { - "0": "Whole Note", - "1": "Half Note", - "2": "Quarter Note", - "3": "Eighth Note", - "4": "Sixteenth Note" - }, - "name": "LogicStepSequencer8", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Sound Cartridge", - "typ": "SoundCartridge" - } - ], - "title": "Logic Step Sequencer", - "transmitter": false - }, - "Meteorite": { - "desc": "", - "hash": -99064335, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "Meteorite", - "receiver": false, - "title": "Meteorite", - "transmitter": false - }, - "MonsterEgg": { - "desc": "MonsterEgg", - "hash": -1667675295, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "MonsterEgg", - "receiver": false, - "title": "MonsterEgg", - "transmitter": false - }, - "MotherboardComms": { - "desc": "When placed in a Computer and connected to a Landingpad Data And Power, a Medium Satellite Dish, and a Vending Machine allows Stationeers to trade with suppliers. Adjust the horizontal and vertical attributes of the Medium Satellite Dish either directly or through logic. You need a communications signal of 95% or above to establish reliable communications with a trader. A minimum of a 3x3 clear pad area with a Landingpad Center at the center is required for a trader to land.", - "hash": -337075633, - "item": { - "slotclass": "Motherboard", - "sorting": "Default" - }, - "name": "MotherboardComms", - "receiver": false, - "title": "Communications Motherboard", - "transmitter": false - }, - "MotherboardLogic": { - "desc": "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops logic motherboard allows Stationeers to set variables and actions on specific logic-controlled items.", - "hash": 502555944, - "item": { - "slotclass": "Motherboard", - "sorting": "Default" - }, - "name": "MotherboardLogic", - "receiver": false, - "title": "Logic Motherboard", - "transmitter": false - }, - "MotherboardMissionControl": { - "desc": "MotherboardMissionControl", - "hash": -127121474, - "item": { - "slotclass": "Motherboard", - "sorting": "Default" - }, - "name": "MotherboardMissionControl", - "receiver": false, - "title": "MotherboardMissionControl", - "transmitter": false - }, - "MotherboardProgrammableChip": { - "desc": "When placed in a Computer, the IC Editor allows players to write and edit IC code, which can then be uploaded to a Integrated Circuit (IC10) if housed in an IC Housing.", - "hash": -161107071, - "item": { - "slotclass": "Motherboard", - "sorting": "Default" - }, - "name": "MotherboardProgrammableChip", - "receiver": false, - "title": "IC Editor Motherboard", - "transmitter": false - }, - "MotherboardRockets": { - "desc": "", - "hash": -806986392, - "item": { - "slotclass": "Motherboard", - "sorting": "Default" - }, - "name": "MotherboardRockets", - "receiver": false, - "title": "Rocket Control Motherboard", - "transmitter": false - }, - "MotherboardSorter": { - "desc": "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops 10-10 sorter motherboard permits Stationeers to control which items a Sorter does, and does not, permit to pass.", - "hash": -1908268220, - "item": { - "slotclass": "Motherboard", - "sorting": "Default" - }, - "name": "MotherboardSorter", - "receiver": false, - "title": "Sorter Motherboard", - "transmitter": false - }, - "MothershipCore": { - "desc": "A relic of from an earlier era of space ambition, Sinotai's mothership cores formed the central element of a generation's space-going creations. While Sinotai's pivot to smaller, modular craft upset some purists, motherships continue to be built and maintained by dedicated enthusiasts.", - "hash": -1930442922, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "MothershipCore", - "receiver": false, - "title": "Mothership Core", - "transmitter": false - }, - "NpcChick": { - "desc": "", - "hash": 155856647, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "NpcChick", - "receiver": false, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - }, - { - "name": "Lungs", - "typ": "Organ" - } - ], - "title": "Chick", - "transmitter": false - }, - "NpcChicken": { - "desc": "", - "hash": 399074198, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "NpcChicken", - "receiver": false, - "slots": [ - { - "name": "Brain", - "typ": "Organ" - }, - { - "name": "Lungs", - "typ": "Organ" - } - ], - "title": "Chicken", - "transmitter": false - }, - "PassiveSpeaker": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 248893646, - "logic": { - "PrefabHash": "ReadWrite", - "ReferenceId": "ReadWrite", - "SoundAlert": "ReadWrite", - "Volume": "ReadWrite" - }, - "name": "PassiveSpeaker", - "receiver": false, - "title": "Passive Speaker", - "transmitter": false - }, - "PipeBenderMod": { - "desc": "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "hash": 443947415, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "PipeBenderMod", - "receiver": false, - "title": "Pipe Bender Mod", - "transmitter": false - }, - "PortableComposter": { - "desc": "A simple composting device, the basic composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires a full Liquid Canister and a battery to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat.\n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for", - "hash": -1958705204, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "PortableComposter", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "Battery" - }, - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ], - "title": "Portable Composter", - "transmitter": false - }, - "PortableSolarPanel": { - "desc": "", - "hash": 2043318949, - "item": { - "slotclass": "None", - "sorting": "Tools" - }, - "logic": { - "Open": "ReadWrite", - "ReferenceId": "Read" - }, - "name": "PortableSolarPanel", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Portable Solar Panel", - "transmitter": false - }, - "RailingElegant01": { - "desc": "", - "hash": 399661231, - "name": "RailingElegant01", - "receiver": false, - "title": "Railing Elegant (Type 1)", - "transmitter": false - }, - "RailingElegant02": { - "desc": "", - "hash": -1898247915, - "name": "RailingElegant02", - "receiver": false, - "title": "Railing Elegant (Type 2)", - "transmitter": false - }, - "RailingIndustrial02": { - "desc": "", - "hash": -2072792175, - "name": "RailingIndustrial02", - "receiver": false, - "title": "Railing Industrial (Type 2)", - "transmitter": false - }, - "ReagentColorBlue": { - "desc": "", - "hash": 980054869, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 100, - "reagents": { - "ColorBlue": 10.0 - }, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ReagentColorBlue", - "receiver": false, - "title": "Color Dye (Blue)", - "transmitter": false - }, - "ReagentColorGreen": { - "desc": "", - "hash": 120807542, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 100, - "reagents": { - "ColorGreen": 10.0 - }, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ReagentColorGreen", - "receiver": false, - "title": "Color Dye (Green)", - "transmitter": false - }, - "ReagentColorOrange": { - "desc": "", - "hash": -400696159, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 100, - "reagents": { - "ColorOrange": 10.0 - }, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ReagentColorOrange", - "receiver": false, - "title": "Color Dye (Orange)", - "transmitter": false - }, - "ReagentColorRed": { - "desc": "", - "hash": 1998377961, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 100, - "reagents": { - "ColorRed": 10.0 - }, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ReagentColorRed", - "receiver": false, - "title": "Color Dye (Red)", - "transmitter": false - }, - "ReagentColorYellow": { - "desc": "", - "hash": 635208006, - "item": { - "consumable": true, - "ingredient": true, - "maxquantity": 100, - "reagents": { - "ColorYellow": 10.0 - }, - "slotclass": "None", - "sorting": "Resources" - }, - "name": "ReagentColorYellow", - "receiver": false, - "title": "Color Dye (Yellow)", - "transmitter": false - }, - "RespawnPoint": { - "desc": "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead.", - "hash": -788672929, - "name": "RespawnPoint", - "receiver": false, - "title": "Respawn Point", - "transmitter": false - }, - "RespawnPointWallMounted": { - "desc": "", - "hash": -491247370, - "name": "RespawnPointWallMounted", - "receiver": false, - "title": "Respawn Point (Mounted)", - "transmitter": false - }, - "Robot": { - "desc": "Designed by - presumably drunk - Norsec roboticists, AIMeE (or Automated Independent Mechanical Entity) can be a Stationeer's best friend, or tiresome nemesis, or both several times in the same day. \n \nIntended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard.\n\nAIMEe has 7 modes:\n\nRobotMode.None = 0 = Do nothing\nRobotMode.None = 1 = Follow nearest player\nRobotMode.None = 2 = Move to target in straight line\nRobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius\nRobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids\nRobotMode.None = 5 = Path(find) to target\nRobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter", - "hash": 434786784, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "logic": { - "Error": "Read", - "ForwardX": "Read", - "ForwardY": "Read", - "ForwardZ": "Read", - "MineablesInQueue": "Read", - "MineablesInVicinity": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Orientation": "Read", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "Power": "Read", - "PressureExternal": "Read", - "ReferenceId": "Read", - "TargetX": "Write", - "TargetY": "Write", - "TargetZ": "Write", - "TemperatureExternal": "Read", - "VelocityMagnitude": "Read", - "VelocityRelativeX": "Read", - "VelocityRelativeY": "Read", - "VelocityRelativeZ": "Read", - "VelocityX": "Read", - "VelocityY": "Read", - "VelocityZ": "Read" - }, - "modes": { - "0": "None", - "1": "Follow", - "2": "MoveToTarget", - "3": "Roam", - "4": "Unload", - "5": "PathToTarget", - "6": "StorageFull" - }, - "name": "Robot", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - }, - { - "name": "Ore", - "typ": "Ore" - } - ], - "title": "AIMeE Bot", - "transmitter": true - }, - "RoverCargo": { - "desc": "Connects to Logic Transmitter", - "hash": 350726273, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "logic": { - "Combustion": "Read", - "On": "ReadWrite", - "Power": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "RoverCargo", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "11": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "12": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "13": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "14": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "15": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "FilterType": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "FilterType": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "FilterType": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "9": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "10": "Read", - "11": "Read", - "9": "Read" - }, - "ChargeRatio": { - "10": "Read", - "11": "Read", - "9": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "FilterType": { - "2": "Read", - "3": "Read", - "4": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Pressure": { - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Temperature": { - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read" - } - }, - "slots": [ - { - "name": "Entity", - "typ": "Entity" - }, - { - "name": "Entity", - "typ": "Entity" - }, - { - "name": "Gas Filter", - "typ": "GasFilter" - }, - { - "name": "Gas Filter", - "typ": "GasFilter" - }, - { - "name": "Gas Filter", - "typ": "GasFilter" - }, - { - "name": "Gas Canister", - "typ": "GasCanister" - }, - { - "name": "Gas Canister", - "typ": "GasCanister" - }, - { - "name": "Gas Canister", - "typ": "GasCanister" - }, - { - "name": "Gas Canister", - "typ": "GasCanister" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Container Slot", - "typ": "None" - }, - { - "name": "Container Slot", - "typ": "None" - }, - { - "name": "GasTank", - "typ": "None" - }, - { - "name": "GasTank", - "typ": "None" - } - ], - "title": "Rover (Cargo)", - "transmitter": true - }, - "Rover_MkI": { - "desc": "A distant cousin of the jeep, the Mk I {Sinotai electric rover is one of the most simple and durable light vehicles in the known universe. Able to carry two passengers and cargo such as the Portable Gas Tank (Air) or Crate, it is powered by up to three batteries, accepting everything including Battery Cell (Nuclear).\nA quad-array of hub-mounted electric engines propels the reinforced aluminium frame over most terrain and modest obstacles. While the Mk I is designed for stability in low-horizontality circumstances, if it rolls, try using your Crowbar to put it right way up.Connects to Logic Transmitter", - "hash": -2049946335, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "logic": { - "Combustion": "Read", - "On": "ReadWrite", - "Power": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "Rover_MkI", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "10": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "2": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "3": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "4": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "2": "Read", - "3": "Read", - "4": "Read" - }, - "ChargeRatio": { - "2": "Read", - "3": "Read", - "4": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "Entity", - "typ": "Entity" - }, - { - "name": "Entity", - "typ": "Entity" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "ContainerConnection", - "typ": "None" - }, - { - "name": "ContainerConnection", - "typ": "None" - }, - { - "name": "GasTankConnection", - "typ": "None" - }, - { - "name": "GasTankConnection", - "typ": "None" - }, - { - "name": "GasTankConnection", - "typ": "None" - }, - { - "name": "GasTankConnection", - "typ": "None" - } - ], - "title": "Rover MkI", - "transmitter": true - }, - "Rover_MkI_build_states": { - "desc": "", - "hash": 861674123, - "name": "Rover_MkI_build_states", - "receiver": false, - "title": "Rover MKI", - "transmitter": false - }, - "SMGMagazine": { - "desc": "", - "hash": -256607540, - "item": { - "slotclass": "Magazine", - "sorting": "Default" - }, - "name": "SMGMagazine", - "receiver": false, - "title": "SMG Magazine", - "transmitter": false - }, - "SeedBag_Corn": { - "desc": "Grow a Corn.", - "hash": -1290755415, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Corn", - "receiver": false, - "title": "Corn Seeds", - "transmitter": false - }, - "SeedBag_Fern": { - "desc": "Grow a Fern.", - "hash": -1990600883, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Fern", - "receiver": false, - "title": "Fern Seeds", - "transmitter": false - }, - "SeedBag_Mushroom": { - "desc": "Grow a Mushroom.", - "hash": 311593418, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Mushroom", - "receiver": false, - "title": "Mushroom Seeds", - "transmitter": false - }, - "SeedBag_Potato": { - "desc": "Grow a Potato.", - "hash": 1005571172, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Potato", - "receiver": false, - "title": "Potato Seeds", - "transmitter": false - }, - "SeedBag_Pumpkin": { - "desc": "Grow a Pumpkin.", - "hash": 1423199840, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Pumpkin", - "receiver": false, - "title": "Pumpkin Seeds", - "transmitter": false - }, - "SeedBag_Rice": { - "desc": "Grow some Rice.", - "hash": -1691151239, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Rice", - "receiver": false, - "title": "Rice Seeds", - "transmitter": false - }, - "SeedBag_Soybean": { - "desc": "Grow some Soybean.", - "hash": 1783004244, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Soybean", - "receiver": false, - "title": "Soybean Seeds", - "transmitter": false - }, - "SeedBag_Switchgrass": { - "desc": "", - "hash": 488360169, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Switchgrass", - "receiver": false, - "title": "Switchgrass Seed", - "transmitter": false - }, - "SeedBag_Tomato": { - "desc": "Grow a Tomato.", - "hash": -1922066841, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Tomato", - "receiver": false, - "title": "Tomato Seeds", - "transmitter": false - }, - "SeedBag_Wheet": { - "desc": "Grow some Wheat.", - "hash": -654756733, - "item": { - "maxquantity": 10, - "slotclass": "Plant", - "sorting": "Food" - }, - "name": "SeedBag_Wheet", - "receiver": false, - "title": "Wheat Seeds", - "transmitter": false - }, - "SpaceShuttle": { - "desc": "An antiquated Sinotai transport craft, long since decommissioned.", - "hash": -1991297271, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "SpaceShuttle", - "receiver": false, - "slots": [ - { - "name": "Captain's Seat", - "typ": "Entity" - }, - { - "name": "Passenger Seat Left", - "typ": "Entity" - }, - { - "name": "Passenger Seat Right", - "typ": "Entity" - } - ], - "title": "Space Shuttle", - "transmitter": false - }, - "StopWatch": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1527229051, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Time": "Read" - }, - "name": "StopWatch", - "receiver": false, - "title": "Stop Watch", - "transmitter": false - }, - "StructureAccessBridge": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Extendable bridge that spans three grids", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1298920475, - "logic": { - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureAccessBridge", - "receiver": false, - "title": "Access Bridge", - "transmitter": false - }, - "StructureActiveVent": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Pipe" - } - }, - "desc": "The active vent is a powered device for maintaining gas pressure by pumping gas into (or out of) a pipe network. The vent has two modes: 'Outward' sets it to pump gas into a space until pressure is reached; 'Inward' sets it to pump gas out until pressure is reached. The pressure parameter can be set on a connected Console. Default pressure is 101kPa for Outward; 0kPa for Inward ...", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1129453144, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "PressureExternal": "ReadWrite", - "PressureInternal": "ReadWrite", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Outward", - "1": "Inward" - }, - "name": "StructureActiveVent", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "DataDisk" - } - ], - "title": "Active Vent", - "transmitter": false - }, - "StructureAdvancedComposter": { - "conn": { - "0": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "2": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "4": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "5": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - } - }, - "desc": "The advanced composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires Water and power to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat. \n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer's effects on plants will vary depending on the respective proportions of its ingredients.\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times\n", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 446212963, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureAdvancedComposter", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Advanced Composter", - "transmitter": false - }, - "StructureAdvancedFurnace": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "4": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "5": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "6": { - "name": "Pipe Liquid Output2", - "role": "Output2", - "typ": "PipeLiquid" - } - }, - "desc": "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit's internal pressure.", - "device": { - "atmosphere": true, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 545937711, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Combustion": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Reagents": "Read", - "RecipeHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "SettingInput": "ReadWrite", - "SettingOutput": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureAdvancedFurnace", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Advanced Furnace", - "transmitter": false - }, - "StructureAdvancedPackagingMachine": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The Xigo Advanced Cannifier Multi-Plus Pro is an automateable packaging machine that uses Empty Cans and cooked food to create canned sustenance that does not decay. Note that the ACMPP only accepts cooked food and tin cans.", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -463037670, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "CompletionRatio": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "RecipeHash": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureAdvancedPackagingMachine", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Advanced Packaging Machine", - "transmitter": false - }, - "StructureAirConditioner": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Pipe Waste", - "role": "Waste", - "typ": "Pipe" - }, - "4": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature.\n\t \nThe unit has three pipe connections: input, output, and waste. Gas fed into the input will be heated or cooled to reach the target temperature, while the opposite will happen to gas on the waste network.\n\nMultiple Efficiency Multipliers can effect the amount of energy the Air Conditioner uses, and these can be view on the unit's green Information Panel. As the temperature difference between input and waste increases, the Temperature Differential Efficiency Multiplier will decrease. If input or waste temperature is extremely hot or cold, the Operational Temperature Efficiency will decrease. If the input or waste pipe has approach low pressures, the Pressure Efficiency will decrease.\n\nPipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. \n \nFor more information on using the air conditioner, consult the temperature control Guides page.", - "device": { - "atmosphere": false, - "pins": 2, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -2087593337, - "logic": { - "CombustionInput": "Read", - "CombustionOutput": "Read", - "CombustionOutput2": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "OperationalTemperatureEfficiency": "Read", - "Power": "Read", - "PrefabHash": "Read", - "PressureEfficiency": "Read", - "PressureInput": "Read", - "PressureOutput": "Read", - "PressureOutput2": "Read", - "Ratio": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioCarbonDioxideOutput2": "Read", - "RatioNitrogenInput": "Read", - "RatioNitrogenOutput": "Read", - "RatioNitrogenOutput2": "Read", - "RatioNitrousOxideInput": "Read", - "RatioNitrousOxideOutput": "Read", - "RatioNitrousOxideOutput2": "Read", - "RatioOxygenInput": "Read", - "RatioOxygenOutput": "Read", - "RatioOxygenOutput2": "Read", - "RatioPollutantInput": "Read", - "RatioPollutantOutput": "Read", - "RatioPollutantOutput2": "Read", - "RatioVolatilesInput": "Read", - "RatioVolatilesOutput": "Read", - "RatioVolatilesOutput2": "Read", - "RatioWaterInput": "Read", - "RatioWaterOutput": "Read", - "RatioWaterOutput2": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "TemperatureDifferentialEfficiency": "Read", - "TemperatureInput": "Read", - "TemperatureOutput": "Read", - "TemperatureOutput2": "Read", - "TotalMolesInput": "Read", - "TotalMolesOutput": "Read", - "TotalMolesOutput2": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "name": "StructureAirConditioner", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "title": "Air Conditioner", - "transmitter": false - }, - "StructureAirlock": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The standard airlock is a powered portal that forms the main component of an airlock chamber. As long as the airlock is not locked, it can be manually opened using a crowbar.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -2105052344, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureAirlock", - "receiver": false, - "title": "Airlock", - "transmitter": false - }, - "StructureAirlockGate": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "1 x 1 modular door piece for building hangar doors.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1736080881, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureAirlockGate", - "receiver": false, - "title": "Small Hangar Door", - "transmitter": false - }, - "StructureAngledBench": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1811979158, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureAngledBench", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Bench (Angled)", - "transmitter": false - }, - "StructureArcFurnace": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The simplest smelting system available to the average Stationeer, Recurso's arc furnace was forged itself in the depths of the Solar System to help explorational geologists determine the purity of potential asteroidal mining targets.\nCo-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources.\nThe smelting process also releases a range of by product gases, principally Nitrogen, Carbon Dioxide, Volatiles and Oxygen in differing ratios. These can be recaptured from the atmosphere by filtering, but also make the arc furnace a risk in closed environments. \nUnlike the more advanced Furnace, the arc furnace cannot create alloys.", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -247344692, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "Idle": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "RecipeHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureArcFurnace", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "Ore" - }, - { - "name": "Export", - "typ": "Ingot" - } - ], - "title": "Arc Furnace", - "transmitter": false - }, - "StructureAreaPowerControl": { - "conn": { - "0": { - "name": "Power And Data Input", - "role": "Input", - "typ": "PowerAndData" - }, - "1": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "An Area Power Control (APC) has three main functions: \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network.\nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1999523701, - "logic": { - "Charge": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PowerActual": "Read", - "PowerPotential": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Idle", - "1": "Discharged", - "2": "Discharging", - "3": "Charging", - "4": "Charged" - }, - "name": "StructureAreaPowerControl", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "title": "Area Power Control", - "transmitter": false - }, - "StructureAreaPowerControlReversed": { - "conn": { - "0": { - "name": "Power And Data Input", - "role": "Input", - "typ": "PowerAndData" - }, - "1": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "An Area Power Control (APC) has three main functions. \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. \nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1032513487, - "logic": { - "Charge": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PowerActual": "Read", - "PowerPotential": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Idle", - "1": "Discharged", - "2": "Discharging", - "3": "Charging", - "4": "Charged" - }, - "name": "StructureAreaPowerControlReversed", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "title": "Area Power Control", - "transmitter": false - }, - "StructureAutoMinerSmall": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The Recurso SquareDig autominer is a structure that when built will mine a vertical 2x2 shaft until it hits bedrock. The autominer can be connected to a chute system, and is controllable by a logic network. Note that the autominer outputs more ore than a conventional Mining Drill over the same area.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 7274344, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureAutoMinerSmall", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Autominer (Small)", - "transmitter": false - }, - "StructureAutolathe": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The foundation of most Stationeer fabrication systems, the ExMin autolathe is a multi-axis molecular compositional system. Its complexity demands considerable time to assemble, but it remains an indispensable creation tool. Upgrade the device using a Autolathe Printer Mod for additional recipes and faster processing speeds.\n\t ", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 336213101, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "CompletionRatio": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "RecipeHash": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureAutolathe", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Autolathe", - "transmitter": false - }, - "StructureAutomatedOven": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -1672404896, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "CompletionRatio": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "RecipeHash": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureAutomatedOven", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Automated Oven", - "transmitter": false - }, - "StructureBackLiquidPressureRegulator": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Regulates the volume ratio of liquid in the input Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 2099900163, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureBackLiquidPressureRegulator", - "receiver": false, - "title": "Liquid Back Volume Regulator", - "transmitter": false - }, - "StructureBackPressureRegulator": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Unlike the Pressure Regulator, which closes when the input exceeds a given pressure, the back pressure regulator opens when input pressure reaches a given value.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1149857558, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureBackPressureRegulator", - "receiver": false, - "title": "Back Pressure Regulator", - "transmitter": false - }, - "StructureBasketHoop": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1613497288, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureBasketHoop", - "receiver": false, - "title": "Basket Hoop", - "transmitter": false - }, - "StructureBattery": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - }, - "2": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "Providing large-scale, reliable power storage, the Sinotai 'Dianzi' station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 3600000W of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large).", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -400115994, - "logic": { - "Charge": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "Read", - "On": "ReadWrite", - "Power": "Read", - "PowerActual": "Read", - "PowerPotential": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "StructureBattery", - "receiver": false, - "title": "Station Battery", - "transmitter": false - }, - "StructureBatteryCharger": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The 5-slot Xigo battery charger fits the Battery Cell (Small), Battery Cell (Large) and Battery Cell (Nuclear), providing up to 500W to any connected cell. Note: the older design means this device has minor power draw (10W) even when not charging.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1945930022, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureBatteryCharger", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "4": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Charge": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "ChargeRatio": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Battery Cell Charger", - "transmitter": false - }, - "StructureBatteryChargerSmall": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -761772413, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureBatteryChargerSmall", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Charge": { - "0": "Read", - "1": "Read" - }, - "ChargeRatio": { - "0": "Read", - "1": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - }, - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Battery Charger Small", - "transmitter": false - }, - "StructureBatteryLarge": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - }, - "2": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "Providing even better large-scale, reliable power storage than the {THING;StructureBattery}, the Sinotai 'Da Dianchi' large station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: 'Dianzi cooks, but it also frys.' \nPOWER OUTPUT\nAble to store up to 9000001 watts of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large). ", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -1388288459, - "logic": { - "Charge": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "Read", - "On": "ReadWrite", - "Power": "Read", - "PowerActual": "Read", - "PowerPotential": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "StructureBatteryLarge", - "receiver": false, - "title": "Station Battery (Large)", - "transmitter": false - }, - "StructureBatteryMedium": { - "conn": { - "0": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - }, - "1": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -1125305264, - "logic": { - "Charge": "Read", - "Maximum": "Read", - "Mode": "Read", - "On": "ReadWrite", - "Power": "Read", - "PowerActual": "Read", - "PowerPotential": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "StructureBatteryMedium", - "receiver": false, - "title": "Battery (Medium)", - "transmitter": false - }, - "StructureBatterySmall": { - "conn": { - "0": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - }, - "1": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -2123455080, - "logic": { - "Charge": "Read", - "Maximum": "Read", - "Mode": "Read", - "On": "ReadWrite", - "Power": "Read", - "PowerActual": "Read", - "PowerPotential": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Empty", - "1": "Critical", - "2": "VeryLow", - "3": "Low", - "4": "Medium", - "5": "High", - "6": "Full" - }, - "name": "StructureBatterySmall", - "receiver": false, - "title": "Auxiliary Rocket Battery ", - "transmitter": false - }, - "StructureBeacon": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": true, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -188177083, - "logic": { - "Color": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureBeacon", - "receiver": false, - "title": "Beacon", - "transmitter": false - }, - "StructureBench": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "When it's time to sit, nothing supports you like a bench. This bench is powered, so you can use appliances like the Microwave.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -2042448192, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureBench", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "On": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "title": "Powered Bench", - "transmitter": false - }, - "StructureBench1": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 406745009, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureBench1", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "On": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "title": "Bench (Counter Style)", - "transmitter": false - }, - "StructureBench2": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -2127086069, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureBench2", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "On": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "title": "Bench (High Tech Style)", - "transmitter": false - }, - "StructureBench3": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -164622691, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureBench3", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "On": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "title": "Bench (Frame Style)", - "transmitter": false - }, - "StructureBench4": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1750375230, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureBench4", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "On": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Appliance 1", - "typ": "Appliance" - }, - { - "name": "Appliance 2", - "typ": "Appliance" - } - ], - "title": "Bench (Workbench Style)", - "transmitter": false - }, - "StructureBlastDoor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Airtight and almost undamageable, the original 'Millmar' series of blast door was designed by off-world mining giant Recurso to protect asteroid-mining facilities from nuclear-incident-level explosive decompression.\nShort of a pocket-sized singularity blinking into the local space-time frame, there is effectively no limit to the pressure these blast doors can contain - ideal for constructing airlocks in pressure-sensitive environments.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 337416191, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureBlastDoor", - "receiver": false, - "title": "Blast Door", - "transmitter": false - }, - "StructureBlockBed": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Description coming.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 697908419, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureBlockBed", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" - } - ], - "title": "Block Bed", - "transmitter": false - }, - "StructureBlocker": { - "desc": "", - "hash": 378084505, - "name": "StructureBlocker", - "receiver": false, - "title": "Blocker", - "transmitter": false - }, - "StructureCableAnalysizer": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1036015121, - "logic": { - "PowerActual": "Read", - "PowerPotential": "Read", - "PowerRequired": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureCableAnalysizer", - "receiver": false, - "title": "Cable Analyzer", - "transmitter": false - }, - "StructureCableCorner": { - "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "hash": -889269388, - "name": "StructureCableCorner", - "receiver": false, - "title": "Cable (Corner)", - "transmitter": false - }, - "StructureCableCorner3": { - "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "hash": 980469101, - "name": "StructureCableCorner3", - "receiver": false, - "title": "Cable (3-Way Corner)", - "transmitter": false - }, - "StructureCableCorner3Burnt": { - "desc": "", - "hash": 318437449, - "name": "StructureCableCorner3Burnt", - "receiver": false, - "title": "Burnt Cable (3-Way Corner)", - "transmitter": false - }, - "StructureCableCorner3HBurnt": { - "desc": "StructureCableCorner3HBurnt", - "hash": 2393826, - "name": "StructureCableCorner3HBurnt", - "receiver": false, - "title": "StructureCableCorner3HBurnt", - "transmitter": false - }, - "StructureCableCorner4": { - "desc": "", - "hash": -1542172466, - "name": "StructureCableCorner4", - "receiver": false, - "title": "Cable (4-Way Corner)", - "transmitter": false - }, - "StructureCableCorner4Burnt": { - "desc": "", - "hash": 268421361, - "name": "StructureCableCorner4Burnt", - "receiver": false, - "title": "Burnt Cable (4-Way Corner)", - "transmitter": false - }, - "StructureCableCorner4HBurnt": { - "desc": "", - "hash": -981223316, - "name": "StructureCableCorner4HBurnt", - "receiver": false, - "title": "Burnt Heavy Cable (4-Way Corner)", - "transmitter": false - }, - "StructureCableCornerBurnt": { - "desc": "", - "hash": -177220914, - "name": "StructureCableCornerBurnt", - "receiver": false, - "title": "Burnt Cable (Corner)", - "transmitter": false - }, - "StructureCableCornerH": { - "desc": "", - "hash": -39359015, - "name": "StructureCableCornerH", - "receiver": false, - "title": "Heavy Cable (Corner)", - "transmitter": false - }, - "StructureCableCornerH3": { - "desc": "", - "hash": -1843379322, - "name": "StructureCableCornerH3", - "receiver": false, - "title": "Heavy Cable (3-Way Corner)", - "transmitter": false - }, - "StructureCableCornerH4": { - "desc": "", - "hash": 205837861, - "name": "StructureCableCornerH4", - "receiver": false, - "title": "Heavy Cable (4-Way Corner)", - "transmitter": false - }, - "StructureCableCornerHBurnt": { - "desc": "", - "hash": 1931412811, - "name": "StructureCableCornerHBurnt", - "receiver": false, - "title": "Burnt Cable (Corner)", - "transmitter": false - }, - "StructureCableFuse100k": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 281380789, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureCableFuse100k", - "receiver": false, - "title": "Fuse (100kW)", - "transmitter": false - }, - "StructureCableFuse1k": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1103727120, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureCableFuse1k", - "receiver": false, - "title": "Fuse (1kW)", - "transmitter": false - }, - "StructureCableFuse50k": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -349716617, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureCableFuse50k", - "receiver": false, - "title": "Fuse (50kW)", - "transmitter": false - }, - "StructureCableFuse5k": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -631590668, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureCableFuse5k", - "receiver": false, - "title": "Fuse (5kW)", - "transmitter": false - }, - "StructureCableJunction": { - "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "hash": -175342021, - "name": "StructureCableJunction", - "receiver": false, - "title": "Cable (Junction)", - "transmitter": false - }, - "StructureCableJunction4": { - "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "hash": 1112047202, - "name": "StructureCableJunction4", - "receiver": false, - "title": "Cable (4-Way Junction)", - "transmitter": false - }, - "StructureCableJunction4Burnt": { - "desc": "", - "hash": -1756896811, - "name": "StructureCableJunction4Burnt", - "receiver": false, - "title": "Burnt Cable (4-Way Junction)", - "transmitter": false - }, - "StructureCableJunction4HBurnt": { - "desc": "", - "hash": -115809132, - "name": "StructureCableJunction4HBurnt", - "receiver": false, - "title": "Burnt Cable (4-Way Junction)", - "transmitter": false - }, - "StructureCableJunction5": { - "desc": "", - "hash": 894390004, - "name": "StructureCableJunction5", - "receiver": false, - "title": "Cable (5-Way Junction)", - "transmitter": false - }, - "StructureCableJunction5Burnt": { - "desc": "", - "hash": 1545286256, - "name": "StructureCableJunction5Burnt", - "receiver": false, - "title": "Burnt Cable (5-Way Junction)", - "transmitter": false - }, - "StructureCableJunction6": { - "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer duty - so much so, the ODA designated it an official 'tool' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "hash": -1404690610, - "name": "StructureCableJunction6", - "receiver": false, - "title": "Cable (6-Way Junction)", - "transmitter": false - }, - "StructureCableJunction6Burnt": { - "desc": "", - "hash": -628145954, - "name": "StructureCableJunction6Burnt", - "receiver": false, - "title": "Burnt Cable (6-Way Junction)", - "transmitter": false - }, - "StructureCableJunction6HBurnt": { - "desc": "", - "hash": 1854404029, - "name": "StructureCableJunction6HBurnt", - "receiver": false, - "title": "Burnt Cable (6-Way Junction)", - "transmitter": false - }, - "StructureCableJunctionBurnt": { - "desc": "", - "hash": -1620686196, - "name": "StructureCableJunctionBurnt", - "receiver": false, - "title": "Burnt Cable (Junction)", - "transmitter": false - }, - "StructureCableJunctionH": { - "desc": "", - "hash": 469451637, - "name": "StructureCableJunctionH", - "receiver": false, - "title": "Heavy Cable (3-Way Junction)", - "transmitter": false - }, - "StructureCableJunctionH4": { - "desc": "", - "hash": -742234680, - "name": "StructureCableJunctionH4", - "receiver": false, - "title": "Heavy Cable (4-Way Junction)", - "transmitter": false - }, - "StructureCableJunctionH5": { - "desc": "", - "hash": -1530571426, - "name": "StructureCableJunctionH5", - "receiver": false, - "title": "Heavy Cable (5-Way Junction)", - "transmitter": false - }, - "StructureCableJunctionH5Burnt": { - "desc": "", - "hash": 1701593300, - "name": "StructureCableJunctionH5Burnt", - "receiver": false, - "title": "Burnt Heavy Cable (5-Way Junction)", - "transmitter": false - }, - "StructureCableJunctionH6": { - "desc": "", - "hash": 1036780772, - "name": "StructureCableJunctionH6", - "receiver": false, - "title": "Heavy Cable (6-Way Junction)", - "transmitter": false - }, - "StructureCableJunctionHBurnt": { - "desc": "", - "hash": -341365649, - "name": "StructureCableJunctionHBurnt", - "receiver": false, - "title": "Burnt Cable (Junction)", - "transmitter": false - }, - "StructureCableStraight": { - "desc": "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official 'tool'.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy).", - "hash": 605357050, - "name": "StructureCableStraight", - "receiver": false, - "title": "Cable (Straight)", - "transmitter": false - }, - "StructureCableStraightBurnt": { - "desc": "", - "hash": -1196981113, - "name": "StructureCableStraightBurnt", - "receiver": false, - "title": "Burnt Cable (Straight)", - "transmitter": false - }, - "StructureCableStraightH": { - "desc": "", - "hash": -146200530, - "name": "StructureCableStraightH", - "receiver": false, - "title": "Heavy Cable (Straight)", - "transmitter": false - }, - "StructureCableStraightHBurnt": { - "desc": "", - "hash": 2085762089, - "name": "StructureCableStraightHBurnt", - "receiver": false, - "title": "Burnt Cable (Straight)", - "transmitter": false - }, - "StructureCamera": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Nothing says 'I care' like a security camera that's been linked a Motion Sensor and a Console fitted with a Camera Display.\nBe there, even when you're not.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -342072665, - "logic": { - "Mode": "ReadWrite", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureCamera", - "receiver": false, - "title": "Camera", - "transmitter": false - }, - "StructureCapsuleTankGas": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1385712131, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureCapsuleTankGas", - "receiver": false, - "title": "Gas Capsule Tank Small", - "transmitter": false - }, - "StructureCapsuleTankLiquid": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1415396263, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureCapsuleTankLiquid", - "receiver": false, - "title": "Liquid Capsule Tank Small", - "transmitter": false - }, - "StructureCargoStorageMedium": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1151864003, - "logic": { - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureCargoStorageMedium", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {}, - "10": {}, - "100": {}, - "101": {}, - "11": {}, - "12": {}, - "13": {}, - "14": {}, - "15": {}, - "16": {}, - "17": {}, - "18": {}, - "19": {}, - "2": {}, - "20": {}, - "21": {}, - "22": {}, - "23": {}, - "24": {}, - "25": {}, - "26": {}, - "27": {}, - "28": {}, - "29": {}, - "3": {}, - "30": {}, - "31": {}, - "32": {}, - "33": {}, - "34": {}, - "35": {}, - "36": {}, - "37": {}, - "38": {}, - "39": {}, - "4": {}, - "40": {}, - "41": {}, - "42": {}, - "43": {}, - "44": {}, - "45": {}, - "46": {}, - "47": {}, - "48": {}, - "49": {}, - "5": {}, - "50": {}, - "51": {}, - "52": {}, - "53": {}, - "54": {}, - "55": {}, - "56": {}, - "57": {}, - "58": {}, - "59": {}, - "6": {}, - "60": {}, - "61": {}, - "62": {}, - "63": {}, - "64": {}, - "65": {}, - "66": {}, - "67": {}, - "68": {}, - "69": {}, - "7": {}, - "70": {}, - "71": {}, - "72": {}, - "73": {}, - "74": {}, - "75": {}, - "76": {}, - "77": {}, - "78": {}, - "79": {}, - "8": {}, - "80": {}, - "81": {}, - "82": {}, - "83": {}, - "84": {}, - "85": {}, - "86": {}, - "87": {}, - "88": {}, - "89": {}, - "9": {}, - "90": {}, - "91": {}, - "92": {}, - "93": {}, - "94": {}, - "95": {}, - "96": {}, - "97": {}, - "98": {}, - "99": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - } - ], - "title": "Cargo Storage (Medium)", - "transmitter": false - }, - "StructureCargoStorageSmall": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -1493672123, - "logic": { - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureCargoStorageSmall", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "10": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "11": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "12": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "13": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "14": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "15": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "16": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "17": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "18": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "19": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "20": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "21": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "22": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "23": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "24": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "25": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "26": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "27": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "28": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "29": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "30": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "31": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "32": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "33": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "34": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "35": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "36": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "37": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "38": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "39": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "40": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "41": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "42": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "43": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "44": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "45": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "46": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "47": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "48": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "49": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "50": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "51": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "30": "Read", - "31": "Read", - "32": "Read", - "33": "Read", - "34": "Read", - "35": "Read", - "36": "Read", - "37": "Read", - "38": "Read", - "39": "Read", - "4": "Read", - "40": "Read", - "41": "Read", - "42": "Read", - "43": "Read", - "44": "Read", - "45": "Read", - "46": "Read", - "47": "Read", - "48": "Read", - "49": "Read", - "5": "Read", - "50": "Read", - "51": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "30": "Read", - "31": "Read", - "32": "Read", - "33": "Read", - "34": "Read", - "35": "Read", - "36": "Read", - "37": "Read", - "38": "Read", - "39": "Read", - "4": "Read", - "40": "Read", - "41": "Read", - "42": "Read", - "43": "Read", - "44": "Read", - "45": "Read", - "46": "Read", - "47": "Read", - "48": "Read", - "49": "Read", - "5": "Read", - "50": "Read", - "51": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "30": "Read", - "31": "Read", - "32": "Read", - "33": "Read", - "34": "Read", - "35": "Read", - "36": "Read", - "37": "Read", - "38": "Read", - "39": "Read", - "4": "Read", - "40": "Read", - "41": "Read", - "42": "Read", - "43": "Read", - "44": "Read", - "45": "Read", - "46": "Read", - "47": "Read", - "48": "Read", - "49": "Read", - "5": "Read", - "50": "Read", - "51": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "30": "Read", - "31": "Read", - "32": "Read", - "33": "Read", - "34": "Read", - "35": "Read", - "36": "Read", - "37": "Read", - "38": "Read", - "39": "Read", - "4": "Read", - "40": "Read", - "41": "Read", - "42": "Read", - "43": "Read", - "44": "Read", - "45": "Read", - "46": "Read", - "47": "Read", - "48": "Read", - "49": "Read", - "5": "Read", - "50": "Read", - "51": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "30": "Read", - "31": "Read", - "32": "Read", - "33": "Read", - "34": "Read", - "35": "Read", - "36": "Read", - "37": "Read", - "38": "Read", - "39": "Read", - "4": "Read", - "40": "Read", - "41": "Read", - "42": "Read", - "43": "Read", - "44": "Read", - "45": "Read", - "46": "Read", - "47": "Read", - "48": "Read", - "49": "Read", - "5": "Read", - "50": "Read", - "51": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "30": "Read", - "31": "Read", - "32": "Read", - "33": "Read", - "34": "Read", - "35": "Read", - "36": "Read", - "37": "Read", - "38": "Read", - "39": "Read", - "4": "Read", - "40": "Read", - "41": "Read", - "42": "Read", - "43": "Read", - "44": "Read", - "45": "Read", - "46": "Read", - "47": "Read", - "48": "Read", - "49": "Read", - "5": "Read", - "50": "Read", - "51": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "30": "Read", - "31": "Read", - "32": "Read", - "33": "Read", - "34": "Read", - "35": "Read", - "36": "Read", - "37": "Read", - "38": "Read", - "39": "Read", - "4": "Read", - "40": "Read", - "41": "Read", - "42": "Read", - "43": "Read", - "44": "Read", - "45": "Read", - "46": "Read", - "47": "Read", - "48": "Read", - "49": "Read", - "5": "Read", - "50": "Read", - "51": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "30": "Read", - "31": "Read", - "32": "Read", - "33": "Read", - "34": "Read", - "35": "Read", - "36": "Read", - "37": "Read", - "38": "Read", - "39": "Read", - "4": "Read", - "40": "Read", - "41": "Read", - "42": "Read", - "43": "Read", - "44": "Read", - "45": "Read", - "46": "Read", - "47": "Read", - "48": "Read", - "49": "Read", - "5": "Read", - "50": "Read", - "51": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "30": "Read", - "31": "Read", - "32": "Read", - "33": "Read", - "34": "Read", - "35": "Read", - "36": "Read", - "37": "Read", - "38": "Read", - "39": "Read", - "4": "Read", - "40": "Read", - "41": "Read", - "42": "Read", - "43": "Read", - "44": "Read", - "45": "Read", - "46": "Read", - "47": "Read", - "48": "Read", - "49": "Read", - "5": "Read", - "50": "Read", - "51": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - } - ], - "title": "Cargo Storage (Small)", - "transmitter": false - }, - "StructureCentrifuge": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. \n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. \n Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. \n If openned while powered on, the centrifuge will enter an errored state and reduce its rpm to 0 and then export any items.", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 690945935, - "logic": { - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureCentrifuge", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Centrifuge", - "transmitter": false - }, - "StructureChair": { - "desc": "One of the universe's many chairs, optimized for bipeds with somewhere between zero and two upper limbs.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1167659360, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChair", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Chair", - "transmitter": false - }, - "StructureChairBacklessDouble": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1944858936, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChairBacklessDouble", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Chair (Backless Double)", - "transmitter": false - }, - "StructureChairBacklessSingle": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1672275150, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChairBacklessSingle", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Chair (Backless Single)", - "transmitter": false - }, - "StructureChairBoothCornerLeft": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -367720198, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChairBoothCornerLeft", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Chair (Booth Corner Left)", - "transmitter": false - }, - "StructureChairBoothMiddle": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1640720378, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChairBoothMiddle", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Chair (Booth Middle)", - "transmitter": false - }, - "StructureChairRectangleDouble": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1152812099, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChairRectangleDouble", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Chair (Rectangle Double)", - "transmitter": false - }, - "StructureChairRectangleSingle": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1425428917, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChairRectangleSingle", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Chair (Rectangle Single)", - "transmitter": false - }, - "StructureChairThickDouble": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1245724402, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChairThickDouble", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Chair (Thick Double)", - "transmitter": false - }, - "StructureChairThickSingle": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1510009608, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChairThickSingle", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Chair (Thick Single)", - "transmitter": false - }, - "StructureChuteBin": { - "conn": { - "0": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The Stationeer's goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nLike most Recurso-designed systems, chute bins are simple and robust powered items, allowing items to be manually passed into chute networks by pulling a lever. They can also be programmed with logic to operate automatically, although full automation requires the use items such as a SDB Hopper.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -850484480, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureChuteBin", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Input", - "typ": "None" - } - ], - "title": "Chute Bin", - "transmitter": false - }, - "StructureChuteCorner": { - "desc": "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute corners are fundamental components of chute networks, which allow the transport of items between machines with import/export slots, such as the Furnace and other automatable structures.", - "hash": 1360330136, - "name": "StructureChuteCorner", - "receiver": false, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute (Corner)", - "transmitter": false - }, - "StructureChuteDigitalFlipFlopSplitterLeft": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Chute Output2", - "role": "Output2", - "typ": "Chute" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -810874728, - "logic": { - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "SettingOutput": "ReadWrite" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureChuteDigitalFlipFlopSplitterLeft", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute Digital Flip Flop Splitter Left", - "transmitter": false - }, - "StructureChuteDigitalFlipFlopSplitterRight": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Chute Output2", - "role": "Output2", - "typ": "Chute" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 163728359, - "logic": { - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "SettingOutput": "ReadWrite" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureChuteDigitalFlipFlopSplitterRight", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute Digital Flip Flop Splitter Right", - "transmitter": false - }, - "StructureChuteDigitalValveLeft": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 648608238, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureChuteDigitalValveLeft", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute Digital Valve Left", - "transmitter": false - }, - "StructureChuteDigitalValveRight": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -1337091041, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureChuteDigitalValveRight", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute Digital Valve Right", - "transmitter": false - }, - "StructureChuteFlipFlopSplitter": { - "desc": "A chute that toggles between two outputs", - "hash": -1446854725, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureChuteFlipFlopSplitter", - "receiver": false, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute Flip Flop Splitter", - "transmitter": false - }, - "StructureChuteInlet": { - "conn": { - "0": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute inlet is an aperture by which items can be introduced to import/export networks. Note that its origins in zero-gravity mining means chute inlets are unpowered and permanently open, rather than interactable, allowing objects to be thrown in. They can be connected to logic systems to monitor throughput.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1469588766, - "logic": { - "ClearMemory": "Write", - "ImportCount": "Read", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChuteInlet", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "None" - } - ], - "title": "Chute Inlet", - "transmitter": false - }, - "StructureChuteJunction": { - "desc": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute junctions are fundamental components of chute networks, allowing merging or splitting of these networks. When combined with a programmed Sorter, items can be sent down different paths to various machines with import/export slots.", - "hash": -611232514, - "name": "StructureChuteJunction", - "receiver": false, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute (Junction)", - "transmitter": false - }, - "StructureChuteOutlet": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute outlet is an aperture for exiting items from import/export networks. Note that the outlet's origins in zero-gravity mining means they are permanently open, rather than interactable, but can be connected to logic systems to monitor throughput.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1022714809, - "logic": { - "ClearMemory": "Write", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChuteOutlet", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Export", - "typ": "None" - } - ], - "title": "Chute Outlet", - "transmitter": false - }, - "StructureChuteOverflow": { - "desc": "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied.", - "hash": 225377225, - "name": "StructureChuteOverflow", - "receiver": false, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute Overflow", - "transmitter": false - }, - "StructureChuteStraight": { - "desc": "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChutes are fundamental components of chute networks, which allow the transport of items between any machine or device with an import/export slot.", - "hash": 168307007, - "name": "StructureChuteStraight", - "receiver": false, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute (Straight)", - "transmitter": false - }, - "StructureChuteUmbilicalFemale": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1918892177, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChuteUmbilicalFemale", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Umbilical Socket (Chute)", - "transmitter": false - }, - "StructureChuteUmbilicalFemaleSide": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -659093969, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureChuteUmbilicalFemaleSide", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Umbilical Socket Angle (Chute)", - "transmitter": false - }, - "StructureChuteUmbilicalMale": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "0.Left\n1.Center\n2.Right", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -958884053, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Mode": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Left", - "1": "Center", - "2": "Right" - }, - "name": "StructureChuteUmbilicalMale", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Umbilical (Chute)", - "transmitter": false - }, - "StructureChuteValve": { - "desc": "The Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute.", - "hash": 434875271, - "name": "StructureChuteValve", - "receiver": false, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute Valve", - "transmitter": false - }, - "StructureChuteWindow": { - "desc": "Chute's with windows let you see what's passing through your import/export network. But be warned, they are not insulated as other chutes are. Ices will melt.", - "hash": -607241919, - "name": "StructureChuteWindow", - "receiver": false, - "slots": [ - { - "name": "Transport Slot", - "typ": "None" - } - ], - "title": "Chute (Window)", - "transmitter": false - }, - "StructureCircuitHousing": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "pins": 6, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -128473777, - "logic": { - "Error": "Read", - "LineNumber": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "memory": { - "access": "ReadWrite", - "size": 0, - "sizeDisplay": "0 B" - }, - "name": "StructureCircuitHousing", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "LineNumber": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "LineNumber": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "title": "IC Housing", - "transmitter": false - }, - "StructureCombustionCentrifuge": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "4": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "5": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - } - }, - "desc": "The Combustion Centrifuge is a gas powered version of the Centrifuge. If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore.\n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. A combustible fuel mix should be supplied to the gas input, and waste gasses should be vented from the output. \n The machine's RPMs must be controlled via the throttle and combustion limiter levers. If the Combustion Centrifuge gains, or loses, RPMs too fast it will experience stress, and eventually grind to a halt. Higher RPMs directly result in faster processing speeds. \n The throttle lever controls the amount of fuel being pulled into the machine, increasing the temperature inside the engine, and leading to an increase in RPM. The limiter lever influences the speed of the combustion, and how much uncombusted gas is in the exhaust. \n Ejecting ore from the Combustion Centrifuge while it is at high RPMs will result in additional stress build up. If turned off while not stressed, the machine will automatically start to brake, and reduce RPMs in a controlled manner.\n\t ", - "device": { - "atmosphere": true, - "pins": 2, - "reagents": true, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1238905683, - "logic": { - "ClearMemory": "Write", - "Combustion": "Read", - "CombustionInput": "Read", - "CombustionLimiter": "ReadWrite", - "CombustionOutput": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "PressureInput": "Read", - "PressureOutput": "Read", - "RatioCarbonDioxide": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrogenInput": "Read", - "RatioNitrogenOutput": "Read", - "RatioNitrousOxide": "Read", - "RatioNitrousOxideInput": "Read", - "RatioNitrousOxideOutput": "Read", - "RatioOxygen": "Read", - "RatioOxygenInput": "Read", - "RatioOxygenOutput": "Read", - "RatioPollutant": "Read", - "RatioPollutantInput": "Read", - "RatioPollutantOutput": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioVolatilesInput": "Read", - "RatioVolatilesOutput": "Read", - "RatioWater": "Read", - "RatioWaterInput": "Read", - "RatioWaterOutput": "Read", - "Reagents": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Rpm": "Read", - "Stress": "Read", - "Temperature": "Read", - "TemperatureInput": "Read", - "TemperatureOutput": "Read", - "Throttle": "ReadWrite", - "TotalMoles": "Read", - "TotalMolesInput": "Read", - "TotalMolesOutput": "Read" - }, - "name": "StructureCombustionCentrifuge", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {}, - "2": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "title": "Combustion Centrifuge", - "transmitter": false - }, - "StructureCompositeCladdingAngled": { - "desc": "", - "hash": -1513030150, - "name": "StructureCompositeCladdingAngled", - "receiver": false, - "title": "Composite Cladding (Angled)", - "transmitter": false - }, - "StructureCompositeCladdingAngledCorner": { - "desc": "", - "hash": -69685069, - "name": "StructureCompositeCladdingAngledCorner", - "receiver": false, - "title": "Composite Cladding (Angled Corner)", - "transmitter": false - }, - "StructureCompositeCladdingAngledCornerInner": { - "desc": "", - "hash": -1841871763, - "name": "StructureCompositeCladdingAngledCornerInner", - "receiver": false, - "title": "Composite Cladding (Angled Corner Inner)", - "transmitter": false - }, - "StructureCompositeCladdingAngledCornerInnerLong": { - "desc": "", - "hash": -1417912632, - "name": "StructureCompositeCladdingAngledCornerInnerLong", - "receiver": false, - "title": "Composite Cladding (Angled Corner Inner Long)", - "transmitter": false - }, - "StructureCompositeCladdingAngledCornerInnerLongL": { - "desc": "", - "hash": 947705066, - "name": "StructureCompositeCladdingAngledCornerInnerLongL", - "receiver": false, - "title": "Composite Cladding (Angled Corner Inner Long L)", - "transmitter": false - }, - "StructureCompositeCladdingAngledCornerInnerLongR": { - "desc": "", - "hash": -1032590967, - "name": "StructureCompositeCladdingAngledCornerInnerLongR", - "receiver": false, - "title": "Composite Cladding (Angled Corner Inner Long R)", - "transmitter": false - }, - "StructureCompositeCladdingAngledCornerLong": { - "desc": "", - "hash": 850558385, - "name": "StructureCompositeCladdingAngledCornerLong", - "receiver": false, - "title": "Composite Cladding (Long Angled Corner)", - "transmitter": false - }, - "StructureCompositeCladdingAngledCornerLongR": { - "desc": "", - "hash": -348918222, - "name": "StructureCompositeCladdingAngledCornerLongR", - "receiver": false, - "title": "Composite Cladding (Long Angled Mirrored Corner)", - "transmitter": false - }, - "StructureCompositeCladdingAngledLong": { - "desc": "", - "hash": -387546514, - "name": "StructureCompositeCladdingAngledLong", - "receiver": false, - "title": "Composite Cladding (Long Angled)", - "transmitter": false - }, - "StructureCompositeCladdingCylindrical": { - "desc": "", - "hash": 212919006, - "name": "StructureCompositeCladdingCylindrical", - "receiver": false, - "title": "Composite Cladding (Cylindrical)", - "transmitter": false - }, - "StructureCompositeCladdingCylindricalPanel": { - "desc": "", - "hash": 1077151132, - "name": "StructureCompositeCladdingCylindricalPanel", - "receiver": false, - "title": "Composite Cladding (Cylindrical Panel)", - "transmitter": false - }, - "StructureCompositeCladdingPanel": { - "desc": "", - "hash": 1997436771, - "name": "StructureCompositeCladdingPanel", - "receiver": false, - "title": "Composite Cladding (Panel)", - "transmitter": false - }, - "StructureCompositeCladdingRounded": { - "desc": "", - "hash": -259357734, - "name": "StructureCompositeCladdingRounded", - "receiver": false, - "title": "Composite Cladding (Rounded)", - "transmitter": false - }, - "StructureCompositeCladdingRoundedCorner": { - "desc": "", - "hash": 1951525046, - "name": "StructureCompositeCladdingRoundedCorner", - "receiver": false, - "title": "Composite Cladding (Rounded Corner)", - "transmitter": false - }, - "StructureCompositeCladdingRoundedCornerInner": { - "desc": "", - "hash": 110184667, - "name": "StructureCompositeCladdingRoundedCornerInner", - "receiver": false, - "title": "Composite Cladding (Rounded Corner Inner)", - "transmitter": false - }, - "StructureCompositeCladdingSpherical": { - "desc": "", - "hash": 139107321, - "name": "StructureCompositeCladdingSpherical", - "receiver": false, - "title": "Composite Cladding (Spherical)", - "transmitter": false - }, - "StructureCompositeCladdingSphericalCap": { - "desc": "", - "hash": 534213209, - "name": "StructureCompositeCladdingSphericalCap", - "receiver": false, - "title": "Composite Cladding (Spherical Cap)", - "transmitter": false - }, - "StructureCompositeCladdingSphericalCorner": { - "desc": "", - "hash": 1751355139, - "name": "StructureCompositeCladdingSphericalCorner", - "receiver": false, - "title": "Composite Cladding (Spherical Corner)", - "transmitter": false - }, - "StructureCompositeDoor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Recurso's composite doors are rated to 300kPa, which is more than sufficient for most purposes they were designed for. However, steep pressure differentials are not your friend.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -793837322, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureCompositeDoor", - "receiver": false, - "title": "Composite Door", - "transmitter": false - }, - "StructureCompositeFloorGrating": { - "desc": "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings.", - "hash": 324868581, - "name": "StructureCompositeFloorGrating", - "receiver": false, - "title": "Composite Floor Grating", - "transmitter": false - }, - "StructureCompositeFloorGrating2": { - "desc": "", - "hash": -895027741, - "name": "StructureCompositeFloorGrating2", - "receiver": false, - "title": "Composite Floor Grating (Type 2)", - "transmitter": false - }, - "StructureCompositeFloorGrating3": { - "desc": "", - "hash": -1113471627, - "name": "StructureCompositeFloorGrating3", - "receiver": false, - "title": "Composite Floor Grating (Type 3)", - "transmitter": false - }, - "StructureCompositeFloorGrating4": { - "desc": "", - "hash": 600133846, - "name": "StructureCompositeFloorGrating4", - "receiver": false, - "title": "Composite Floor Grating (Type 4)", - "transmitter": false - }, - "StructureCompositeFloorGratingOpen": { - "desc": "", - "hash": 2109695912, - "name": "StructureCompositeFloorGratingOpen", - "receiver": false, - "title": "Composite Floor Grating Open", - "transmitter": false - }, - "StructureCompositeFloorGratingOpenRotated": { - "desc": "", - "hash": 882307910, - "name": "StructureCompositeFloorGratingOpenRotated", - "receiver": false, - "title": "Composite Floor Grating Open Rotated", - "transmitter": false - }, - "StructureCompositeWall": { - "desc": "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties.", - "hash": 1237302061, - "name": "StructureCompositeWall", - "receiver": false, - "title": "Composite Wall (Type 1)", - "transmitter": false - }, - "StructureCompositeWall02": { - "desc": "", - "hash": 718343384, - "name": "StructureCompositeWall02", - "receiver": false, - "title": "Composite Wall (Type 2)", - "transmitter": false - }, - "StructureCompositeWall03": { - "desc": "", - "hash": 1574321230, - "name": "StructureCompositeWall03", - "receiver": false, - "title": "Composite Wall (Type 3)", - "transmitter": false - }, - "StructureCompositeWall04": { - "desc": "", - "hash": -1011701267, - "name": "StructureCompositeWall04", - "receiver": false, - "title": "Composite Wall (Type 4)", - "transmitter": false - }, - "StructureCompositeWindow": { - "desc": "Air-tight and resistant to extreme temperatures, composite walls come in several charming, near identical varieties - reflecting their designer's focus on form over function.", - "hash": -2060571986, - "name": "StructureCompositeWindow", - "receiver": false, - "title": "Composite Window", - "transmitter": false - }, - "StructureCompositeWindowIron": { - "desc": "", - "hash": -688284639, - "name": "StructureCompositeWindowIron", - "receiver": false, - "title": "Iron Window", - "transmitter": false - }, - "StructureComputer": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "In some ways a relic, the 'Chonk R1' was designed by severely conflicted Norsec technicians, who needed a unit that could operate with a wide range of motherboards, while also enduring the worst a new Cadet could throw at it.\nThe result is a machine described by some as 'the only PC likely to survive our collision with a black hole', while other, less appreciative users regard it as sharing most of its technological DNA with a cheese grater.\nCompatible motherboards:\n- Logic Motherboard\n- Manufacturing Motherboard\n- Sorter Motherboard\n- Communications Motherboard\n- IC Editor Motherboard", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -626563514, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureComputer", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {}, - "2": {} - }, - "slots": [ - { - "name": "Data Disk", - "typ": "DataDisk" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - }, - { - "name": "Motherboard", - "typ": "Motherboard" - } - ], - "title": "Computer", - "transmitter": false - }, - "StructureCondensationChamber": { - "conn": { - "0": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "4": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "A device for safely condensing gasses into liquids. Liquids and Gasses will both exist safely inside the device. The Chamber will pressurise using its in-built pressure regulator to the target set by the setting wheel.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Condensation Chamber.\n Paired with Evaporation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1420719315, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "StructureCondensationChamber", - "receiver": false, - "title": "Condensation Chamber", - "transmitter": false - }, - "StructureCondensationValve": { - "conn": { - "0": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -965741795, - "logic": { - "Maximum": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureCondensationValve", - "receiver": false, - "title": "Condensation Valve", - "transmitter": false - }, - "StructureConsole": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 235638270, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "name": "StructureConsole", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Circuit Board", - "typ": "Circuitboard" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "title": "Console", - "transmitter": false - }, - "StructureConsoleDual": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "This Norsec-designed control box manages devices such as the Active Vent, Gas Sensor, Composite Door and others, depending on which circuitboard is inserted into the unit. It has separate data and power ports.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -722284333, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "name": "StructureConsoleDual", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Circuit Board", - "typ": "Circuitboard" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "title": "Console Dual", - "transmitter": false - }, - "StructureConsoleLED1x2": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "0.Default\n1.Percent\n2.Power", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": true, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -53151617, - "logic": { - "Color": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Default", - "1": "Percent", - "2": "Power" - }, - "name": "StructureConsoleLED1x2", - "receiver": false, - "title": "LED Display (Medium)", - "transmitter": false - }, - "StructureConsoleLED1x3": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "0.Default\n1.Percent\n2.Power", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": true, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -1949054743, - "logic": { - "Color": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Default", - "1": "Percent", - "2": "Power" - }, - "name": "StructureConsoleLED1x3", - "receiver": false, - "title": "LED Display (Large)", - "transmitter": false - }, - "StructureConsoleLED5": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "0.Default\n1.Percent\n2.Power", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": true, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -815193061, - "logic": { - "Color": "ReadWrite", - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Default", - "1": "Percent", - "2": "Power" - }, - "name": "StructureConsoleLED5", - "receiver": false, - "title": "LED Display (Small)", - "transmitter": false - }, - "StructureConsoleMonitor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor, Security Camera and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port, and a charming sloped interface.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 801677497, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "name": "StructureConsoleMonitor", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Circuit Board", - "typ": "Circuitboard" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "title": "Console Monitor", - "transmitter": false - }, - "StructureControlChair": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Once, these chairs were the heart of space-going behemoths. Now, they're items of nostalgia built only by a handful of Stationeers with a sense of history. In other words, kitsch.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -1961153710, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "VelocityMagnitude": "Read", - "VelocityRelativeX": "Read", - "VelocityRelativeY": "Read", - "VelocityRelativeZ": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureControlChair", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Entity", - "typ": "Entity" - } - ], - "title": "Control Chair", - "transmitter": false - }, - "StructureCornerLocker": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -1968255729, - "logic": { - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureCornerLocker", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Corner Locker", - "transmitter": false - }, - "StructureCrateMount": { - "desc": "", - "hash": -733500083, - "name": "StructureCrateMount", - "receiver": false, - "slots": [ - { - "name": "Container Slot", - "typ": "None" - } - ], - "title": "Container Mount", - "transmitter": false - }, - "StructureCryoTube": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The exact operation of the Longsleep cryotube remains a commercial secret, with Norsec merely licensing the design. Able to regenerate organ damage when supplied with power and an atmosphere, the Longsleep is a minor miracle of modern medical technology.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1938254586, - "logic": { - "Activate": "ReadWrite", - "EntityState": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read" - }, - "name": "StructureCryoTube", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" - } - ], - "title": "CryoTube", - "transmitter": false - }, - "StructureCryoTubeHorizontal": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The horizontal variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1443059329, - "logic": { - "Activate": "ReadWrite", - "EntityState": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read" - }, - "name": "StructureCryoTubeHorizontal", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "title": "Cryo Tube Horizontal", - "transmitter": false - }, - "StructureCryoTubeVertical": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The vertical variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -1381321828, - "logic": { - "Activate": "ReadWrite", - "EntityState": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read" - }, - "name": "StructureCryoTubeVertical", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "title": "Cryo Tube Vertical", - "transmitter": false - }, - "StructureDaylightSensor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Daylight sensors provide data on whether the current region of your base is in sunlight, and report the exact solar angle. Note that the orientation of the sensor alters the reported solar angle, while Logic systems can be used to offset it.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1076425094, - "logic": { - "Activate": "ReadWrite", - "Horizontal": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "SolarAngle": "Read", - "SolarIrradiance": "Read", - "Vertical": "Read" - }, - "modes": { - "0": "Default", - "1": "Horizontal", - "2": "Vertical" - }, - "name": "StructureDaylightSensor", - "receiver": false, - "title": "Daylight Sensor", - "transmitter": false - }, - "StructureDeepMiner": { - "conn": { - "0": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 265720906, - "logic": { - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureDeepMiner", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Export", - "typ": "None" - } - ], - "title": "Deep Miner", - "transmitter": false - }, - "StructureDigitalValve": { - "conn": { - "0": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The digital valve allows Stationeers to create logic-controlled valves and pipe networks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1280984102, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureDigitalValve", - "receiver": false, - "title": "Digital Valve", - "transmitter": false - }, - "StructureDiode": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": true, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1944485013, - "logic": { - "Color": "ReadWrite", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureDiode", - "receiver": false, - "title": "LED", - "transmitter": false - }, - "StructureDiodeSlide": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 576516101, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureDiodeSlide", - "receiver": false, - "title": "Diode Slide", - "transmitter": false - }, - "StructureDockPortSide": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -137465079, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureDockPortSide", - "receiver": false, - "title": "Dock (Port Side)", - "transmitter": false - }, - "StructureDrinkingFountain": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "StructureDrinkingFountain", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1968371847, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureDrinkingFountain", - "receiver": false, - "title": "StructureDrinkingFountain", - "transmitter": false - }, - "StructureElectrolyzer": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The Norsec-designed Electrolyzer splits Water into hydrogen and Oxygen. Employing unknown proprietary technology, the device uses water's latent heat as the energy to drive the electrosis process. If there is a downside to this near-miraculous fission, it's that the device is limited by the quantity of power available, which is used to maintain the temperature output. In other words, the machine works best with hot gas.", - "device": { - "atmosphere": true, - "pins": 2, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1668992663, - "logic": { - "Activate": "ReadWrite", - "Combustion": "Read", - "CombustionInput": "Read", - "CombustionOutput": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "PressureInput": "Read", - "PressureOutput": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrogenInput": "Read", - "RatioNitrogenOutput": "Read", - "RatioNitrousOxide": "Read", - "RatioNitrousOxideInput": "Read", - "RatioNitrousOxideOutput": "Read", - "RatioOxygen": "Read", - "RatioOxygenInput": "Read", - "RatioOxygenOutput": "Read", - "RatioPollutant": "Read", - "RatioPollutantInput": "Read", - "RatioPollutantOutput": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioVolatilesInput": "Read", - "RatioVolatilesOutput": "Read", - "RatioWater": "Read", - "RatioWaterInput": "Read", - "RatioWaterOutput": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TemperatureInput": "Read", - "TemperatureOutput": "Read", - "TotalMoles": "Read", - "TotalMolesInput": "Read", - "TotalMolesOutput": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "name": "StructureElectrolyzer", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "title": "Electrolyzer", - "transmitter": false - }, - "StructureElectronicsPrinter": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The electronic printer will create any electronic part you need. From circuit boards and electronic devices to solar panels. The choice is yours. Upgrade the device using a Electronic Printer Mod for additional recipes and faster processing speeds.", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1307165496, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "CompletionRatio": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "RecipeHash": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureElectronicsPrinter", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Electronics Printer", - "transmitter": false - }, - "StructureElevatorLevelFront": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Elevator" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Elevator" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -827912235, - "logic": { - "Activate": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "ElevatorSpeed": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureElevatorLevelFront", - "receiver": false, - "title": "Elevator Level (Cabled)", - "transmitter": false - }, - "StructureElevatorLevelIndustrial": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Elevator" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Elevator" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 2060648791, - "logic": { - "Activate": "ReadWrite", - "ElevatorLevel": "ReadWrite", - "ElevatorSpeed": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureElevatorLevelIndustrial", - "receiver": false, - "title": "Elevator Level", - "transmitter": false - }, - "StructureElevatorShaft": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Elevator" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Elevator" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 826144419, - "logic": { - "ElevatorLevel": "ReadWrite", - "ElevatorSpeed": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureElevatorShaft", - "receiver": false, - "title": "Elevator Shaft (Cabled)", - "transmitter": false - }, - "StructureElevatorShaftIndustrial": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Elevator" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Elevator" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1998354978, - "logic": { - "ElevatorLevel": "ReadWrite", - "ElevatorSpeed": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureElevatorShaftIndustrial", - "receiver": false, - "title": "Elevator Shaft", - "transmitter": false - }, - "StructureEmergencyButton": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Description coming.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1668452680, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "name": "StructureEmergencyButton", - "receiver": false, - "title": "Important Button", - "transmitter": false - }, - "StructureEngineMountTypeA1": { - "desc": "", - "hash": 2035781224, - "name": "StructureEngineMountTypeA1", - "receiver": false, - "title": "Engine Mount (Type A1)", - "transmitter": false - }, - "StructureEvaporationChamber": { - "conn": { - "0": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "4": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "A device for safely evaporating liquids into gasses. Liquids and Gasses will both exist safely inside the device. Lowering the pressure target of the in-built back pressure regulator using the setting wheel will change the boiling temperature of liquids inside.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Evaporation Chamber. \n Paired with Condensation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -1429782576, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "StructureEvaporationChamber", - "receiver": false, - "title": "Evaporation Chamber", - "transmitter": false - }, - "StructureExpansionValve": { - "conn": { - "0": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "Allows for moving liquids from a liquid pipe into a gas pipe. Only allows liquids to pass in one direction. Typically this is done to allow the liquid to evaporate into a gas as part of an airconditioning loop.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 195298587, - "logic": { - "Maximum": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureExpansionValve", - "receiver": false, - "title": "Expansion Valve", - "transmitter": false - }, - "StructureFairingTypeA1": { - "desc": "", - "hash": 1622567418, - "name": "StructureFairingTypeA1", - "receiver": false, - "title": "Fairing (Type A1)", - "transmitter": false - }, - "StructureFairingTypeA2": { - "desc": "", - "hash": -104908736, - "name": "StructureFairingTypeA2", - "receiver": false, - "title": "Fairing (Type A2)", - "transmitter": false - }, - "StructureFairingTypeA3": { - "desc": "", - "hash": -1900541738, - "name": "StructureFairingTypeA3", - "receiver": false, - "title": "Fairing (Type A3)", - "transmitter": false - }, - "StructureFiltration": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Pipe Waste", - "role": "Waste", - "typ": "Pipe" - }, - "4": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The Filtration Unit is based on a long-standing ExMin system, itself based on older designs of uncertain provenance. It is available in the Kit (Atmospherics).\nThe device has nonetheless proven indispensable for Stationeer atmospheric systems, as it can filter two gases simultaneously from a single pipe network using a dual filter array. The unit has an input, and a filter output as well as an unfiltered outlet for any residual gases.\n", - "device": { - "atmosphere": false, - "pins": 2, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -348054045, - "logic": { - "CombustionInput": "Read", - "CombustionOutput": "Read", - "CombustionOutput2": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "PressureInput": "Read", - "PressureOutput": "Read", - "PressureOutput2": "Read", - "Ratio": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioCarbonDioxideOutput2": "Read", - "RatioNitrogenInput": "Read", - "RatioNitrogenOutput": "Read", - "RatioNitrogenOutput2": "Read", - "RatioNitrousOxideInput": "Read", - "RatioNitrousOxideOutput": "Read", - "RatioNitrousOxideOutput2": "Read", - "RatioOxygenInput": "Read", - "RatioOxygenOutput": "Read", - "RatioOxygenOutput2": "Read", - "RatioPollutantInput": "Read", - "RatioPollutantOutput": "Read", - "RatioPollutantOutput2": "Read", - "RatioVolatilesInput": "Read", - "RatioVolatilesOutput": "Read", - "RatioVolatilesOutput2": "Read", - "RatioWaterInput": "Read", - "RatioWaterOutput": "Read", - "RatioWaterOutput2": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "TemperatureInput": "Read", - "TemperatureOutput": "Read", - "TemperatureOutput2": "Read", - "TotalMolesInput": "Read", - "TotalMolesOutput": "Read", - "TotalMolesOutput2": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "name": "StructureFiltration", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {}, - "2": {} - }, - "slots": [ - { - "name": "Gas Filter", - "typ": "GasFilter" - }, - { - "name": "Gas Filter", - "typ": "GasFilter" - }, - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "title": "Filtration", - "transmitter": false - }, - "StructureFlagSmall": { - "desc": "", - "hash": -1529819532, - "name": "StructureFlagSmall", - "receiver": false, - "title": "Small Flag", - "transmitter": false - }, - "StructureFlashingLight": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Few objects or ideas are as clearly and transparently named as the Flashing Light, although fans of scrupulous accuracy have been known to refer to it by its full, official title: 'Default Yellow Flashing Light'.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1535893860, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureFlashingLight", - "receiver": false, - "title": "Flashing Light", - "transmitter": false - }, - "StructureFlatBench": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 839890807, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureFlatBench", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Seat", - "typ": "Entity" - } - ], - "title": "Bench (Flat)", - "transmitter": false - }, - "StructureFloorDrain": { - "desc": "A passive liquid floor inlet that quickly removes liquids in one direction from the world into the connected pipe network. It will equalise gasses with the world atmosphere also.", - "hash": 1048813293, - "name": "StructureFloorDrain", - "receiver": false, - "title": "Passive Liquid Inlet", - "transmitter": false - }, - "StructureFrame": { - "desc": "More durable than the Iron Frame, steel frames also have several variations for more complex constructions, such as the Steel Frame (Corner) and Steel Frame (Corner Cut). Like iron frames, they are placed then completed by welding Steel Sheets to the open framework.", - "hash": 1432512808, - "name": "StructureFrame", - "receiver": false, - "title": "Steel Frame", - "transmitter": false - }, - "StructureFrameCorner": { - "desc": "More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. \nWith a little patience and maneuvering, the corner frame's Gothic-inspired silhouette allows the creation of ogival arches and even more ambitious architecture, although they are not airtight and cannot be built on.", - "hash": -2112390778, - "name": "StructureFrameCorner", - "receiver": false, - "title": "Steel Frame (Corner)", - "transmitter": false - }, - "StructureFrameCornerCut": { - "desc": "0.Mode0\n1.Mode1", - "hash": 271315669, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureFrameCornerCut", - "receiver": false, - "title": "Steel Frame (Corner Cut)", - "transmitter": false - }, - "StructureFrameIron": { - "desc": "", - "hash": -1240951678, - "name": "StructureFrameIron", - "receiver": false, - "title": "Iron Frame", - "transmitter": false - }, - "StructureFrameSide": { - "desc": "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions.", - "hash": -302420053, - "name": "StructureFrameSide", - "receiver": false, - "title": "Steel Frame (Side)", - "transmitter": false - }, - "StructureFridgeBig": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The Xigo Koolaid fridge is a self-cooling storage device with 15 slots that preserves food when powered and turned on. While many users have complained about the placement of the power switch, its place in the pantheon of off-world whiteware is unquestioned.\n \nWith its own permanent internal atmosphere, the Koolaid fridge slows the decay of food by maintaining an optimal internal temperature. Its power usage varies on the external temperature against which it must balance its internal temperature. As such, it must shed heat to operate, so the Koolaid fridge DOES NOT work in a vacuum.\n \nAlso, don't leave the door open, as it will equalize with the current world temperature. And maybe start to beep.\n\nFor more information about food preservation, visit the food decay section of the Stationpedia.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 958476921, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "StructureFridgeBig", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "10": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "11": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "12": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "13": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "14": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Fridge (Large)", - "transmitter": false - }, - "StructureFridgeSmall": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "Essentially a heavily insulated box that allows users to pipe in any desired atmosphere, the Recurso Minibar fridge was a simple solution to the problem of food decay. It stores a small number of items, at any temperature you can muster.\n \n For more information about food preservation, visit the food decay section of the Stationpedia.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 751887598, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "StructureFridgeSmall", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Fridge Small", - "transmitter": false - }, - "StructureFurnace": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "3": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "4": { - "name": "Pipe Liquid Output2", - "role": "Output2", - "typ": "PipeLiquid" - }, - "5": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "The Zhurong furnace employs a high-temperature gas mixture of Oxygen and Volatiles to smelt ingots and a range of alloys as raw materials for fabricators.\nA basic gas mixture can be achieved by adding Ice (Oxite) and Ice (Volatiles) in a 1:2 ratio directly to the furnace, but more complex alloys will require careful management of a dedicated gas mixing network. Exact ingredient ratios must be observed. Likewise, smelting ores at insufficient temperatures will produce reagents, which must be recycled.\nIf liquids are present in the furnace, they will gather there until the furnace is connected to a liquid pipe network.", - "device": { - "atmosphere": true, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": false, - "open": true - } - }, - "hash": 1947944864, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Combustion": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "Reagents": "Read", - "RecipeHash": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureFurnace", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Furnace", - "transmitter": false - }, - "StructureFuselageTypeA1": { - "desc": "", - "hash": 1033024712, - "name": "StructureFuselageTypeA1", - "receiver": false, - "title": "Fuselage (Type A1)", - "transmitter": false - }, - "StructureFuselageTypeA2": { - "desc": "", - "hash": -1533287054, - "name": "StructureFuselageTypeA2", - "receiver": false, - "title": "Fuselage (Type A2)", - "transmitter": false - }, - "StructureFuselageTypeA4": { - "desc": "", - "hash": 1308115015, - "name": "StructureFuselageTypeA4", - "receiver": false, - "title": "Fuselage (Type A4)", - "transmitter": false - }, - "StructureFuselageTypeC5": { - "desc": "", - "hash": 147395155, - "name": "StructureFuselageTypeC5", - "receiver": false, - "title": "Fuselage (Type C5)", - "transmitter": false - }, - "StructureGasGenerator": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1165997963, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PowerGeneration": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "StructureGasGenerator", - "receiver": false, - "title": "Gas Fuel Generator", - "transmitter": false - }, - "StructureGasMixer": { - "conn": { - "0": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 2104106366, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureGasMixer", - "receiver": false, - "title": "Gas Mixer", - "transmitter": false - }, - "StructureGasSensor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1252983604, - "logic": { - "Combustion": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "name": "StructureGasSensor", - "receiver": false, - "title": "Gas Sensor", - "transmitter": false - }, - "StructureGasTankStorage": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "When connected to a pipe network, the tank storage unit allows you to refill a Canister, as well as read various atmospheric data from the Gas Canister.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1632165346, - "logic": { - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "name": "StructureGasTankStorage", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Open": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Pressure": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - }, - "Temperature": { - "0": "Read" - }, - "Volume": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - } - ], - "title": "Gas Tank Storage", - "transmitter": false - }, - "StructureGasUmbilicalFemale": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1680477930, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureGasUmbilicalFemale", - "receiver": false, - "title": "Umbilical Socket (Gas)", - "transmitter": false - }, - "StructureGasUmbilicalFemaleSide": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -648683847, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureGasUmbilicalFemaleSide", - "receiver": false, - "title": "Umbilical Socket Angle (Gas)", - "transmitter": false - }, - "StructureGasUmbilicalMale": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "0.Left\n1.Center\n2.Right", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1814939203, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Left", - "1": "Center", - "2": "Right" - }, - "name": "StructureGasUmbilicalMale", - "receiver": false, - "title": "Umbilical (Gas)", - "transmitter": false - }, - "StructureGlassDoor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "0.Operate\n1.Logic", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -324331872, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureGlassDoor", - "receiver": false, - "title": "Glass Door", - "transmitter": false - }, - "StructureGovernedGasEngine": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -214232602, - "logic": { - "Combustion": "Read", - "Error": "Read", - "On": "ReadWrite", - "PassedMoles": "Read", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Temperature": "Read", - "Throttle": "ReadWrite", - "TotalMoles": "Read" - }, - "name": "StructureGovernedGasEngine", - "receiver": false, - "title": "Pumped Gas Engine", - "transmitter": false - }, - "StructureGroundBasedTelescope": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "A telescope that can be oriented to observe Celestial Bodies. When within full alignment will show orbital information for that celestial object. Atmospheric conditions may disrupt the ability to observe some objects at some times of day. To collect Horizontal and Vertical values you can use a Rocket Celestial Tracker while it is in orbit, or a Daylight Sensor for primary body data.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -619745681, - "logic": { - "Activate": "ReadWrite", - "AlignmentError": "Read", - "CelestialHash": "Read", - "CelestialParentHash": "Read", - "DistanceAu": "Read", - "DistanceKm": "Read", - "Eccentricity": "Read", - "Error": "Read", - "Horizontal": "ReadWrite", - "HorizontalRatio": "ReadWrite", - "Inclination": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "OrbitPeriod": "Read", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "SemiMajorAxis": "Read", - "TrueAnomaly": "Read", - "Vertical": "ReadWrite", - "VerticalRatio": "ReadWrite" - }, - "name": "StructureGroundBasedTelescope", - "receiver": false, - "title": "Telescope", - "transmitter": false - }, - "StructureGrowLight": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Agrizero's leading hydroponic lighting system, the GrowUp UV light supplements sunshine in low light or sun-distant conditions. The unit adds growability over the space of a grid, so requires proximate placement to work. ", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1758710260, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureGrowLight", - "receiver": false, - "title": "Grow Light", - "transmitter": false - }, - "StructureHarvie": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Use above a Hydroponics Tray or Hydroponics Device to manage the planting and harvest of your crops. It contains a button that will allow you to activate it's modes, or connect it to a logic system to do this for you. The modes indicate current growth status of the plant below. Import is used for planting, and harvested plants are sent to export.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 958056199, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "Harvest": "Write", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Plant": "Write", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Idle", - "1": "Happy", - "2": "UnHappy", - "3": "Dead" - }, - "name": "StructureHarvie", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "Plant" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Hand", - "typ": "None" - } - ], - "title": "Harvie", - "transmitter": false - }, - "StructureHeatExchangeLiquidtoGas": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "3": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass separate liquid and gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to devices like a Volume Pump or a Liquid Back Volume Regulator.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 944685608, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureHeatExchangeLiquidtoGas", - "receiver": false, - "title": "Heat Exchanger - Liquid + Gas", - "transmitter": false - }, - "StructureHeatExchangerGastoGas": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - } - }, - "desc": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to gas management devices like a Volume Pump or a Back Pressure Regulator.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 21266291, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureHeatExchangerGastoGas", - "receiver": false, - "title": "Heat Exchanger - Gas", - "transmitter": false - }, - "StructureHeatExchangerLiquidtoLiquid": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "2": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "3": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn't stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe 'N Flow-P' has four connections, allowing you to pass two liquid networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to liquid management devices like a Liquid Volume Pump or a Liquid Back Volume Regulator.\n", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -613784254, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureHeatExchangerLiquidtoLiquid", - "receiver": false, - "title": "Heat Exchanger - Liquid", - "transmitter": false - }, - "StructureHorizontalAutoMiner": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The Recurso OGRE (Orthogonal Ground Rotating Excavator) is a base structure with attached mining vehicle, which will mine a horizontal shaft up to X meters long. When full, the mining vehicle will return to the base to empty itself, before returning to dig. If it encounters empty space, it will also return to base and await instruction. The unit will return if deactivated.\n \nThe OGRE can be connected to a chute system, and is controllable by a logic network. Note that the OGRE outputs more ore than a conventional Mining Drill over the same area, due to more efficient processing.\n\nMODES\nIdle - 0\nMining - 1\nReturning - 2\nDepostingOre - 3\nFinished - 4\n", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1070427573, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureHorizontalAutoMiner", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "OGRE", - "transmitter": false - }, - "StructureHydraulicPipeBender": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "A go-to tool for all your atmospheric and plumbing needs, the ExMin Atmoprinter will create everything from pipes, pumps and tanks, to vents and filters, ensuring your survival in any environment. Upgrade the Atmoprinter using a Pipe Bender Mod for additional recipes and faster processing speeds.", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -1888248335, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "CompletionRatio": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "RecipeHash": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureHydraulicPipeBender", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Hydraulic Pipe Bender", - "transmitter": false - }, - "StructureHydroponicsStation": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "2": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1441767298, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "StructureHydroponicsStation", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Growth": "Read", - "Health": "Read", - "Mature": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Growth": "Read", - "Health": "Read", - "Mature": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Growth": "Read", - "Health": "Read", - "Mature": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Growth": "Read", - "Health": "Read", - "Mature": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Growth": "Read", - "Health": "Read", - "Mature": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Growth": "Read", - "Health": "Read", - "Mature": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Growth": "Read", - "Health": "Read", - "Mature": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Growth": "Read", - "Health": "Read", - "Mature": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Efficiency": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Growth": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Health": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Mature": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read" - } - }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - } - ], - "title": "Hydroponics Station", - "transmitter": false - }, - "StructureHydroponicsTray": { - "desc": "The Agrizero hydroponics tray is the ideal vessel for growing a range of plantlife. It must be supplied with water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie.", - "hash": 1464854517, - "name": "StructureHydroponicsTray", - "receiver": false, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Fertiliser", - "typ": "Plant" - } - ], - "title": "Hydroponics Tray", - "transmitter": false - }, - "StructureHydroponicsTrayData": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PipeLiquid" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PipeLiquid" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "The Agrizero hydroponics device is the ideal vessel for growing a range of plantlife. It must be supplied with Water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie. Note that unlike the Hydroponics Tray, these cannot be placed consecutively as they are considered devices rather than pure pipes. They do, however, allow data interrogation for logic systems.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1841632400, - "logic": { - "Combustion": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "StructureHydroponicsTrayData", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "Efficiency": "Read", - "Growth": "Read", - "Health": "Read", - "Mature": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Seeding": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "Efficiency": { - "0": "Read" - }, - "Growth": { - "0": "Read" - }, - "Health": { - "0": "Read" - }, - "Mature": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "Seeding": { - "0": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Fertiliser", - "typ": "Plant" - } - ], - "title": "Hydroponics Device", - "transmitter": false - }, - "StructureIceCrusher": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "2": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "3": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "4": { - "name": "Pipe Liquid Output2", - "role": "Output2", - "typ": "PipeLiquid" - } - }, - "desc": "The Recurso KoolAuger converts various ices into their respective gases and liquids.\nA remarkably smart and compact sublimation-melting unit, it produces gas or liquid depending on the ice being processed. The upper outlet is gas, the lower for liquid, and while you can attach any pipe you like to either outlet, it will only function if the correct network is attached. It will also only pass gas or liquid into a network if it is powered and turned on.\nIf the KoolAuger is full, it will not accept any further ice until the gas or liquid contents is drained. In this state, it will flash a yellow error state on the activation switch.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 443849486, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureIceCrusher", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Import", - "typ": "Ore" - } - ], - "title": "Ice Crusher", - "transmitter": false - }, - "StructureIgniter": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "It gets the party started. Especially if that party is an explosive gas mixture.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1005491513, - "logic": { - "On": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureIgniter", - "receiver": false, - "title": "Igniter", - "transmitter": false - }, - "StructureInLineTankGas1x1": { - "desc": "A small expansion tank that increases the volume of a pipe network.", - "hash": -1693382705, - "name": "StructureInLineTankGas1x1", - "receiver": false, - "title": "In-Line Tank Small Gas", - "transmitter": false - }, - "StructureInLineTankGas1x2": { - "desc": "A small expansion tank that increases the volume of a pipe network.", - "hash": 35149429, - "name": "StructureInLineTankGas1x2", - "receiver": false, - "title": "In-Line Tank Gas", - "transmitter": false - }, - "StructureInLineTankLiquid1x1": { - "desc": "A small expansion tank that increases the volume of a pipe network.", - "hash": 543645499, - "name": "StructureInLineTankLiquid1x1", - "receiver": false, - "title": "In-Line Tank Small Liquid", - "transmitter": false - }, - "StructureInLineTankLiquid1x2": { - "desc": "A small expansion tank that increases the volume of a pipe network.", - "hash": -1183969663, - "name": "StructureInLineTankLiquid1x2", - "receiver": false, - "title": "In-Line Tank Liquid", - "transmitter": false - }, - "StructureInsulatedInLineTankGas1x1": { - "desc": "", - "hash": 1818267386, - "name": "StructureInsulatedInLineTankGas1x1", - "receiver": false, - "title": "Insulated In-Line Tank Small Gas", - "transmitter": false - }, - "StructureInsulatedInLineTankGas1x2": { - "desc": "", - "hash": -177610944, - "name": "StructureInsulatedInLineTankGas1x2", - "receiver": false, - "title": "Insulated In-Line Tank Gas", - "transmitter": false - }, - "StructureInsulatedInLineTankLiquid1x1": { - "desc": "", - "hash": -813426145, - "name": "StructureInsulatedInLineTankLiquid1x1", - "receiver": false, - "title": "Insulated In-Line Tank Small Liquid", - "transmitter": false - }, - "StructureInsulatedInLineTankLiquid1x2": { - "desc": "", - "hash": 1452100517, - "name": "StructureInsulatedInLineTankLiquid1x2", - "receiver": false, - "title": "Insulated In-Line Tank Liquid", - "transmitter": false - }, - "StructureInsulatedPipeCorner": { - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "hash": -1967711059, - "name": "StructureInsulatedPipeCorner", - "receiver": false, - "title": "Insulated Pipe (Corner)", - "transmitter": false - }, - "StructureInsulatedPipeCrossJunction": { - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "hash": -92778058, - "name": "StructureInsulatedPipeCrossJunction", - "receiver": false, - "title": "Insulated Pipe (Cross Junction)", - "transmitter": false - }, - "StructureInsulatedPipeCrossJunction3": { - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "hash": 1328210035, - "name": "StructureInsulatedPipeCrossJunction3", - "receiver": false, - "title": "Insulated Pipe (3-Way Junction)", - "transmitter": false - }, - "StructureInsulatedPipeCrossJunction4": { - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "hash": -783387184, - "name": "StructureInsulatedPipeCrossJunction4", - "receiver": false, - "title": "Insulated Pipe (4-Way Junction)", - "transmitter": false - }, - "StructureInsulatedPipeCrossJunction5": { - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "hash": -1505147578, - "name": "StructureInsulatedPipeCrossJunction5", - "receiver": false, - "title": "Insulated Pipe (5-Way Junction)", - "transmitter": false - }, - "StructureInsulatedPipeCrossJunction6": { - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "hash": 1061164284, - "name": "StructureInsulatedPipeCrossJunction6", - "receiver": false, - "title": "Insulated Pipe (6-Way Junction)", - "transmitter": false - }, - "StructureInsulatedPipeLiquidCorner": { - "desc": "Liquid piping with very low temperature loss or gain.", - "hash": 1713710802, - "name": "StructureInsulatedPipeLiquidCorner", - "receiver": false, - "title": "Insulated Liquid Pipe (Corner)", - "transmitter": false - }, - "StructureInsulatedPipeLiquidCrossJunction": { - "desc": "Liquid piping with very low temperature loss or gain.", - "hash": 1926651727, - "name": "StructureInsulatedPipeLiquidCrossJunction", - "receiver": false, - "title": "Insulated Liquid Pipe (3-Way Junction)", - "transmitter": false - }, - "StructureInsulatedPipeLiquidCrossJunction4": { - "desc": "Liquid piping with very low temperature loss or gain.", - "hash": 363303270, - "name": "StructureInsulatedPipeLiquidCrossJunction4", - "receiver": false, - "title": "Insulated Liquid Pipe (4-Way Junction)", - "transmitter": false - }, - "StructureInsulatedPipeLiquidCrossJunction5": { - "desc": "Liquid piping with very low temperature loss or gain.", - "hash": 1654694384, - "name": "StructureInsulatedPipeLiquidCrossJunction5", - "receiver": false, - "title": "Insulated Liquid Pipe (5-Way Junction)", - "transmitter": false - }, - "StructureInsulatedPipeLiquidCrossJunction6": { - "desc": "Liquid piping with very low temperature loss or gain.", - "hash": -72748982, - "name": "StructureInsulatedPipeLiquidCrossJunction6", - "receiver": false, - "title": "Insulated Liquid Pipe (6-Way Junction)", - "transmitter": false - }, - "StructureInsulatedPipeLiquidStraight": { - "desc": "Liquid piping with very low temperature loss or gain.", - "hash": 295678685, - "name": "StructureInsulatedPipeLiquidStraight", - "receiver": false, - "title": "Insulated Liquid Pipe (Straight)", - "transmitter": false - }, - "StructureInsulatedPipeLiquidTJunction": { - "desc": "Liquid piping with very low temperature loss or gain.", - "hash": -532384855, - "name": "StructureInsulatedPipeLiquidTJunction", - "receiver": false, - "title": "Insulated Liquid Pipe (T Junction)", - "transmitter": false - }, - "StructureInsulatedPipeStraight": { - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "hash": 2134172356, - "name": "StructureInsulatedPipeStraight", - "receiver": false, - "title": "Insulated Pipe (Straight)", - "transmitter": false - }, - "StructureInsulatedPipeTJunction": { - "desc": "Insulated pipes greatly reduce heat loss from gases stored in them.", - "hash": -2076086215, - "name": "StructureInsulatedPipeTJunction", - "receiver": false, - "title": "Insulated Pipe (T Junction)", - "transmitter": false - }, - "StructureInsulatedTankConnector": { - "desc": "", - "hash": -31273349, - "name": "StructureInsulatedTankConnector", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - } - ], - "title": "Insulated Tank Connector", - "transmitter": false - }, - "StructureInsulatedTankConnectorLiquid": { - "desc": "", - "hash": -1602030414, - "name": "StructureInsulatedTankConnectorLiquid", - "receiver": false, - "slots": [ - { - "name": "Portable Slot", - "typ": "None" - } - ], - "title": "Insulated Tank Connector Liquid", - "transmitter": false - }, - "StructureInteriorDoorGlass": { - "desc": "0.Operate\n1.Logic", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -2096421875, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureInteriorDoorGlass", - "receiver": false, - "title": "Interior Door Glass", - "transmitter": false - }, - "StructureInteriorDoorPadded": { - "desc": "0.Operate\n1.Logic", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 847461335, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureInteriorDoorPadded", - "receiver": false, - "title": "Interior Door Padded", - "transmitter": false - }, - "StructureInteriorDoorPaddedThin": { - "desc": "0.Operate\n1.Logic", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1981698201, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureInteriorDoorPaddedThin", - "receiver": false, - "title": "Interior Door Padded Thin", - "transmitter": false - }, - "StructureInteriorDoorTriangle": { - "desc": "0.Operate\n1.Logic", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1182923101, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureInteriorDoorTriangle", - "receiver": false, - "title": "Interior Door Triangle", - "transmitter": false - }, - "StructureKlaxon": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -828056979, - "logic": { - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "SoundAlert": "ReadWrite", - "Volume": "ReadWrite" - }, - "modes": { - "0": "None", - "1": "Alarm2", - "2": "Alarm3", - "3": "Alarm4", - "4": "Alarm5", - "5": "Alarm6", - "6": "Alarm7", - "7": "Music1", - "8": "Music2", - "9": "Music3", - "10": "Alarm8", - "11": "Alarm9", - "12": "Alarm10", - "13": "Alarm11", - "14": "Alarm12", - "15": "Danger", - "16": "Warning", - "17": "Alert", - "18": "StormIncoming", - "19": "IntruderAlert", - "20": "Depressurising", - "21": "Pressurising", - "22": "AirlockCycling", - "23": "PowerLow", - "24": "SystemFailure", - "25": "Welcome", - "26": "MalfunctionDetected", - "27": "HaltWhoGoesThere", - "28": "FireFireFire", - "29": "One", - "30": "Two", - "31": "Three", - "32": "Four", - "33": "Five", - "34": "Floor", - "35": "RocketLaunching", - "36": "LiftOff", - "37": "TraderIncoming", - "38": "TraderLanded", - "39": "PressureHigh", - "40": "PressureLow", - "41": "TemperatureHigh", - "42": "TemperatureLow", - "43": "PollutantsDetected", - "44": "HighCarbonDioxide", - "45": "Alarm1" - }, - "name": "StructureKlaxon", - "receiver": false, - "title": "Klaxon Speaker", - "transmitter": false - }, - "StructureLadder": { - "desc": "", - "hash": -415420281, - "name": "StructureLadder", - "receiver": false, - "title": "Ladder", - "transmitter": false - }, - "StructureLadderEnd": { - "desc": "", - "hash": 1541734993, - "name": "StructureLadderEnd", - "receiver": false, - "title": "Ladder End", - "transmitter": false - }, - "StructureLargeDirectHeatExchangeGastoGas": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - } - }, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1230658883, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLargeDirectHeatExchangeGastoGas", - "receiver": false, - "title": "Large Direct Heat Exchanger - Gas + Gas", - "transmitter": false - }, - "StructureLargeDirectHeatExchangeGastoLiquid": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - } - }, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1412338038, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLargeDirectHeatExchangeGastoLiquid", - "receiver": false, - "title": "Large Direct Heat Exchanger - Gas + Liquid", - "transmitter": false - }, - "StructureLargeDirectHeatExchangeLiquidtoLiquid": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Input2", - "role": "Input2", - "typ": "PipeLiquid" - } - }, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 792686502, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLargeDirectHeatExchangeLiquidtoLiquid", - "receiver": false, - "title": "Large Direct Heat Exchange - Liquid + Liquid", - "transmitter": false - }, - "StructureLargeExtendableRadiator": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "2": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "Omptimised for radiating heat in vacuum and low pressure environments. If pointed at the sun it will heat its contents rapidly via solar heating. The panels can fold away to stop all heat radiation/solar heating and protect them from storms.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -566775170, - "logic": { - "Horizontal": "ReadWrite", - "Lock": "ReadWrite", - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLargeExtendableRadiator", - "receiver": false, - "title": "Large Extendable Radiator", - "transmitter": false - }, - "StructureLargeHangerDoor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "1 x 3 modular door piece for building hangar doors.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1351081801, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureLargeHangerDoor", - "receiver": false, - "title": "Large Hangar Door", - "transmitter": false - }, - "StructureLargeSatelliteDish": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "This large communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1913391845, - "logic": { - "Activate": "ReadWrite", - "BestContactFilter": "ReadWrite", - "ContactTypeId": "Read", - "Error": "Read", - "Horizontal": "ReadWrite", - "Idle": "Read", - "InterrogationProgress": "Read", - "MinimumWattsToContact": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "SignalID": "Read", - "SignalStrength": "Read", - "SizeX": "Read", - "SizeZ": "Read", - "TargetPadIndex": "ReadWrite", - "Vertical": "ReadWrite", - "WattsReachingContact": "Read" - }, - "name": "StructureLargeSatelliteDish", - "receiver": false, - "title": "Large Satellite Dish", - "transmitter": false - }, - "StructureLaunchMount": { - "desc": "The first piece to place whern building a rocket. Rockets can be constructed and/or landed here. Each Launch Mount will be allocated a slot on the Space Map and assigned a Location Code.", - "hash": -558953231, - "name": "StructureLaunchMount", - "receiver": false, - "title": "Launch Mount", - "transmitter": false - }, - "StructureLightLong": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 797794350, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLightLong", - "receiver": false, - "title": "Wall Light (Long)", - "transmitter": false - }, - "StructureLightLongAngled": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1847265835, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLightLongAngled", - "receiver": false, - "title": "Wall Light (Long Angled)", - "transmitter": false - }, - "StructureLightLongWide": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 555215790, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLightLongWide", - "receiver": false, - "title": "Wall Light (Long Wide)", - "transmitter": false - }, - "StructureLightRound": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Description coming.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1514476632, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLightRound", - "receiver": false, - "title": "Light Round", - "transmitter": false - }, - "StructureLightRoundAngled": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Description coming.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1592905386, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLightRoundAngled", - "receiver": false, - "title": "Light Round (Angled)", - "transmitter": false - }, - "StructureLightRoundSmall": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Description coming.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1436121888, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLightRoundSmall", - "receiver": false, - "title": "Light Round (Small)", - "transmitter": false - }, - "StructureLiquidDrain": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PipeLiquid" - }, - "1": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "2": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "When connected to power and activated, it pumps liquid from a liquid network into the world.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1687692899, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLiquidDrain", - "receiver": false, - "title": "Active Liquid Outlet", - "transmitter": false - }, - "StructureLiquidPipeAnalyzer": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -2113838091, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureLiquidPipeAnalyzer", - "receiver": false, - "title": "Liquid Pipe Analyzer", - "transmitter": false - }, - "StructureLiquidPipeHeater": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -287495560, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLiquidPipeHeater", - "receiver": false, - "title": "Pipe Heater (Liquid)", - "transmitter": false - }, - "StructureLiquidPipeOneWayValve": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "The one way valve moves liquid in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure..", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -782453061, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLiquidPipeOneWayValve", - "receiver": false, - "title": "One Way Valve (Liquid)", - "transmitter": false - }, - "StructureLiquidPipeRadiator": { - "desc": "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added to the liquid within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the liquid in question. Adding multiple radiators will speed up heat transfer.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 2072805863, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureLiquidPipeRadiator", - "receiver": false, - "title": "Liquid Pipe Convection Radiator", - "transmitter": false - }, - "StructureLiquidPressureRegulator": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Regulates the volume ratio of liquid in the output Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 482248766, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLiquidPressureRegulator", - "receiver": false, - "title": "Liquid Volume Regulator", - "transmitter": false - }, - "StructureLiquidTankBig": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1098900430, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureLiquidTankBig", - "receiver": false, - "title": "Liquid Tank Big", - "transmitter": false - }, - "StructureLiquidTankBigInsulated": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1430440215, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureLiquidTankBigInsulated", - "receiver": false, - "title": "Insulated Liquid Tank Big", - "transmitter": false - }, - "StructureLiquidTankSmall": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1988118157, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureLiquidTankSmall", - "receiver": false, - "title": "Liquid Tank Small", - "transmitter": false - }, - "StructureLiquidTankSmallInsulated": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 608607718, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureLiquidTankSmallInsulated", - "receiver": false, - "title": "Insulated Liquid Tank Small", - "transmitter": false - }, - "StructureLiquidTankStorage": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "When connected to a liquid pipe network, the tank storage unit allows you to refill a Liquid Canister, as well as read various atmospheric data from the Gas Canister. It will not accept gas canisters.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1691898022, - "logic": { - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "RatioCarbonDioxide": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Temperature": "Read" - }, - "name": "StructureLiquidTankStorage", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Open": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Pressure": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - }, - "Temperature": { - "0": "Read" - }, - "Volume": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Liquid Canister", - "typ": "LiquidCanister" - } - ], - "title": "Liquid Tank Storage", - "transmitter": false - }, - "StructureLiquidTurboVolumePump": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "2": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "3": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -1051805505, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Right", - "1": "Left" - }, - "name": "StructureLiquidTurboVolumePump", - "receiver": false, - "title": "Turbo Volume Pump (Liquid)", - "transmitter": false - }, - "StructureLiquidUmbilicalFemale": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1734723642, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLiquidUmbilicalFemale", - "receiver": false, - "title": "Umbilical Socket (Liquid)", - "transmitter": false - }, - "StructureLiquidUmbilicalFemaleSide": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1220870319, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLiquidUmbilicalFemaleSide", - "receiver": false, - "title": "Umbilical Socket Angle (Liquid)", - "transmitter": false - }, - "StructureLiquidUmbilicalMale": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "0.Left\n1.Center\n2.Right", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1798420047, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Left", - "1": "Center", - "2": "Right" - }, - "name": "StructureLiquidUmbilicalMale", - "receiver": false, - "title": "Umbilical (Liquid)", - "transmitter": false - }, - "StructureLiquidValve": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PipeLiquid" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1849974453, - "logic": { - "Maximum": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLiquidValve", - "receiver": false, - "title": "Liquid Valve", - "transmitter": false - }, - "StructureLiquidVolumePump": { - "conn": { - "0": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -454028979, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLiquidVolumePump", - "receiver": false, - "title": "Liquid Volume Pump", - "transmitter": false - }, - "StructureLockerSmall": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -647164662, - "logic": { - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureLockerSmall", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Locker (Small)", - "transmitter": false - }, - "StructureLogicBatchReader": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 264413729, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "name": "StructureLogicBatchReader", - "receiver": false, - "title": "Batch Reader", - "transmitter": false - }, - "StructureLogicBatchSlotReader": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 436888930, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "name": "StructureLogicBatchSlotReader", - "receiver": false, - "title": "Batch Slot Reader", - "transmitter": false - }, - "StructureLogicBatchWriter": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1415443359, - "logic": { - "Error": "Read", - "ForceWrite": "Write", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLogicBatchWriter", - "receiver": false, - "title": "Batch Writer", - "transmitter": false - }, - "StructureLogicButton": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 491845673, - "logic": { - "Activate": "ReadWrite", - "Lock": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "Setting": "Read" - }, - "name": "StructureLogicButton", - "receiver": false, - "title": "Button", - "transmitter": false - }, - "StructureLogicCompare": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "2": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -1489728908, - "logic": { - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "modes": { - "0": "Equals", - "1": "Greater", - "2": "Less", - "3": "NotEquals" - }, - "name": "StructureLogicCompare", - "receiver": false, - "title": "Logic Compare", - "transmitter": false - }, - "StructureLogicDial": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "An assignable dial with up to 1000 modes.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": false, - "open": false - } - }, - "hash": 554524804, - "logic": { - "Mode": "ReadWrite", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLogicDial", - "receiver": false, - "title": "Dial", - "transmitter": false - }, - "StructureLogicGate": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "2": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "A logic device that performs a logical operation on one or more binary inputs that produces a single binary output. An input greater than zero is considered true for operations.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1942143074, - "logic": { - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "modes": { - "0": "AND", - "1": "OR", - "2": "XOR", - "3": "NAND", - "4": "NOR", - "5": "XNOR" - }, - "name": "StructureLogicGate", - "receiver": false, - "title": "Logic Gate", - "transmitter": false - }, - "StructureLogicHashGen": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 2077593121, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "Setting": "Read" - }, - "name": "StructureLogicHashGen", - "receiver": false, - "title": "Logic Hash Generator", - "transmitter": false - }, - "StructureLogicMath": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "2": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1657691323, - "logic": { - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "modes": { - "0": "Add", - "1": "Subtract", - "2": "Multiply", - "3": "Divide", - "4": "Mod", - "5": "Atan2", - "6": "Pow", - "7": "Log" - }, - "name": "StructureLogicMath", - "receiver": false, - "title": "Logic Math", - "transmitter": false - }, - "StructureLogicMathUnary": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "0.Ceil\n1.Floor\n2.Abs\n3.Log\n4.Exp\n5.Round\n6.Rand\n7.Sqrt\n8.Sin\n9.Cos\n10.Tan\n11.Asin\n12.Acos\n13.Atan\n14.Not", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -1160020195, - "logic": { - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "modes": { - "0": "Ceil", - "1": "Floor", - "2": "Abs", - "3": "Log", - "4": "Exp", - "5": "Round", - "6": "Rand", - "7": "Sqrt", - "8": "Sin", - "9": "Cos", - "10": "Tan", - "11": "Asin", - "12": "Acos", - "13": "Atan", - "14": "Not" - }, - "name": "StructureLogicMathUnary", - "receiver": false, - "title": "Math Unary", - "transmitter": false - }, - "StructureLogicMemory": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -851746783, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureLogicMemory", - "receiver": false, - "title": "Logic Memory", - "transmitter": false - }, - "StructureLogicMinMax": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "2": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "0.Greater\n1.Less", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 929022276, - "logic": { - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "modes": { - "0": "Greater", - "1": "Less" - }, - "name": "StructureLogicMinMax", - "receiver": false, - "title": "Logic Min/Max", - "transmitter": false - }, - "StructureLogicMirror": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 2096189278, - "name": "StructureLogicMirror", - "receiver": false, - "title": "Logic Mirror", - "transmitter": false - }, - "StructureLogicReader": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -345383640, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "name": "StructureLogicReader", - "receiver": false, - "title": "Logic Reader", - "transmitter": false - }, - "StructureLogicReagentReader": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -124308857, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "name": "StructureLogicReagentReader", - "receiver": false, - "title": "Reagent Reader", - "transmitter": false - }, - "StructureLogicRocketDownlink": { - "conn": { - "0": { - "name": "Power And Data Input", - "role": "Input", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 876108549, - "logic": { - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLogicRocketDownlink", - "receiver": false, - "title": "Logic Rocket Downlink", - "transmitter": false - }, - "StructureLogicRocketUplink": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 546002924, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLogicRocketUplink", - "receiver": false, - "title": "Logic Uplink", - "transmitter": false - }, - "StructureLogicSelect": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "2": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "0.Equals\n1.Greater\n2.Less\n3.NotEquals", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1822736084, - "logic": { - "Error": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "modes": { - "0": "Equals", - "1": "Greater", - "2": "Less", - "3": "NotEquals" - }, - "name": "StructureLogicSelect", - "receiver": false, - "title": "Logic Select", - "transmitter": false - }, - "StructureLogicSlotReader": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -767867194, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "Read" - }, - "name": "StructureLogicSlotReader", - "receiver": false, - "title": "Slot Reader", - "transmitter": false - }, - "StructureLogicSorter": { - "conn": { - "0": { - "name": "Chute Output2", - "role": "Output2", - "typ": "Chute" - }, - "1": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "2": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Contains an Internal Memory which is assessed to check whether something should be sorted. When an item is in the Import Slot, the stack is checked and if result is true the thing is moved to the Export 2 slot, otherwise it is moved to the Export slot. The Mode is used in how the stack is assessed, by default the mode is ALL, so every instruction in the stack would need to return true.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 873418029, - "logic": { - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "memory": { - "access": "ReadWrite", - "instructions": { - "FilterPrefabHashEquals": { - "desc": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |", - "typ": "SorterInstruction", - "value": 1 - }, - "FilterPrefabHashNotEquals": { - "desc": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |", - "typ": "SorterInstruction", - "value": 2 - }, - "FilterQuantityCompare": { - "desc": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | QUANTITY | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |", - "typ": "SorterInstruction", - "value": 5 - }, - "FilterSlotTypeCompare": { - "desc": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SLOT_TYPE | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |", - "typ": "SorterInstruction", - "value": 4 - }, - "FilterSortingClassCompare": { - "desc": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SORTING_CLASS | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |", - "typ": "SorterInstruction", - "value": 3 - }, - "LimitNextExecutionByCount": { - "desc": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |", - "typ": "SorterInstruction", - "value": 6 - } - }, - "size": 32, - "sizeDisplay": "256 B" - }, - "modes": { - "0": "All", - "1": "Any", - "2": "None" - }, - "name": "StructureLogicSorter", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Export 2", - "typ": "None" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "title": "Logic Sorter", - "transmitter": false - }, - "StructureLogicSwitch": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 1220484876, - "logic": { - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "Setting": "Read" - }, - "name": "StructureLogicSwitch", - "receiver": false, - "title": "Lever", - "transmitter": false - }, - "StructureLogicSwitch2": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 321604921, - "logic": { - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read", - "Setting": "Read" - }, - "name": "StructureLogicSwitch2", - "receiver": false, - "title": "Switch", - "transmitter": false - }, - "StructureLogicTransmitter": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "2": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Connects to Logic Transmitter", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -693235651, - "modes": { - "0": "Passive", - "1": "Active" - }, - "name": "StructureLogicTransmitter", - "receiver": true, - "title": "Logic Transmitter", - "transmitter": true - }, - "StructureLogicWriter": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1326019434, - "logic": { - "Error": "Read", - "ForceWrite": "Write", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLogicWriter", - "receiver": false, - "title": "Logic Writer", - "transmitter": false - }, - "StructureLogicWriterSwitch": { - "conn": { - "0": { - "name": "Data Input", - "role": "Input", - "typ": "Data" - }, - "1": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1321250424, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "ForceWrite": "Write", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureLogicWriterSwitch", - "receiver": false, - "title": "Logic Writer Switch", - "transmitter": false - }, - "StructureManualHatch": { - "desc": "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1808154199, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureManualHatch", - "receiver": false, - "title": "Manual Hatch", - "transmitter": false - }, - "StructureMediumConvectionRadiator": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - } - }, - "desc": "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1918215845, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureMediumConvectionRadiator", - "receiver": false, - "title": "Medium Convection Radiator", - "transmitter": false - }, - "StructureMediumConvectionRadiatorLiquid": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1169014183, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureMediumConvectionRadiatorLiquid", - "receiver": false, - "title": "Medium Convection Radiator Liquid", - "transmitter": false - }, - "StructureMediumHangerDoor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "1 x 2 modular door piece for building hangar doors.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -566348148, - "logic": { - "Idle": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureMediumHangerDoor", - "receiver": false, - "title": "Medium Hangar Door", - "transmitter": false - }, - "StructureMediumRadiator": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - } - }, - "desc": "A stand-alone radiator unit optimized for radiating heat in vacuums.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -975966237, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureMediumRadiator", - "receiver": false, - "title": "Medium Radiator", - "transmitter": false - }, - "StructureMediumRadiatorLiquid": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "A stand-alone liquid radiator unit optimized for radiating heat in vacuums.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1141760613, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureMediumRadiatorLiquid", - "receiver": false, - "title": "Medium Radiator Liquid", - "transmitter": false - }, - "StructureMediumRocketGasFuelTank": { - "conn": { - "0": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1093860567, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureMediumRocketGasFuelTank", - "receiver": false, - "title": "Gas Capsule Tank Medium", - "transmitter": false - }, - "StructureMediumRocketLiquidFuelTank": { - "conn": { - "0": { - "name": "Data Output", - "role": "Output", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1143639539, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureMediumRocketLiquidFuelTank", - "receiver": false, - "title": "Liquid Capsule Tank Medium", - "transmitter": false - }, - "StructureMotionSensor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Originally developed to monitor dance marathons, the motion sensor can also be connected to Logic systems for security purposes, automatic lighting, doors and various other applications.\nThe sensor activates whenever a player enters the grid it is placed on.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1713470563, - "logic": { - "Activate": "ReadWrite", - "On": "ReadWrite", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "name": "StructureMotionSensor", - "receiver": false, - "title": "Motion Sensor", - "transmitter": false - }, - "StructureNitrolyzer": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - }, - "3": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "4": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "This device is used to create Nitrous Oxide from Oxygen, Nitrogen, and a large amount of energy. The process does not completely transform all the available gas at once, so the output is a mix of all three gasses, which may need further processing. More NOS will be created, if the gas inside the machine is close to a 1/1 ratio of Oxygen to Nitrogen. The second gas input line in optional, and not required if the gas is pre mixed.", - "device": { - "atmosphere": true, - "pins": 2, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1898243702, - "logic": { - "Activate": "ReadWrite", - "Combustion": "Read", - "CombustionInput": "Read", - "CombustionInput2": "Read", - "CombustionOutput": "Read", - "Error": "Read", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "PressureInput": "Read", - "PressureInput2": "Read", - "PressureOutput": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioCarbonDioxideInput": "Read", - "RatioCarbonDioxideInput2": "Read", - "RatioCarbonDioxideOutput": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrogenInput": "Read", - "RatioNitrogenInput2": "Read", - "RatioNitrogenOutput": "Read", - "RatioNitrousOxide": "Read", - "RatioNitrousOxideInput": "Read", - "RatioNitrousOxideInput2": "Read", - "RatioNitrousOxideOutput": "Read", - "RatioOxygen": "Read", - "RatioOxygenInput": "Read", - "RatioOxygenInput2": "Read", - "RatioOxygenOutput": "Read", - "RatioPollutant": "Read", - "RatioPollutantInput": "Read", - "RatioPollutantInput2": "Read", - "RatioPollutantOutput": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioVolatilesInput": "Read", - "RatioVolatilesInput2": "Read", - "RatioVolatilesOutput": "Read", - "RatioWater": "Read", - "RatioWaterInput": "Read", - "RatioWaterInput2": "Read", - "RatioWaterOutput": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TemperatureInput": "Read", - "TemperatureInput2": "Read", - "TemperatureOutput": "Read", - "TotalMoles": "Read", - "TotalMolesInput": "Read", - "TotalMolesInput2": "Read", - "TotalMolesOutput": "Read" - }, - "modes": { - "0": "Idle", - "1": "Active" - }, - "name": "StructureNitrolyzer", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "title": "Nitrolyzer", - "transmitter": false - }, - "StructureOccupancySensor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Will be triggered if there is a player in the same room as the sensor. The quantity variable will show the number of players. You can use configure it to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet. This sensor only works when placed in a room.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 322782515, - "logic": { - "Activate": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "name": "StructureOccupancySensor", - "receiver": false, - "title": "Occupancy Sensor", - "transmitter": false - }, - "StructureOverheadShortCornerLocker": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -1794932560, - "logic": { - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureOverheadShortCornerLocker", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Overhead Corner Locker", - "transmitter": false - }, - "StructureOverheadShortLocker": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 1468249454, - "logic": { - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureOverheadShortLocker", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Overhead Locker", - "transmitter": false - }, - "StructurePassiveLargeRadiatorGas": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - } - }, - "desc": "Has been replaced by Medium Convection Radiator.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 2066977095, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePassiveLargeRadiatorGas", - "receiver": false, - "title": "Medium Convection Radiator", - "transmitter": false - }, - "StructurePassiveLargeRadiatorLiquid": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "Has been replaced by Medium Convection Radiator Liquid.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 24786172, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePassiveLargeRadiatorLiquid", - "receiver": false, - "title": "Medium Convection Radiator Liquid", - "transmitter": false - }, - "StructurePassiveLiquidDrain": { - "desc": "Moves liquids from a pipe network to the world atmosphere.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1812364811, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructurePassiveLiquidDrain", - "receiver": false, - "title": "Passive Liquid Drain", - "transmitter": false - }, - "StructurePassiveVent": { - "desc": "Passive vents allow gases to move into and out of pipe networks, which are closed systems unless connected to a device or structure. Passive vents are not powered, merely an aperture, essentially turning an enclosed space into part of the pipe network. ", - "hash": 335498166, - "name": "StructurePassiveVent", - "receiver": false, - "title": "Passive Vent", - "transmitter": false - }, - "StructurePassiveVentInsulated": { - "desc": "", - "hash": 1363077139, - "name": "StructurePassiveVentInsulated", - "receiver": false, - "title": "Insulated Passive Vent", - "transmitter": false - }, - "StructurePassthroughHeatExchangerGasToGas": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Pipe Output2", - "role": "Output2", - "typ": "Pipe" - } - }, - "desc": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1674187440, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePassthroughHeatExchangerGasToGas", - "receiver": false, - "title": "CounterFlow Heat Exchanger - Gas + Gas", - "transmitter": false - }, - "StructurePassthroughHeatExchangerGasToLiquid": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Liquid Input2", - "role": "Input2", - "typ": "PipeLiquid" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Pipe Liquid Output2", - "role": "Output2", - "typ": "PipeLiquid" - } - }, - "desc": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1928991265, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePassthroughHeatExchangerGasToLiquid", - "receiver": false, - "title": "CounterFlow Heat Exchanger - Gas + Liquid", - "transmitter": false - }, - "StructurePassthroughHeatExchangerLiquidToLiquid": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Input2", - "role": "Input2", - "typ": "PipeLiquid" - }, - "2": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "3": { - "name": "Pipe Liquid Output2", - "role": "Output2", - "typ": "PipeLiquid" - } - }, - "desc": "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exchange of temperatures.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1472829583, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePassthroughHeatExchangerLiquidToLiquid", - "receiver": false, - "title": "CounterFlow Heat Exchanger - Liquid + Liquid", - "transmitter": false - }, - "StructurePictureFrameThickLandscapeLarge": { - "desc": "", - "hash": -1434523206, - "name": "StructurePictureFrameThickLandscapeLarge", - "receiver": false, - "title": "Picture Frame Thick Landscape Large", - "transmitter": false - }, - "StructurePictureFrameThickLandscapeSmall": { - "desc": "", - "hash": -2041566697, - "name": "StructurePictureFrameThickLandscapeSmall", - "receiver": false, - "title": "Picture Frame Thick Landscape Small", - "transmitter": false - }, - "StructurePictureFrameThickMountLandscapeLarge": { - "desc": "", - "hash": 950004659, - "name": "StructurePictureFrameThickMountLandscapeLarge", - "receiver": false, - "title": "Picture Frame Thick Landscape Large", - "transmitter": false - }, - "StructurePictureFrameThickMountLandscapeSmall": { - "desc": "", - "hash": 347154462, - "name": "StructurePictureFrameThickMountLandscapeSmall", - "receiver": false, - "title": "Picture Frame Thick Landscape Small", - "transmitter": false - }, - "StructurePictureFrameThickMountPortraitLarge": { - "desc": "", - "hash": -1459641358, - "name": "StructurePictureFrameThickMountPortraitLarge", - "receiver": false, - "title": "Picture Frame Thick Mount Portrait Large", - "transmitter": false - }, - "StructurePictureFrameThickMountPortraitSmall": { - "desc": "", - "hash": -2066653089, - "name": "StructurePictureFrameThickMountPortraitSmall", - "receiver": false, - "title": "Picture Frame Thick Mount Portrait Small", - "transmitter": false - }, - "StructurePictureFrameThickPortraitLarge": { - "desc": "", - "hash": -1686949570, - "name": "StructurePictureFrameThickPortraitLarge", - "receiver": false, - "title": "Picture Frame Thick Portrait Large", - "transmitter": false - }, - "StructurePictureFrameThickPortraitSmall": { - "desc": "", - "hash": -1218579821, - "name": "StructurePictureFrameThickPortraitSmall", - "receiver": false, - "title": "Picture Frame Thick Portrait Small", - "transmitter": false - }, - "StructurePictureFrameThinLandscapeLarge": { - "desc": "", - "hash": -1418288625, - "name": "StructurePictureFrameThinLandscapeLarge", - "receiver": false, - "title": "Picture Frame Thin Landscape Large", - "transmitter": false - }, - "StructurePictureFrameThinLandscapeSmall": { - "desc": "", - "hash": -2024250974, - "name": "StructurePictureFrameThinLandscapeSmall", - "receiver": false, - "title": "Picture Frame Thin Landscape Small", - "transmitter": false - }, - "StructurePictureFrameThinMountLandscapeLarge": { - "desc": "", - "hash": -1146760430, - "name": "StructurePictureFrameThinMountLandscapeLarge", - "receiver": false, - "title": "Picture Frame Thin Landscape Large", - "transmitter": false - }, - "StructurePictureFrameThinMountLandscapeSmall": { - "desc": "", - "hash": -1752493889, - "name": "StructurePictureFrameThinMountLandscapeSmall", - "receiver": false, - "title": "Picture Frame Thin Landscape Small", - "transmitter": false - }, - "StructurePictureFrameThinMountPortraitLarge": { - "desc": "", - "hash": 1094895077, - "name": "StructurePictureFrameThinMountPortraitLarge", - "receiver": false, - "title": "Picture Frame Thin Portrait Large", - "transmitter": false - }, - "StructurePictureFrameThinMountPortraitSmall": { - "desc": "", - "hash": 1835796040, - "name": "StructurePictureFrameThinMountPortraitSmall", - "receiver": false, - "title": "Picture Frame Thin Portrait Small", - "transmitter": false - }, - "StructurePictureFrameThinPortraitLarge": { - "desc": "", - "hash": 1212777087, - "name": "StructurePictureFrameThinPortraitLarge", - "receiver": false, - "title": "Picture Frame Thin Portrait Large", - "transmitter": false - }, - "StructurePictureFrameThinPortraitSmall": { - "desc": "", - "hash": 1684488658, - "name": "StructurePictureFrameThinPortraitSmall", - "receiver": false, - "title": "Picture Frame Thin Portrait Small", - "transmitter": false - }, - "StructurePipeAnalysizer": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Allegedly the outcome of a weekend father-daughter electronics project by an overzealous {ExMin engineer, the pipe analyzer is essentially a more advanced version of the Pipe Meter.\nDisplaying the internal pressure of pipe networks, it also reads out temperature and gas contents, and can be connected to a Console or Computer via a {Logic system.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 435685051, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructurePipeAnalysizer", - "receiver": false, - "title": "Pipe Analyzer", - "transmitter": false - }, - "StructurePipeCorner": { - "desc": "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench.", - "hash": -1785673561, - "name": "StructurePipeCorner", - "receiver": false, - "title": "Pipe (Corner)", - "transmitter": false - }, - "StructurePipeCowl": { - "desc": "", - "hash": 465816159, - "name": "StructurePipeCowl", - "receiver": false, - "title": "Pipe Cowl", - "transmitter": false - }, - "StructurePipeCrossJunction": { - "desc": "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench.", - "hash": -1405295588, - "name": "StructurePipeCrossJunction", - "receiver": false, - "title": "Pipe (Cross Junction)", - "transmitter": false - }, - "StructurePipeCrossJunction3": { - "desc": "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "hash": 2038427184, - "name": "StructurePipeCrossJunction3", - "receiver": false, - "title": "Pipe (3-Way Junction)", - "transmitter": false - }, - "StructurePipeCrossJunction4": { - "desc": "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "hash": -417629293, - "name": "StructurePipeCrossJunction4", - "receiver": false, - "title": "Pipe (4-Way Junction)", - "transmitter": false - }, - "StructurePipeCrossJunction5": { - "desc": "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "hash": -1877193979, - "name": "StructurePipeCrossJunction5", - "receiver": false, - "title": "Pipe (5-Way Junction)", - "transmitter": false - }, - "StructurePipeCrossJunction6": { - "desc": "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench.", - "hash": 152378047, - "name": "StructurePipeCrossJunction6", - "receiver": false, - "title": "Pipe (6-Way Junction)", - "transmitter": false - }, - "StructurePipeHeater": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Adds 1000 joules of heat per tick to the contents of your pipe network.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -419758574, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructurePipeHeater", - "receiver": false, - "title": "Pipe Heater (Gas)", - "transmitter": false - }, - "StructurePipeIgniter": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Ignites the atmosphere inside the attached pipe network.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1286441942, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructurePipeIgniter", - "receiver": false, - "title": "Pipe Igniter", - "transmitter": false - }, - "StructurePipeInsulatedLiquidCrossJunction": { - "desc": "Liquid piping with very low temperature loss or gain.", - "hash": -2068497073, - "name": "StructurePipeInsulatedLiquidCrossJunction", - "receiver": false, - "title": "Insulated Liquid Pipe (Cross Junction)", - "transmitter": false - }, - "StructurePipeLabel": { - "desc": "As its perspicacious name suggests, the pipe label is designed to be attached to a straight stretch of pipe. Users can then label the label with the Labeller.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -999721119, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructurePipeLabel", - "receiver": false, - "title": "Pipe Label", - "transmitter": false - }, - "StructurePipeLiquidCorner": { - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "hash": -1856720921, - "name": "StructurePipeLiquidCorner", - "receiver": false, - "title": "Liquid Pipe (Corner)", - "transmitter": false - }, - "StructurePipeLiquidCrossJunction": { - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "hash": 1848735691, - "name": "StructurePipeLiquidCrossJunction", - "receiver": false, - "title": "Liquid Pipe (Cross Junction)", - "transmitter": false - }, - "StructurePipeLiquidCrossJunction3": { - "desc": "You can upgrade this pipe to an StructureInsulatedPipeLiquidCrossJunction3 using an Kit (Insulated Liquid Pipe) and a Wrench.", - "hash": 1628087508, - "name": "StructurePipeLiquidCrossJunction3", - "receiver": false, - "title": "Liquid Pipe (3-Way Junction)", - "transmitter": false - }, - "StructurePipeLiquidCrossJunction4": { - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "hash": -9555593, - "name": "StructurePipeLiquidCrossJunction4", - "receiver": false, - "title": "Liquid Pipe (4-Way Junction)", - "transmitter": false - }, - "StructurePipeLiquidCrossJunction5": { - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "hash": -2006384159, - "name": "StructurePipeLiquidCrossJunction5", - "receiver": false, - "title": "Liquid Pipe (5-Way Junction)", - "transmitter": false - }, - "StructurePipeLiquidCrossJunction6": { - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "hash": 291524699, - "name": "StructurePipeLiquidCrossJunction6", - "receiver": false, - "title": "Liquid Pipe (6-Way Junction)", - "transmitter": false - }, - "StructurePipeLiquidStraight": { - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "hash": 667597982, - "name": "StructurePipeLiquidStraight", - "receiver": false, - "title": "Liquid Pipe (Straight)", - "transmitter": false - }, - "StructurePipeLiquidTJunction": { - "desc": "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench.", - "hash": 262616717, - "name": "StructurePipeLiquidTJunction", - "receiver": false, - "title": "Liquid Pipe (T Junction)", - "transmitter": false - }, - "StructurePipeMeter": { - "desc": "While the Stationeers program has, thus far, inspired little in the way of classical poetry, the following haiku was found etched, ironically, on a piece of pipe wreckage found on Vulcan:\n\"Humble pipe meter\nspeaks the truth, transmits pressure\nwithin any pipe\"", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1798362329, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructurePipeMeter", - "receiver": false, - "title": "Pipe Meter", - "transmitter": false - }, - "StructurePipeOneWayValve": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - } - }, - "desc": "The one way valve moves gas in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure.\n", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1580412404, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePipeOneWayValve", - "receiver": false, - "title": "One Way Valve (Gas)", - "transmitter": false - }, - "StructurePipeOrgan": { - "desc": "The pipe organ can be attached to one end of a Kit (Pipe Valve). The length of the pipe after the pipe organ changes the pitch of the note it will play when the valve is opened. Use Logic to open and close the valves to create some custom tunes for your base or an audible warning.", - "hash": 1305252611, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructurePipeOrgan", - "receiver": false, - "title": "Pipe Organ", - "transmitter": false - }, - "StructurePipeRadiator": { - "desc": "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added the gas within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the gas in question. Adding multiple radiators will speed up heat transfer.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1696603168, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructurePipeRadiator", - "receiver": false, - "title": "Pipe Convection Radiator", - "transmitter": false - }, - "StructurePipeRadiatorFlat": { - "desc": "A pipe mounted radiator optimized for radiating heat in vacuums.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -399883995, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructurePipeRadiatorFlat", - "receiver": false, - "title": "Pipe Radiator", - "transmitter": false - }, - "StructurePipeRadiatorFlatLiquid": { - "desc": "A liquid pipe mounted radiator optimized for radiating heat in vacuums.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 2024754523, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructurePipeRadiatorFlatLiquid", - "receiver": false, - "title": "Pipe Radiator Liquid", - "transmitter": false - }, - "StructurePipeStraight": { - "desc": "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench.", - "hash": 73728932, - "name": "StructurePipeStraight", - "receiver": false, - "title": "Pipe (Straight)", - "transmitter": false - }, - "StructurePipeTJunction": { - "desc": "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench.", - "hash": -913817472, - "name": "StructurePipeTJunction", - "receiver": false, - "title": "Pipe (T Junction)", - "transmitter": false - }, - "StructurePlanter": { - "desc": "A small planter for decorative or hydroponic purposes. Can be connected to Water, or watered manually using a Water Bottle or Liquid Canister (Water).", - "hash": -1125641329, - "name": "StructurePlanter", - "receiver": false, - "slots": [ - { - "name": "Plant", - "typ": "Plant" - }, - { - "name": "Plant", - "typ": "Plant" - } - ], - "title": "Planter", - "transmitter": false - }, - "StructurePlatformLadderOpen": { - "desc": "", - "hash": 1559586682, - "name": "StructurePlatformLadderOpen", - "receiver": false, - "title": "Ladder Platform", - "transmitter": false - }, - "StructurePlinth": { - "desc": "", - "hash": 989835703, - "name": "StructurePlinth", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - } - ], - "title": "Plinth", - "transmitter": false - }, - "StructurePortablesConnector": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Liquid Input2", - "role": "Input2", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -899013427, - "logic": { - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePortablesConnector", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - } - ], - "title": "Portables Connector", - "transmitter": false - }, - "StructurePowerConnector": { - "conn": { - "0": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "Attaches a Kit (Portable Generator) to a power network.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -782951720, - "logic": { - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructurePowerConnector", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Portable Slot", - "typ": "None" - } - ], - "title": "Power Connector", - "transmitter": false - }, - "StructurePowerTransmitter": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -65087121, - "logic": { - "Charge": "Read", - "Error": "Read", - "Horizontal": "ReadWrite", - "Mode": "Read", - "On": "ReadWrite", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "Power": "Read", - "PowerActual": "Read", - "PowerPotential": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Vertical": "ReadWrite" - }, - "modes": { - "0": "Unlinked", - "1": "Linked" - }, - "name": "StructurePowerTransmitter", - "receiver": false, - "title": "Microwave Power Transmitter", - "transmitter": false - }, - "StructurePowerTransmitterOmni": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -327468845, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructurePowerTransmitterOmni", - "receiver": false, - "title": "Power Transmitter Omni", - "transmitter": false - }, - "StructurePowerTransmitterReceiver": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter's collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.Connects to Logic Transmitter", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1195820278, - "logic": { - "Charge": "Read", - "Error": "Read", - "Horizontal": "ReadWrite", - "Mode": "Read", - "On": "ReadWrite", - "PositionX": "Read", - "PositionY": "Read", - "PositionZ": "Read", - "Power": "Read", - "PowerActual": "Read", - "PowerPotential": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Vertical": "ReadWrite" - }, - "modes": { - "0": "Unlinked", - "1": "Linked" - }, - "name": "StructurePowerTransmitterReceiver", - "receiver": false, - "title": "Microwave Power Receiver", - "transmitter": true - }, - "StructurePowerUmbilicalFemale": { - "conn": { - "0": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 101488029, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructurePowerUmbilicalFemale", - "receiver": false, - "title": "Umbilical Socket (Power)", - "transmitter": false - }, - "StructurePowerUmbilicalFemaleSide": { - "conn": { - "0": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1922506192, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructurePowerUmbilicalFemaleSide", - "receiver": false, - "title": "Umbilical Socket Angle (Power)", - "transmitter": false - }, - "StructurePowerUmbilicalMale": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "0.Left\n1.Center\n2.Right", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1529453938, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Mode": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Left", - "1": "Center", - "2": "Right" - }, - "name": "StructurePowerUmbilicalMale", - "receiver": false, - "title": "Umbilical (Power)", - "transmitter": false - }, - "StructurePoweredVent": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Great for moving large quantities of air into a pipe network. Its primary purpose is for the creation of multi-grid airlocks. It can effeciently pull a vacuum on a small to medium sized room.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 938836756, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "PressureExternal": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Outward", - "1": "Inward" - }, - "name": "StructurePoweredVent", - "receiver": false, - "title": "Powered Vent", - "transmitter": false - }, - "StructurePoweredVentLarge": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "For building large scale airlock systems and pressurised hangers, a bigger and bolder version of the Powered Vent that can effeciently pull a vacuum in large room.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -785498334, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "PressureExternal": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Outward", - "1": "Inward" - }, - "name": "StructurePoweredVentLarge", - "receiver": false, - "title": "Powered Vent Large", - "transmitter": false - }, - "StructurePressurantValve": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Pumps gas into a liquid pipe in order to raise the pressure", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 23052817, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePressurantValve", - "receiver": false, - "title": "Pressurant Valve", - "transmitter": false - }, - "StructurePressureFedGasEngine": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - }, - "2": { - "name": "Power And Data Output", - "role": "Output", - "typ": "PowerAndData" - } - }, - "desc": "Inefficient but very powerful, the Pressure Fed Gas Engine moves gas from each of its two inputs based on the pressure of the input pipes. Control the mixing ratio of fuels by tweaking the input pressures to target a 2:1 mix of Volatiles to Oxygen gas. Chilling propellant gasses or using Nitrous Oxide as an oxydizer will result in even higher thrust outputs.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -624011170, - "logic": { - "Combustion": "Read", - "Error": "Read", - "On": "ReadWrite", - "PassedMoles": "Read", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Temperature": "Read", - "Throttle": "ReadWrite", - "TotalMoles": "Read" - }, - "name": "StructurePressureFedGasEngine", - "receiver": false, - "title": "Pressure Fed Gas Engine", - "transmitter": false - }, - "StructurePressureFedLiquidEngine": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Input2", - "role": "Input2", - "typ": "PipeLiquid" - }, - "2": { - "name": "Power And Data Output", - "role": "Output", - "typ": "PowerAndData" - } - }, - "desc": "Highly efficient and powerful, the Pressure Fed Liquid Engine is a challenging engine to run in a stable configuration. Liquid is pulled from the input into the engine based on the input gas pressure. Some gas is also moved in this process so Stationeers will need to devise a system to maintain a high gas pressure in the liquid input pipe. The second liquid pipe connection is an optional heat-exchanger connection which exchanges heat between the pipes contents and the engine bell, the Setting variable drives the effectiveness of the heat-exchanger.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 379750958, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "PassedMoles": "Read", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "Throttle": "ReadWrite", - "TotalMoles": "Read" - }, - "name": "StructurePressureFedLiquidEngine", - "receiver": false, - "title": "Pressure Fed Liquid Engine", - "transmitter": false - }, - "StructurePressurePlateLarge": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -2008706143, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "Setting": "Read" - }, - "name": "StructurePressurePlateLarge", - "receiver": false, - "title": "Trigger Plate (Large)", - "transmitter": false - }, - "StructurePressurePlateMedium": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1269458680, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "Setting": "Read" - }, - "name": "StructurePressurePlateMedium", - "receiver": false, - "title": "Trigger Plate (Medium)", - "transmitter": false - }, - "StructurePressurePlateSmall": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1536471028, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read", - "Setting": "Read" - }, - "name": "StructurePressurePlateSmall", - "receiver": false, - "title": "Trigger Plate (Small)", - "transmitter": false - }, - "StructurePressureRegulator": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Controlling the flow of gas between two pipe networks, pressure regulators shift gas until a set pressure on the outlet side is achieved, or the gas supply is exhausted. The back pressure regulator, by contrast, will only operate when pressure on the intake side exceeds the set value. With a max pressure of over 20,000kPa, it requires power to operate.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 209854039, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePressureRegulator", - "receiver": false, - "title": "Pressure Regulator", - "transmitter": false - }, - "StructureProximitySensor": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Will be triggered if there is a player in the range of the sensor (as defined by the setting dial). The quantity variable will show the number of players. You can configure the sensor to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 568800213, - "logic": { - "Activate": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureProximitySensor", - "receiver": false, - "title": "Proximity Sensor", - "transmitter": false - }, - "StructurePumpedLiquidEngine": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PipeLiquid" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PipeLiquid" - }, - "2": { - "name": "Power And Data Output", - "role": "Output", - "typ": "PowerAndData" - } - }, - "desc": "Liquid propellants bring greater efficiencies with Pumped Liquid Engine. Two inputs are provided so Stationeers can seperate their fuels, the Setting variable controls the mixing ratio of the inputs. The engine is designed to run on Liquid Volatiles and Liquid Oxygen, some Stationeers have reported excessive thrust values by switching to Liquid Nitrous Oxide", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -2031440019, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "PassedMoles": "Read", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "Throttle": "ReadWrite", - "TotalMoles": "Read" - }, - "name": "StructurePumpedLiquidEngine", - "receiver": false, - "title": "Pumped Liquid Engine", - "transmitter": false - }, - "StructurePurgeValve": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Allows for removal of pressurant gas and evaporated liquids from a liquid pipe. Similar in function to a Back Pressure Regulator the Purge Valve moves gas from the input liquid pipe to the output gas pipe aiming to keep the pressure of the input at the target setting.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -737232128, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructurePurgeValve", - "receiver": false, - "title": "Purge Valve", - "transmitter": false - }, - "StructureRailing": { - "desc": "\"Safety third.\"", - "hash": -1756913871, - "name": "StructureRailing", - "receiver": false, - "title": "Railing Industrial (Type 1)", - "transmitter": false - }, - "StructureRecycler": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "A device for collecting the raw resources while destroying an item. Produces Reagent Mix containing packages of reagents. Pass these through the Centrifuge to gain back the source ores. Plants and organic matter passed through will create Biomass, which when passed through the Centrifuge will produce Biomass.", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1633947337, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureRecycler", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Recycler", - "transmitter": false - }, - "StructureRefrigeratedVendingMachine": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The refrigerated OmniKool vending machine is an advanced version of the standard Vending Machine, which maintains an optimum pressure and constant temperature of -130 degrees C, to prevent food spoilage. It can hold up to 100 stacks.\nThe OmniKool also has an in-built Stacker, allowing players to set the stack sizes of any items ADDED to the device. The unit's default stack size is 50.\nNOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. ", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1577831321, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Combustion": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequestHash": "ReadWrite", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "StructureRefrigeratedVendingMachine", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {}, - "10": {}, - "100": {}, - "101": {}, - "11": {}, - "12": {}, - "13": {}, - "14": {}, - "15": {}, - "16": {}, - "17": {}, - "18": {}, - "19": {}, - "2": {}, - "20": {}, - "21": {}, - "22": {}, - "23": {}, - "24": {}, - "25": {}, - "26": {}, - "27": {}, - "28": {}, - "29": {}, - "3": {}, - "30": {}, - "31": {}, - "32": {}, - "33": {}, - "34": {}, - "35": {}, - "36": {}, - "37": {}, - "38": {}, - "39": {}, - "4": {}, - "40": {}, - "41": {}, - "42": {}, - "43": {}, - "44": {}, - "45": {}, - "46": {}, - "47": {}, - "48": {}, - "49": {}, - "5": {}, - "50": {}, - "51": {}, - "52": {}, - "53": {}, - "54": {}, - "55": {}, - "56": {}, - "57": {}, - "58": {}, - "59": {}, - "6": {}, - "60": {}, - "61": {}, - "62": {}, - "63": {}, - "64": {}, - "65": {}, - "66": {}, - "67": {}, - "68": {}, - "69": {}, - "7": {}, - "70": {}, - "71": {}, - "72": {}, - "73": {}, - "74": {}, - "75": {}, - "76": {}, - "77": {}, - "78": {}, - "79": {}, - "8": {}, - "80": {}, - "81": {}, - "82": {}, - "83": {}, - "84": {}, - "85": {}, - "86": {}, - "87": {}, - "88": {}, - "89": {}, - "9": {}, - "90": {}, - "91": {}, - "92": {}, - "93": {}, - "94": {}, - "95": {}, - "96": {}, - "97": {}, - "98": {}, - "99": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - } - ], - "title": "Refrigerated Vending Machine", - "transmitter": false - }, - "StructureReinforcedCompositeWindow": { - "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", - "hash": 2027713511, - "name": "StructureReinforcedCompositeWindow", - "receiver": false, - "title": "Reinforced Window (Composite)", - "transmitter": false - }, - "StructureReinforcedCompositeWindowSteel": { - "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", - "hash": -816454272, - "name": "StructureReinforcedCompositeWindowSteel", - "receiver": false, - "title": "Reinforced Window (Composite Steel)", - "transmitter": false - }, - "StructureReinforcedWallPaddedWindow": { - "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", - "hash": 1939061729, - "name": "StructureReinforcedWallPaddedWindow", - "receiver": false, - "title": "Reinforced Window (Padded)", - "transmitter": false - }, - "StructureReinforcedWallPaddedWindowThin": { - "desc": "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa.", - "hash": 158502707, - "name": "StructureReinforcedWallPaddedWindowThin", - "receiver": false, - "title": "Reinforced Window (Thin)", - "transmitter": false - }, - "StructureResearchMachine": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "4": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -796627526, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "CurrentResearchPodType": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "ManualResearchRequiredPod": "Write", - "Maximum": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureResearchMachine", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {}, - "2": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "HoldingSlot", - "typ": "None" - } - ], - "title": "Research Machine", - "transmitter": false - }, - "StructureRocketAvionics": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 808389066, - "logic": { - "Acceleration": "Read", - "Apex": "Read", - "AutoLand": "Write", - "AutoShutOff": "ReadWrite", - "BurnTimeRemaining": "Read", - "Chart": "Read", - "ChartedNavPoints": "Read", - "CurrentCode": "Read", - "Density": "Read", - "DestinationCode": "ReadWrite", - "Discover": "Read", - "DryMass": "Read", - "Error": "Read", - "FlightControlRule": "Read", - "Mass": "Read", - "MinedQuantity": "Read", - "Mode": "ReadWrite", - "NavPoints": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Progress": "Read", - "Quantity": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReEntryAltitude": "Read", - "Reagents": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Richness": "Read", - "Sites": "Read", - "Size": "Read", - "Survey": "Read", - "Temperature": "Read", - "Thrust": "Read", - "ThrustToWeight": "Read", - "TimeToDestination": "Read", - "TotalMoles": "Read", - "TotalQuantity": "Read", - "VelocityRelativeY": "Read", - "Weight": "Read" - }, - "modes": { - "0": "Invalid", - "1": "None", - "2": "Mine", - "3": "Survey", - "4": "Discover", - "5": "Chart" - }, - "name": "StructureRocketAvionics", - "receiver": false, - "title": "Rocket Avionics", - "transmitter": false - }, - "StructureRocketCelestialTracker": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The Celestial Tracker can be placed in Rockets and when turned on will provide data that can be used to orientate devices such as the Telescope. The Horizontal and Vertical output is localized to the orientation of the tracker. You can calibrate your alignment by comparing the result for the primary body with the output from the Daylight Sensor. Full functionality will only be available in orbit, but you can configure using the primary body. For aligning with the telescope, have the face plate facing up and the cables facing in the same direction as for the telescope and the output values will be aligned.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 997453927, - "logic": { - "CelestialHash": "Read", - "Error": "Read", - "Horizontal": "Read", - "Index": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Vertical": "Read" - }, - "memory": { - "access": "Read", - "instructions": { - "BodyOrientation": { - "desc": "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CELESTIAL_INDEX | BYTE_8 |\r\n| 16-31 | HORIZONTAL_DECI_DEGREES | SHORT_16 |\r\n| 32-47 | VERTICAL_DECI_DEGREES | SHORT_16 |\r\n| 48-63 | UNUSED | 16 |", - "typ": "CelestialTracking", - "value": 1 - } - }, - "size": 12, - "sizeDisplay": "96 B" - }, - "name": "StructureRocketCelestialTracker", - "receiver": false, - "title": "Rocket Celestial Tracker", - "transmitter": false - }, - "StructureRocketCircuitHousing": { - "conn": { - "0": { - "name": "Power And Data Input", - "role": "Input", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "pins": 6, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 150135861, - "logic": { - "Error": "Read", - "LineNumber": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "memory": { - "access": "ReadWrite", - "size": 0, - "sizeDisplay": "0 B" - }, - "name": "StructureRocketCircuitHousing", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "LineNumber": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "LineNumber": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Programmable Chip", - "typ": "ProgrammableChip" - } - ], - "title": "Rocket Circuit Housing", - "transmitter": false - }, - "StructureRocketEngineTiny": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 178472613, - "logic": { - "Combustion": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read" - }, - "name": "StructureRocketEngineTiny", - "receiver": false, - "title": "Rocket Engine (Tiny)", - "transmitter": false - }, - "StructureRocketManufactory": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1781051034, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "CompletionRatio": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "RecipeHash": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureRocketManufactory", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Rocket Manufactory", - "transmitter": false - }, - "StructureRocketMiner": { - "conn": { - "0": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Gathers available resources at the rocket's current space location.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -2087223687, - "logic": { - "ClearMemory": "Write", - "DrillCondition": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureRocketMiner", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Export", - "typ": "None" - }, - { - "name": "Drill Head Slot", - "typ": "DrillHead" - } - ], - "title": "Rocket Miner", - "transmitter": false - }, - "StructureRocketScanner": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 2014252591, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureRocketScanner", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Scanner Head Slot", - "typ": "ScanningHead" - } - ], - "title": "Rocket Scanner", - "transmitter": false - }, - "StructureRocketTower": { - "desc": "", - "hash": -654619479, - "name": "StructureRocketTower", - "receiver": false, - "title": "Launch Tower", - "transmitter": false - }, - "StructureRocketTransformerSmall": { - "conn": { - "0": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - }, - "1": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 518925193, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureRocketTransformerSmall", - "receiver": false, - "title": "Transformer Small (Rocket)", - "transmitter": false - }, - "StructureRover": { - "desc": "", - "hash": 806513938, - "name": "StructureRover", - "receiver": false, - "title": "Rover Frame", - "transmitter": false - }, - "StructureSDBHopper": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Chute" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -1875856925, - "logic": { - "ClearMemory": "Write", - "ImportCount": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureSDBHopper", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - } - ], - "title": "SDB Hopper", - "transmitter": false - }, - "StructureSDBHopperAdvanced": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "2": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 467225612, - "logic": { - "ClearMemory": "Write", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureSDBHopperAdvanced", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - } - ], - "title": "SDB Hopper Advanced", - "transmitter": false - }, - "StructureSDBSilo": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The majestic silo holds large quantities of almost anything. While it is doing that, it cannot be deconstructed. Note also, that any food you put into a silo is likely to decay extremely rapidly. The silo can hold up to 600 stacks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1155865682, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Mode0", - "1": "Mode1" - }, - "name": "StructureSDBSilo", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "SDB Silo", - "transmitter": false - }, - "StructureSatelliteDish": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "This medium communications unit can be used to communicate with nearby trade vessels.\n \nWhen connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 439026183, - "logic": { - "Activate": "ReadWrite", - "BestContactFilter": "ReadWrite", - "ContactTypeId": "Read", - "Error": "Read", - "Horizontal": "ReadWrite", - "Idle": "Read", - "InterrogationProgress": "Read", - "MinimumWattsToContact": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "SignalID": "Read", - "SignalStrength": "Read", - "SizeX": "Read", - "SizeZ": "Read", - "TargetPadIndex": "ReadWrite", - "Vertical": "ReadWrite", - "WattsReachingContact": "Read" - }, - "name": "StructureSatelliteDish", - "receiver": false, - "title": "Medium Satellite Dish", - "transmitter": false - }, - "StructureSecurityPrinter": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Any Stationeer concerned about security needs the Harkwell-designed Vigilant-E security printer. Use the Vigilant-E to create a Cartridge (Access Controller), in order to restrict access to different parts of your base via keycards like the Access Card (Blue). The printer also makes a variety of weapons and ammunitions to defend your base against any hostile, aggressive or just slightly rude entites you encounter as you explore the Solar System.\n", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -641491515, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "CompletionRatio": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "RecipeHash": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureSecurityPrinter", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Security Printer", - "transmitter": false - }, - "StructureShelf": { - "desc": "", - "hash": 1172114950, - "name": "StructureShelf", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Shelf", - "transmitter": false - }, - "StructureShelfMedium": { - "desc": "A shelf for putting things on, so you can see them.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 182006674, - "logic": { - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureShelfMedium", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "10": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "11": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "12": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "13": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "14": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Shelf Medium", - "transmitter": false - }, - "StructureShortCornerLocker": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 1330754486, - "logic": { - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureShortCornerLocker", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Short Corner Locker", - "transmitter": false - }, - "StructureShortLocker": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -554553467, - "logic": { - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureShortLocker", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Short Locker", - "transmitter": false - }, - "StructureShower": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -775128944, - "logic": { - "Activate": "ReadWrite", - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureShower", - "receiver": false, - "title": "Shower", - "transmitter": false - }, - "StructureShowerPowered": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "2": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -1081797501, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureShowerPowered", - "receiver": false, - "title": "Shower (Powered)", - "transmitter": false - }, - "StructureSign1x1": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 879058460, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureSign1x1", - "receiver": false, - "title": "Sign 1x1", - "transmitter": false - }, - "StructureSign2x1": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 908320837, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureSign2x1", - "receiver": false, - "title": "Sign 2x1", - "transmitter": false - }, - "StructureSingleBed": { - "desc": "Description coming.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -492611, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureSingleBed", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" - } - ], - "title": "Single Bed", - "transmitter": false - }, - "StructureSleeper": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -1467449329, - "logic": { - "Activate": "ReadWrite", - "EntityState": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureSleeper", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Bed", - "typ": "Entity" - } - ], - "title": "Sleeper", - "transmitter": false - }, - "StructureSleeperLeft": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 1213495833, - "logic": { - "Activate": "ReadWrite", - "EntityState": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Safe", - "1": "Unsafe", - "2": "Unpowered" - }, - "name": "StructureSleeperLeft", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "title": "Sleeper Left", - "transmitter": false - }, - "StructureSleeperRight": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1812330717, - "logic": { - "Activate": "ReadWrite", - "EntityState": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Safe", - "1": "Unsafe", - "2": "Unpowered" - }, - "name": "StructureSleeperRight", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "title": "Sleeper Right", - "transmitter": false - }, - "StructureSleeperVertical": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The vertical variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": -1300059018, - "logic": { - "Activate": "ReadWrite", - "EntityState": "Read", - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Safe", - "1": "Unsafe", - "2": "Unpowered" - }, - "name": "StructureSleeperVertical", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "title": "Sleeper Vertical", - "transmitter": false - }, - "StructureSleeperVerticalDroid": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The Droid Sleeper will recharge robot batteries and equiped suit batteries if present. This sleeper variant is only safe for robots. Entering as a non robot character will cause you to take damage.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": 1382098999, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureSleeperVerticalDroid", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Player", - "typ": "Entity" - } - ], - "title": "Droid Sleeper Vertical", - "transmitter": false - }, - "StructureSmallDirectHeatExchangeGastoGas": { - "conn": { - "0": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - } - }, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1310303582, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureSmallDirectHeatExchangeGastoGas", - "receiver": false, - "title": "Small Direct Heat Exchanger - Gas + Gas", - "transmitter": false - }, - "StructureSmallDirectHeatExchangeLiquidtoGas": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - } - }, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1825212016, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureSmallDirectHeatExchangeLiquidtoGas", - "receiver": false, - "title": "Small Direct Heat Exchanger - Liquid + Gas ", - "transmitter": false - }, - "StructureSmallDirectHeatExchangeLiquidtoLiquid": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Input2", - "role": "Input2", - "typ": "PipeLiquid" - } - }, - "desc": "Direct Heat Exchangers equalize the temperature of the two input networks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -507770416, - "logic": { - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureSmallDirectHeatExchangeLiquidtoLiquid", - "receiver": false, - "title": "Small Direct Heat Exchanger - Liquid + Liquid", - "transmitter": false - }, - "StructureSmallSatelliteDish": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - } - }, - "desc": "This small communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -2138748650, - "logic": { - "Activate": "ReadWrite", - "BestContactFilter": "ReadWrite", - "ContactTypeId": "Read", - "Error": "Read", - "Horizontal": "ReadWrite", - "Idle": "Read", - "InterrogationProgress": "Read", - "MinimumWattsToContact": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "SignalID": "Read", - "SignalStrength": "Read", - "SizeX": "Read", - "SizeZ": "Read", - "TargetPadIndex": "ReadWrite", - "Vertical": "ReadWrite", - "WattsReachingContact": "Read" - }, - "name": "StructureSmallSatelliteDish", - "receiver": false, - "title": "Small Satellite Dish", - "transmitter": false - }, - "StructureSmallTableBacklessDouble": { - "desc": "", - "hash": -1633000411, - "name": "StructureSmallTableBacklessDouble", - "receiver": false, - "title": "Small (Table Backless Double)", - "transmitter": false - }, - "StructureSmallTableBacklessSingle": { - "desc": "", - "hash": -1897221677, - "name": "StructureSmallTableBacklessSingle", - "receiver": false, - "title": "Small (Table Backless Single)", - "transmitter": false - }, - "StructureSmallTableDinnerSingle": { - "desc": "", - "hash": 1260651529, - "name": "StructureSmallTableDinnerSingle", - "receiver": false, - "title": "Small (Table Dinner Single)", - "transmitter": false - }, - "StructureSmallTableRectangleDouble": { - "desc": "", - "hash": -660451023, - "name": "StructureSmallTableRectangleDouble", - "receiver": false, - "title": "Small (Table Rectangle Double)", - "transmitter": false - }, - "StructureSmallTableRectangleSingle": { - "desc": "", - "hash": -924678969, - "name": "StructureSmallTableRectangleSingle", - "receiver": false, - "title": "Small (Table Rectangle Single)", - "transmitter": false - }, - "StructureSmallTableThickDouble": { - "desc": "", - "hash": -19246131, - "name": "StructureSmallTableThickDouble", - "receiver": false, - "title": "Small (Table Thick Double)", - "transmitter": false - }, - "StructureSmallTableThickSingle": { - "desc": "", - "hash": -291862981, - "name": "StructureSmallTableThickSingle", - "receiver": false, - "title": "Small Table (Thick Single)", - "transmitter": false - }, - "StructureSolarPanel": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Sinotai's standard solar panels are used for generating power from sunlight. They can be connected to Logic systems, in order to track sunlight, but their reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -2045627372, - "logic": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Vertical": "ReadWrite" - }, - "name": "StructureSolarPanel", - "receiver": false, - "title": "Solar Panel", - "transmitter": false - }, - "StructureSolarPanel45": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Sinotai basic solar panels generate power from sunlight, sitting at 45 degrees to the ground. Their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1554349863, - "logic": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Vertical": "ReadWrite" - }, - "name": "StructureSolarPanel45", - "receiver": false, - "title": "Solar Panel (Angled)", - "transmitter": false - }, - "StructureSolarPanel45Reinforced": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "This solar panel is resistant to storm damage.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 930865127, - "logic": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Vertical": "ReadWrite" - }, - "name": "StructureSolarPanel45Reinforced", - "receiver": false, - "title": "Solar Panel (Heavy Angled)", - "transmitter": false - }, - "StructureSolarPanelDual": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Sinotai dual solar panels are used for generating power from sunlight, with dedicated data and power ports. They can be connected to {Logic systems, in order to track sunlight, but their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -539224550, - "logic": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Vertical": "ReadWrite" - }, - "name": "StructureSolarPanelDual", - "receiver": false, - "title": "Solar Panel (Dual)", - "transmitter": false - }, - "StructureSolarPanelDualReinforced": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "This solar panel is resistant to storm damage.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1545574413, - "logic": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Vertical": "ReadWrite" - }, - "name": "StructureSolarPanelDualReinforced", - "receiver": false, - "title": "Solar Panel (Heavy Dual)", - "transmitter": false - }, - "StructureSolarPanelFlat": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "Sinotai basic solar panels generate power from sunlight. They lie flat to the ground, and their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1968102968, - "logic": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Vertical": "ReadWrite" - }, - "name": "StructureSolarPanelFlat", - "receiver": false, - "title": "Solar Panel (Flat)", - "transmitter": false - }, - "StructureSolarPanelFlatReinforced": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "This solar panel is resistant to storm damage.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1697196770, - "logic": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Vertical": "ReadWrite" - }, - "name": "StructureSolarPanelFlatReinforced", - "receiver": false, - "title": "Solar Panel (Heavy Flat)", - "transmitter": false - }, - "StructureSolarPanelReinforced": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "This solar panel is resistant to storm damage.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -934345724, - "logic": { - "Charge": "Read", - "Horizontal": "ReadWrite", - "Maximum": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Vertical": "ReadWrite" - }, - "name": "StructureSolarPanelReinforced", - "receiver": false, - "title": "Solar Panel (Heavy)", - "transmitter": false - }, - "StructureSolidFuelGenerator": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "2": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "The mainstay of power generation for Stationeers, this device provides 20kW of power. Multiple solid resources can be loaded. While operating, the device will output its maximum power regardless of whether you have captured it or not. Watch for blown wires! It will output much more power than your regular Cable Coil can handle.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 813146305, - "logic": { - "ClearMemory": "Write", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Not Generating", - "1": "Generating" - }, - "name": "StructureSolidFuelGenerator", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Input", - "typ": "Ore" - } - ], - "title": "Generator (Solid Fuel)", - "transmitter": false - }, - "StructureSorter": { - "conn": { - "0": { - "name": "Chute Output2", - "role": "Output2", - "typ": "Chute" - }, - "1": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "2": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "No amount of automation is complete without some way of moving different items to different parts of a system. The Xigo A2B sorter can be programmed via a computer with a Sorter Motherboard to direct various items into different chute networks. Filtered items are always passed out the righthand side of the sorter, while non filtered items continue straight through.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -1009150565, - "logic": { - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Output": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Split", - "1": "Filter", - "2": "Logic" - }, - "name": "StructureSorter", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read", - "3": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Export 2", - "typ": "None" - }, - { - "name": "Data Disk", - "typ": "DataDisk" - } - ], - "title": "Sorter", - "transmitter": false - }, - "StructureStacker": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - } - }, - "desc": "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": -2020231820, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Output": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Automatic", - "1": "Logic" - }, - "name": "StructureStacker", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Processing", - "typ": "None" - } - ], - "title": "Stacker", - "transmitter": false - }, - "StructureStackerReverse": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - } - }, - "desc": "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs. The reversed stacker has power and data on the opposite side.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1585641623, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Output": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Automatic", - "1": "Logic" - }, - "name": "StructureStackerReverse", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Stacker", - "transmitter": false - }, - "StructureStairs4x2": { - "desc": "", - "hash": 1405018945, - "name": "StructureStairs4x2", - "receiver": false, - "title": "Stairs", - "transmitter": false - }, - "StructureStairs4x2RailL": { - "desc": "", - "hash": 155214029, - "name": "StructureStairs4x2RailL", - "receiver": false, - "title": "Stairs with Rail (Left)", - "transmitter": false - }, - "StructureStairs4x2RailR": { - "desc": "", - "hash": -212902482, - "name": "StructureStairs4x2RailR", - "receiver": false, - "title": "Stairs with Rail (Right)", - "transmitter": false - }, - "StructureStairs4x2Rails": { - "desc": "", - "hash": -1088008720, - "name": "StructureStairs4x2Rails", - "receiver": false, - "title": "Stairs with Rails", - "transmitter": false - }, - "StructureStairwellBackLeft": { - "desc": "", - "hash": 505924160, - "name": "StructureStairwellBackLeft", - "receiver": false, - "title": "Stairwell (Back Left)", - "transmitter": false - }, - "StructureStairwellBackPassthrough": { - "desc": "", - "hash": -862048392, - "name": "StructureStairwellBackPassthrough", - "receiver": false, - "title": "Stairwell (Back Passthrough)", - "transmitter": false - }, - "StructureStairwellBackRight": { - "desc": "", - "hash": -2128896573, - "name": "StructureStairwellBackRight", - "receiver": false, - "title": "Stairwell (Back Right)", - "transmitter": false - }, - "StructureStairwellFrontLeft": { - "desc": "", - "hash": -37454456, - "name": "StructureStairwellFrontLeft", - "receiver": false, - "title": "Stairwell (Front Left)", - "transmitter": false - }, - "StructureStairwellFrontPassthrough": { - "desc": "", - "hash": -1625452928, - "name": "StructureStairwellFrontPassthrough", - "receiver": false, - "title": "Stairwell (Front Passthrough)", - "transmitter": false - }, - "StructureStairwellFrontRight": { - "desc": "", - "hash": 340210934, - "name": "StructureStairwellFrontRight", - "receiver": false, - "title": "Stairwell (Front Right)", - "transmitter": false - }, - "StructureStairwellNoDoors": { - "desc": "", - "hash": 2049879875, - "name": "StructureStairwellNoDoors", - "receiver": false, - "title": "Stairwell (No Doors)", - "transmitter": false - }, - "StructureStirlingEngine": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Harnessing an ancient thermal exploit, the Recurso 'Libra' Stirling Engine generates power via the expansion and contraction of a working gas to drive pistons operating an electrical generator.\n \nWhen high pressure hot gas is supplied into the input pipe, this gas will heat the hot side of the unit, then pass into the output pipe. The cooler side uses the room's ambient atmosphere, which must be kept at a lower temperature and pressure in order to create a differential. Add a working gas by inserting a Gas Canister. The unit must be deactivated when adding or removing canisters, or the working gas may leak into the surrounding atmosphere.\n \nGases with a low molecular mass make the most efficient working gases. Increasing the moles of working gas can result in a greater potential power output. However, overpressuring the unit may have ... sub-optimal results.", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -260316435, - "logic": { - "Combustion": "Read", - "EnvironmentEfficiency": "Read", - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PowerGeneration": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "WorkingGasEfficiency": "Read" - }, - "name": "StructureStirlingEngine", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Gas Canister", - "typ": "GasCanister" - } - ], - "title": "Stirling Engine", - "transmitter": false - }, - "StructureStorageLocker": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -793623899, - "logic": { - "Lock": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureStorageLocker", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "10": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "11": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "12": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "13": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "14": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "15": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "16": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "17": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "18": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "19": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "20": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "21": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "22": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "23": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "24": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "25": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "26": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "27": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "28": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "29": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "3": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "4": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "5": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "6": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "7": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "8": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "9": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "10": "Read", - "11": "Read", - "12": "Read", - "13": "Read", - "14": "Read", - "15": "Read", - "16": "Read", - "17": "Read", - "18": "Read", - "19": "Read", - "2": "Read", - "20": "Read", - "21": "Read", - "22": "Read", - "23": "Read", - "24": "Read", - "25": "Read", - "26": "Read", - "27": "Read", - "28": "Read", - "29": "Read", - "3": "Read", - "4": "Read", - "5": "Read", - "6": "Read", - "7": "Read", - "8": "Read", - "9": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - } - ], - "title": "Locker", - "transmitter": false - }, - "StructureSuitStorage": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "2": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "3": { - "name": "Pipe Input2", - "role": "Input2", - "typ": "Pipe" - }, - "4": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - } - }, - "desc": "As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic.\nWhen powered and connected to Oxygen and Propellant, it will recharge the suit's batteries, refill the Canister (Oxygen) and your Filter (Nitrogen) Gas Canister. The wastetank will be pumped out to the pipe connected to the waste outlet.\nAll the rack's pipes must be connected or the unit will show an error state, but it will still charge the battery.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 255034731, - "logic": { - "Error": "Read", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureSuitStorage", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "Lock": "ReadWrite", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "On": "ReadWrite", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "PressureAir": "Read", - "PressureWaste": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "2": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Charge": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "ChargeRatio": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Class": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Lock": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "On": { - "0": "Read" - }, - "Open": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "Pressure": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "PressureAir": { - "1": "Read" - }, - "PressureWaste": { - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read", - "2": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read", - "2": "Read" - } - }, - "slots": [ - { - "name": "Helmet", - "typ": "Helmet" - }, - { - "name": "Suit", - "typ": "Suit" - }, - { - "name": "Back", - "typ": "Back" - } - ], - "title": "Suit Storage", - "transmitter": false - }, - "StructureTankBig": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": -1606848156, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureTankBig", - "receiver": false, - "title": "Large Tank", - "transmitter": false - }, - "StructureTankBigInsulated": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 1280378227, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureTankBigInsulated", - "receiver": false, - "title": "Tank Big (Insulated)", - "transmitter": false - }, - "StructureTankConnector": { - "desc": "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network.", - "hash": -1276379454, - "name": "StructureTankConnector", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - } - ], - "title": "Tank Connector", - "transmitter": false - }, - "StructureTankConnectorLiquid": { - "desc": "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network.", - "hash": 1331802518, - "name": "StructureTankConnectorLiquid", - "receiver": false, - "slots": [ - { - "name": "Portable Slot", - "typ": "None" - } - ], - "title": "Liquid Tank Connector", - "transmitter": false - }, - "StructureTankSmall": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 1013514688, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureTankSmall", - "receiver": false, - "title": "Small Tank", - "transmitter": false - }, - "StructureTankSmallAir": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 955744474, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureTankSmallAir", - "receiver": false, - "title": "Small Tank (Air)", - "transmitter": false - }, - "StructureTankSmallFuel": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 2102454415, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureTankSmallFuel", - "receiver": false, - "title": "Small Tank (Fuel)", - "transmitter": false - }, - "StructureTankSmallInsulated": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": true, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": true - } - }, - "hash": 272136332, - "logic": { - "Combustion": "Read", - "Maximum": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Ratio": "Read", - "RatioCarbonDioxide": "Read", - "RatioHydrogen": "Read", - "RatioLiquidCarbonDioxide": "Read", - "RatioLiquidHydrogen": "Read", - "RatioLiquidNitrogen": "Read", - "RatioLiquidNitrousOxide": "Read", - "RatioLiquidOxygen": "Read", - "RatioLiquidPollutant": "Read", - "RatioLiquidVolatiles": "Read", - "RatioNitrogen": "Read", - "RatioNitrousOxide": "Read", - "RatioOxygen": "Read", - "RatioPollutant": "Read", - "RatioPollutedWater": "Read", - "RatioSteam": "Read", - "RatioVolatiles": "Read", - "RatioWater": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite", - "Temperature": "Read", - "TotalMoles": "Read", - "Volume": "Read", - "VolumeOfLiquid": "Read" - }, - "name": "StructureTankSmallInsulated", - "receiver": false, - "title": "Tank Small (Insulated)", - "transmitter": false - }, - "StructureToolManufactory": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "No mission can be completed without the proper tools. The Norsec ThuulDek manufactory can fabricate almost any tool or hand-held device a Stationeer may need to complete their mission, as well as a variety of delightful paints.\nUpgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds.", - "device": { - "atmosphere": false, - "reagents": true, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": true - } - }, - "hash": -465741100, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "CompletionRatio": "Read", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Reagents": "Read", - "RecipeHash": "ReadWrite", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureToolManufactory", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {} - }, - "slots": [ - { - "name": "Import", - "typ": "Ingot" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Tool Manufactory", - "transmitter": false - }, - "StructureTorpedoRack": { - "desc": "", - "hash": 1473807953, - "name": "StructureTorpedoRack", - "receiver": false, - "slots": [ - { - "name": "Torpedo", - "typ": "Torpedo" - }, - { - "name": "Torpedo", - "typ": "Torpedo" - }, - { - "name": "Torpedo", - "typ": "Torpedo" - }, - { - "name": "Torpedo", - "typ": "Torpedo" - }, - { - "name": "Torpedo", - "typ": "Torpedo" - }, - { - "name": "Torpedo", - "typ": "Torpedo" - }, - { - "name": "Torpedo", - "typ": "Torpedo" - }, - { - "name": "Torpedo", - "typ": "Torpedo" - } - ], - "title": "Torpedo Rack", - "transmitter": false - }, - "StructureTraderWaypoint": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1570931620, - "logic": { - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureTraderWaypoint", - "receiver": false, - "title": "Trader Waypoint", - "transmitter": false - }, - "StructureTransformer": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - }, - "2": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "The large Norsec transformer is a critical component of extended electrical networks, controlling the maximum power that will flow down a cable. To prevent overloading, output can be set from 0 to 50,000W. \nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1423212473, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureTransformer", - "receiver": false, - "title": "Transformer (Large)", - "transmitter": false - }, - "StructureTransformerMedium": { - "conn": { - "0": { - "name": "Power Input", - "role": "Input", - "typ": "Power" - }, - "1": { - "name": "Power And Data Output", - "role": "Output", - "typ": "PowerAndData" - } - }, - "desc": "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1065725831, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureTransformerMedium", - "receiver": false, - "title": "Transformer (Medium)", - "transmitter": false - }, - "StructureTransformerMediumReversed": { - "conn": { - "0": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - }, - "1": { - "name": "Power And Data Input", - "role": "Input", - "typ": "PowerAndData" - } - }, - "desc": "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 833912764, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureTransformerMediumReversed", - "receiver": false, - "title": "Transformer Reversed (Medium)", - "transmitter": false - }, - "StructureTransformerSmall": { - "conn": { - "0": { - "name": "Power And Data Input", - "role": "Input", - "typ": "PowerAndData" - }, - "1": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - } - }, - "desc": "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -890946730, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureTransformerSmall", - "receiver": false, - "title": "Transformer (Small)", - "transmitter": false - }, - "StructureTransformerSmallReversed": { - "conn": { - "0": { - "name": "Power Output", - "role": "Output", - "typ": "Power" - }, - "1": { - "name": "Power And Data Input", - "role": "Input", - "typ": "PowerAndData" - } - }, - "desc": "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1054059374, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureTransformerSmallReversed", - "receiver": false, - "title": "Transformer Reversed (Small)", - "transmitter": false - }, - "StructureTurbineGenerator": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1282191063, - "logic": { - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureTurbineGenerator", - "receiver": false, - "title": "Turbine Generator", - "transmitter": false - }, - "StructureTurboVolumePump": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "2": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "3": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - } - }, - "desc": "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1310794736, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Right", - "1": "Left" - }, - "name": "StructureTurboVolumePump", - "receiver": false, - "title": "Turbo Volume Pump (Gas)", - "transmitter": false - }, - "StructureUnloader": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - } - }, - "desc": "The Xigo Re:Gurge is a handy unit for unloading any items inserted into it, and feeding them into a chute network. For instance, if you add a full Mining Belt, the Re:Gurge will empty a mining belt of its contents, insert them into the chute network, then insert the mining belt itself. A Sorter is recommended to reclaim the mining belt.\n\nOutput = 0 exporting the main item\nOutput = 1 exporting items inside and eventually the main item.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 750118160, - "logic": { - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Output": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "Automatic", - "1": "Logic" - }, - "name": "StructureUnloader", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - } - ], - "title": "Unloader", - "transmitter": false - }, - "StructureUprightWindTurbine": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "Norsec's basic wind turbine is an easily fabricated, rapidly deployed design that is strong enough to withstand the worst that environments can throw at it. \nWhile the wind turbine is optimized to produce power even on low atmosphere worlds (up to 200W), it performs best in denser environments. Output varies with wind speed, and during storms, may increase dramatically (up to 800W), so be careful to design your power networks with that in mind.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1622183451, - "logic": { - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureUprightWindTurbine", - "receiver": false, - "title": "Upright Wind Turbine", - "transmitter": false - }, - "StructureValve": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Pipe" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Pipe" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -692036078, - "logic": { - "Maximum": "Read", - "On": "ReadWrite", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureValve", - "receiver": false, - "title": "Valve", - "transmitter": false - }, - "StructureVendingMachine": { - "conn": { - "0": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - }, - "1": { - "name": "Chute Output", - "role": "Output", - "typ": "Chute" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "The Xigo-designed 'Slot Mate' vending machine allows storage of almost any item, while also operating as a distribution point for working with Traders. You cannot trade without a vending machine, or its more advanced equivalent, the Refrigerated Vending Machine. Each vending machine can hold up to 100 stacks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -443130773, - "logic": { - "Activate": "ReadWrite", - "ClearMemory": "Write", - "Error": "Read", - "ExportCount": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequestHash": "ReadWrite", - "RequiredPower": "Read" - }, - "name": "StructureVendingMachine", - "receiver": false, - "slotlogic": { - "0": {}, - "1": {}, - "10": {}, - "100": {}, - "101": {}, - "11": {}, - "12": {}, - "13": {}, - "14": {}, - "15": {}, - "16": {}, - "17": {}, - "18": {}, - "19": {}, - "2": {}, - "20": {}, - "21": {}, - "22": {}, - "23": {}, - "24": {}, - "25": {}, - "26": {}, - "27": {}, - "28": {}, - "29": {}, - "3": {}, - "30": {}, - "31": {}, - "32": {}, - "33": {}, - "34": {}, - "35": {}, - "36": {}, - "37": {}, - "38": {}, - "39": {}, - "4": {}, - "40": {}, - "41": {}, - "42": {}, - "43": {}, - "44": {}, - "45": {}, - "46": {}, - "47": {}, - "48": {}, - "49": {}, - "5": {}, - "50": {}, - "51": {}, - "52": {}, - "53": {}, - "54": {}, - "55": {}, - "56": {}, - "57": {}, - "58": {}, - "59": {}, - "6": {}, - "60": {}, - "61": {}, - "62": {}, - "63": {}, - "64": {}, - "65": {}, - "66": {}, - "67": {}, - "68": {}, - "69": {}, - "7": {}, - "70": {}, - "71": {}, - "72": {}, - "73": {}, - "74": {}, - "75": {}, - "76": {}, - "77": {}, - "78": {}, - "79": {}, - "8": {}, - "80": {}, - "81": {}, - "82": {}, - "83": {}, - "84": {}, - "85": {}, - "86": {}, - "87": {}, - "88": {}, - "89": {}, - "9": {}, - "90": {}, - "91": {}, - "92": {}, - "93": {}, - "94": {}, - "95": {}, - "96": {}, - "97": {}, - "98": {}, - "99": {} - }, - "slots": [ - { - "name": "Import", - "typ": "None" - }, - { - "name": "Export", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - }, - { - "name": "Storage", - "typ": "None" - } - ], - "title": "Vending Machine", - "transmitter": false - }, - "StructureVolumePump": { - "conn": { - "0": { - "name": "Pipe Output", - "role": "Output", - "typ": "Pipe" - }, - "1": { - "name": "Pipe Input", - "role": "Input", - "typ": "Pipe" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -321403609, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureVolumePump", - "receiver": false, - "title": "Volume Pump", - "transmitter": false - }, - "StructureWallArch": { - "desc": "", - "hash": -858143148, - "name": "StructureWallArch", - "receiver": false, - "title": "Wall (Arch)", - "transmitter": false - }, - "StructureWallArchArrow": { - "desc": "", - "hash": 1649708822, - "name": "StructureWallArchArrow", - "receiver": false, - "title": "Wall (Arch Arrow)", - "transmitter": false - }, - "StructureWallArchCornerRound": { - "desc": "", - "hash": 1794588890, - "name": "StructureWallArchCornerRound", - "receiver": false, - "title": "Wall (Arch Corner Round)", - "transmitter": false - }, - "StructureWallArchCornerSquare": { - "desc": "", - "hash": -1963016580, - "name": "StructureWallArchCornerSquare", - "receiver": false, - "title": "Wall (Arch Corner Square)", - "transmitter": false - }, - "StructureWallArchCornerTriangle": { - "desc": "", - "hash": 1281911841, - "name": "StructureWallArchCornerTriangle", - "receiver": false, - "title": "Wall (Arch Corner Triangle)", - "transmitter": false - }, - "StructureWallArchPlating": { - "desc": "", - "hash": 1182510648, - "name": "StructureWallArchPlating", - "receiver": false, - "title": "Wall (Arch Plating)", - "transmitter": false - }, - "StructureWallArchTwoTone": { - "desc": "", - "hash": 782529714, - "name": "StructureWallArchTwoTone", - "receiver": false, - "title": "Wall (Arch Two Tone)", - "transmitter": false - }, - "StructureWallCooler": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Pipe" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The Xigo Freezy Boi wall cooler complements the wall heater, which can only raise the temperature. The wall cooler functions by drawing heat from the surrounding atmosphere and adding that heat into its pipe network.\nIn order to run the wall cooler properly, you will need to connect pipes to the wall cooler and fill the connected pipe network with any type of gas. The gas's heat capacity and volume will determine how fast it reacts to temperature changes.\n\nEFFICIENCY\nThe higher the difference in temperature between the gas stored in the pipes and the room, the less efficient the wall cooler will be. So to keep the wall cooler running at an acceptable efficiency you will need to get rid of the heat that accumulates in the pipes connected to it. A common practice would be to run the pipes to the outside and use radiators on the outside section of the pipes to get rid of the heat.\nThe less efficient the wall cooler, the less power it consumes. It will consume 1010W at max efficiency. The wall cooler can be controlled by logic chips to run when the temperature hits a certain degree.\nERRORS\nIf the wall cooler is flashing an error then it is missing one of the following:\n\n- Pipe connection to the wall cooler.\n- Gas in the connected pipes, or pressure is too low.\n- Atmosphere in the surrounding environment or pressure is too low.\n\nFor more information about how to control temperatures, consult the temperature control Guides page.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -739292323, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureWallCooler", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "DataDisk" - } - ], - "title": "Wall Cooler", - "transmitter": false - }, - "StructureWallFlat": { - "desc": "", - "hash": 1635864154, - "name": "StructureWallFlat", - "receiver": false, - "title": "Wall (Flat)", - "transmitter": false - }, - "StructureWallFlatCornerRound": { - "desc": "", - "hash": 898708250, - "name": "StructureWallFlatCornerRound", - "receiver": false, - "title": "Wall (Flat Corner Round)", - "transmitter": false - }, - "StructureWallFlatCornerSquare": { - "desc": "", - "hash": 298130111, - "name": "StructureWallFlatCornerSquare", - "receiver": false, - "title": "Wall (Flat Corner Square)", - "transmitter": false - }, - "StructureWallFlatCornerTriangle": { - "desc": "", - "hash": 2097419366, - "name": "StructureWallFlatCornerTriangle", - "receiver": false, - "title": "Wall (Flat Corner Triangle)", - "transmitter": false - }, - "StructureWallFlatCornerTriangleFlat": { - "desc": "", - "hash": -1161662836, - "name": "StructureWallFlatCornerTriangleFlat", - "receiver": false, - "title": "Wall (Flat Corner Triangle Flat)", - "transmitter": false - }, - "StructureWallGeometryCorner": { - "desc": "", - "hash": 1979212240, - "name": "StructureWallGeometryCorner", - "receiver": false, - "title": "Wall (Geometry Corner)", - "transmitter": false - }, - "StructureWallGeometryStreight": { - "desc": "", - "hash": 1049735537, - "name": "StructureWallGeometryStreight", - "receiver": false, - "title": "Wall (Geometry Straight)", - "transmitter": false - }, - "StructureWallGeometryT": { - "desc": "", - "hash": 1602758612, - "name": "StructureWallGeometryT", - "receiver": false, - "title": "Wall (Geometry T)", - "transmitter": false - }, - "StructureWallGeometryTMirrored": { - "desc": "", - "hash": -1427845483, - "name": "StructureWallGeometryTMirrored", - "receiver": false, - "title": "Wall (Geometry T Mirrored)", - "transmitter": false - }, - "StructureWallHeater": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "The Xigo wall heater is a simple device that can be installed on a wall or frame and connected to power. When switched on, it will start heating the surrounding environment. It consumes 1010W of power and can be controlled by logic chips to run when the temperature hits a certain level.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 24258244, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureWallHeater", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "DataDisk" - } - ], - "title": "Wall Heater", - "transmitter": false - }, - "StructureWallIron": { - "desc": "", - "hash": 1287324802, - "name": "StructureWallIron", - "receiver": false, - "title": "Iron Wall (Type 1)", - "transmitter": false - }, - "StructureWallIron02": { - "desc": "", - "hash": 1485834215, - "name": "StructureWallIron02", - "receiver": false, - "title": "Iron Wall (Type 2)", - "transmitter": false - }, - "StructureWallIron03": { - "desc": "", - "hash": 798439281, - "name": "StructureWallIron03", - "receiver": false, - "title": "Iron Wall (Type 3)", - "transmitter": false - }, - "StructureWallIron04": { - "desc": "", - "hash": -1309433134, - "name": "StructureWallIron04", - "receiver": false, - "title": "Iron Wall (Type 4)", - "transmitter": false - }, - "StructureWallLargePanel": { - "desc": "", - "hash": 1492930217, - "name": "StructureWallLargePanel", - "receiver": false, - "title": "Wall (Large Panel)", - "transmitter": false - }, - "StructureWallLargePanelArrow": { - "desc": "", - "hash": -776581573, - "name": "StructureWallLargePanelArrow", - "receiver": false, - "title": "Wall (Large Panel Arrow)", - "transmitter": false - }, - "StructureWallLight": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1860064656, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureWallLight", - "receiver": false, - "title": "Wall Light", - "transmitter": false - }, - "StructureWallLightBattery": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1306415132, - "logic": { - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureWallLightBattery", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Wall Light (Battery)", - "transmitter": false - }, - "StructureWallPaddedArch": { - "desc": "", - "hash": 1590330637, - "name": "StructureWallPaddedArch", - "receiver": false, - "title": "Wall (Padded Arch)", - "transmitter": false - }, - "StructureWallPaddedArchCorner": { - "desc": "", - "hash": -1126688298, - "name": "StructureWallPaddedArchCorner", - "receiver": false, - "title": "Wall (Padded Arch Corner)", - "transmitter": false - }, - "StructureWallPaddedArchLightFittingTop": { - "desc": "", - "hash": 1171987947, - "name": "StructureWallPaddedArchLightFittingTop", - "receiver": false, - "title": "Wall (Padded Arch Light Fitting Top)", - "transmitter": false - }, - "StructureWallPaddedArchLightsFittings": { - "desc": "", - "hash": -1546743960, - "name": "StructureWallPaddedArchLightsFittings", - "receiver": false, - "title": "Wall (Padded Arch Lights Fittings)", - "transmitter": false - }, - "StructureWallPaddedCorner": { - "desc": "", - "hash": -155945899, - "name": "StructureWallPaddedCorner", - "receiver": false, - "title": "Wall (Padded Corner)", - "transmitter": false - }, - "StructureWallPaddedCornerThin": { - "desc": "", - "hash": 1183203913, - "name": "StructureWallPaddedCornerThin", - "receiver": false, - "title": "Wall (Padded Corner Thin)", - "transmitter": false - }, - "StructureWallPaddedNoBorder": { - "desc": "", - "hash": 8846501, - "name": "StructureWallPaddedNoBorder", - "receiver": false, - "title": "Wall (Padded No Border)", - "transmitter": false - }, - "StructureWallPaddedNoBorderCorner": { - "desc": "", - "hash": 179694804, - "name": "StructureWallPaddedNoBorderCorner", - "receiver": false, - "title": "Wall (Padded No Border Corner)", - "transmitter": false - }, - "StructureWallPaddedThinNoBorder": { - "desc": "", - "hash": -1611559100, - "name": "StructureWallPaddedThinNoBorder", - "receiver": false, - "title": "Wall (Padded Thin No Border)", - "transmitter": false - }, - "StructureWallPaddedThinNoBorderCorner": { - "desc": "", - "hash": 1769527556, - "name": "StructureWallPaddedThinNoBorderCorner", - "receiver": false, - "title": "Wall (Padded Thin No Border Corner)", - "transmitter": false - }, - "StructureWallPaddedWindow": { - "desc": "", - "hash": 2087628940, - "name": "StructureWallPaddedWindow", - "receiver": false, - "title": "Wall (Padded Window)", - "transmitter": false - }, - "StructureWallPaddedWindowThin": { - "desc": "", - "hash": -37302931, - "name": "StructureWallPaddedWindowThin", - "receiver": false, - "title": "Wall (Padded Window Thin)", - "transmitter": false - }, - "StructureWallPadding": { - "desc": "", - "hash": 635995024, - "name": "StructureWallPadding", - "receiver": false, - "title": "Wall (Padding)", - "transmitter": false - }, - "StructureWallPaddingArchVent": { - "desc": "", - "hash": -1243329828, - "name": "StructureWallPaddingArchVent", - "receiver": false, - "title": "Wall (Padding Arch Vent)", - "transmitter": false - }, - "StructureWallPaddingLightFitting": { - "desc": "", - "hash": 2024882687, - "name": "StructureWallPaddingLightFitting", - "receiver": false, - "title": "Wall (Padding Light Fitting)", - "transmitter": false - }, - "StructureWallPaddingThin": { - "desc": "", - "hash": -1102403554, - "name": "StructureWallPaddingThin", - "receiver": false, - "title": "Wall (Padding Thin)", - "transmitter": false - }, - "StructureWallPlating": { - "desc": "", - "hash": 26167457, - "name": "StructureWallPlating", - "receiver": false, - "title": "Wall (Plating)", - "transmitter": false - }, - "StructureWallSmallPanelsAndHatch": { - "desc": "", - "hash": 619828719, - "name": "StructureWallSmallPanelsAndHatch", - "receiver": false, - "title": "Wall (Small Panels And Hatch)", - "transmitter": false - }, - "StructureWallSmallPanelsArrow": { - "desc": "", - "hash": -639306697, - "name": "StructureWallSmallPanelsArrow", - "receiver": false, - "title": "Wall (Small Panels Arrow)", - "transmitter": false - }, - "StructureWallSmallPanelsMonoChrome": { - "desc": "", - "hash": 386820253, - "name": "StructureWallSmallPanelsMonoChrome", - "receiver": false, - "title": "Wall (Small Panels Mono Chrome)", - "transmitter": false - }, - "StructureWallSmallPanelsOpen": { - "desc": "", - "hash": -1407480603, - "name": "StructureWallSmallPanelsOpen", - "receiver": false, - "title": "Wall (Small Panels Open)", - "transmitter": false - }, - "StructureWallSmallPanelsTwoTone": { - "desc": "", - "hash": 1709994581, - "name": "StructureWallSmallPanelsTwoTone", - "receiver": false, - "title": "Wall (Small Panels Two Tone)", - "transmitter": false - }, - "StructureWallVent": { - "desc": "Used to mix atmospheres passively between two walls.", - "hash": -1177469307, - "name": "StructureWallVent", - "receiver": false, - "title": "Wall Vent", - "transmitter": false - }, - "StructureWaterBottleFiller": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -1178961954, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureWaterBottleFiller", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "Open": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Pressure": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - }, - "Temperature": { - "0": "Read", - "1": "Read" - }, - "Volume": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - } - ], - "title": "Water Bottle Filler", - "transmitter": false - }, - "StructureWaterBottleFillerBottom": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 1433754995, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureWaterBottleFillerBottom", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "Open": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Pressure": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - }, - "Temperature": { - "0": "Read", - "1": "Read" - }, - "Volume": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - } - ], - "title": "Water Bottle Filler Bottom", - "transmitter": false - }, - "StructureWaterBottleFillerPowered": { - "conn": { - "0": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -756587791, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureWaterBottleFillerPowered", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "Open": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Pressure": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - }, - "Temperature": { - "0": "Read", - "1": "Read" - }, - "Volume": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - } - ], - "title": "Waterbottle Filler", - "transmitter": false - }, - "StructureWaterBottleFillerPoweredBottom": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PipeLiquid" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": false, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 1986658780, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureWaterBottleFillerPoweredBottom", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "1": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Open": "ReadWrite", - "PrefabHash": "Read", - "Pressure": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read", - "Temperature": "Read", - "Volume": "Read" - }, - "Class": { - "0": "Read", - "1": "Read" - }, - "Damage": { - "0": "Read", - "1": "Read" - }, - "MaxQuantity": { - "0": "Read", - "1": "Read" - }, - "OccupantHash": { - "0": "Read", - "1": "Read" - }, - "Occupied": { - "0": "Read", - "1": "Read" - }, - "Open": { - "0": "Read", - "1": "Read" - }, - "PrefabHash": { - "0": "Read", - "1": "Read" - }, - "Pressure": { - "0": "Read", - "1": "Read" - }, - "Quantity": { - "0": "Read", - "1": "Read" - }, - "ReferenceId": { - "0": "Read", - "1": "Read" - }, - "SortingClass": { - "0": "Read", - "1": "Read" - }, - "Temperature": { - "0": "Read", - "1": "Read" - }, - "Volume": { - "0": "Read", - "1": "Read" - } - }, - "slots": [ - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - }, - { - "name": "Bottle Slot", - "typ": "LiquidBottle" - } - ], - "title": "Waterbottle Filler", - "transmitter": false - }, - "StructureWaterDigitalValve": { - "conn": { - "0": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "2": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -517628750, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureWaterDigitalValve", - "receiver": false, - "title": "Liquid Digital Valve", - "transmitter": false - }, - "StructureWaterPipeMeter": { - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": 433184168, - "logic": { - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureWaterPipeMeter", - "receiver": false, - "title": "Liquid Pipe Meter", - "transmitter": false - }, - "StructureWaterPurifier": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Pipe Liquid Input", - "role": "Input", - "typ": "PipeLiquid" - }, - "2": { - "name": "Pipe Liquid Output", - "role": "Output", - "typ": "PipeLiquid" - }, - "3": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "4": { - "name": "Chute Input", - "role": "Input", - "typ": "Chute" - } - }, - "desc": "Cleans Polluted Water and outputs Water. The purification process requires Charcoal which can be added to the machine via the import bin. The procesing throughput can be improved by increasing the gas pressure of the input pipe relative to the gas pressure of the output pipe.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": 887383294, - "logic": { - "ClearMemory": "Write", - "Error": "Read", - "ImportCount": "Read", - "Lock": "ReadWrite", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "name": "StructureWaterPurifier", - "receiver": false, - "slotlogic": { - "0": {} - }, - "slots": [ - { - "name": "Import", - "typ": "Ore" - } - ], - "title": "Water Purifier", - "transmitter": false - }, - "StructureWaterWallCooler": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "PipeLiquid" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "PowerAndData" - } - }, - "desc": "", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": true, - "mode": false, - "onoff": true, - "open": false - } - }, - "hash": -1369060582, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Maximum": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "Ratio": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "name": "StructureWaterWallCooler", - "receiver": false, - "slotlogic": { - "0": { - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "PrefabHash": "Read", - "Quantity": "Read", - "ReferenceId": "Read", - "SortingClass": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "PrefabHash": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - }, - "SortingClass": { - "0": "Read" - } - }, - "slots": [ - { - "name": "", - "typ": "DataDisk" - } - ], - "title": "Liquid Wall Cooler", - "transmitter": false - }, - "StructureWeatherStation": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "0.NoStorm\n1.StormIncoming\n2.InStorm", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": true, - "color": false, - "lock": true, - "mode": true, - "onoff": true, - "open": false - } - }, - "hash": 1997212478, - "logic": { - "Activate": "ReadWrite", - "Error": "Read", - "Lock": "ReadWrite", - "Mode": "Read", - "NextWeatherEventTime": "Read", - "On": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read" - }, - "modes": { - "0": "NoStorm", - "1": "StormIncoming", - "2": "InStorm" - }, - "name": "StructureWeatherStation", - "receiver": false, - "title": "Weather Station", - "transmitter": false - }, - "StructureWindTurbine": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Power" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Data" - } - }, - "desc": "The Stationeers wind turbine was first designed by Norsec atmospheric engineers, looking to create a wind-driven power generation system that would operate even on exceedingly low atmosphere worlds. The ultra-light blades respond to exceedingly low atmospheric densities, while being strong enough to function even under huge strain in much more demanding environments.\nWhile the wind turbine is optimized to produce power (up to 500W) even on low atmosphere worlds, it performs best in denser environments. Output varies with wind speed and, during storms, may increase dramatically (up to 10,000W), so be careful to design your power networks with that in mind.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": false, - "onoff": false, - "open": false - } - }, - "hash": -2082355173, - "logic": { - "PowerGeneration": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read" - }, - "name": "StructureWindTurbine", - "receiver": false, - "title": "Wind Turbine", - "transmitter": false - }, - "StructureWindowShutter": { - "conn": { - "0": { - "name": "Connection", - "role": "None", - "typ": "Data" - }, - "1": { - "name": "Connection", - "role": "None", - "typ": "Power" - } - }, - "desc": "For those special, private moments, a window that can be closed to prying eyes. \n \nWhen closed, has the heat transfer characteristics of a basic wall. Requires power, and can be connected to logic systems.", - "device": { - "atmosphere": false, - "reagents": false, - "states": { - "activate": false, - "color": false, - "lock": false, - "mode": true, - "onoff": true, - "open": true - } - }, - "hash": 2056377335, - "logic": { - "Error": "Read", - "Idle": "Read", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "PrefabHash": "Read", - "ReferenceId": "Read", - "RequiredPower": "Read", - "Setting": "ReadWrite" - }, - "modes": { - "0": "Operate", - "1": "Logic" - }, - "name": "StructureWindowShutter", - "receiver": false, - "title": "Window Shutter", - "transmitter": false - }, - "ToolPrinterMod": { - "desc": "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options.", - "hash": 1700018136, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ToolPrinterMod", - "receiver": false, - "title": "Tool Printer Mod", - "transmitter": false - }, - "ToyLuna": { - "desc": "", - "hash": 94730034, - "item": { - "slotclass": "None", - "sorting": "Default" - }, - "name": "ToyLuna", - "receiver": false, - "title": "Toy Luna", - "transmitter": false - }, - "UniformCommander": { - "desc": "", - "hash": -2083426457, - "item": { - "slotclass": "Uniform", - "sorting": "Clothing" - }, - "name": "UniformCommander", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "Access Card", - "typ": "AccessCard" - }, - { - "name": "Access Card", - "typ": "AccessCard" - }, - { - "name": "Credit Card", - "typ": "CreditCard" - } - ], - "title": "Uniform Commander", - "transmitter": false - }, - "UniformMarine": { - "desc": "", - "hash": -48342840, - "item": { - "slotclass": "Uniform", - "sorting": "Clothing" - }, - "name": "UniformMarine", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "Access Card", - "typ": "AccessCard" - }, - { - "name": "Credit Card", - "typ": "CreditCard" - } - ], - "title": "Marine Uniform", - "transmitter": false - }, - "UniformOrangeJumpSuit": { - "desc": "", - "hash": 810053150, - "item": { - "slotclass": "Uniform", - "sorting": "Clothing" - }, - "name": "UniformOrangeJumpSuit", - "receiver": false, - "slots": [ - { - "name": "", - "typ": "None" - }, - { - "name": "", - "typ": "None" - }, - { - "name": "Access Card", - "typ": "AccessCard" - }, - { - "name": "Credit Card", - "typ": "CreditCard" - } - ], - "title": "Jump Suit (Orange)", - "transmitter": false - }, - "WeaponEnergy": { - "desc": "", - "hash": 789494694, - "item": { - "slotclass": "None", - "sorting": "Tools" - }, - "logic": { - "On": "ReadWrite", - "ReferenceId": "Read" - }, - "name": "WeaponEnergy", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Weapon Energy", - "transmitter": false - }, - "WeaponPistolEnergy": { - "desc": "0.Stun\n1.Kill", - "hash": -385323479, - "item": { - "slotclass": "None", - "sorting": "Tools" - }, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Stun", - "1": "Kill" - }, - "name": "WeaponPistolEnergy", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Energy Pistol", - "transmitter": false - }, - "WeaponRifleEnergy": { - "desc": "0.Stun\n1.Kill", - "hash": 1154745374, - "item": { - "slotclass": "None", - "sorting": "Tools" - }, - "logic": { - "Error": "Read", - "Lock": "ReadWrite", - "Mode": "ReadWrite", - "On": "ReadWrite", - "Open": "ReadWrite", - "Power": "Read", - "ReferenceId": "Read" - }, - "modes": { - "0": "Stun", - "1": "Kill" - }, - "name": "WeaponRifleEnergy", - "receiver": false, - "slotlogic": { - "0": { - "Charge": "Read", - "ChargeRatio": "Read", - "Class": "Read", - "Damage": "Read", - "MaxQuantity": "Read", - "OccupantHash": "Read", - "Occupied": "Read", - "Quantity": "Read", - "ReferenceId": "Read" - }, - "Charge": { - "0": "Read" - }, - "ChargeRatio": { - "0": "Read" - }, - "Class": { - "0": "Read" - }, - "Damage": { - "0": "Read" - }, - "MaxQuantity": { - "0": "Read" - }, - "OccupantHash": { - "0": "Read" - }, - "Occupied": { - "0": "Read" - }, - "Quantity": { - "0": "Read" - }, - "ReferenceId": { - "0": "Read" - } - }, - "slots": [ - { - "name": "Battery", - "typ": "Battery" - } - ], - "title": "Energy Rifle", - "transmitter": false - }, - "WeaponTorpedo": { - "desc": "", - "hash": -1102977898, - "item": { - "slotclass": "Torpedo", - "sorting": "Default" - }, - "name": "WeaponTorpedo", - "receiver": false, - "title": "Torpedo", - "transmitter": false - } - }, - "devices": [ - "StructureDrinkingFountain", - "StructureAccessBridge", - "StructureLiquidDrain", - "StructureActiveVent", - "StructureAdvancedComposter", - "StructureAdvancedFurnace", - "StructureAdvancedPackagingMachine", - "StructureAirConditioner", - "StructureAirlock", - "StructureArcFurnace", - "StructureAreaPowerControlReversed", - "StructureAreaPowerControl", - "StructureAutolathe", - "StructureAutomatedOven", - "StructureAutoMinerSmall", - "StructureBatterySmall", - "StructureBackPressureRegulator", - "StructureBasketHoop", - "StructureLogicBatchReader", - "StructureLogicBatchSlotReader", - "StructureLogicBatchWriter", - "StructureBatteryMedium", - "StructureBatteryCharger", - "StructureBatteryChargerSmall", - "StructureBeacon", - "StructureAngledBench", - "StructureBench1", - "StructureFlatBench", - "StructureBench3", - "StructureBench2", - "StructureBench4", - "StructureBlastDoor", - "StructureBlockBed", - "StructureLogicButton", - "StructureCableAnalysizer", - "StructureCamera", - "StructureCargoStorageMedium", - "StructureCargoStorageSmall", - "StructureCentrifuge", - "StructureChair", - "StructureChairBacklessDouble", - "StructureChairBacklessSingle", - "StructureChairBoothCornerLeft", - "StructureChairBoothMiddle", - "StructureChairRectangleDouble", - "StructureChairRectangleSingle", - "StructureChairThickDouble", - "StructureChairThickSingle", - "StructureChuteBin", - "StructureChuteDigitalFlipFlopSplitterLeft", - "StructureChuteDigitalFlipFlopSplitterRight", - "StructureChuteDigitalValveLeft", - "StructureChuteDigitalValveRight", - "StructureChuteInlet", - "StructureChuteOutlet", - "StructureCombustionCentrifuge", - "StructureCompositeDoor", - "CompositeRollCover", - "StructureComputer", - "StructureCondensationChamber", - "StructureCondensationValve", - "StructureConsole", - "StructureConsoleDual", - "StructureConsoleMonitor", - "StructureControlChair", - "StructureCornerLocker", - "StructurePassthroughHeatExchangerGasToGas", - "StructurePassthroughHeatExchangerGasToLiquid", - "StructurePassthroughHeatExchangerLiquidToLiquid", - "StructureCryoTubeHorizontal", - "StructureCryoTubeVertical", - "StructureCryoTube", - "StructureDaylightSensor", - "StructureDeepMiner", - "DeviceStepUnit", - "StructureLogicDial", - "StructureDigitalValve", - "StructureDiodeSlide", - "StructureDockPortSide", - "StructureSleeperVerticalDroid", - "StructureElectrolyzer", - "StructureElectronicsPrinter", - "StructureElevatorLevelIndustrial", - "StructureElevatorLevelFront", - "StructureElevatorShaftIndustrial", - "StructureElevatorShaft", - "StructureEvaporationChamber", - "StructureExpansionValve", - "StructureFiltration", - "StructureFlashingLight", - "StructureFridgeBig", - "StructureFridgeSmall", - "StructureFurnace", - "StructureCableFuse100k", - "StructureCableFuse1k", - "StructureCableFuse50k", - "StructureCableFuse5k", - "StructureMediumRocketGasFuelTank", - "StructureCapsuleTankGas", - "StructureGasGenerator", - "StructureGasMixer", - "StructureGasSensor", - "StructureGasTankStorage", - "StructureSolidFuelGenerator", - "StructureGlassDoor", - "StructureGrowLight", - "H2Combustor", - "StructureHarvie", - "StructureHeatExchangerGastoGas", - "StructureHeatExchangerLiquidtoLiquid", - "StructureHeatExchangeLiquidtoGas", - "StructureHydraulicPipeBender", - "StructureHydroponicsTrayData", - "StructureHydroponicsStation", - "StructureCircuitHousing", - "StructureIceCrusher", - "StructureIgniter", - "StructureEmergencyButton", - "StructureLiquidTankBigInsulated", - "StructureLiquidTankSmallInsulated", - "StructureInteriorDoorGlass", - "StructureInteriorDoorPadded", - "StructureInteriorDoorPaddedThin", - "StructureInteriorDoorTriangle", - "StructureKlaxon", - "StructureDiode", - "StructureConsoleLED1x3", - "StructureConsoleLED1x2", - "StructureConsoleLED5", - "Landingpad_DataConnectionPiece", - "Landingpad_GasConnectorInwardPiece", - "Landingpad_GasConnectorOutwardPiece", - "Landingpad_LiquidConnectorInwardPiece", - "Landingpad_LiquidConnectorOutwardPiece", - "Landingpad_ThreshholdPiece", - "StructureLargeDirectHeatExchangeLiquidtoLiquid", - "StructureLargeDirectHeatExchangeGastoGas", - "StructureLargeDirectHeatExchangeGastoLiquid", - "StructureLargeExtendableRadiator", - "StructureLargeHangerDoor", - "StructureLargeSatelliteDish", - "StructureTankBig", - "StructureLogicSwitch", - "StructureLightRound", - "StructureLightRoundAngled", - "StructureLightRoundSmall", - "StructureBackLiquidPressureRegulator", - "StructureMediumRocketLiquidFuelTank", - "StructureCapsuleTankLiquid", - "StructureWaterDigitalValve", - "StructureLiquidPipeAnalyzer", - "StructureLiquidPipeRadiator", - "StructureWaterPipeMeter", - "StructureLiquidTankBig", - "StructureLiquidTankSmall", - "StructureLiquidTankStorage", - "StructureLiquidValve", - "StructureLiquidVolumePump", - "StructureLiquidPressureRegulator", - "StructureWaterWallCooler", - "StructureStorageLocker", - "StructureLockerSmall", - "StructureLogicCompare", - "StructureLogicGate", - "StructureLogicHashGen", - "StructureLogicMath", - "StructureLogicMemory", - "StructureLogicMinMax", - "StructureLogicMirror", - "StructureLogicReader", - "StructureLogicRocketDownlink", - "StructureLogicSelect", - "StructureLogicSorter", - "LogicStepSequencer8", - "StructureLogicTransmitter", - "StructureLogicRocketUplink", - "StructureLogicWriter", - "StructureLogicWriterSwitch", - "DeviceLfoVolume", - "StructureManualHatch", - "StructureLogicMathUnary", - "StructureMediumConvectionRadiator", - "StructurePassiveLargeRadiatorGas", - "StructureMediumConvectionRadiatorLiquid", - "StructurePassiveLargeRadiatorLiquid", - "StructureMediumHangerDoor", - "StructureMediumRadiator", - "StructureMediumRadiatorLiquid", - "StructureSatelliteDish", - "StructurePowerTransmitterReceiver", - "StructurePowerTransmitter", - "StructureMotionSensor", - "StructureNitrolyzer", - "StructureHorizontalAutoMiner", - "StructureOccupancySensor", - "StructurePipeOneWayValve", - "StructureLiquidPipeOneWayValve", - "StructureOverheadShortCornerLocker", - "StructureOverheadShortLocker", - "StructurePassiveLiquidDrain", - "PassiveSpeaker", - "StructurePipeAnalysizer", - "StructurePipeRadiator", - "StructurePipeHeater", - "StructureLiquidPipeHeater", - "StructurePipeIgniter", - "StructurePipeLabel", - "StructurePipeMeter", - "StructurePipeRadiatorFlat", - "StructurePipeRadiatorFlatLiquid", - "StructurePortablesConnector", - "StructurePowerConnector", - "StructurePowerTransmitterOmni", - "StructureBench", - "StructurePoweredVent", - "StructurePoweredVentLarge", - "StructurePressurantValve", - "StructurePressureFedGasEngine", - "StructurePressureFedLiquidEngine", - "StructurePressureRegulator", - "StructureProximitySensor", - "StructureGovernedGasEngine", - "StructurePumpedLiquidEngine", - "StructurePurgeValve", - "StructureLogicReagentReader", - "StructureRecycler", - "StructureRefrigeratedVendingMachine", - "StructureResearchMachine", - "StructureRocketAvionics", - "StructureRocketCelestialTracker", - "StructureRocketCircuitHousing", - "StructureRocketEngineTiny", - "StructureRocketManufactory", - "StructureRocketMiner", - "StructureRocketScanner", - "StructureSDBHopper", - "StructureSDBHopperAdvanced", - "StructureSDBSilo", - "StructureSecurityPrinter", - "StructureShelfMedium", - "StructureShortCornerLocker", - "StructureShortLocker", - "StructureShower", - "StructureShowerPowered", - "StructureSign1x1", - "StructureSign2x1", - "StructureSingleBed", - "StructureSleeper", - "StructureSleeperLeft", - "StructureSleeperRight", - "StructureSleeperVertical", - "StructureLogicSlotReader", - "StructureSmallDirectHeatExchangeGastoGas", - "StructureSmallDirectHeatExchangeLiquidtoGas", - "StructureSmallDirectHeatExchangeLiquidtoLiquid", - "StructureAirlockGate", - "StructureSmallSatelliteDish", - "StructureTankSmall", - "StructureTankSmallAir", - "StructureTankSmallFuel", - "StructureSolarPanel", - "StructureSolarPanel45", - "StructureSolarPanelDual", - "StructureSolarPanelFlat", - "StructureSolarPanel45Reinforced", - "StructureSolarPanelDualReinforced", - "StructureSolarPanelFlatReinforced", - "StructureSolarPanelReinforced", - "StructureSorter", - "StructureStackerReverse", - "StructureStacker", - "StructureBattery", - "StructureBatteryLarge", - "StructureStirlingEngine", - "StopWatch", - "StructureSuitStorage", - "StructureLogicSwitch2", - "StructureTankBigInsulated", - "StructureTankSmallInsulated", - "StructureGroundBasedTelescope", - "StructureToolManufactory", - "StructureTraderWaypoint", - "StructureTransformer", - "StructureTransformerMedium", - "StructureTransformerSmall", - "StructureTransformerMediumReversed", - "StructureTransformerSmallReversed", - "StructureRocketTransformerSmall", - "StructurePressurePlateLarge", - "StructurePressurePlateMedium", - "StructurePressurePlateSmall", - "StructureTurbineGenerator", - "StructureTurboVolumePump", - "StructureLiquidTurboVolumePump", - "StructureChuteUmbilicalMale", - "StructureGasUmbilicalMale", - "StructureLiquidUmbilicalMale", - "StructurePowerUmbilicalMale", - "StructureChuteUmbilicalFemale", - "StructureGasUmbilicalFemale", - "StructureLiquidUmbilicalFemale", - "StructurePowerUmbilicalFemale", - "StructureChuteUmbilicalFemaleSide", - "StructureGasUmbilicalFemaleSide", - "StructureLiquidUmbilicalFemaleSide", - "StructurePowerUmbilicalFemaleSide", - "StructureUnloader", - "StructureUprightWindTurbine", - "StructureValve", - "StructureVendingMachine", - "StructureVolumePump", - "StructureWallCooler", - "StructureWallHeater", - "StructureWallLight", - "StructureWallLightBattery", - "StructureLightLongAngled", - "StructureLightLongWide", - "StructureLightLong", - "StructureWaterBottleFiller", - "StructureWaterBottleFillerBottom", - "StructureWaterPurifier", - "StructureWaterBottleFillerPowered", - "StructureWaterBottleFillerPoweredBottom", - "StructureWeatherStation", - "StructureWindTurbine", - "StructureWindowShutter" - ], - "enums": { - "AirCon": { - "Cold": 0, - "Hot": 1 - }, - "AirControl": { - "Draught": 4, - "None": 0, - "Offline": 1, - "Pressure": 2 - }, - "Color": { - "Black": 7, - "Blue": 0, - "Brown": 8, - "Gray": 1, - "Green": 2, - "Khaki": 9, - "Orange": 3, - "Pink": 10, - "Purple": 11, - "Red": 4, - "White": 6, - "Yellow": 5 - }, - "Condition": { - "Equals": 0, - "Greater": 1, - "Less": 2, - "NotEquals": 3 - }, - "DaylightSensorMode": { - "Default": 0, - "Horizontal": 1, - "Vertical": 2 - }, - "ElevatorMode": { - "Downward": 2, - "Stationary": 0, - "Upward": 1 - }, - "EntityState": { - "Alive": 0, - "Dead": 1, - "Decay": 3, - "Unconscious": 2 - }, - "GasType": { - "CarbonDioxide": 4, - "Hydrogen": 16384, - "LiquidCarbonDioxide": 2048, - "LiquidHydrogen": 32768, - "LiquidNitrogen": 128, - "LiquidNitrousOxide": 8192, - "LiquidOxygen": 256, - "LiquidPollutant": 4096, - "LiquidVolatiles": 512, - "Nitrogen": 2, - "NitrousOxide": 64, - "Oxygen": 1, - "Pollutant": 16, - "PollutedWater": 65536, - "Steam": 1024, - "Undefined": 0, - "Volatiles": 8, - "Water": 32 - }, - "LogicBatchMethod": { - "Average": 0, - "Maximum": 3, - "Minimum": 2, - "Sum": 1 - }, - "LogicReagentMode": { - "Contents": 0, - "Recipe": 2, - "Required": 1, - "TotalContents": 3 - }, - "LogicSlotType": { - "Charge": 10, - "ChargeRatio": 11, - "Class": 12, - "Damage": 4, - "Efficiency": 5, - "FilterType": 25, - "Growth": 7, - "Health": 6, - "LineNumber": 19, - "Lock": 23, - "Mature": 16, - "MaxQuantity": 15, - "None": 0, - "OccupantHash": 2, - "Occupied": 1, - "On": 22, - "Open": 21, - "PrefabHash": 17, - "Pressure": 8, - "PressureAir": 14, - "PressureWaste": 13, - "Quantity": 3, - "ReferenceId": 26, - "Seeding": 18, - "SortingClass": 24, - "Temperature": 9, - "Volume": 20 - }, - "LogicType": { - "Acceleration": 216, - "Activate": 9, - "AirRelease": 75, - "AlignmentError": 243, - "Apex": 238, - "AutoLand": 226, - "AutoShutOff": 218, - "BestContactFilter": 267, - "Bpm": 103, - "BurnTimeRemaining": 225, - "CelestialHash": 242, - "CelestialParentHash": 250, - "Channel0": 165, - "Channel1": 166, - "Channel2": 167, - "Channel3": 168, - "Channel4": 169, - "Channel5": 170, - "Channel6": 171, - "Channel7": 172, - "Charge": 11, - "Chart": 256, - "ChartedNavPoints": 259, - "ClearMemory": 62, - "CollectableGoods": 101, - "Color": 38, - "Combustion": 98, - "CombustionInput": 146, - "CombustionInput2": 147, - "CombustionLimiter": 153, - "CombustionOutput": 148, - "CombustionOutput2": 149, - "CompletionRatio": 61, - "ContactTypeId": 198, - "CurrentCode": 261, - "CurrentResearchPodType": 93, - "Density": 262, - "DestinationCode": 215, - "Discover": 255, - "DistanceAu": 244, - "DistanceKm": 249, - "DrillCondition": 240, - "DryMass": 220, - "Eccentricity": 247, - "ElevatorLevel": 40, - "ElevatorSpeed": 39, - "EntityState": 239, - "EnvironmentEfficiency": 104, - "Error": 4, - "ExhaustVelocity": 235, - "ExportCount": 63, - "ExportQuantity": 31, - "ExportSlotHash": 42, - "ExportSlotOccupant": 32, - "Filtration": 74, - "FlightControlRule": 236, - "Flush": 174, - "ForceWrite": 85, - "ForwardX": 227, - "ForwardY": 228, - "ForwardZ": 229, - "Fuel": 99, - "Harvest": 69, - "Horizontal": 20, - "HorizontalRatio": 34, - "Idle": 37, - "ImportCount": 64, - "ImportQuantity": 29, - "ImportSlotHash": 43, - "ImportSlotOccupant": 30, - "Inclination": 246, - "Index": 241, - "InterrogationProgress": 157, - "LineNumber": 173, - "Lock": 10, - "ManualResearchRequiredPod": 94, - "Mass": 219, - "Maximum": 23, - "MineablesInQueue": 96, - "MineablesInVicinity": 95, - "MinedQuantity": 266, - "MinimumWattsToContact": 163, - "Mode": 3, - "NavPoints": 258, - "NextWeatherEventTime": 97, - "None": 0, - "On": 28, - "Open": 2, - "OperationalTemperatureEfficiency": 150, - "OrbitPeriod": 245, - "Orientation": 230, - "Output": 70, - "PassedMoles": 234, - "Plant": 68, - "PlantEfficiency1": 52, - "PlantEfficiency2": 53, - "PlantEfficiency3": 54, - "PlantEfficiency4": 55, - "PlantGrowth1": 48, - "PlantGrowth2": 49, - "PlantGrowth3": 50, - "PlantGrowth4": 51, - "PlantHash1": 56, - "PlantHash2": 57, - "PlantHash3": 58, - "PlantHash4": 59, - "PlantHealth1": 44, - "PlantHealth2": 45, - "PlantHealth3": 46, - "PlantHealth4": 47, - "PositionX": 76, - "PositionY": 77, - "PositionZ": 78, - "Power": 1, - "PowerActual": 26, - "PowerGeneration": 65, - "PowerPotential": 25, - "PowerRequired": 36, - "PrefabHash": 84, - "Pressure": 5, - "PressureEfficiency": 152, - "PressureExternal": 7, - "PressureInput": 106, - "PressureInput2": 116, - "PressureInternal": 8, - "PressureOutput": 126, - "PressureOutput2": 136, - "PressureSetting": 71, - "Progress": 214, - "Quantity": 27, - "Ratio": 24, - "RatioCarbonDioxide": 15, - "RatioCarbonDioxideInput": 109, - "RatioCarbonDioxideInput2": 119, - "RatioCarbonDioxideOutput": 129, - "RatioCarbonDioxideOutput2": 139, - "RatioHydrogen": 252, - "RatioLiquidCarbonDioxide": 199, - "RatioLiquidCarbonDioxideInput": 200, - "RatioLiquidCarbonDioxideInput2": 201, - "RatioLiquidCarbonDioxideOutput": 202, - "RatioLiquidCarbonDioxideOutput2": 203, - "RatioLiquidHydrogen": 253, - "RatioLiquidNitrogen": 177, - "RatioLiquidNitrogenInput": 178, - "RatioLiquidNitrogenInput2": 179, - "RatioLiquidNitrogenOutput": 180, - "RatioLiquidNitrogenOutput2": 181, - "RatioLiquidNitrousOxide": 209, - "RatioLiquidNitrousOxideInput": 210, - "RatioLiquidNitrousOxideInput2": 211, - "RatioLiquidNitrousOxideOutput": 212, - "RatioLiquidNitrousOxideOutput2": 213, - "RatioLiquidOxygen": 183, - "RatioLiquidOxygenInput": 184, - "RatioLiquidOxygenInput2": 185, - "RatioLiquidOxygenOutput": 186, - "RatioLiquidOxygenOutput2": 187, - "RatioLiquidPollutant": 204, - "RatioLiquidPollutantInput": 205, - "RatioLiquidPollutantInput2": 206, - "RatioLiquidPollutantOutput": 207, - "RatioLiquidPollutantOutput2": 208, - "RatioLiquidVolatiles": 188, - "RatioLiquidVolatilesInput": 189, - "RatioLiquidVolatilesInput2": 190, - "RatioLiquidVolatilesOutput": 191, - "RatioLiquidVolatilesOutput2": 192, - "RatioNitrogen": 16, - "RatioNitrogenInput": 110, - "RatioNitrogenInput2": 120, - "RatioNitrogenOutput": 130, - "RatioNitrogenOutput2": 140, - "RatioNitrousOxide": 83, - "RatioNitrousOxideInput": 114, - "RatioNitrousOxideInput2": 124, - "RatioNitrousOxideOutput": 134, - "RatioNitrousOxideOutput2": 144, - "RatioOxygen": 14, - "RatioOxygenInput": 108, - "RatioOxygenInput2": 118, - "RatioOxygenOutput": 128, - "RatioOxygenOutput2": 138, - "RatioPollutant": 17, - "RatioPollutantInput": 111, - "RatioPollutantInput2": 121, - "RatioPollutantOutput": 131, - "RatioPollutantOutput2": 141, - "RatioPollutedWater": 254, - "RatioSteam": 193, - "RatioSteamInput": 194, - "RatioSteamInput2": 195, - "RatioSteamOutput": 196, - "RatioSteamOutput2": 197, - "RatioVolatiles": 18, - "RatioVolatilesInput": 112, - "RatioVolatilesInput2": 122, - "RatioVolatilesOutput": 132, - "RatioVolatilesOutput2": 142, - "RatioWater": 19, - "RatioWaterInput": 113, - "RatioWaterInput2": 123, - "RatioWaterOutput": 133, - "RatioWaterOutput2": 143, - "ReEntryAltitude": 237, - "Reagents": 13, - "RecipeHash": 41, - "ReferenceId": 217, - "RequestHash": 60, - "RequiredPower": 33, - "ReturnFuelCost": 100, - "Richness": 263, - "Rpm": 155, - "SemiMajorAxis": 248, - "Setting": 12, - "SettingInput": 91, - "SettingOutput": 92, - "SignalID": 87, - "SignalStrength": 86, - "Sites": 260, - "Size": 264, - "SizeX": 160, - "SizeY": 161, - "SizeZ": 162, - "SolarAngle": 22, - "SolarIrradiance": 176, - "SoundAlert": 175, - "Stress": 156, - "Survey": 257, - "TargetPadIndex": 158, - "TargetX": 88, - "TargetY": 89, - "TargetZ": 90, - "Temperature": 6, - "TemperatureDifferentialEfficiency": 151, - "TemperatureExternal": 73, - "TemperatureInput": 107, - "TemperatureInput2": 117, - "TemperatureOutput": 127, - "TemperatureOutput2": 137, - "TemperatureSetting": 72, - "Throttle": 154, - "Thrust": 221, - "ThrustToWeight": 223, - "Time": 102, - "TimeToDestination": 224, - "TotalMoles": 66, - "TotalMolesInput": 115, - "TotalMolesInput2": 125, - "TotalMolesOutput": 135, - "TotalMolesOutput2": 145, - "TotalQuantity": 265, - "TrueAnomaly": 251, - "VelocityMagnitude": 79, - "VelocityRelativeX": 80, - "VelocityRelativeY": 81, - "VelocityRelativeZ": 82, - "VelocityX": 231, - "VelocityY": 232, - "VelocityZ": 233, - "Vertical": 21, - "VerticalRatio": 35, - "Volume": 67, - "VolumeOfLiquid": 182, - "WattsReachingContact": 164, - "Weight": 222, - "WorkingGasEfficiency": 105 - }, - "PowerMode": { - "Charged": 4, - "Charging": 3, - "Discharged": 1, - "Discharging": 2, - "Idle": 0 - }, - "ReEntryProfile": { - "High": 3, - "Max": 4, - "Medium": 2, - "None": 0, - "Optimal": 1 - }, - "RobotMode": { - "Follow": 1, - "MoveToTarget": 2, - "None": 0, - "PathToTarget": 5, - "Roam": 3, - "StorageFull": 6, - "Unload": 4 - }, - "RocketMode": { - "Chart": 5, - "Discover": 4, - "Invalid": 0, - "Mine": 2, - "None": 1, - "Survey": 3 - }, - "SlotClass": { - "AccessCard": 22, - "Appliance": 18, - "Back": 3, - "Battery": 14, - "Belt": 16, - "Blocked": 38, - "Bottle": 25, - "Cartridge": 21, - "Circuit": 24, - "Circuitboard": 7, - "CreditCard": 28, - "DataDisk": 8, - "DirtCanister": 29, - "DrillHead": 35, - "Egg": 15, - "Entity": 13, - "Flare": 37, - "GasCanister": 5, - "GasFilter": 4, - "Glasses": 27, - "Helmet": 1, - "Ingot": 19, - "LiquidBottle": 32, - "LiquidCanister": 31, - "Magazine": 23, - "Motherboard": 6, - "None": 0, - "Ore": 10, - "Organ": 9, - "Plant": 11, - "ProgrammableChip": 26, - "ScanningHead": 36, - "SensorProcessingUnit": 30, - "SoundCartridge": 34, - "Suit": 2, - "SuitMod": 39, - "Tool": 17, - "Torpedo": 20, - "Uniform": 12, - "Wreckage": 33 - }, - "SorterInstruction": { - "FilterPrefabHashEquals": 1, - "FilterPrefabHashNotEquals": 2, - "FilterQuantityCompare": 5, - "FilterSlotTypeCompare": 4, - "FilterSortingClassCompare": 3, - "LimitNextExecutionByCount": 6, - "None": 0 - }, - "SortingClass": { - "Appliances": 6, - "Atmospherics": 7, - "Clothing": 5, - "Default": 0, - "Food": 4, - "Ices": 10, - "Kits": 1, - "Ores": 9, - "Resources": 3, - "Storage": 8, - "Tools": 2 - }, - "Sound": { - "AirlockCycling": 22, - "Alarm1": 45, - "Alarm10": 12, - "Alarm11": 13, - "Alarm12": 14, - "Alarm2": 1, - "Alarm3": 2, - "Alarm4": 3, - "Alarm5": 4, - "Alarm6": 5, - "Alarm7": 6, - "Alarm8": 10, - "Alarm9": 11, - "Alert": 17, - "Danger": 15, - "Depressurising": 20, - "FireFireFire": 28, - "Five": 33, - "Floor": 34, - "Four": 32, - "HaltWhoGoesThere": 27, - "HighCarbonDioxide": 44, - "IntruderAlert": 19, - "LiftOff": 36, - "MalfunctionDetected": 26, - "Music1": 7, - "Music2": 8, - "Music3": 9, - "None": 0, - "One": 29, - "PollutantsDetected": 43, - "PowerLow": 23, - "PressureHigh": 39, - "PressureLow": 40, - "Pressurising": 21, - "RocketLaunching": 35, - "StormIncoming": 18, - "SystemFailure": 24, - "TemperatureHigh": 41, - "TemperatureLow": 42, - "Three": 31, - "TraderIncoming": 37, - "TraderLanded": 38, - "Two": 30, - "Warning": 16, - "Welcome": 25 - }, - "TransmitterMode": { - "Active": 1, - "Passive": 0 - }, - "Vent": { - "Inward": 1, - "Outward": 0 - } - }, - "items": [ - "DynamicGPR", - "ItemAuthoringToolRocketNetwork", - "MonsterEgg", - "MotherboardMissionControl", - "Robot", - "AccessCardBlack", - "AccessCardBlue", - "AccessCardBrown", - "AccessCardGray", - "AccessCardGreen", - "AccessCardKhaki", - "AccessCardOrange", - "AccessCardPink", - "AccessCardPurple", - "AccessCardRed", - "AccessCardWhite", - "AccessCardYellow", - "ItemAdhesiveInsulation", - "CircuitboardAdvAirlockControl", - "ItemAdvancedTablet", - "CircuitboardAirControl", - "CircuitboardAirlockControl", - "ImGuiCircuitboardAirlockControl", - "ItemAlienMushroom", - "ItemAmmoBox", - "ItemAngleGrinder", - "ApplianceDeskLampLeft", - "ApplianceDeskLampRight", - "ApplianceSeedTray", - "ItemArcWelder", - "ItemAstroloySheets", - "CartridgeAtmosAnalyser", - "ItemAuthoringTool", - "AutolathePrinterMod", - "ItemPotatoBaked", - "AppliancePackagingMachine", - "ItemBasketBall", - "ItemBatteryCellLarge", - "ItemBatteryCellNuclear", - "ItemBatteryCell", - "ItemBatteryChargerSmall", - "Battery_Wireless_cell", - "Battery_Wireless_cell_Big", - "ItemBiomass", - "ItemBreadLoaf", - "ItemCableCoil", - "ItemCableCoilHeavy", - "CircuitboardCameraDisplay", - "ItemGasCanisterEmpty", - "ItemGasCanisterCarbonDioxide", - "ItemGasCanisterFuel", - "ItemGasCanisterNitrogen", - "ItemGasCanisterOxygen", - "ItemGasCanisterPollutants", - "ItemGasCanisterVolatiles", - "ItemCannedCondensedMilk", - "ItemCannedEdamame", - "ItemFrenchFries", - "ItemCannedMushroom", - "ItemCannedPowderedEggs", - "ItemCannedRicePudding", - "CardboardBox", - "CartridgeAccessController", - "CartridgePlantAnalyser", - "ItemGasFilterCarbonDioxideInfinite", - "ItemGasFilterNitrogenInfinite", - "ItemGasFilterNitrousOxideInfinite", - "ItemGasFilterOxygenInfinite", - "ItemGasFilterPollutantsInfinite", - "ItemGasFilterVolatilesInfinite", - "ItemGasFilterWaterInfinite", - "ItemCerealBar", - "ItemCharcoal", - "ItemChemLightBlue", - "ItemChemLightGreen", - "ItemChemLightRed", - "ItemChemLightWhite", - "ItemChemLightYellow", - "ApplianceChemistryStation", - "NpcChick", - "NpcChicken", - "ItemCoffeeMug", - "ReagentColorBlue", - "ReagentColorGreen", - "ReagentColorOrange", - "ReagentColorRed", - "ReagentColorYellow", - "MotherboardComms", - "ItemCookedCondensedMilk", - "CartridgeConfiguration", - "ItemCookedCorn", - "ItemCookedMushroom", - "ItemCookedPumpkin", - "ItemCookedRice", - "ItemCookedSoybean", - "ItemCookedTomato", - "ItemCorn", - "SeedBag_Corn", - "ItemCornSoup", - "CrateMkII", - "ItemCreditCard", - "ItemCrowbar", - "ItemSuitModCryogenicUpgrade", - "ItemFilterFern", - "ItemDataDisk", - "DecayedFood", - "ItemDirtCanister", - "ItemSpaceOre", - "ItemDirtyOre", - "ItemDisposableBatteryCharger", - "CircuitboardDoorControl", - "ItemDuctTape", - "DynamicCrate", - "DynamicGasCanisterRocketFuel", - "ItemFertilizedEgg", - "ItemEggCarton", - "ItemElectronicParts", - "ElectronicPrinterMod", - "ElevatorCarrage", - "ItemEmergencyAngleGrinder", - "ItemEmergencyArcWelder", - "ItemEmergencyCrowbar", - "ItemEmergencyDrill", - "ItemEmergencyEvaSuit", - "ItemEmergencyPickaxe", - "ItemEmergencyScrewdriver", - "ItemEmergencySpaceHelmet", - "ItemEmergencyToolBelt", - "ItemEmergencyWireCutters", - "ItemEmergencyWrench", - "ItemEmptyCan", - "ItemPlantEndothermic_Creative", - "WeaponPistolEnergy", - "WeaponRifleEnergy", - "EntityChick", - "EntityChickenBrown", - "EntityChickenWhite", - "EntityRoosterBlack", - "EntityRoosterBrown", - "ItemEvaSuit", - "ItemFern", - "SeedBag_Fern", - "Fertilizer", - "ItemGasFilterCarbonDioxide", - "ItemGasFilterNitrogen", - "ItemGasFilterNitrousOxide", - "ItemGasFilterOxygen", - "ItemGasFilterPollutants", - "ItemGasFilterVolatiles", - "ItemGasFilterWater", - "FireArmSMG", - "ItemReusableFireExtinguisher", - "FlareGun", - "ItemFlashlight", - "ItemFlour", - "ItemFlowerBlue", - "ItemFlowerGreen", - "ItemFlowerOrange", - "ItemFlowerRed", - "ItemFlowerYellow", - "ItemFries", - "CartridgeGPS", - "ItemGasCanisterNitrousOxide", - "ItemGasCanisterSmart", - "CircuitboardGasDisplay", - "DynamicGasTankAdvanced", - "ItemGlassSheets", - "ItemGlasses", - "CircuitboardGraphDisplay", - "CartridgeGuide", - "ItemHEMDroidRepairKit", - "ItemPlantThermogenic_Genepool1", - "ItemPlantThermogenic_Genepool2", - "ItemDrill", - "ItemGrenade", - "Handgun", - "HandgunMagazine", - "ItemScanner", - "ItemTablet", - "ItemHardMiningBackPack", - "ItemHardSuit", - "ItemHardBackpack", - "ItemHardsuitHelmet", - "ItemHardJetpack", - "CircuitboardHashDisplay", - "ItemHat", - "ItemCropHay", - "ItemWearLamp", - "ItemGasFilterCarbonDioxideL", - "ItemGasFilterNitrogenL", - "ItemGasFilterNitrousOxideL", - "ItemGasFilterOxygenL", - "ItemGasFilterPollutantsL", - "ItemGasFilterVolatilesL", - "ItemGasFilterWaterL", - "ItemHighVolumeGasCanisterEmpty", - "ItemHorticultureBelt", - "HumanSkull", - "MotherboardProgrammableChip", - "ItemNitrice", - "ItemOxite", - "ItemVolatiles", - "ItemIce", - "ItemAstroloyIngot", - "ItemConstantanIngot", - "ItemCopperIngot", - "ItemElectrumIngot", - "ItemGoldIngot", - "ItemHastelloyIngot", - "ItemInconelIngot", - "ItemInvarIngot", - "ItemIronIngot", - "ItemLeadIngot", - "ItemNickelIngot", - "ItemSiliconIngot", - "ItemSilverIngot", - "ItemSolderIngot", - "ItemSteelIngot", - "ItemStelliteIngot", - "ItemWaspaloyIngot", - "ItemInsulation", - "ItemIntegratedCircuit10", - "ItemIronFrames", - "ItemIronSheets", - "ItemJetpackBasic", - "UniformOrangeJumpSuit", - "ItemKitAIMeE", - "ItemKitAccessBridge", - "ItemActiveVent", - "ItemKitAdvancedComposter", - "ItemKitAdvancedFurnace", - "ItemKitAdvancedPackagingMachine", - "ItemKitAirlock", - "ItemKitArcFurnace", - "ItemKitWallArch", - "ItemKitAtmospherics", - "ItemKitAutolathe", - "ItemKitHydroponicAutomated", - "ItemKitAutomatedOven", - "ItemKitAutoMinerSmall", - "ItemKitRocketAvionics", - "ItemKitChute", - "ItemKitBasket", - "ItemBatteryCharger", - "ItemKitBatteryLarge", - "ItemKitBattery", - "ItemKitBeacon", - "ItemKitBeds", - "ItemKitBlastDoor", - "ItemCableAnalyser", - "ItemCableFuse", - "ItemGasTankStorage", - "ItemKitCentrifuge", - "ItemKitChairs", - "ItemKitChuteUmbilical", - "ItemKitCompositeCladding", - "KitStructureCombustionCentrifuge", - "ItemKitComputer", - "ItemKitConsole", - "ItemKitCrateMount", - "ItemKitPassthroughHeatExchanger", - "ItemKitCrateMkII", - "ItemKitCrate", - "ItemRTG", - "ItemKitCryoTube", - "ItemKitDeepMiner", - "ItemPipeDigitalValve", - "ItemKitDockingPort", - "ItemKitDoor", - "ItemKitDrinkingFountain", - "ItemKitElectronicsPrinter", - "ItemKitElevator", - "ItemKitEngineLarge", - "ItemKitEngineMedium", - "ItemKitEngineSmall", - "ItemFlashingLight", - "ItemKitWallFlat", - "ItemKitCompositeFloorGrating", - "ItemKitFridgeBig", - "ItemKitFridgeSmall", - "ItemKitFurnace", - "ItemKitFurniture", - "ItemKitFuselage", - "ItemKitGasGenerator", - "ItemPipeGasMixer", - "ItemGasSensor", - "ItemKitGasUmbilical", - "ItemKitWallGeometry", - "ItemKitGrowLight", - "ItemKitAirlockGate", - "ItemKitHarvie", - "ItemKitHydraulicPipeBender", - "ItemKitHydroponicStation", - "ItemHydroponicTray", - "ItemKitLogicCircuit", - "ItemKitIceCrusher", - "ItemIgniter", - "ItemKitInsulatedLiquidPipe", - "ItemKitLiquidTankInsulated", - "ItemPassiveVentInsulated", - "ItemKitInsulatedPipeUtility", - "ItemKitInsulatedPipeUtilityLiquid", - "ItemKitInsulatedPipe", - "ItemKitInteriorDoors", - "ItemKitWallIron", - "ItemKitLadder", - "ItemKitLandingPadAtmos", - "ItemKitLandingPadBasic", - "ItemKitLandingPadWaypoint", - "ItemKitLargeDirectHeatExchanger", - "ItemKitLargeExtendableRadiator", - "ItemKitLargeSatelliteDish", - "ItemKitLaunchMount", - "ItemWallLight", - "ItemLiquidTankStorage", - "ItemWaterPipeDigitalValve", - "ItemLiquidDrain", - "ItemLiquidPipeAnalyzer", - "ItemWaterPipeMeter", - "ItemLiquidPipeValve", - "ItemKitPipeLiquid", - "ItemPipeLiquidRadiator", - "ItemKitLiquidRegulator", - "ItemKitLiquidTank", - "ItemKitLiquidUmbilical", - "ItemLiquidPipeVolumePump", - "ItemWaterWallCooler", - "ItemKitLocker", - "ItemKitLogicInputOutput", - "ItemKitLogicMemory", - "ItemKitLogicProcessor", - "ItemKitLogicSwitch", - "ItemKitLogicTransmitter", - "ItemKitPassiveLargeRadiatorLiquid", - "ItemKitPassiveLargeRadiatorGas", - "ItemKitSatelliteDish", - "ItemKitMotherShipCore", - "ItemKitMusicMachines", - "ItemKitFlagODA", - "ItemKitHorizontalAutoMiner", - "ItemKitWallPadded", - "ItemKitEvaporationChamber", - "ItemPipeAnalyizer", - "ItemPipeIgniter", - "ItemPipeLabel", - "ItemPipeMeter", - "ItemKitPipeOrgan", - "ItemKitPipeRadiatorLiquid", - "ItemKitPipeRadiator", - "ItemKitPipeUtility", - "ItemKitPipeUtilityLiquid", - "ItemPipeValve", - "ItemKitPipe", - "ItemKitPlanter", - "ItemDynamicAirCon", - "ItemKitDynamicGasTankAdvanced", - "ItemKitDynamicCanister", - "ItemKitDynamicGenerator", - "ItemKitDynamicHydroponics", - "ItemKitDynamicMKIILiquidCanister", - "ItemKitDynamicLiquidCanister", - "ItemDynamicScrubber", - "ItemKitPortablesConnector", - "ItemPowerConnector", - "ItemAreaPowerControl", - "ItemKitPowerTransmitterOmni", - "ItemKitPowerTransmitter", - "ItemKitElectricUmbilical", - "ItemKitStandardChute", - "ItemKitPoweredVent", - "ItemKitPressureFedGasEngine", - "ItemKitPressureFedLiquidEngine", - "ItemKitRegulator", - "ItemKitGovernedGasRocketEngine", - "ItemKitPumpedLiquidEngine", - "ItemRTGSurvival", - "ItemPipeRadiator", - "ItemKitRailing", - "ItemKitRecycler", - "ItemKitReinforcedWindows", - "ItemKitRespawnPointWallMounted", - "ItemKitRocketBattery", - "ItemKitRocketCargoStorage", - "ItemKitRocketCelestialTracker", - "ItemKitRocketCircuitHousing", - "ItemKitRocketDatalink", - "ItemKitRocketGasFuelTank", - "ItemKitLaunchTower", - "ItemKitRocketLiquidFuelTank", - "ItemKitRocketManufactory", - "ItemKitRocketMiner", - "ItemKitRocketScanner", - "ItemKitRoverFrame", - "ItemKitRoverMKI", - "ItemKitSDBHopper", - "KitSDBSilo", - "ItemKitSecurityPrinter", - "ItemKitSensor", - "ItemKitShower", - "ItemKitSign", - "ItemKitSleeper", - "ItemKitSmallDirectHeatExchanger", - "ItemFlagSmall", - "ItemKitSmallSatelliteDish", - "ItemKitSolarPanelBasicReinforced", - "ItemKitSolarPanelBasic", - "ItemKitSolarPanelReinforced", - "ItemKitSolarPanel", - "ItemKitSolidGenerator", - "ItemKitSorter", - "ItemKitSpeaker", - "ItemKitStacker", - "ItemKitStairs", - "ItemKitStairwell", - "ItemKitStirlingEngine", - "ItemKitSuitStorage", - "ItemKitTables", - "ItemKitTankInsulated", - "ItemKitTank", - "ItemKitGroundTelescope", - "ItemKitToolManufactory", - "ItemKitTransformer", - "ItemKitRocketTransformerSmall", - "ItemKitTransformerSmall", - "ItemKitPressurePlate", - "ItemKitTurbineGenerator", - "ItemKitTurboVolumePump", - "ItemKitLiquidTurboVolumePump", - "ItemKitUprightWindTurbine", - "ItemKitVendingMachineRefrigerated", - "ItemKitVendingMachine", - "ItemPipeVolumePump", - "ItemWallCooler", - "ItemWallHeater", - "ItemKitWall", - "ItemKitWaterBottleFiller", - "ItemKitWaterPurifier", - "ItemKitWeatherStation", - "ItemKitWindTurbine", - "ItemKitWindowShutter", - "ItemKitHeatExchanger", - "ItemKitPictureFrame", - "ItemKitResearchMachine", - "ItemLabeller", - "Lander", - "ItemLaptop", - "ItemLightSword", - "ItemLiquidCanisterEmpty", - "ItemLiquidCanisterSmart", - "ItemGasCanisterWater", - "MotherboardLogic", - "ItemMarineBodyArmor", - "ItemMarineHelmet", - "UniformMarine", - "CartridgeMedicalAnalyser", - "ItemGasFilterCarbonDioxideM", - "ItemGasFilterNitrogenM", - "ItemGasFilterNitrousOxideM", - "ItemGasFilterOxygenM", - "ItemGasFilterPollutantsM", - "ItemGasFilterVolatilesM", - "ItemGasFilterWaterM", - "Meteorite", - "ApplianceMicrowave", - "ItemMilk", - "ItemMiningBackPack", - "ItemMiningBelt", - "ItemMiningBeltMKII", - "ItemMiningCharge", - "ItemMiningDrill", - "ItemMiningDrillHeavy", - "ItemRocketMiningDrillHead", - "ItemRocketMiningDrillHeadDurable", - "ItemRocketMiningDrillHeadHighSpeedIce", - "ItemRocketMiningDrillHeadHighSpeedMineral", - "ItemRocketMiningDrillHeadIce", - "ItemRocketMiningDrillHeadLongTerm", - "ItemRocketMiningDrillHeadMineral", - "ItemMKIIAngleGrinder", - "ItemMKIIArcWelder", - "ItemMKIICrowbar", - "ItemMKIIDrill", - "ItemMKIIDuctTape", - "ItemMKIIMiningDrill", - "ItemMKIIScrewdriver", - "ItemMKIIWireCutters", - "ItemMKIIWrench", - "CircuitboardModeControl", - "MothershipCore", - "ItemMuffin", - "ItemMushroom", - "SeedBag_Mushroom", - "CartridgeNetworkAnalyser", - "ItemNVG", - "ItemCoalOre", - "ItemCobaltOre", - "ItemCopperOre", - "ItemGoldOre", - "ItemIronOre", - "ItemLeadOre", - "ItemNickelOre", - "ItemSiliconOre", - "ItemSilverOre", - "ItemUraniumOre", - "CartridgeOreScanner", - "CartridgeOreScannerColor", - "AppliancePaintMixer", - "ItemPassiveVent", - "ItemPeaceLily", - "ItemPickaxe", - "ItemPillHeal", - "ItemPillStun", - "PipeBenderMod", - "ItemPipeCowl", - "ItemPipeHeater", - "ItemLiquidPipeHeater", - "AppliancePlantGeneticAnalyzer", - "AppliancePlantGeneticSplicer", - "AppliancePlantGeneticStabilizer", - "ItemPlantSampler", - "ItemPlasticSheets", - "ItemMiningDrillPneumatic", - "DynamicAirConditioner", - "DynamicScrubber", - "PortableComposter", - "DynamicGasCanisterEmpty", - "DynamicGasCanisterAir", - "DynamicGasCanisterCarbonDioxide", - "DynamicGasCanisterFuel", - "DynamicGasCanisterNitrogen", - "DynamicGasCanisterNitrousOxide", - "DynamicGasCanisterOxygen", - "DynamicGasCanisterPollutants", - "DynamicGasCanisterVolatiles", - "DynamicGasTankAdvancedOxygen", - "DynamicGenerator", - "DynamicHydroponics", - "DynamicLight", - "DynamicLiquidCanisterEmpty", - "DynamicGasCanisterWater", - "DynamicMKIILiquidCanisterEmpty", - "DynamicMKIILiquidCanisterWater", - "PortableSolarPanel", - "ItemPotato", - "SeedBag_Potato", - "ItemCookedPowderedEggs", - "CircuitboardPowerControl", - "ItemPumpkin", - "ItemPumpkinPie", - "SeedBag_Pumpkin", - "ItemPumpkinSoup", - "ItemPureIceCarbonDioxide", - "ItemPureIceHydrogen", - "ItemPureIceLiquidCarbonDioxide", - "ItemPureIceLiquidHydrogen", - "ItemPureIceLiquidNitrogen", - "ItemPureIceLiquidNitrous", - "ItemPureIceLiquidOxygen", - "ItemPureIceLiquidPollutant", - "ItemPureIceLiquidVolatiles", - "ItemPureIceNitrogen", - "ItemPureIceNitrous", - "ItemPureIceOxygen", - "ItemPureIcePollutant", - "ItemPureIcePollutedWater", - "ItemPureIceSteam", - "ItemPureIceVolatiles", - "ItemPureIce", - "ItemReagentMix", - "ApplianceReagentProcessor", - "ItemRemoteDetonator", - "ItemExplosive", - "ItemResearchCapsule", - "ItemResearchCapsuleGreen", - "ItemResearchCapsuleRed", - "ItemResearchCapsuleYellow", - "ItemRice", - "SeedBag_Rice", - "ItemRoadFlare", - "MotherboardRockets", - "ItemRocketScanningHead", - "RoverCargo", - "Rover_MkI", - "SMGMagazine", - "ItemScrewdriver", - "ItemSecurityCamera", - "ItemSensorLenses", - "ItemSensorProcessingUnitCelestialScanner", - "ItemSensorProcessingUnitOreScanner", - "ItemSensorProcessingUnitMesonScanner", - "CircuitboardShipDisplay", - "DynamicSkeleton", - "CircuitboardSolarControl", - "ItemSolidFuel", - "MotherboardSorter", - "ItemSoundCartridgeBass", - "ItemSoundCartridgeDrums", - "ItemSoundCartridgeLeads", - "ItemSoundCartridgeSynth", - "ItemSoyOil", - "ItemSoybean", - "SeedBag_Soybean", - "ItemSpaceCleaner", - "ItemSpaceHelmet", - "ItemSpaceIce", - "SpaceShuttle", - "ItemSpacepack", - "ItemSprayGun", - "ItemSprayCanBlack", - "ItemSprayCanBlue", - "ItemSprayCanBrown", - "ItemSprayCanGreen", - "ItemSprayCanGrey", - "ItemSprayCanKhaki", - "ItemSprayCanOrange", - "ItemSprayCanPink", - "ItemSprayCanPurple", - "ItemSprayCanRed", - "ItemSprayCanWhite", - "ItemSprayCanYellow", - "ItemSteelFrames", - "ItemSteelSheets", - "ItemStelliteGlassSheets", - "ItemPlantSwitchGrass", - "SeedBag_Switchgrass", - "ApplianceTabletDock", - "ItemTerrainManipulator", - "ItemPlantThermogenic_Creative", - "ItemTomato", - "SeedBag_Tomato", - "ItemTomatoSoup", - "ItemToolBelt", - "ItemMkIIToolbelt", - "ToolPrinterMod", - "WeaponTorpedo", - "ToyLuna", - "CartridgeTracker", - "ItemBeacon", - "ItemTropicalPlant", - "UniformCommander", - "ItemWaterBottle", - "WeaponEnergy", - "ItemWeldingTorch", - "ItemWheat", - "SeedBag_Wheet", - "ItemPlantEndothermic_Genepool1", - "ItemPlantEndothermic_Genepool2", - "ItemWireCutters", - "ItemWirelessBatteryCellExtraLarge", - "ItemWreckageAirConditioner2", - "ItemWreckageAirConditioner1", - "ItemWreckageHydroponicsTray1", - "ItemWreckageLargeExtendableRadiator01", - "ItemWreckageStructureRTG1", - "ItemWreckageStructureWeatherStation003", - "ItemWreckageStructureWeatherStation002", - "ItemWreckageStructureWeatherStation005", - "ItemWreckageStructureWeatherStation007", - "ItemWreckageStructureWeatherStation001", - "ItemWreckageStructureWeatherStation006", - "ItemWreckageStructureWeatherStation004", - "ItemWreckageStructureWeatherStation008", - "ItemWreckageTurbineGenerator1", - "ItemWreckageTurbineGenerator2", - "ItemWreckageTurbineGenerator3", - "ItemWreckageWallCooler1", - "ItemWreckageWallCooler2", - "ItemWrench", - "CartridgeElectronicReader" - ], - "logic_enabled": [ - "DynamicGPR", - "StructureDrinkingFountain", - "Robot", - "StructureAccessBridge", - "StructureLiquidDrain", - "StructureActiveVent", - "StructureAdvancedComposter", - "StructureAdvancedFurnace", - "StructureAdvancedPackagingMachine", - "ItemAdvancedTablet", - "StructureAirConditioner", - "StructureAirlock", - "ItemAngleGrinder", - "StructureArcFurnace", - "ItemArcWelder", - "StructureAreaPowerControlReversed", - "StructureAreaPowerControl", - "StructureAutolathe", - "StructureAutomatedOven", - "StructureAutoMinerSmall", - "StructureBatterySmall", - "StructureBackPressureRegulator", - "StructureBasketHoop", - "StructureLogicBatchReader", - "StructureLogicBatchSlotReader", - "StructureLogicBatchWriter", - "StructureBatteryMedium", - "ItemBatteryCellLarge", - "ItemBatteryCellNuclear", - "ItemBatteryCell", - "StructureBatteryCharger", - "StructureBatteryChargerSmall", - "Battery_Wireless_cell", - "Battery_Wireless_cell_Big", - "StructureBeacon", - "StructureAngledBench", - "StructureBench1", - "StructureFlatBench", - "StructureBench3", - "StructureBench2", - "StructureBench4", - "StructureBlastDoor", - "StructureBlockBed", - "StructureLogicButton", - "StructureCableAnalysizer", - "StructureCamera", - "StructureCargoStorageMedium", - "StructureCargoStorageSmall", - "StructureCentrifuge", - "StructureChair", - "StructureChairBacklessDouble", - "StructureChairBacklessSingle", - "StructureChairBoothCornerLeft", - "StructureChairBoothMiddle", - "StructureChairRectangleDouble", - "StructureChairRectangleSingle", - "StructureChairThickDouble", - "StructureChairThickSingle", - "StructureChuteBin", - "StructureChuteDigitalFlipFlopSplitterLeft", - "StructureChuteDigitalFlipFlopSplitterRight", - "StructureChuteDigitalValveLeft", - "StructureChuteDigitalValveRight", - "StructureChuteInlet", - "StructureChuteOutlet", - "StructureCombustionCentrifuge", - "StructureCompositeDoor", - "CompositeRollCover", - "StructureComputer", - "StructureCondensationChamber", - "StructureCondensationValve", - "StructureConsole", - "StructureConsoleDual", - "StructureConsoleMonitor", - "StructureControlChair", - "StructureCornerLocker", - "StructurePassthroughHeatExchangerGasToGas", - "StructurePassthroughHeatExchangerGasToLiquid", - "StructurePassthroughHeatExchangerLiquidToLiquid", - "StructureCryoTubeHorizontal", - "StructureCryoTubeVertical", - "StructureCryoTube", - "StructureDaylightSensor", - "StructureDeepMiner", - "DeviceStepUnit", - "StructureLogicDial", - "StructureDigitalValve", - "StructureDiodeSlide", - "StructureDockPortSide", - "StructureSleeperVerticalDroid", - "StructureElectrolyzer", - "StructureElectronicsPrinter", - "StructureElevatorLevelIndustrial", - "StructureElevatorLevelFront", - "StructureElevatorShaftIndustrial", - "StructureElevatorShaft", - "ItemEmergencyAngleGrinder", - "ItemEmergencyArcWelder", - "ItemEmergencyDrill", - "ItemEmergencySpaceHelmet", - "WeaponPistolEnergy", - "WeaponRifleEnergy", - "StructureEvaporationChamber", - "StructureExpansionValve", - "StructureFiltration", - "StructureFlashingLight", - "ItemFlashlight", - "StructureFridgeBig", - "StructureFridgeSmall", - "StructureFurnace", - "StructureCableFuse100k", - "StructureCableFuse1k", - "StructureCableFuse50k", - "StructureCableFuse5k", - "StructureMediumRocketGasFuelTank", - "StructureCapsuleTankGas", - "StructureGasGenerator", - "StructureGasMixer", - "StructureGasSensor", - "StructureGasTankStorage", - "StructureSolidFuelGenerator", - "StructureGlassDoor", - "StructureGrowLight", - "H2Combustor", - "ItemDrill", - "ItemTablet", - "ItemHardSuit", - "ItemHardBackpack", - "ItemHardsuitHelmet", - "ItemHardJetpack", - "StructureHarvie", - "ItemWearLamp", - "StructureHeatExchangerGastoGas", - "StructureHeatExchangerLiquidtoLiquid", - "StructureHeatExchangeLiquidtoGas", - "StructureHydraulicPipeBender", - "StructureHydroponicsTrayData", - "StructureHydroponicsStation", - "StructureCircuitHousing", - "StructureIceCrusher", - "StructureIgniter", - "StructureEmergencyButton", - "StructureLiquidTankBigInsulated", - "StructureLiquidTankSmallInsulated", - "ItemIntegratedCircuit10", - "StructureInteriorDoorGlass", - "StructureInteriorDoorPadded", - "StructureInteriorDoorPaddedThin", - "StructureInteriorDoorTriangle", - "ItemJetpackBasic", - "StructureKlaxon", - "StructureDiode", - "StructureConsoleLED1x3", - "StructureConsoleLED1x2", - "StructureConsoleLED5", - "ItemLabeller", - "Landingpad_DataConnectionPiece", - "Landingpad_GasConnectorInwardPiece", - "Landingpad_GasConnectorOutwardPiece", - "Landingpad_LiquidConnectorInwardPiece", - "Landingpad_LiquidConnectorOutwardPiece", - "Landingpad_ThreshholdPiece", - "ItemLaptop", - "StructureLargeDirectHeatExchangeLiquidtoLiquid", - "StructureLargeDirectHeatExchangeGastoGas", - "StructureLargeDirectHeatExchangeGastoLiquid", - "StructureLargeExtendableRadiator", - "StructureLargeHangerDoor", - "StructureLargeSatelliteDish", - "StructureTankBig", - "StructureLogicSwitch", - "StructureLightRound", - "StructureLightRoundAngled", - "StructureLightRoundSmall", - "StructureBackLiquidPressureRegulator", - "StructureMediumRocketLiquidFuelTank", - "StructureCapsuleTankLiquid", - "StructureWaterDigitalValve", - "StructureLiquidPipeAnalyzer", - "StructureLiquidPipeRadiator", - "StructureWaterPipeMeter", - "StructureLiquidTankBig", - "StructureLiquidTankSmall", - "StructureLiquidTankStorage", - "StructureLiquidValve", - "StructureLiquidVolumePump", - "StructureLiquidPressureRegulator", - "StructureWaterWallCooler", - "StructureStorageLocker", - "StructureLockerSmall", - "StructureLogicCompare", - "StructureLogicGate", - "StructureLogicHashGen", - "StructureLogicMath", - "StructureLogicMemory", - "StructureLogicMinMax", - "StructureLogicReader", - "StructureLogicRocketDownlink", - "StructureLogicSelect", - "StructureLogicSorter", - "LogicStepSequencer8", - "StructureLogicRocketUplink", - "StructureLogicWriter", - "StructureLogicWriterSwitch", - "DeviceLfoVolume", - "StructureManualHatch", - "StructureLogicMathUnary", - "StructureMediumConvectionRadiator", - "StructurePassiveLargeRadiatorGas", - "StructureMediumConvectionRadiatorLiquid", - "StructurePassiveLargeRadiatorLiquid", - "StructureMediumHangerDoor", - "StructureMediumRadiator", - "StructureMediumRadiatorLiquid", - "StructureSatelliteDish", - "StructurePowerTransmitterReceiver", - "StructurePowerTransmitter", - "ItemMiningBeltMKII", - "ItemMiningDrill", - "ItemMiningDrillHeavy", - "ItemMKIIAngleGrinder", - "ItemMKIIArcWelder", - "ItemMKIIDrill", - "ItemMKIIMiningDrill", - "StructureMotionSensor", - "ItemNVG", - "StructureNitrolyzer", - "StructureHorizontalAutoMiner", - "StructureOccupancySensor", - "StructurePipeOneWayValve", - "StructureLiquidPipeOneWayValve", - "StructureOverheadShortCornerLocker", - "StructureOverheadShortLocker", - "StructurePassiveLiquidDrain", - "PassiveSpeaker", - "StructurePipeAnalysizer", - "StructurePipeRadiator", - "StructurePipeHeater", - "StructureLiquidPipeHeater", - "StructurePipeIgniter", - "StructurePipeLabel", - "StructurePipeMeter", - "StructurePipeRadiatorFlat", - "StructurePipeRadiatorFlatLiquid", - "ItemPlantSampler", - "DynamicLight", - "PortableSolarPanel", - "StructurePortablesConnector", - "StructurePowerConnector", - "StructurePowerTransmitterOmni", - "StructureBench", - "StructurePoweredVent", - "StructurePoweredVentLarge", - "StructurePressurantValve", - "StructurePressureFedGasEngine", - "StructurePressureFedLiquidEngine", - "StructurePressureRegulator", - "StructureProximitySensor", - "StructureGovernedGasEngine", - "StructurePumpedLiquidEngine", - "StructurePurgeValve", - "StructureLogicReagentReader", - "StructureRecycler", - "StructureRefrigeratedVendingMachine", - "ItemRemoteDetonator", - "StructureResearchMachine", - "StructureRocketAvionics", - "StructureRocketCelestialTracker", - "StructureRocketCircuitHousing", - "StructureRocketEngineTiny", - "StructureRocketManufactory", - "StructureRocketMiner", - "StructureRocketScanner", - "RoverCargo", - "Rover_MkI", - "StructureSDBHopper", - "StructureSDBHopperAdvanced", - "StructureSDBSilo", - "StructureSecurityPrinter", - "ItemSensorLenses", - "StructureShelfMedium", - "StructureShortCornerLocker", - "StructureShortLocker", - "StructureShower", - "StructureShowerPowered", - "StructureSign1x1", - "StructureSign2x1", - "StructureSingleBed", - "StructureSleeper", - "StructureSleeperLeft", - "StructureSleeperRight", - "StructureSleeperVertical", - "StructureLogicSlotReader", - "StructureSmallDirectHeatExchangeGastoGas", - "StructureSmallDirectHeatExchangeLiquidtoGas", - "StructureSmallDirectHeatExchangeLiquidtoLiquid", - "StructureAirlockGate", - "StructureSmallSatelliteDish", - "StructureTankSmall", - "StructureTankSmallAir", - "StructureTankSmallFuel", - "StructureSolarPanel", - "StructureSolarPanel45", - "StructureSolarPanelDual", - "StructureSolarPanelFlat", - "StructureSolarPanel45Reinforced", - "StructureSolarPanelDualReinforced", - "StructureSolarPanelFlatReinforced", - "StructureSolarPanelReinforced", - "StructureSorter", - "ItemSpaceHelmet", - "ItemSpacepack", - "StructureStackerReverse", - "StructureStacker", - "StructureBattery", - "StructureBatteryLarge", - "StructureStirlingEngine", - "StopWatch", - "StructureSuitStorage", - "StructureLogicSwitch2", - "StructureTankBigInsulated", - "StructureTankSmallInsulated", - "StructureGroundBasedTelescope", - "ItemTerrainManipulator", - "ItemMkIIToolbelt", - "StructureToolManufactory", - "ItemBeacon", - "StructureTraderWaypoint", - "StructureTransformer", - "StructureTransformerMedium", - "StructureTransformerSmall", - "StructureTransformerMediumReversed", - "StructureTransformerSmallReversed", - "StructureRocketTransformerSmall", - "StructurePressurePlateLarge", - "StructurePressurePlateMedium", - "StructurePressurePlateSmall", - "StructureTurbineGenerator", - "StructureTurboVolumePump", - "StructureLiquidTurboVolumePump", - "StructureChuteUmbilicalMale", - "StructureGasUmbilicalMale", - "StructureLiquidUmbilicalMale", - "StructurePowerUmbilicalMale", - "StructureChuteUmbilicalFemale", - "StructureGasUmbilicalFemale", - "StructureLiquidUmbilicalFemale", - "StructurePowerUmbilicalFemale", - "StructureChuteUmbilicalFemaleSide", - "StructureGasUmbilicalFemaleSide", - "StructureLiquidUmbilicalFemaleSide", - "StructurePowerUmbilicalFemaleSide", - "StructureUnloader", - "StructureUprightWindTurbine", - "StructureValve", - "StructureVendingMachine", - "StructureVolumePump", - "StructureWallCooler", - "StructureWallHeater", - "StructureWallLight", - "StructureWallLightBattery", - "StructureLightLongAngled", - "StructureLightLongWide", - "StructureLightLong", - "StructureWaterBottleFiller", - "StructureWaterBottleFillerBottom", - "StructureWaterPurifier", - "StructureWaterBottleFillerPowered", - "StructureWaterBottleFillerPoweredBottom", - "WeaponEnergy", - "StructureWeatherStation", - "StructureWindTurbine", - "StructureWindowShutter", - "ItemWirelessBatteryCellExtraLarge" - ], - "names_by_hash": { - "-2140672772": "ItemKitGroundTelescope", - "-2138748650": "StructureSmallSatelliteDish", - "-2128896573": "StructureStairwellBackRight", - "-2127086069": "StructureBench2", - "-2126113312": "ItemLiquidPipeValve", - "-2124435700": "ItemDisposableBatteryCharger", - "-2123455080": "StructureBatterySmall", - "-2113838091": "StructureLiquidPipeAnalyzer", - "-2113012215": "ItemGasTankStorage", - "-2112390778": "StructureFrameCorner", - "-2111886401": "ItemPotatoBaked", - "-2107840748": "ItemFlashingLight", - "-2106280569": "ItemLiquidPipeVolumePump", - "-2105052344": "StructureAirlock", - "-2104175091": "ItemCannedCondensedMilk", - "-2098556089": "ItemKitHydraulicPipeBender", - "-2098214189": "ItemKitLogicMemory", - "-2096421875": "StructureInteriorDoorGlass", - "-2087593337": "StructureAirConditioner", - "-2087223687": "StructureRocketMiner", - "-2085885850": "DynamicGPR", - "-2083426457": "UniformCommander", - "-2082355173": "StructureWindTurbine", - "-2076086215": "StructureInsulatedPipeTJunction", - "-2073202179": "ItemPureIcePollutedWater", - "-2072792175": "RailingIndustrial02", - "-2068497073": "StructurePipeInsulatedLiquidCrossJunction", - "-2066892079": "ItemWeldingTorch", - "-2066653089": "StructurePictureFrameThickMountPortraitSmall", - "-2066405918": "Landingpad_DataConnectionPiece", - "-2062364768": "ItemKitPictureFrame", - "-2061979347": "ItemMKIIArcWelder", - "-2060571986": "StructureCompositeWindow", - "-2052458905": "ItemEmergencyDrill", - "-2049946335": "Rover_MkI", - "-2045627372": "StructureSolarPanel", - "-2044446819": "CircuitboardShipDisplay", - "-2042448192": "StructureBench", - "-2041566697": "StructurePictureFrameThickLandscapeSmall", - "-2039971217": "ItemKitLargeSatelliteDish", - "-2038889137": "ItemKitMusicMachines", - "-2038663432": "ItemStelliteGlassSheets", - "-2038384332": "ItemKitVendingMachine", - "-2031440019": "StructurePumpedLiquidEngine", - "-2024250974": "StructurePictureFrameThinLandscapeSmall", - "-2020231820": "StructureStacker", - "-2015613246": "ItemMKIIScrewdriver", - "-2008706143": "StructurePressurePlateLarge", - "-2006384159": "StructurePipeLiquidCrossJunction5", - "-1993197973": "ItemGasFilterWater", - "-1991297271": "SpaceShuttle", - "-1990600883": "SeedBag_Fern", - "-1981101032": "ItemSecurityCamera", - "-1976947556": "CardboardBox", - "-1971419310": "ItemSoundCartridgeSynth", - "-1968255729": "StructureCornerLocker", - "-1967711059": "StructureInsulatedPipeCorner", - "-1963016580": "StructureWallArchCornerSquare", - "-1961153710": "StructureControlChair", - "-1958705204": "PortableComposter", - "-1957063345": "CartridgeGPS", - "-1949054743": "StructureConsoleLED1x3", - "-1943134693": "ItemDuctTape", - "-1939209112": "DynamicLiquidCanisterEmpty", - "-1935075707": "ItemKitDeepMiner", - "-1931958659": "ItemKitAutomatedOven", - "-1930442922": "MothershipCore", - "-1924492105": "ItemKitSolarPanel", - "-1923778429": "CircuitboardPowerControl", - "-1922066841": "SeedBag_Tomato", - "-1918892177": "StructureChuteUmbilicalFemale", - "-1918215845": "StructureMediumConvectionRadiator", - "-1916176068": "ItemGasFilterVolatilesInfinite", - "-1908268220": "MotherboardSorter", - "-1901500508": "ItemSoundCartridgeDrums", - "-1900541738": "StructureFairingTypeA3", - "-1898247915": "RailingElegant02", - "-1897868623": "ItemStelliteIngot", - "-1897221677": "StructureSmallTableBacklessSingle", - "-1888248335": "StructureHydraulicPipeBender", - "-1886261558": "ItemWrench", - "-1883441704": "ItemSoundCartridgeBass", - "-1880941852": "ItemSprayCanGreen", - "-1877193979": "StructurePipeCrossJunction5", - "-1875856925": "StructureSDBHopper", - "-1875271296": "ItemMKIIMiningDrill", - "-1872345847": "Landingpad_TaxiPieceCorner", - "-1868555784": "ItemKitStairwell", - "-1867508561": "ItemKitVendingMachineRefrigerated", - "-1867280568": "ItemKitGasUmbilical", - "-1866880307": "ItemBatteryCharger", - "-1864982322": "ItemMuffin", - "-1861154222": "ItemKitDynamicHydroponics", - "-1860064656": "StructureWallLight", - "-1856720921": "StructurePipeLiquidCorner", - "-1854861891": "ItemGasCanisterWater", - "-1854167549": "ItemKitLaunchMount", - "-1844430312": "DeviceLfoVolume", - "-1843379322": "StructureCableCornerH3", - "-1841871763": "StructureCompositeCladdingAngledCornerInner", - "-1841632400": "StructureHydroponicsTrayData", - "-1831558953": "ItemKitInsulatedPipeUtilityLiquid", - "-1826855889": "ItemKitWall", - "-1826023284": "ItemWreckageAirConditioner1", - "-1821571150": "ItemKitStirlingEngine", - "-1814939203": "StructureGasUmbilicalMale", - "-1812330717": "StructureSleeperRight", - "-1808154199": "StructureManualHatch", - "-1805394113": "ItemOxite", - "-1805020897": "ItemKitLiquidTurboVolumePump", - "-1798420047": "StructureLiquidUmbilicalMale", - "-1798362329": "StructurePipeMeter", - "-1798044015": "ItemKitUprightWindTurbine", - "-1796655088": "ItemPipeRadiator", - "-1794932560": "StructureOverheadShortCornerLocker", - "-1792787349": "ItemCableAnalyser", - "-1788929869": "Landingpad_LiquidConnectorOutwardPiece", - "-1785673561": "StructurePipeCorner", - "-1776897113": "ItemKitSensor", - "-1773192190": "ItemReusableFireExtinguisher", - "-1768732546": "CartridgeOreScanner", - "-1766301997": "ItemPipeVolumePump", - "-1758710260": "StructureGrowLight", - "-1758310454": "ItemHardSuit", - "-1756913871": "StructureRailing", - "-1756896811": "StructureCableJunction4Burnt", - "-1756772618": "ItemCreditCard", - "-1755116240": "ItemKitBlastDoor", - "-1753893214": "ItemKitAutolathe", - "-1752768283": "ItemKitPassiveLargeRadiatorGas", - "-1752493889": "StructurePictureFrameThinMountLandscapeSmall", - "-1751627006": "ItemPipeHeater", - "-1748926678": "ItemPureIceLiquidPollutant", - "-1743663875": "ItemKitDrinkingFountain", - "-1741267161": "DynamicGasCanisterEmpty", - "-1737666461": "ItemSpaceCleaner", - "-1731627004": "ItemAuthoringToolRocketNetwork", - "-1730464583": "ItemSensorProcessingUnitMesonScanner", - "-1721846327": "ItemWaterWallCooler", - "-1715945725": "ItemPureIceLiquidCarbonDioxide", - "-1713748313": "AccessCardRed", - "-1713611165": "DynamicGasCanisterAir", - "-1713470563": "StructureMotionSensor", - "-1712264413": "ItemCookedPowderedEggs", - "-1712153401": "ItemGasCanisterNitrousOxide", - "-1710540039": "ItemKitHeatExchanger", - "-1708395413": "ItemPureIceNitrogen", - "-1697302609": "ItemKitPipeRadiatorLiquid", - "-1693382705": "StructureInLineTankGas1x1", - "-1691151239": "SeedBag_Rice", - "-1686949570": "StructurePictureFrameThickPortraitLarge", - "-1683849799": "ApplianceDeskLampLeft", - "-1682930158": "ItemWreckageWallCooler1", - "-1680477930": "StructureGasUmbilicalFemale", - "-1678456554": "ItemGasFilterWaterInfinite", - "-1674187440": "StructurePassthroughHeatExchangerGasToGas", - "-1672404896": "StructureAutomatedOven", - "-1668992663": "StructureElectrolyzer", - "-1667675295": "MonsterEgg", - "-1663349918": "ItemMiningDrillHeavy", - "-1662476145": "ItemAstroloySheets", - "-1662394403": "ItemWreckageTurbineGenerator1", - "-1650383245": "ItemMiningBackPack", - "-1645266981": "ItemSprayCanGrey", - "-1641500434": "ItemReagentMix", - "-1634532552": "CartridgeAccessController", - "-1633947337": "StructureRecycler", - "-1633000411": "StructureSmallTableBacklessDouble", - "-1629347579": "ItemKitRocketGasFuelTank", - "-1625452928": "StructureStairwellFrontPassthrough", - "-1620686196": "StructureCableJunctionBurnt", - "-1619793705": "ItemKitPipe", - "-1616308158": "ItemPureIce", - "-1613497288": "StructureBasketHoop", - "-1611559100": "StructureWallPaddedThinNoBorder", - "-1606848156": "StructureTankBig", - "-1602030414": "StructureInsulatedTankConnectorLiquid", - "-1590715731": "ItemKitTurbineGenerator", - "-1585956426": "ItemKitCrateMkII", - "-1577831321": "StructureRefrigeratedVendingMachine", - "-1573623434": "ItemFlowerBlue", - "-1567752627": "ItemWallCooler", - "-1554349863": "StructureSolarPanel45", - "-1552586384": "ItemGasCanisterPollutants", - "-1550278665": "CartridgeAtmosAnalyser", - "-1546743960": "StructureWallPaddedArchLightsFittings", - "-1545574413": "StructureSolarPanelDualReinforced", - "-1542172466": "StructureCableCorner4", - "-1536471028": "StructurePressurePlateSmall", - "-1535893860": "StructureFlashingLight", - "-1533287054": "StructureFuselageTypeA2", - "-1532448832": "ItemPipeDigitalValve", - "-1530571426": "StructureCableJunctionH5", - "-1529819532": "StructureFlagSmall", - "-1527229051": "StopWatch", - "-1516581844": "ItemUraniumOre", - "-1514298582": "Landingpad_ThreshholdPiece", - "-1513337058": "ItemFlowerGreen", - "-1513030150": "StructureCompositeCladdingAngled", - "-1510009608": "StructureChairThickSingle", - "-1505147578": "StructureInsulatedPipeCrossJunction5", - "-1499471529": "ItemNitrice", - "-1493672123": "StructureCargoStorageSmall", - "-1489728908": "StructureLogicCompare", - "-1477941080": "Landingpad_TaxiPieceStraight", - "-1472829583": "StructurePassthroughHeatExchangerLiquidToLiquid", - "-1470820996": "ItemKitCompositeCladding", - "-1469588766": "StructureChuteInlet", - "-1467449329": "StructureSleeper", - "-1462180176": "CartridgeElectronicReader", - "-1459641358": "StructurePictureFrameThickMountPortraitLarge", - "-1448105779": "ItemSteelFrames", - "-1446854725": "StructureChuteFlipFlopSplitter", - "-1434523206": "StructurePictureFrameThickLandscapeLarge", - "-1431998347": "ItemKitAdvancedComposter", - "-1430440215": "StructureLiquidTankBigInsulated", - "-1429782576": "StructureEvaporationChamber", - "-1427845483": "StructureWallGeometryTMirrored", - "-1427415566": "KitchenTableShort", - "-1425428917": "StructureChairRectangleSingle", - "-1423212473": "StructureTransformer", - "-1418288625": "StructurePictureFrameThinLandscapeLarge", - "-1417912632": "StructureCompositeCladdingAngledCornerInnerLong", - "-1414203269": "ItemPlantEndothermic_Genepool2", - "-1411986716": "ItemFlowerOrange", - "-1411327657": "AccessCardBlue", - "-1407480603": "StructureWallSmallPanelsOpen", - "-1406385572": "ItemNickelIngot", - "-1405295588": "StructurePipeCrossJunction", - "-1404690610": "StructureCableJunction6", - "-1397583760": "ItemPassiveVentInsulated", - "-1394008073": "ItemKitChairs", - "-1388288459": "StructureBatteryLarge", - "-1387439451": "ItemGasFilterNitrogenL", - "-1386237782": "KitchenTableTall", - "-1385712131": "StructureCapsuleTankGas", - "-1381321828": "StructureCryoTubeVertical", - "-1369060582": "StructureWaterWallCooler", - "-1361598922": "ItemKitTables", - "-1352732550": "ItemResearchCapsuleGreen", - "-1351081801": "StructureLargeHangerDoor", - "-1348105509": "ItemGoldOre", - "-1344601965": "ItemCannedMushroom", - "-1339716113": "AppliancePaintMixer", - "-1339479035": "AccessCardGray", - "-1337091041": "StructureChuteDigitalValveRight", - "-1332682164": "ItemKitSmallDirectHeatExchanger", - "-1330388999": "AccessCardBlack", - "-1326019434": "StructureLogicWriter", - "-1321250424": "StructureLogicWriterSwitch", - "-1309433134": "StructureWallIron04", - "-1306628937": "ItemPureIceLiquidVolatiles", - "-1306415132": "StructureWallLightBattery", - "-1303038067": "AppliancePlantGeneticAnalyzer", - "-1301215609": "ItemIronIngot", - "-1300059018": "StructureSleeperVertical", - "-1295222317": "Landingpad_2x2CenterPiece01", - "-1290755415": "SeedBag_Corn", - "-1280984102": "StructureDigitalValve", - "-1276379454": "StructureTankConnector", - "-1274308304": "ItemSuitModCryogenicUpgrade", - "-1267511065": "ItemKitLandingPadWaypoint", - "-1264455519": "DynamicGasTankAdvancedOxygen", - "-1262580790": "ItemBasketBall", - "-1260618380": "ItemSpacepack", - "-1256996603": "ItemKitRocketDatalink", - "-1252983604": "StructureGasSensor", - "-1251009404": "ItemPureIceCarbonDioxide", - "-1248429712": "ItemKitTurboVolumePump", - "-1247674305": "ItemGasFilterNitrousOxide", - "-1245724402": "StructureChairThickDouble", - "-1243329828": "StructureWallPaddingArchVent", - "-1241851179": "ItemKitConsole", - "-1241256797": "ItemKitBeds", - "-1240951678": "StructureFrameIron", - "-1234745580": "ItemDirtyOre", - "-1230658883": "StructureLargeDirectHeatExchangeGastoGas", - "-1219128491": "ItemSensorProcessingUnitOreScanner", - "-1218579821": "StructurePictureFrameThickPortraitSmall", - "-1217998945": "ItemGasFilterOxygenL", - "-1216167727": "Landingpad_LiquidConnectorInwardPiece", - "-1214467897": "ItemWreckageStructureWeatherStation008", - "-1208890208": "ItemPlantThermogenic_Creative", - "-1198702771": "ItemRocketScanningHead", - "-1196981113": "StructureCableStraightBurnt", - "-1193543727": "ItemHydroponicTray", - "-1185552595": "ItemCannedRicePudding", - "-1183969663": "StructureInLineTankLiquid1x2", - "-1182923101": "StructureInteriorDoorTriangle", - "-1181922382": "ItemKitElectronicsPrinter", - "-1178961954": "StructureWaterBottleFiller", - "-1177469307": "StructureWallVent", - "-1176140051": "ItemSensorLenses", - "-1174735962": "ItemSoundCartridgeLeads", - "-1169014183": "StructureMediumConvectionRadiatorLiquid", - "-1168199498": "ItemKitFridgeBig", - "-1166461357": "ItemKitPipeLiquid", - "-1161662836": "StructureWallFlatCornerTriangleFlat", - "-1160020195": "StructureLogicMathUnary", - "-1159179557": "ItemPlantEndothermic_Creative", - "-1154200014": "ItemSensorProcessingUnitCelestialScanner", - "-1152812099": "StructureChairRectangleDouble", - "-1152261938": "ItemGasCanisterOxygen", - "-1150448260": "ItemPureIceOxygen", - "-1149857558": "StructureBackPressureRegulator", - "-1146760430": "StructurePictureFrameThinMountLandscapeLarge", - "-1141760613": "StructureMediumRadiatorLiquid", - "-1136173965": "ApplianceMicrowave", - "-1134459463": "ItemPipeGasMixer", - "-1134148135": "CircuitboardModeControl", - "-1129453144": "StructureActiveVent", - "-1126688298": "StructureWallPaddedArchCorner", - "-1125641329": "StructurePlanter", - "-1125305264": "StructureBatteryMedium", - "-1117581553": "ItemHorticultureBelt", - "-1116110181": "CartridgeMedicalAnalyser", - "-1113471627": "StructureCompositeFloorGrating3", - "-1104478996": "ItemWreckageStructureWeatherStation004", - "-1103727120": "StructureCableFuse1k", - "-1102977898": "WeaponTorpedo", - "-1102403554": "StructureWallPaddingThin", - "-1100218307": "Landingpad_GasConnectorOutwardPiece", - "-1094868323": "AppliancePlantGeneticSplicer", - "-1093860567": "StructureMediumRocketGasFuelTank", - "-1088008720": "StructureStairs4x2Rails", - "-1081797501": "StructureShowerPowered", - "-1076892658": "ItemCookedMushroom", - "-1068925231": "ItemGlasses", - "-1068629349": "KitchenTableSimpleTall", - "-1067319543": "ItemGasFilterOxygenM", - "-1065725831": "StructureTransformerMedium", - "-1061945368": "ItemKitDynamicCanister", - "-1061510408": "ItemEmergencyPickaxe", - "-1057658015": "ItemWheat", - "-1056029600": "ItemEmergencyArcWelder", - "-1055451111": "ItemGasFilterOxygenInfinite", - "-1051805505": "StructureLiquidTurboVolumePump", - "-1044933269": "ItemPureIceLiquidHydrogen", - "-1032590967": "StructureCompositeCladdingAngledCornerInnerLongR", - "-1032513487": "StructureAreaPowerControlReversed", - "-1022714809": "StructureChuteOutlet", - "-1022693454": "ItemKitHarvie", - "-1014695176": "ItemGasCanisterFuel", - "-1011701267": "StructureCompositeWall04", - "-1009150565": "StructureSorter", - "-999721119": "StructurePipeLabel", - "-999714082": "ItemCannedEdamame", - "-998592080": "ItemTomato", - "-983091249": "ItemCobaltOre", - "-981223316": "StructureCableCorner4HBurnt", - "-976273247": "Landingpad_StraightPiece01", - "-975966237": "StructureMediumRadiator", - "-971920158": "ItemDynamicScrubber", - "-965741795": "StructureCondensationValve", - "-958884053": "StructureChuteUmbilicalMale", - "-945806652": "ItemKitElevator", - "-934345724": "StructureSolarPanelReinforced", - "-932335800": "ItemKitRocketTransformerSmall", - "-932136011": "CartridgeConfiguration", - "-929742000": "ItemSilverIngot", - "-927931558": "ItemKitHydroponicAutomated", - "-924678969": "StructureSmallTableRectangleSingle", - "-919745414": "ItemWreckageStructureWeatherStation005", - "-916518678": "ItemSilverOre", - "-913817472": "StructurePipeTJunction", - "-913649823": "ItemPickaxe", - "-906521320": "ItemPipeLiquidRadiator", - "-899013427": "StructurePortablesConnector", - "-895027741": "StructureCompositeFloorGrating2", - "-890946730": "StructureTransformerSmall", - "-889269388": "StructureCableCorner", - "-876560854": "ItemKitChuteUmbilical", - "-874791066": "ItemPureIceSteam", - "-869869491": "ItemBeacon", - "-868916503": "ItemKitWindTurbine", - "-867969909": "ItemKitRocketMiner", - "-862048392": "StructureStairwellBackPassthrough", - "-858143148": "StructureWallArch", - "-857713709": "HumanSkull", - "-851746783": "StructureLogicMemory", - "-850484480": "StructureChuteBin", - "-846838195": "ItemKitWallFlat", - "-842048328": "ItemActiveVent", - "-838472102": "ItemFlashlight", - "-834664349": "ItemWreckageStructureWeatherStation001", - "-831480639": "ItemBiomass", - "-831211676": "ItemKitPowerTransmitterOmni", - "-828056979": "StructureKlaxon", - "-827912235": "StructureElevatorLevelFront", - "-827125300": "ItemKitPipeOrgan", - "-821868990": "ItemKitWallPadded", - "-817051527": "DynamicGasCanisterFuel", - "-816454272": "StructureReinforcedCompositeWindowSteel", - "-815193061": "StructureConsoleLED5", - "-813426145": "StructureInsulatedInLineTankLiquid1x1", - "-810874728": "StructureChuteDigitalFlipFlopSplitterLeft", - "-806986392": "MotherboardRockets", - "-806743925": "ItemKitFurnace", - "-800947386": "ItemTropicalPlant", - "-799849305": "ItemKitLiquidTank", - "-796627526": "StructureResearchMachine", - "-793837322": "StructureCompositeDoor", - "-793623899": "StructureStorageLocker", - "-788672929": "RespawnPoint", - "-787796599": "ItemInconelIngot", - "-785498334": "StructurePoweredVentLarge", - "-784733231": "ItemKitWallGeometry", - "-783387184": "StructureInsulatedPipeCrossJunction4", - "-782951720": "StructurePowerConnector", - "-782453061": "StructureLiquidPipeOneWayValve", - "-776581573": "StructureWallLargePanelArrow", - "-775128944": "StructureShower", - "-772542081": "ItemChemLightBlue", - "-767867194": "StructureLogicSlotReader", - "-767685874": "ItemGasCanisterCarbonDioxide", - "-767597887": "ItemPipeAnalyizer", - "-761772413": "StructureBatteryChargerSmall", - "-756587791": "StructureWaterBottleFillerPowered", - "-749191906": "AppliancePackagingMachine", - "-744098481": "ItemIntegratedCircuit10", - "-743968726": "ItemLabeller", - "-742234680": "StructureCableJunctionH4", - "-739292323": "StructureWallCooler", - "-737232128": "StructurePurgeValve", - "-733500083": "StructureCrateMount", - "-732720413": "ItemKitDynamicGenerator", - "-722284333": "StructureConsoleDual", - "-721824748": "ItemGasFilterOxygen", - "-709086714": "ItemCookedTomato", - "-707307845": "ItemCopperOre", - "-693235651": "StructureLogicTransmitter", - "-692036078": "StructureValve", - "-688284639": "StructureCompositeWindowIron", - "-688107795": "ItemSprayCanBlack", - "-684020753": "ItemRocketMiningDrillHeadLongTerm", - "-676435305": "ItemMiningBelt", - "-668314371": "ItemGasCanisterSmart", - "-665995854": "ItemFlour", - "-660451023": "StructureSmallTableRectangleDouble", - "-659093969": "StructureChuteUmbilicalFemaleSide", - "-654790771": "ItemSteelIngot", - "-654756733": "SeedBag_Wheet", - "-654619479": "StructureRocketTower", - "-648683847": "StructureGasUmbilicalFemaleSide", - "-647164662": "StructureLockerSmall", - "-641491515": "StructureSecurityPrinter", - "-639306697": "StructureWallSmallPanelsArrow", - "-638019974": "ItemKitDynamicMKIILiquidCanister", - "-636127860": "ItemKitRocketManufactory", - "-633723719": "ItemPureIceVolatiles", - "-632657357": "ItemGasFilterNitrogenM", - "-631590668": "StructureCableFuse5k", - "-628145954": "StructureCableJunction6Burnt", - "-626563514": "StructureComputer", - "-624011170": "StructurePressureFedGasEngine", - "-619745681": "StructureGroundBasedTelescope", - "-616758353": "ItemKitAdvancedFurnace", - "-613784254": "StructureHeatExchangerLiquidtoLiquid", - "-611232514": "StructureChuteJunction", - "-607241919": "StructureChuteWindow", - "-598730959": "ItemWearLamp", - "-598545233": "ItemKitAdvancedPackagingMachine", - "-597479390": "ItemChemLightGreen", - "-583103395": "EntityRoosterBrown", - "-566775170": "StructureLargeExtendableRadiator", - "-566348148": "StructureMediumHangerDoor", - "-558953231": "StructureLaunchMount", - "-554553467": "StructureShortLocker", - "-551612946": "ItemKitCrateMount", - "-545234195": "ItemKitCryoTube", - "-539224550": "StructureSolarPanelDual", - "-532672323": "ItemPlantSwitchGrass", - "-532384855": "StructureInsulatedPipeLiquidTJunction", - "-528695432": "ItemKitSolarPanelBasicReinforced", - "-525810132": "ItemChemLightRed", - "-524546923": "ItemKitWallIron", - "-524289310": "ItemEggCarton", - "-517628750": "StructureWaterDigitalValve", - "-507770416": "StructureSmallDirectHeatExchangeLiquidtoLiquid", - "-504717121": "ItemWirelessBatteryCellExtraLarge", - "-503738105": "ItemGasFilterPollutantsInfinite", - "-498464883": "ItemSprayCanBlue", - "-491247370": "RespawnPointWallMounted", - "-487378546": "ItemIronSheets", - "-472094806": "ItemGasCanisterVolatiles", - "-466050668": "ItemCableCoil", - "-465741100": "StructureToolManufactory", - "-463037670": "StructureAdvancedPackagingMachine", - "-462415758": "Battery_Wireless_cell", - "-459827268": "ItemBatteryCellLarge", - "-454028979": "StructureLiquidVolumePump", - "-453039435": "ItemKitTransformer", - "-443130773": "StructureVendingMachine", - "-419758574": "StructurePipeHeater", - "-417629293": "StructurePipeCrossJunction4", - "-415420281": "StructureLadder", - "-412551656": "ItemHardJetpack", - "-412104504": "CircuitboardCameraDisplay", - "-404336834": "ItemCopperIngot", - "-400696159": "ReagentColorOrange", - "-400115994": "StructureBattery", - "-399883995": "StructurePipeRadiatorFlat", - "-387546514": "StructureCompositeCladdingAngledLong", - "-386375420": "DynamicGasTankAdvanced", - "-385323479": "WeaponPistolEnergy", - "-383972371": "ItemFertilizedEgg", - "-380904592": "ItemRocketMiningDrillHeadIce", - "-375156130": "Flag_ODA_8m", - "-374567952": "AccessCardGreen", - "-367720198": "StructureChairBoothCornerLeft", - "-366262681": "ItemKitFuselage", - "-365253871": "ItemSolidFuel", - "-364868685": "ItemKitSolarPanelReinforced", - "-355127880": "ItemToolBelt", - "-351438780": "ItemEmergencyAngleGrinder", - "-349716617": "StructureCableFuse50k", - "-348918222": "StructureCompositeCladdingAngledCornerLongR", - "-348054045": "StructureFiltration", - "-345383640": "StructureLogicReader", - "-344968335": "ItemKitMotherShipCore", - "-342072665": "StructureCamera", - "-341365649": "StructureCableJunctionHBurnt", - "-337075633": "MotherboardComms", - "-332896929": "AccessCardOrange", - "-327468845": "StructurePowerTransmitterOmni", - "-324331872": "StructureGlassDoor", - "-322413931": "DynamicGasCanisterCarbonDioxide", - "-321403609": "StructureVolumePump", - "-319510386": "DynamicMKIILiquidCanisterWater", - "-314072139": "ItemKitRocketBattery", - "-311170652": "ElectronicPrinterMod", - "-310178617": "ItemWreckageHydroponicsTray1", - "-303008602": "ItemKitRocketCelestialTracker", - "-302420053": "StructureFrameSide", - "-297990285": "ItemInvarIngot", - "-291862981": "StructureSmallTableThickSingle", - "-290196476": "ItemSiliconIngot", - "-287495560": "StructureLiquidPipeHeater", - "-260316435": "StructureStirlingEngine", - "-259357734": "StructureCompositeCladdingRounded", - "-256607540": "SMGMagazine", - "-248475032": "ItemLiquidPipeHeater", - "-247344692": "StructureArcFurnace", - "-229808600": "ItemTablet", - "-214232602": "StructureGovernedGasEngine", - "-212902482": "StructureStairs4x2RailR", - "-190236170": "ItemLeadOre", - "-188177083": "StructureBeacon", - "-185568964": "ItemGasFilterCarbonDioxideInfinite", - "-185207387": "ItemLiquidCanisterEmpty", - "-178893251": "ItemMKIIWireCutters", - "-177792789": "ItemPlantThermogenic_Genepool1", - "-177610944": "StructureInsulatedInLineTankGas1x2", - "-177220914": "StructureCableCornerBurnt", - "-175342021": "StructureCableJunction", - "-174523552": "ItemKitLaunchTower", - "-164622691": "StructureBench3", - "-161107071": "MotherboardProgrammableChip", - "-158007629": "ItemSprayCanOrange", - "-155945899": "StructureWallPaddedCorner", - "-146200530": "StructureCableStraightH", - "-137465079": "StructureDockPortSide", - "-128473777": "StructureCircuitHousing", - "-127121474": "MotherboardMissionControl", - "-126038526": "ItemKitSpeaker", - "-124308857": "StructureLogicReagentReader", - "-123934842": "ItemGasFilterNitrousOxideInfinite", - "-121514007": "ItemKitPressureFedGasEngine", - "-115809132": "StructureCableJunction4HBurnt", - "-110788403": "ElevatorCarrage", - "-104908736": "StructureFairingTypeA2", - "-99091572": "ItemKitPressureFedLiquidEngine", - "-99064335": "Meteorite", - "-98995857": "ItemKitArcFurnace", - "-92778058": "StructureInsulatedPipeCrossJunction", - "-90898877": "ItemWaterPipeMeter", - "-86315541": "FireArmSMG", - "-84573099": "ItemHardsuitHelmet", - "-82508479": "ItemSolderIngot", - "-82343730": "CircuitboardGasDisplay", - "-82087220": "DynamicGenerator", - "-81376085": "ItemFlowerRed", - "-78099334": "KitchenTableSimpleShort", - "-73796547": "ImGuiCircuitboardAirlockControl", - "-72748982": "StructureInsulatedPipeLiquidCrossJunction6", - "-69685069": "StructureCompositeCladdingAngledCorner", - "-65087121": "StructurePowerTransmitter", - "-57608687": "ItemFrenchFries", - "-53151617": "StructureConsoleLED1x2", - "-48342840": "UniformMarine", - "-41519077": "Battery_Wireless_cell_Big", - "-39359015": "StructureCableCornerH", - "-38898376": "ItemPipeCowl", - "-37454456": "StructureStairwellFrontLeft", - "-37302931": "StructureWallPaddedWindowThin", - "-31273349": "StructureInsulatedTankConnector", - "-27284803": "ItemKitInsulatedPipeUtility", - "-21970188": "DynamicLight", - "-21225041": "ItemKitBatteryLarge", - "-19246131": "StructureSmallTableThickDouble", - "-9559091": "ItemAmmoBox", - "-9555593": "StructurePipeLiquidCrossJunction4", - "-8883951": "DynamicGasCanisterRocketFuel", - "-1755356": "ItemPureIcePollutant", - "-997763": "ItemWreckageLargeExtendableRadiator01", - "-492611": "StructureSingleBed", - "2393826": "StructureCableCorner3HBurnt", - "7274344": "StructureAutoMinerSmall", - "8709219": "CrateMkII", - "8804422": "ItemGasFilterWaterM", - "8846501": "StructureWallPaddedNoBorder", - "15011598": "ItemGasFilterVolatiles", - "15829510": "ItemMiningCharge", - "19645163": "ItemKitEngineSmall", - "21266291": "StructureHeatExchangerGastoGas", - "23052817": "StructurePressurantValve", - "24258244": "StructureWallHeater", - "24786172": "StructurePassiveLargeRadiatorLiquid", - "26167457": "StructureWallPlating", - "30686509": "ItemSprayCanPurple", - "30727200": "DynamicGasCanisterNitrousOxide", - "35149429": "StructureInLineTankGas1x2", - "38555961": "ItemSteelSheets", - "42280099": "ItemGasCanisterEmpty", - "45733800": "ItemWreckageWallCooler2", - "62768076": "ItemPumpkinPie", - "63677771": "ItemGasFilterPollutantsM", - "73728932": "StructurePipeStraight", - "77421200": "ItemKitDockingPort", - "81488783": "CartridgeTracker", - "94730034": "ToyLuna", - "98602599": "ItemWreckageTurbineGenerator2", - "101488029": "StructurePowerUmbilicalFemale", - "106953348": "DynamicSkeleton", - "107741229": "ItemWaterBottle", - "108086870": "DynamicGasCanisterVolatiles", - "110184667": "StructureCompositeCladdingRoundedCornerInner", - "111280987": "ItemTerrainManipulator", - "118685786": "FlareGun", - "119096484": "ItemKitPlanter", - "120807542": "ReagentColorGreen", - "121951301": "DynamicGasCanisterNitrogen", - "123504691": "ItemKitPressurePlate", - "124499454": "ItemKitLogicSwitch", - "139107321": "StructureCompositeCladdingSpherical", - "141535121": "ItemLaptop", - "142831994": "ApplianceSeedTray", - "146051619": "Landingpad_TaxiPieceHold", - "147395155": "StructureFuselageTypeC5", - "148305004": "ItemKitBasket", - "150135861": "StructureRocketCircuitHousing", - "152378047": "StructurePipeCrossJunction6", - "152751131": "ItemGasFilterNitrogenInfinite", - "155214029": "StructureStairs4x2RailL", - "155856647": "NpcChick", - "156348098": "ItemWaspaloyIngot", - "158502707": "StructureReinforcedWallPaddedWindowThin", - "159886536": "ItemKitWaterBottleFiller", - "162553030": "ItemEmergencyWrench", - "163728359": "StructureChuteDigitalFlipFlopSplitterRight", - "168307007": "StructureChuteStraight", - "168615924": "ItemKitDoor", - "169888054": "ItemWreckageAirConditioner2", - "170818567": "Landingpad_GasCylinderTankPiece", - "170878959": "ItemKitStairs", - "173023800": "ItemPlantSampler", - "176446172": "ItemAlienMushroom", - "178422810": "ItemKitSatelliteDish", - "178472613": "StructureRocketEngineTiny", - "179694804": "StructureWallPaddedNoBorderCorner", - "182006674": "StructureShelfMedium", - "195298587": "StructureExpansionValve", - "195442047": "ItemCableFuse", - "197243872": "ItemKitRoverMKI", - "197293625": "DynamicGasCanisterWater", - "201215010": "ItemAngleGrinder", - "205837861": "StructureCableCornerH4", - "205916793": "ItemEmergencySpaceHelmet", - "206848766": "ItemKitGovernedGasRocketEngine", - "209854039": "StructurePressureRegulator", - "212919006": "StructureCompositeCladdingCylindrical", - "215486157": "ItemCropHay", - "220644373": "ItemKitLogicProcessor", - "221058307": "AutolathePrinterMod", - "225377225": "StructureChuteOverflow", - "226055671": "ItemLiquidPipeAnalyzer", - "226410516": "ItemGoldIngot", - "231903234": "KitStructureCombustionCentrifuge", - "235361649": "ItemExplosive", - "235638270": "StructureConsole", - "238631271": "ItemPassiveVent", - "240174650": "ItemMKIIAngleGrinder", - "247238062": "Handgun", - "248893646": "PassiveSpeaker", - "249073136": "ItemKitBeacon", - "252561409": "ItemCharcoal", - "255034731": "StructureSuitStorage", - "258339687": "ItemCorn", - "262616717": "StructurePipeLiquidTJunction", - "264413729": "StructureLogicBatchReader", - "265720906": "StructureDeepMiner", - "266099983": "ItemEmergencyScrewdriver", - "266654416": "ItemFilterFern", - "268421361": "StructureCableCorner4Burnt", - "271315669": "StructureFrameCornerCut", - "272136332": "StructureTankSmallInsulated", - "281380789": "StructureCableFuse100k", - "288111533": "ItemKitIceCrusher", - "291368213": "ItemKitPowerTransmitter", - "291524699": "StructurePipeLiquidCrossJunction6", - "293581318": "ItemKitLandingPadBasic", - "295678685": "StructureInsulatedPipeLiquidStraight", - "298130111": "StructureWallFlatCornerSquare", - "299189339": "ItemHat", - "309693520": "ItemWaterPipeDigitalValve", - "311593418": "SeedBag_Mushroom", - "318437449": "StructureCableCorner3Burnt", - "321604921": "StructureLogicSwitch2", - "322782515": "StructureOccupancySensor", - "323957548": "ItemKitSDBHopper", - "324791548": "ItemMKIIDrill", - "324868581": "StructureCompositeFloorGrating", - "326752036": "ItemKitSleeper", - "334097180": "EntityChickenBrown", - "335498166": "StructurePassiveVent", - "336213101": "StructureAutolathe", - "337035771": "AccessCardKhaki", - "337416191": "StructureBlastDoor", - "337505889": "ItemKitWeatherStation", - "340210934": "StructureStairwellFrontRight", - "341030083": "ItemKitGrowLight", - "347154462": "StructurePictureFrameThickMountLandscapeSmall", - "350726273": "RoverCargo", - "363303270": "StructureInsulatedPipeLiquidCrossJunction4", - "374891127": "ItemHardBackpack", - "375541286": "ItemKitDynamicLiquidCanister", - "377745425": "ItemKitGasGenerator", - "378084505": "StructureBlocker", - "379750958": "StructurePressureFedLiquidEngine", - "386754635": "ItemPureIceNitrous", - "386820253": "StructureWallSmallPanelsMonoChrome", - "388774906": "ItemMKIIDuctTape", - "391453348": "ItemWreckageStructureRTG1", - "391769637": "ItemPipeLabel", - "396065382": "DynamicGasCanisterPollutants", - "399074198": "NpcChicken", - "399661231": "RailingElegant01", - "406745009": "StructureBench1", - "412924554": "ItemAstroloyIngot", - "416897318": "ItemGasFilterCarbonDioxideM", - "418958601": "ItemPillStun", - "429365598": "ItemKitCrate", - "431317557": "AccessCardPink", - "433184168": "StructureWaterPipeMeter", - "434786784": "Robot", - "434875271": "StructureChuteValve", - "435685051": "StructurePipeAnalysizer", - "436888930": "StructureLogicBatchSlotReader", - "439026183": "StructureSatelliteDish", - "443849486": "StructureIceCrusher", - "443947415": "PipeBenderMod", - "446212963": "StructureAdvancedComposter", - "450164077": "ItemKitLargeDirectHeatExchanger", - "452636699": "ItemKitInsulatedPipe", - "459843265": "AccessCardPurple", - "465267979": "ItemGasFilterNitrousOxideL", - "465816159": "StructurePipeCowl", - "467225612": "StructureSDBHopperAdvanced", - "469451637": "StructureCableJunctionH", - "470636008": "ItemHEMDroidRepairKit", - "479850239": "ItemKitRocketCargoStorage", - "482248766": "StructureLiquidPressureRegulator", - "488360169": "SeedBag_Switchgrass", - "489494578": "ItemKitLadder", - "491845673": "StructureLogicButton", - "495305053": "ItemRTG", - "496830914": "ItemKitAIMeE", - "498481505": "ItemSprayCanWhite", - "502280180": "ItemElectrumIngot", - "502555944": "MotherboardLogic", - "505924160": "StructureStairwellBackLeft", - "513258369": "ItemKitAccessBridge", - "518925193": "StructureRocketTransformerSmall", - "519913639": "DynamicAirConditioner", - "529137748": "ItemKitToolManufactory", - "529996327": "ItemKitSign", - "534213209": "StructureCompositeCladdingSphericalCap", - "541621589": "ItemPureIceLiquidOxygen", - "542009679": "ItemWreckageStructureWeatherStation003", - "543645499": "StructureInLineTankLiquid1x1", - "544617306": "ItemBatteryCellNuclear", - "545034114": "ItemCornSoup", - "545937711": "StructureAdvancedFurnace", - "546002924": "StructureLogicRocketUplink", - "554524804": "StructureLogicDial", - "555215790": "StructureLightLongWide", - "568800213": "StructureProximitySensor", - "568932536": "AccessCardYellow", - "576516101": "StructureDiodeSlide", - "578078533": "ItemKitSecurityPrinter", - "578182956": "ItemKitCentrifuge", - "587726607": "DynamicHydroponics", - "595478589": "ItemKitPipeUtilityLiquid", - "600133846": "StructureCompositeFloorGrating4", - "605357050": "StructureCableStraight", - "608607718": "StructureLiquidTankSmallInsulated", - "611181283": "ItemKitWaterPurifier", - "617773453": "ItemKitLiquidTankInsulated", - "619828719": "StructureWallSmallPanelsAndHatch", - "632853248": "ItemGasFilterNitrogen", - "635208006": "ReagentColorYellow", - "635995024": "StructureWallPadding", - "636112787": "ItemKitPassthroughHeatExchanger", - "648608238": "StructureChuteDigitalValveLeft", - "653461728": "ItemRocketMiningDrillHeadHighSpeedIce", - "656649558": "ItemWreckageStructureWeatherStation007", - "658916791": "ItemRice", - "662053345": "ItemPlasticSheets", - "665194284": "ItemKitTransformerSmall", - "667597982": "StructurePipeLiquidStraight", - "675686937": "ItemSpaceIce", - "678483886": "ItemRemoteDetonator", - "682546947": "ItemKitAirlockGate", - "687940869": "ItemScrewdriver", - "688734890": "ItemTomatoSoup", - "690945935": "StructureCentrifuge", - "697908419": "StructureBlockBed", - "700133157": "ItemBatteryCell", - "714830451": "ItemSpaceHelmet", - "718343384": "StructureCompositeWall02", - "721251202": "ItemKitRocketCircuitHousing", - "724776762": "ItemKitResearchMachine", - "731250882": "ItemElectronicParts", - "735858725": "ItemKitShower", - "750118160": "StructureUnloader", - "750176282": "ItemKitRailing", - "750952701": "ItemResearchCapsuleYellow", - "751887598": "StructureFridgeSmall", - "755048589": "DynamicScrubber", - "755302726": "ItemKitEngineLarge", - "771439840": "ItemKitTank", - "777684475": "ItemLiquidCanisterSmart", - "782529714": "StructureWallArchTwoTone", - "789015045": "ItemAuthoringTool", - "789494694": "WeaponEnergy", - "791746840": "ItemCerealBar", - "792686502": "StructureLargeDirectHeatExchangeLiquidtoLiquid", - "797794350": "StructureLightLong", - "798439281": "StructureWallIron03", - "799323450": "ItemPipeValve", - "801677497": "StructureConsoleMonitor", - "806513938": "StructureRover", - "808389066": "StructureRocketAvionics", - "810053150": "UniformOrangeJumpSuit", - "813146305": "StructureSolidFuelGenerator", - "817945707": "Landingpad_GasConnectorInwardPiece", - "819096942": "ItemResearchCapsule", - "826144419": "StructureElevatorShaft", - "833912764": "StructureTransformerMediumReversed", - "839890807": "StructureFlatBench", - "839924019": "ItemPowerConnector", - "844391171": "ItemKitHorizontalAutoMiner", - "844961456": "ItemKitSolarPanelBasic", - "845176977": "ItemSprayCanBrown", - "847430620": "ItemKitLargeExtendableRadiator", - "847461335": "StructureInteriorDoorPadded", - "849148192": "ItemKitRecycler", - "850558385": "StructureCompositeCladdingAngledCornerLong", - "851290561": "ItemPlantEndothermic_Genepool1", - "855694771": "CircuitboardDoorControl", - "856108234": "ItemCrowbar", - "861674123": "Rover_MkI_build_states", - "871432335": "AppliancePlantGeneticStabilizer", - "871811564": "ItemRoadFlare", - "872720793": "CartridgeGuide", - "873418029": "StructureLogicSorter", - "876108549": "StructureLogicRocketDownlink", - "879058460": "StructureSign1x1", - "882301399": "ItemKitLocker", - "882307910": "StructureCompositeFloorGratingOpenRotated", - "887383294": "StructureWaterPurifier", - "890106742": "ItemIgniter", - "892110467": "ItemFern", - "893514943": "ItemBreadLoaf", - "894390004": "StructureCableJunction5", - "897176943": "ItemInsulation", - "898708250": "StructureWallFlatCornerRound", - "900366130": "ItemHardMiningBackPack", - "902565329": "ItemDirtCanister", - "908320837": "StructureSign2x1", - "912176135": "CircuitboardAirlockControl", - "912453390": "Landingpad_BlankPiece", - "920411066": "ItemKitPipeRadiator", - "929022276": "StructureLogicMinMax", - "930865127": "StructureSolarPanel45Reinforced", - "938836756": "StructurePoweredVent", - "944530361": "ItemPureIceHydrogen", - "944685608": "StructureHeatExchangeLiquidtoGas", - "947705066": "StructureCompositeCladdingAngledCornerInnerLongL", - "950004659": "StructurePictureFrameThickMountLandscapeLarge", - "954947943": "ItemResearchCapsuleRed", - "955744474": "StructureTankSmallAir", - "958056199": "StructureHarvie", - "958476921": "StructureFridgeBig", - "964043875": "ItemKitAirlock", - "966959649": "EntityRoosterBlack", - "969522478": "ItemKitSorter", - "976699731": "ItemEmergencyCrowbar", - "977899131": "Landingpad_DiagonalPiece01", - "980054869": "ReagentColorBlue", - "980469101": "StructureCableCorner3", - "982514123": "ItemNVG", - "989835703": "StructurePlinth", - "995468116": "ItemSprayCanYellow", - "997453927": "StructureRocketCelestialTracker", - "998653377": "ItemHighVolumeGasCanisterEmpty", - "1005397063": "ItemKitLogicTransmitter", - "1005491513": "StructureIgniter", - "1005571172": "SeedBag_Potato", - "1005843700": "ItemDataDisk", - "1008295833": "ItemBatteryChargerSmall", - "1010807532": "EntityChickenWhite", - "1013244511": "ItemKitStacker", - "1013514688": "StructureTankSmall", - "1013818348": "ItemEmptyCan", - "1021053608": "ItemKitTankInsulated", - "1025254665": "ItemKitChute", - "1033024712": "StructureFuselageTypeA1", - "1036015121": "StructureCableAnalysizer", - "1036780772": "StructureCableJunctionH6", - "1037507240": "ItemGasFilterVolatilesM", - "1041148999": "ItemKitPortablesConnector", - "1048813293": "StructureFloorDrain", - "1049735537": "StructureWallGeometryStreight", - "1054059374": "StructureTransformerSmallReversed", - "1055173191": "ItemMiningDrill", - "1058547521": "ItemConstantanIngot", - "1061164284": "StructureInsulatedPipeCrossJunction6", - "1070143159": "Landingpad_CenterPiece01", - "1070427573": "StructureHorizontalAutoMiner", - "1072914031": "ItemDynamicAirCon", - "1073631646": "ItemMarineHelmet", - "1076425094": "StructureDaylightSensor", - "1077151132": "StructureCompositeCladdingCylindricalPanel", - "1083675581": "ItemRocketMiningDrillHeadMineral", - "1088892825": "ItemKitSuitStorage", - "1094895077": "StructurePictureFrameThinMountPortraitLarge", - "1098900430": "StructureLiquidTankBig", - "1101296153": "Landingpad_CrossPiece", - "1101328282": "CartridgePlantAnalyser", - "1103972403": "ItemSiliconOre", - "1108423476": "ItemWallLight", - "1112047202": "StructureCableJunction4", - "1118069417": "ItemPillHeal", - "1143639539": "StructureMediumRocketLiquidFuelTank", - "1151864003": "StructureCargoStorageMedium", - "1154745374": "WeaponRifleEnergy", - "1155865682": "StructureSDBSilo", - "1159126354": "Flag_ODA_4m", - "1161510063": "ItemCannedPowderedEggs", - "1162905029": "ItemKitFurniture", - "1165997963": "StructureGasGenerator", - "1167659360": "StructureChair", - "1171987947": "StructureWallPaddedArchLightFittingTop", - "1172114950": "StructureShelf", - "1174360780": "ApplianceDeskLampRight", - "1181371795": "ItemKitRegulator", - "1182412869": "ItemKitCompositeFloorGrating", - "1182510648": "StructureWallArchPlating", - "1183203913": "StructureWallPaddedCornerThin", - "1195820278": "StructurePowerTransmitterReceiver", - "1207939683": "ItemPipeMeter", - "1212777087": "StructurePictureFrameThinPortraitLarge", - "1213495833": "StructureSleeperLeft", - "1217489948": "ItemIce", - "1220484876": "StructureLogicSwitch", - "1220870319": "StructureLiquidUmbilicalFemaleSide", - "1222286371": "ItemKitAtmospherics", - "1224819963": "ItemChemLightYellow", - "1225836666": "ItemIronFrames", - "1228794916": "CompositeRollCover", - "1237302061": "StructureCompositeWall", - "1238905683": "StructureCombustionCentrifuge", - "1253102035": "ItemVolatiles", - "1254383185": "HandgunMagazine", - "1255156286": "ItemGasFilterVolatilesL", - "1258187304": "ItemMiningDrillPneumatic", - "1260651529": "StructureSmallTableDinnerSingle", - "1260918085": "ApplianceReagentProcessor", - "1269458680": "StructurePressurePlateMedium", - "1277828144": "ItemPumpkin", - "1277979876": "ItemPumpkinSoup", - "1280378227": "StructureTankBigInsulated", - "1281911841": "StructureWallArchCornerTriangle", - "1282191063": "StructureTurbineGenerator", - "1286441942": "StructurePipeIgniter", - "1287324802": "StructureWallIron", - "1289723966": "ItemSprayGun", - "1293995736": "ItemKitSolidGenerator", - "1298920475": "StructureAccessBridge", - "1305252611": "StructurePipeOrgan", - "1307165496": "StructureElectronicsPrinter", - "1308115015": "StructureFuselageTypeA4", - "1310303582": "StructureSmallDirectHeatExchangeGastoGas", - "1310794736": "StructureTurboVolumePump", - "1312166823": "ItemChemLightWhite", - "1327248310": "ItemMilk", - "1328210035": "StructureInsulatedPipeCrossJunction3", - "1330754486": "StructureShortCornerLocker", - "1331802518": "StructureTankConnectorLiquid", - "1344257263": "ItemSprayCanPink", - "1344368806": "CircuitboardGraphDisplay", - "1344576960": "ItemWreckageStructureWeatherStation006", - "1344773148": "ItemCookedCorn", - "1353449022": "ItemCookedSoybean", - "1360330136": "StructureChuteCorner", - "1360925836": "DynamicGasCanisterOxygen", - "1363077139": "StructurePassiveVentInsulated", - "1365789392": "ApplianceChemistryStation", - "1366030599": "ItemPipeIgniter", - "1371786091": "ItemFries", - "1382098999": "StructureSleeperVerticalDroid", - "1385062886": "ItemArcWelder", - "1387403148": "ItemSoyOil", - "1396305045": "ItemKitRocketAvionics", - "1399098998": "ItemMarineBodyArmor", - "1405018945": "StructureStairs4x2", - "1406656973": "ItemKitBattery", - "1412338038": "StructureLargeDirectHeatExchangeGastoLiquid", - "1412428165": "AccessCardBrown", - "1415396263": "StructureCapsuleTankLiquid", - "1415443359": "StructureLogicBatchWriter", - "1420719315": "StructureCondensationChamber", - "1423199840": "SeedBag_Pumpkin", - "1428477399": "ItemPureIceLiquidNitrous", - "1432512808": "StructureFrame", - "1433754995": "StructureWaterBottleFillerBottom", - "1436121888": "StructureLightRoundSmall", - "1440678625": "ItemRocketMiningDrillHeadHighSpeedMineral", - "1440775434": "ItemMKIICrowbar", - "1441767298": "StructureHydroponicsStation", - "1443059329": "StructureCryoTubeHorizontal", - "1452100517": "StructureInsulatedInLineTankLiquid1x2", - "1453961898": "ItemKitPassiveLargeRadiatorLiquid", - "1459985302": "ItemKitReinforcedWindows", - "1464424921": "ItemWreckageStructureWeatherStation002", - "1464854517": "StructureHydroponicsTray", - "1467558064": "ItemMkIIToolbelt", - "1468249454": "StructureOverheadShortLocker", - "1470787934": "ItemMiningBeltMKII", - "1473807953": "StructureTorpedoRack", - "1485834215": "StructureWallIron02", - "1492930217": "StructureWallLargePanel", - "1512322581": "ItemKitLogicCircuit", - "1514393921": "ItemSprayCanRed", - "1514476632": "StructureLightRound", - "1517856652": "Fertilizer", - "1529453938": "StructurePowerUmbilicalMale", - "1530764483": "ItemRocketMiningDrillHeadDurable", - "1531087544": "DecayedFood", - "1531272458": "LogicStepSequencer8", - "1533501495": "ItemKitDynamicGasTankAdvanced", - "1535854074": "ItemWireCutters", - "1541734993": "StructureLadderEnd", - "1544275894": "ItemGrenade", - "1545286256": "StructureCableJunction5Burnt", - "1559586682": "StructurePlatformLadderOpen", - "1570931620": "StructureTraderWaypoint", - "1571996765": "ItemKitLiquidUmbilical", - "1574321230": "StructureCompositeWall03", - "1574688481": "ItemKitRespawnPointWallMounted", - "1579842814": "ItemHastelloyIngot", - "1580412404": "StructurePipeOneWayValve", - "1585641623": "StructureStackerReverse", - "1587787610": "ItemKitEvaporationChamber", - "1588896491": "ItemGlassSheets", - "1590330637": "StructureWallPaddedArch", - "1592905386": "StructureLightRoundAngled", - "1602758612": "StructureWallGeometryT", - "1603046970": "ItemKitElectricUmbilical", - "1605130615": "Lander", - "1606989119": "CartridgeNetworkAnalyser", - "1618019559": "CircuitboardAirControl", - "1622183451": "StructureUprightWindTurbine", - "1622567418": "StructureFairingTypeA1", - "1625214531": "ItemKitWallArch", - "1628087508": "StructurePipeLiquidCrossJunction3", - "1632165346": "StructureGasTankStorage", - "1633074601": "CircuitboardHashDisplay", - "1633663176": "CircuitboardAdvAirlockControl", - "1635000764": "ItemGasFilterCarbonDioxide", - "1635864154": "StructureWallFlat", - "1640720378": "StructureChairBoothMiddle", - "1649708822": "StructureWallArchArrow", - "1654694384": "StructureInsulatedPipeLiquidCrossJunction5", - "1657691323": "StructureLogicMath", - "1661226524": "ItemKitFridgeSmall", - "1661270830": "ItemScanner", - "1661941301": "ItemEmergencyToolBelt", - "1668452680": "StructureEmergencyButton", - "1668815415": "ItemKitAutoMinerSmall", - "1672275150": "StructureChairBacklessSingle", - "1674576569": "ItemPureIceLiquidNitrogen", - "1677018918": "ItemEvaSuit", - "1684488658": "StructurePictureFrameThinPortraitSmall", - "1687692899": "StructureLiquidDrain", - "1691898022": "StructureLiquidTankStorage", - "1696603168": "StructurePipeRadiator", - "1697196770": "StructureSolarPanelFlatReinforced", - "1700018136": "ToolPrinterMod", - "1701593300": "StructureCableJunctionH5Burnt", - "1701764190": "ItemKitFlagODA", - "1709994581": "StructureWallSmallPanelsTwoTone", - "1712822019": "ItemFlowerYellow", - "1713710802": "StructureInsulatedPipeLiquidCorner", - "1715917521": "ItemCookedCondensedMilk", - "1717593480": "ItemGasSensor", - "1722785341": "ItemAdvancedTablet", - "1724793494": "ItemCoalOre", - "1730165908": "EntityChick", - "1734723642": "StructureLiquidUmbilicalFemale", - "1736080881": "StructureAirlockGate", - "1738236580": "CartridgeOreScannerColor", - "1750375230": "StructureBench4", - "1751355139": "StructureCompositeCladdingSphericalCorner", - "1753647154": "ItemKitRocketScanner", - "1757673317": "ItemAreaPowerControl", - "1758427767": "ItemIronOre", - "1762696475": "DeviceStepUnit", - "1769527556": "StructureWallPaddedThinNoBorderCorner", - "1779979754": "ItemKitWindowShutter", - "1781051034": "StructureRocketManufactory", - "1783004244": "SeedBag_Soybean", - "1791306431": "ItemEmergencyEvaSuit", - "1794588890": "StructureWallArchCornerRound", - "1800622698": "ItemCoffeeMug", - "1811979158": "StructureAngledBench", - "1812364811": "StructurePassiveLiquidDrain", - "1817007843": "ItemKitLandingPadAtmos", - "1817645803": "ItemRTGSurvival", - "1818267386": "StructureInsulatedInLineTankGas1x1", - "1819167057": "ItemPlantThermogenic_Genepool2", - "1822736084": "StructureLogicSelect", - "1824284061": "ItemGasFilterNitrousOxideM", - "1825212016": "StructureSmallDirectHeatExchangeLiquidtoGas", - "1827215803": "ItemKitRoverFrame", - "1830218956": "ItemNickelOre", - "1835796040": "StructurePictureFrameThinMountPortraitSmall", - "1840108251": "H2Combustor", - "1845441951": "Flag_ODA_10m", - "1847265835": "StructureLightLongAngled", - "1848735691": "StructurePipeLiquidCrossJunction", - "1849281546": "ItemCookedPumpkin", - "1849974453": "StructureLiquidValve", - "1853941363": "ApplianceTabletDock", - "1854404029": "StructureCableJunction6HBurnt", - "1862001680": "ItemMKIIWrench", - "1871048978": "ItemAdhesiveInsulation", - "1876847024": "ItemGasFilterCarbonDioxideL", - "1880134612": "ItemWallHeater", - "1898243702": "StructureNitrolyzer", - "1913391845": "StructureLargeSatelliteDish", - "1915566057": "ItemGasFilterPollutants", - "1918456047": "ItemSprayCanKhaki", - "1921918951": "ItemKitPumpedLiquidEngine", - "1922506192": "StructurePowerUmbilicalFemaleSide", - "1924673028": "ItemSoybean", - "1926651727": "StructureInsulatedPipeLiquidCrossJunction", - "1927790321": "ItemWreckageTurbineGenerator3", - "1928991265": "StructurePassthroughHeatExchangerGasToLiquid", - "1929046963": "ItemPotato", - "1931412811": "StructureCableCornerHBurnt", - "1932952652": "KitSDBSilo", - "1934508338": "ItemKitPipeUtility", - "1935945891": "ItemKitInteriorDoors", - "1938254586": "StructureCryoTube", - "1939061729": "StructureReinforcedWallPaddedWindow", - "1941079206": "DynamicCrate", - "1942143074": "StructureLogicGate", - "1944485013": "StructureDiode", - "1944858936": "StructureChairBacklessDouble", - "1945930022": "StructureBatteryCharger", - "1947944864": "StructureFurnace", - "1949076595": "ItemLightSword", - "1951126161": "ItemKitLiquidRegulator", - "1951525046": "StructureCompositeCladdingRoundedCorner", - "1959564765": "ItemGasFilterPollutantsL", - "1960952220": "ItemKitSmallSatelliteDish", - "1968102968": "StructureSolarPanelFlat", - "1968371847": "StructureDrinkingFountain", - "1969189000": "ItemJetpackBasic", - "1969312177": "ItemKitEngineMedium", - "1979212240": "StructureWallGeometryCorner", - "1981698201": "StructureInteriorDoorPaddedThin", - "1986658780": "StructureWaterBottleFillerPoweredBottom", - "1988118157": "StructureLiquidTankSmall", - "1990225489": "ItemKitComputer", - "1997212478": "StructureWeatherStation", - "1997293610": "ItemKitLogicInputOutput", - "1997436771": "StructureCompositeCladdingPanel", - "1998354978": "StructureElevatorShaftIndustrial", - "1998377961": "ReagentColorRed", - "1998634960": "Flag_ODA_6m", - "1999523701": "StructureAreaPowerControl", - "2004969680": "ItemGasFilterWaterL", - "2009673399": "ItemDrill", - "2011191088": "ItemFlagSmall", - "2013539020": "ItemCookedRice", - "2014252591": "StructureRocketScanner", - "2015439334": "ItemKitPoweredVent", - "2020180320": "CircuitboardSolarControl", - "2024754523": "StructurePipeRadiatorFlatLiquid", - "2024882687": "StructureWallPaddingLightFitting", - "2027713511": "StructureReinforcedCompositeWindow", - "2032027950": "ItemKitRocketLiquidFuelTank", - "2035781224": "StructureEngineMountTypeA1", - "2036225202": "ItemLiquidDrain", - "2037427578": "ItemLiquidTankStorage", - "2038427184": "StructurePipeCrossJunction3", - "2042955224": "ItemPeaceLily", - "2043318949": "PortableSolarPanel", - "2044798572": "ItemMushroom", - "2049879875": "StructureStairwellNoDoors", - "2056377335": "StructureWindowShutter", - "2057179799": "ItemKitHydroponicStation", - "2060134443": "ItemCableCoilHeavy", - "2060648791": "StructureElevatorLevelIndustrial", - "2066977095": "StructurePassiveLargeRadiatorGas", - "2067655311": "ItemKitInsulatedLiquidPipe", - "2072805863": "StructureLiquidPipeRadiator", - "2077593121": "StructureLogicHashGen", - "2079959157": "AccessCardWhite", - "2085762089": "StructureCableStraightHBurnt", - "2087628940": "StructureWallPaddedWindow", - "2096189278": "StructureLogicMirror", - "2097419366": "StructureWallFlatCornerTriangle", - "2099900163": "StructureBackLiquidPressureRegulator", - "2102454415": "StructureTankSmallFuel", - "2102803952": "ItemEmergencyWireCutters", - "2104106366": "StructureGasMixer", - "2109695912": "StructureCompositeFloorGratingOpen", - "2109945337": "ItemRocketMiningDrillHead", - "2130739600": "DynamicMKIILiquidCanisterEmpty", - "2131916219": "ItemSpaceOre", - "2133035682": "ItemKitStandardChute", - "2134172356": "StructureInsulatedPipeStraight", - "2134647745": "ItemLeadIngot", - "2145068424": "ItemGasCanisterNitrogen" - }, - "reagents": { - "Alcohol": { - "Hash": 1565803737, - "Unit": "ml" - }, - "Astroloy": { - "Hash": -1493155787, - "Sources": { - "ItemAstroloyIngot": 1.0 - }, - "Unit": "g" - }, - "Biomass": { - "Hash": 925270362, - "Sources": { - "ItemBiomass": 1.0 - }, - "Unit": "" - }, - "Carbon": { - "Hash": 1582746610, - "Sources": { - "HumanSkull": 1.0, - "ItemCharcoal": 1.0 - }, - "Unit": "g" - }, - "Cobalt": { - "Hash": 1702246124, - "Sources": { - "ItemCobaltOre": 1.0 - }, - "Unit": "g" - }, - "ColorBlue": { - "Hash": 557517660, - "Sources": { - "ReagentColorBlue": 10.0 - }, - "Unit": "g" - }, - "ColorGreen": { - "Hash": 2129955242, - "Sources": { - "ReagentColorGreen": 10.0 - }, - "Unit": "g" - }, - "ColorOrange": { - "Hash": 1728153015, - "Sources": { - "ReagentColorOrange": 10.0 - }, - "Unit": "g" - }, - "ColorRed": { - "Hash": 667001276, - "Sources": { - "ReagentColorRed": 10.0 - }, - "Unit": "g" - }, - "ColorYellow": { - "Hash": -1430202288, - "Sources": { - "ReagentColorYellow": 10.0 - }, - "Unit": "g" - }, - "Constantan": { - "Hash": 1731241392, - "Sources": { - "ItemConstantanIngot": 1.0 - }, - "Unit": "g" - }, - "Copper": { - "Hash": -1172078909, - "Sources": { - "ItemCopperIngot": 1.0, - "ItemCopperOre": 1.0 - }, - "Unit": "g" - }, - "Corn": { - "Hash": 1550709753, - "Sources": { - "ItemCookedCorn": 1.0, - "ItemCorn": 1.0 - }, - "Unit": "" - }, - "Egg": { - "Hash": 1887084450, - "Sources": { - "ItemCookedPowderedEggs": 1.0, - "ItemEgg": 1.0, - "ItemFertilizedEgg": 1.0 - }, - "Unit": "" - }, - "Electrum": { - "Hash": 478264742, - "Sources": { - "ItemElectrumIngot": 1.0 - }, - "Unit": "g" - }, - "Fenoxitone": { - "Hash": -865687737, - "Sources": { - "ItemFern": 1.0 - }, - "Unit": "g" - }, - "Flour": { - "Hash": -811006991, - "Sources": { - "ItemFlour": 50.0 - }, - "Unit": "g" - }, - "Gold": { - "Hash": -409226641, - "Sources": { - "ItemGoldIngot": 1.0, - "ItemGoldOre": 1.0 - }, - "Unit": "g" - }, - "Hastelloy": { - "Hash": 2019732679, - "Sources": { - "ItemHastelloyIngot": 1.0 - }, - "Unit": "g" - }, - "Hydrocarbon": { - "Hash": 2003628602, - "Sources": { - "ItemCoalOre": 1.0, - "ItemSolidFuel": 1.0 - }, - "Unit": "g" - }, - "Inconel": { - "Hash": -586072179, - "Sources": { - "ItemInconelIngot": 1.0 - }, - "Unit": "g" - }, - "Invar": { - "Hash": -626453759, - "Sources": { - "ItemInvarIngot": 1.0 - }, - "Unit": "g" - }, - "Iron": { - "Hash": -666742878, - "Sources": { - "ItemIronIngot": 1.0, - "ItemIronOre": 1.0 - }, - "Unit": "g" - }, - "Lead": { - "Hash": -2002530571, - "Sources": { - "ItemLeadIngot": 1.0, - "ItemLeadOre": 1.0 - }, - "Unit": "g" - }, - "Milk": { - "Hash": 471085864, - "Sources": { - "ItemCookedCondensedMilk": 1.0, - "ItemMilk": 1.0 - }, - "Unit": "ml" - }, - "Mushroom": { - "Hash": 516242109, - "Sources": { - "ItemCookedMushroom": 1.0, - "ItemMushroom": 1.0 - }, - "Unit": "g" - }, - "Nickel": { - "Hash": 556601662, - "Sources": { - "ItemNickelIngot": 1.0, - "ItemNickelOre": 1.0 - }, - "Unit": "g" - }, - "Oil": { - "Hash": 1958538866, - "Sources": { - "ItemSoyOil": 1.0 - }, - "Unit": "ml" - }, - "Plastic": { - "Hash": 791382247, - "Unit": "g" - }, - "Potato": { - "Hash": -1657266385, - "Sources": { - "ItemPotato": 1.0, - "ItemPotatoBaked": 1.0 - }, - "Unit": "" - }, - "Pumpkin": { - "Hash": -1250164309, - "Sources": { - "ItemCookedPumpkin": 1.0, - "ItemPumpkin": 1.0 - }, - "Unit": "" - }, - "Rice": { - "Hash": 1951286569, - "Sources": { - "ItemCookedRice": 1.0, - "ItemRice": 1.0 - }, - "Unit": "g" - }, - "SalicylicAcid": { - "Hash": -2086114347, - "Unit": "g" - }, - "Silicon": { - "Hash": -1195893171, - "Sources": { - "ItemSiliconIngot": 0.1, - "ItemSiliconOre": 1.0 - }, - "Unit": "g" - }, - "Silver": { - "Hash": 687283565, - "Sources": { - "ItemSilverIngot": 1.0, - "ItemSilverOre": 1.0 - }, - "Unit": "g" - }, - "Solder": { - "Hash": -1206542381, - "Sources": { - "ItemSolderIngot": 1.0 - }, - "Unit": "g" - }, - "Soy": { - "Hash": 1510471435, - "Sources": { - "ItemCookedSoybean": 1.0, - "ItemSoybean": 1.0 - }, - "Unit": "" - }, - "Steel": { - "Hash": 1331613335, - "Sources": { - "ItemEmptyCan": 1.0, - "ItemSteelIngot": 1.0 - }, - "Unit": "g" - }, - "Stellite": { - "Hash": -500544800, - "Sources": { - "ItemStelliteIngot": 1.0 - }, - "Unit": "g" - }, - "Tomato": { - "Hash": 733496620, - "Sources": { - "ItemCookedTomato": 1.0, - "ItemTomato": 1.0 - }, - "Unit": "" - }, - "Uranium": { - "Hash": -208860272, - "Sources": { - "ItemUraniumOre": 1.0 - }, - "Unit": "g" - }, - "Waspaloy": { - "Hash": 1787814293, - "Sources": { - "ItemWaspaloyIngot": 1.0 - }, - "Unit": "g" - }, - "Wheat": { - "Hash": -686695134, - "Sources": { - "ItemWheat": 1.0 - }, - "Unit": "" - } - }, - "slot_logic_enabled": [ - "DynamicGPR", - "Robot", - "StructureActiveVent", - "StructureAdvancedComposter", - "StructureAdvancedFurnace", - "StructureAdvancedPackagingMachine", - "ItemAdvancedTablet", - "StructureAirConditioner", - "ItemAngleGrinder", - "StructureArcFurnace", - "ItemArcWelder", - "StructureAreaPowerControlReversed", - "StructureAreaPowerControl", - "StructureAutolathe", - "StructureAutomatedOven", - "StructureAutoMinerSmall", - "StructureBatteryCharger", - "StructureBatteryChargerSmall", - "StructureAngledBench", - "StructureBench1", - "StructureFlatBench", - "StructureBench3", - "StructureBench2", - "StructureBench4", - "StructureBlockBed", - "StructureCargoStorageMedium", - "StructureCargoStorageSmall", - "StructureCentrifuge", - "StructureChair", - "StructureChairBacklessDouble", - "StructureChairBacklessSingle", - "StructureChairBoothCornerLeft", - "StructureChairBoothMiddle", - "StructureChairRectangleDouble", - "StructureChairRectangleSingle", - "StructureChairThickDouble", - "StructureChairThickSingle", - "StructureChuteBin", - "StructureChuteDigitalFlipFlopSplitterLeft", - "StructureChuteDigitalFlipFlopSplitterRight", - "StructureChuteDigitalValveLeft", - "StructureChuteDigitalValveRight", - "StructureChuteInlet", - "StructureChuteOutlet", - "StructureCombustionCentrifuge", - "StructureComputer", - "StructureConsole", - "StructureConsoleDual", - "StructureConsoleMonitor", - "StructureControlChair", - "StructureCornerLocker", - "StructureCryoTubeHorizontal", - "StructureCryoTubeVertical", - "StructureCryoTube", - "StructureDeepMiner", - "StructureSleeperVerticalDroid", - "StructureElectrolyzer", - "StructureElectronicsPrinter", - "ItemEmergencyAngleGrinder", - "ItemEmergencyArcWelder", - "ItemEmergencyDrill", - "WeaponPistolEnergy", - "WeaponRifleEnergy", - "StructureFiltration", - "ItemFlashlight", - "StructureFridgeBig", - "StructureFridgeSmall", - "StructureFurnace", - "StructureGasTankStorage", - "StructureSolidFuelGenerator", - "H2Combustor", - "ItemDrill", - "ItemTablet", - "ItemHardSuit", - "ItemHardBackpack", - "ItemHardJetpack", - "StructureHarvie", - "ItemWearLamp", - "StructureHydraulicPipeBender", - "StructureHydroponicsTrayData", - "StructureHydroponicsStation", - "StructureCircuitHousing", - "StructureIceCrusher", - "ItemJetpackBasic", - "ItemLabeller", - "ItemLaptop", - "StructureLiquidTankStorage", - "StructureWaterWallCooler", - "StructureStorageLocker", - "StructureLockerSmall", - "StructureLogicSorter", - "LogicStepSequencer8", - "ItemMiningBeltMKII", - "ItemMiningDrill", - "ItemMiningDrillHeavy", - "ItemMKIIAngleGrinder", - "ItemMKIIArcWelder", - "ItemMKIIDrill", - "ItemMKIIMiningDrill", - "ItemNVG", - "StructureNitrolyzer", - "StructureHorizontalAutoMiner", - "StructureOverheadShortCornerLocker", - "StructureOverheadShortLocker", - "ItemPlantSampler", - "DynamicLight", - "PortableSolarPanel", - "StructurePortablesConnector", - "StructurePowerConnector", - "StructureBench", - "StructureRecycler", - "StructureRefrigeratedVendingMachine", - "ItemRemoteDetonator", - "StructureResearchMachine", - "StructureRocketCircuitHousing", - "StructureRocketManufactory", - "StructureRocketMiner", - "StructureRocketScanner", - "RoverCargo", - "Rover_MkI", - "StructureSDBHopper", - "StructureSDBHopperAdvanced", - "StructureSDBSilo", - "StructureSecurityPrinter", - "ItemSensorLenses", - "StructureShelfMedium", - "StructureShortCornerLocker", - "StructureShortLocker", - "StructureSingleBed", - "StructureSleeper", - "StructureSleeperLeft", - "StructureSleeperRight", - "StructureSleeperVertical", - "StructureSorter", - "ItemSpacepack", - "StructureStackerReverse", - "StructureStacker", - "StructureStirlingEngine", - "StructureSuitStorage", - "ItemTerrainManipulator", - "ItemMkIIToolbelt", - "StructureToolManufactory", - "ItemBeacon", - "StructureChuteUmbilicalMale", - "StructureChuteUmbilicalFemale", - "StructureChuteUmbilicalFemaleSide", - "StructureUnloader", - "StructureVendingMachine", - "StructureWallCooler", - "StructureWallHeater", - "StructureWallLightBattery", - "StructureWaterBottleFiller", - "StructureWaterBottleFillerBottom", - "StructureWaterPurifier", - "StructureWaterBottleFillerPowered", - "StructureWaterBottleFillerPoweredBottom", - "WeaponEnergy" - ], - "structures": [ - "StructureCableCorner3HBurnt", - "StructureDrinkingFountain", - "StructureAccessBridge", - "StructureLiquidDrain", - "StructureActiveVent", - "StructureAdvancedComposter", - "StructureAdvancedFurnace", - "StructureAdvancedPackagingMachine", - "StructureAirConditioner", - "StructureAirlock", - "StructureArcFurnace", - "StructureAreaPowerControlReversed", - "StructureAreaPowerControl", - "StructureAutolathe", - "StructureAutomatedOven", - "StructureAutoMinerSmall", - "StructureBatterySmall", - "StructureBackPressureRegulator", - "StructureBasketHoop", - "StructureLogicBatchReader", - "StructureLogicBatchSlotReader", - "StructureLogicBatchWriter", - "StructureBatteryMedium", - "StructureBatteryCharger", - "StructureBatteryChargerSmall", - "StructureBeacon", - "StructureAngledBench", - "StructureBench1", - "StructureFlatBench", - "StructureBench3", - "StructureBench2", - "StructureBench4", - "StructureBlastDoor", - "StructureBlockBed", - "StructureBlocker", - "StructureCableCorner3Burnt", - "StructureCableCorner4Burnt", - "StructureCableJunction4Burnt", - "StructureCableJunction4HBurnt", - "StructureCableJunction5Burnt", - "StructureCableJunction6Burnt", - "StructureCableJunction6HBurnt", - "StructureCableCornerHBurnt", - "StructureCableCornerBurnt", - "StructureCableJunctionHBurnt", - "StructureCableJunctionBurnt", - "StructureCableStraightHBurnt", - "StructureCableStraightBurnt", - "StructureCableCorner4HBurnt", - "StructureCableJunctionH5Burnt", - "StructureLogicButton", - "StructureCableCorner3", - "StructureCableCorner4", - "StructureCableJunction4", - "StructureCableJunction5", - "StructureCableJunction6", - "StructureCableCorner", - "StructureCableJunction", - "StructureCableStraight", - "StructureCableAnalysizer", - "StructureCamera", - "StructureCargoStorageMedium", - "StructureCargoStorageSmall", - "StructureCentrifuge", - "StructureChair", - "StructureChairBacklessDouble", - "StructureChairBacklessSingle", - "StructureChairBoothCornerLeft", - "StructureChairBoothMiddle", - "StructureChairRectangleDouble", - "StructureChairRectangleSingle", - "StructureChairThickDouble", - "StructureChairThickSingle", - "StructureChuteCorner", - "StructureChuteJunction", - "StructureChuteStraight", - "StructureChuteWindow", - "StructureChuteBin", - "StructureChuteDigitalFlipFlopSplitterLeft", - "StructureChuteDigitalFlipFlopSplitterRight", - "StructureChuteDigitalValveLeft", - "StructureChuteDigitalValveRight", - "StructureChuteFlipFlopSplitter", - "StructureChuteInlet", - "StructureChuteOutlet", - "StructureChuteOverflow", - "StructureChuteValve", - "StructureCombustionCentrifuge", - "StructureCompositeCladdingAngledCornerInnerLongL", - "StructureCompositeCladdingAngledCornerInnerLongR", - "StructureCompositeCladdingAngledCornerInnerLong", - "StructureCompositeCladdingAngledCornerInner", - "StructureCompositeCladdingAngledCorner", - "StructureCompositeCladdingAngled", - "StructureCompositeCladdingCylindricalPanel", - "StructureCompositeCladdingCylindrical", - "StructureCompositeCladdingAngledCornerLong", - "StructureCompositeCladdingAngledCornerLongR", - "StructureCompositeCladdingAngledLong", - "StructureCompositeCladdingPanel", - "StructureCompositeCladdingRoundedCornerInner", - "StructureCompositeCladdingRoundedCorner", - "StructureCompositeCladdingRounded", - "StructureCompositeCladdingSphericalCap", - "StructureCompositeCladdingSphericalCorner", - "StructureCompositeCladdingSpherical", - "StructureCompositeDoor", - "StructureCompositeFloorGrating", - "StructureCompositeFloorGrating2", - "StructureCompositeFloorGrating3", - "StructureCompositeFloorGrating4", - "StructureCompositeFloorGratingOpen", - "StructureCompositeFloorGratingOpenRotated", - "StructureCompositeWall", - "StructureCompositeWall02", - "StructureCompositeWall03", - "StructureCompositeWall04", - "StructureCompositeWindow", - "StructureComputer", - "StructureCondensationChamber", - "StructureCondensationValve", - "StructureConsole", - "StructureConsoleDual", - "StructureConsoleMonitor", - "StructureCrateMount", - "StructureControlChair", - "StructureCornerLocker", - "StructurePassthroughHeatExchangerGasToGas", - "StructurePassthroughHeatExchangerGasToLiquid", - "StructurePassthroughHeatExchangerLiquidToLiquid", - "StructureCryoTubeHorizontal", - "StructureCryoTubeVertical", - "StructureCryoTube", - "StructureDaylightSensor", - "StructureDeepMiner", - "StructureLogicDial", - "StructureDigitalValve", - "StructureDiodeSlide", - "StructureDockPortSide", - "StructureSleeperVerticalDroid", - "StructureElectrolyzer", - "StructureElectronicsPrinter", - "StructureElevatorLevelIndustrial", - "StructureElevatorLevelFront", - "StructureElevatorShaftIndustrial", - "StructureElevatorShaft", - "StructureEngineMountTypeA1", - "StructureEvaporationChamber", - "StructureExpansionValve", - "StructureFairingTypeA1", - "StructureFairingTypeA2", - "StructureFairingTypeA3", - "StructureFiltration", - "StructureFlashingLight", - "StructureFridgeBig", - "StructureFridgeSmall", - "StructureFurnace", - "StructureCableFuse100k", - "StructureCableFuse1k", - "StructureCableFuse50k", - "StructureCableFuse5k", - "StructureFuselageTypeA1", - "StructureFuselageTypeA2", - "StructureFuselageTypeA4", - "StructureFuselageTypeC5", - "StructureMediumRocketGasFuelTank", - "StructureCapsuleTankGas", - "StructureGasGenerator", - "StructureGasMixer", - "StructureGasSensor", - "StructureGasTankStorage", - "StructureSolidFuelGenerator", - "StructureGlassDoor", - "StructureGrowLight", - "StructureHarvie", - "StructureHeatExchangerGastoGas", - "StructureHeatExchangerLiquidtoLiquid", - "StructureHeatExchangeLiquidtoGas", - "StructureCableCornerH3", - "StructureCableJunctionH", - "StructureCableCornerH4", - "StructureCableJunctionH4", - "StructureCableJunctionH5", - "StructureCableJunctionH6", - "StructureCableCornerH", - "StructureCableStraightH", - "StructureHydraulicPipeBender", - "StructureHydroponicsTrayData", - "StructureHydroponicsStation", - "StructureHydroponicsTray", - "StructureCircuitHousing", - "StructureIceCrusher", - "StructureIgniter", - "StructureEmergencyButton", - "StructureInLineTankGas1x2", - "StructureInLineTankLiquid1x2", - "StructureInLineTankGas1x1", - "StructureInLineTankLiquid1x1", - "StructureInsulatedInLineTankGas1x2", - "StructureInsulatedInLineTankLiquid1x2", - "StructureInsulatedInLineTankGas1x1", - "StructureInsulatedInLineTankLiquid1x1", - "StructureInsulatedPipeLiquidCrossJunction", - "StructureInsulatedPipeLiquidCrossJunction4", - "StructureInsulatedPipeLiquidCrossJunction5", - "StructureInsulatedPipeLiquidCrossJunction6", - "StructureInsulatedPipeLiquidCorner", - "StructurePipeInsulatedLiquidCrossJunction", - "StructureInsulatedPipeLiquidStraight", - "StructureInsulatedPipeLiquidTJunction", - "StructureLiquidTankBigInsulated", - "StructureLiquidTankSmallInsulated", - "StructurePassiveVentInsulated", - "StructureInsulatedPipeCrossJunction3", - "StructureInsulatedPipeCrossJunction4", - "StructureInsulatedPipeCrossJunction5", - "StructureInsulatedPipeCrossJunction6", - "StructureInsulatedPipeCorner", - "StructureInsulatedPipeCrossJunction", - "StructureInsulatedPipeStraight", - "StructureInsulatedPipeTJunction", - "StructureInsulatedTankConnector", - "StructureInsulatedTankConnectorLiquid", - "StructureInteriorDoorGlass", - "StructureInteriorDoorPadded", - "StructureInteriorDoorPaddedThin", - "StructureInteriorDoorTriangle", - "StructureFrameIron", - "StructureWallIron", - "StructureWallIron02", - "StructureWallIron03", - "StructureWallIron04", - "StructureCompositeWindowIron", - "StructureKlaxon", - "StructureDiode", - "StructureConsoleLED1x3", - "StructureConsoleLED1x2", - "StructureConsoleLED5", - "StructureLadder", - "StructureLadderEnd", - "StructurePlatformLadderOpen", - "StructureLargeDirectHeatExchangeLiquidtoLiquid", - "StructureLargeDirectHeatExchangeGastoGas", - "StructureLargeDirectHeatExchangeGastoLiquid", - "StructureLargeExtendableRadiator", - "StructureLargeHangerDoor", - "StructureLargeSatelliteDish", - "StructureTankBig", - "StructureLaunchMount", - "StructureRocketTower", - "StructureLogicSwitch", - "StructureLightRound", - "StructureLightRoundAngled", - "StructureLightRoundSmall", - "StructureBackLiquidPressureRegulator", - "StructureMediumRocketLiquidFuelTank", - "StructureCapsuleTankLiquid", - "StructureWaterDigitalValve", - "StructurePipeLiquidCrossJunction3", - "StructurePipeLiquidCrossJunction4", - "StructurePipeLiquidCrossJunction5", - "StructurePipeLiquidCrossJunction6", - "StructurePipeLiquidCorner", - "StructurePipeLiquidCrossJunction", - "StructurePipeLiquidStraight", - "StructurePipeLiquidTJunction", - "StructureLiquidPipeAnalyzer", - "StructureLiquidPipeRadiator", - "StructureWaterPipeMeter", - "StructureLiquidTankBig", - "StructureTankConnectorLiquid", - "StructureLiquidTankSmall", - "StructureLiquidTankStorage", - "StructureLiquidValve", - "StructureLiquidVolumePump", - "StructureLiquidPressureRegulator", - "StructureWaterWallCooler", - "StructureStorageLocker", - "StructureLockerSmall", - "StructureLogicCompare", - "StructureLogicGate", - "StructureLogicHashGen", - "StructureLogicMath", - "StructureLogicMemory", - "StructureLogicMinMax", - "StructureLogicMirror", - "StructureLogicReader", - "StructureLogicRocketDownlink", - "StructureLogicSelect", - "StructureLogicSorter", - "StructureLogicTransmitter", - "StructureLogicRocketUplink", - "StructureLogicWriter", - "StructureLogicWriterSwitch", - "StructureManualHatch", - "StructureLogicMathUnary", - "StructureMediumConvectionRadiator", - "StructurePassiveLargeRadiatorGas", - "StructureMediumConvectionRadiatorLiquid", - "StructurePassiveLargeRadiatorLiquid", - "StructureMediumHangerDoor", - "StructureMediumRadiator", - "StructureMediumRadiatorLiquid", - "StructureSatelliteDish", - "StructurePowerTransmitterReceiver", - "StructurePowerTransmitter", - "StructureMotionSensor", - "StructureNitrolyzer", - "StructureHorizontalAutoMiner", - "StructureOccupancySensor", - "StructurePipeOneWayValve", - "StructureLiquidPipeOneWayValve", - "StructureOverheadShortCornerLocker", - "StructureOverheadShortLocker", - "StructurePassiveLiquidDrain", - "StructureFloorDrain", - "StructurePassiveVent", - "StructurePictureFrameThickLandscapeLarge", - "StructurePictureFrameThickMountLandscapeLarge", - "StructurePictureFrameThickLandscapeSmall", - "StructurePictureFrameThickMountLandscapeSmall", - "StructurePictureFrameThickMountPortraitLarge", - "StructurePictureFrameThickMountPortraitSmall", - "StructurePictureFrameThickPortraitLarge", - "StructurePictureFrameThickPortraitSmall", - "StructurePictureFrameThinLandscapeLarge", - "StructurePictureFrameThinMountLandscapeLarge", - "StructurePictureFrameThinMountLandscapeSmall", - "StructurePictureFrameThinLandscapeSmall", - "StructurePictureFrameThinPortraitLarge", - "StructurePictureFrameThinMountPortraitLarge", - "StructurePictureFrameThinMountPortraitSmall", - "StructurePictureFrameThinPortraitSmall", - "StructurePipeCrossJunction3", - "StructurePipeCrossJunction4", - "StructurePipeCrossJunction5", - "StructurePipeCrossJunction6", - "StructurePipeCorner", - "StructurePipeCrossJunction", - "StructurePipeStraight", - "StructurePipeTJunction", - "StructurePipeAnalysizer", - "StructurePipeRadiator", - "StructurePipeCowl", - "StructurePipeHeater", - "StructureLiquidPipeHeater", - "StructurePipeIgniter", - "StructurePipeLabel", - "StructurePipeMeter", - "StructurePipeOrgan", - "StructurePipeRadiatorFlat", - "StructurePipeRadiatorFlatLiquid", - "StructurePlanter", - "StructurePlinth", - "StructurePortablesConnector", - "StructurePowerConnector", - "StructurePowerTransmitterOmni", - "StructureBench", - "StructurePoweredVent", - "StructurePoweredVentLarge", - "StructurePressurantValve", - "StructurePressureFedGasEngine", - "StructurePressureFedLiquidEngine", - "StructurePressureRegulator", - "StructureProximitySensor", - "StructureGovernedGasEngine", - "StructurePumpedLiquidEngine", - "StructurePurgeValve", - "StructureRailing", - "StructureLogicReagentReader", - "StructureRecycler", - "StructureRefrigeratedVendingMachine", - "StructureReinforcedCompositeWindowSteel", - "StructureReinforcedCompositeWindow", - "StructureReinforcedWallPaddedWindow", - "StructureReinforcedWallPaddedWindowThin", - "StructureResearchMachine", - "StructureRocketAvionics", - "StructureRocketCelestialTracker", - "StructureRocketCircuitHousing", - "StructureRocketEngineTiny", - "StructureRocketManufactory", - "StructureRocketMiner", - "StructureRocketScanner", - "StructureRover", - "StructureSDBHopper", - "StructureSDBHopperAdvanced", - "StructureSDBSilo", - "StructureSecurityPrinter", - "StructureShelf", - "StructureShelfMedium", - "StructureShortCornerLocker", - "StructureShortLocker", - "StructureShower", - "StructureShowerPowered", - "StructureSign1x1", - "StructureSign2x1", - "StructureSingleBed", - "StructureSleeper", - "StructureSleeperLeft", - "StructureSleeperRight", - "StructureSleeperVertical", - "StructureLogicSlotReader", - "StructureSmallTableBacklessDouble", - "StructureSmallTableBacklessSingle", - "StructureSmallTableDinnerSingle", - "StructureSmallTableRectangleDouble", - "StructureSmallTableRectangleSingle", - "StructureSmallTableThickDouble", - "StructureSmallDirectHeatExchangeGastoGas", - "StructureSmallDirectHeatExchangeLiquidtoGas", - "StructureSmallDirectHeatExchangeLiquidtoLiquid", - "StructureFlagSmall", - "StructureAirlockGate", - "StructureSmallSatelliteDish", - "StructureSmallTableThickSingle", - "StructureTankSmall", - "StructureTankSmallAir", - "StructureTankSmallFuel", - "StructureSolarPanel", - "StructureSolarPanel45", - "StructureSolarPanelDual", - "StructureSolarPanelFlat", - "StructureSolarPanel45Reinforced", - "StructureSolarPanelDualReinforced", - "StructureSolarPanelFlatReinforced", - "StructureSolarPanelReinforced", - "StructureSorter", - "StructureStackerReverse", - "StructureStacker", - "StructureStairs4x2", - "StructureStairs4x2RailL", - "StructureStairs4x2RailR", - "StructureStairs4x2Rails", - "StructureStairwellBackLeft", - "StructureStairwellBackPassthrough", - "StructureStairwellBackRight", - "StructureStairwellFrontLeft", - "StructureStairwellFrontPassthrough", - "StructureStairwellFrontRight", - "StructureStairwellNoDoors", - "StructureBattery", - "StructureBatteryLarge", - "StructureFrame", - "StructureFrameCornerCut", - "StructureFrameCorner", - "StructureFrameSide", - "StructureStirlingEngine", - "StructureSuitStorage", - "StructureLogicSwitch2", - "StructureTankBigInsulated", - "StructureTankConnector", - "StructureTankSmallInsulated", - "StructureGroundBasedTelescope", - "StructureToolManufactory", - "StructureTorpedoRack", - "StructureTraderWaypoint", - "StructureTransformer", - "StructureTransformerMedium", - "StructureTransformerSmall", - "StructureTransformerMediumReversed", - "StructureTransformerSmallReversed", - "StructureRocketTransformerSmall", - "StructurePressurePlateLarge", - "StructurePressurePlateMedium", - "StructurePressurePlateSmall", - "StructureTurbineGenerator", - "StructureTurboVolumePump", - "StructureLiquidTurboVolumePump", - "StructureChuteUmbilicalMale", - "StructureGasUmbilicalMale", - "StructureLiquidUmbilicalMale", - "StructurePowerUmbilicalMale", - "StructureChuteUmbilicalFemale", - "StructureGasUmbilicalFemale", - "StructureLiquidUmbilicalFemale", - "StructurePowerUmbilicalFemale", - "StructureChuteUmbilicalFemaleSide", - "StructureGasUmbilicalFemaleSide", - "StructureLiquidUmbilicalFemaleSide", - "StructurePowerUmbilicalFemaleSide", - "StructureUnloader", - "StructureUprightWindTurbine", - "StructureValve", - "StructureVendingMachine", - "StructureVolumePump", - "StructureWallArchArrow", - "StructureWallArchCornerRound", - "StructureWallArchCornerSquare", - "StructureWallArchCornerTriangle", - "StructureWallArchPlating", - "StructureWallArchTwoTone", - "StructureWallArch", - "StructureWallFlatCornerRound", - "StructureWallFlatCornerSquare", - "StructureWallFlatCornerTriangleFlat", - "StructureWallFlatCornerTriangle", - "StructureWallFlat", - "StructureWallGeometryCorner", - "StructureWallGeometryStreight", - "StructureWallGeometryTMirrored", - "StructureWallGeometryT", - "StructureWallLargePanelArrow", - "StructureWallLargePanel", - "StructureWallPaddedArchCorner", - "StructureWallPaddedArchLightFittingTop", - "StructureWallPaddedArchLightsFittings", - "StructureWallPaddedArch", - "StructureWallPaddedCornerThin", - "StructureWallPaddedCorner", - "StructureWallPaddedNoBorderCorner", - "StructureWallPaddedNoBorder", - "StructureWallPaddedThinNoBorderCorner", - "StructureWallPaddedThinNoBorder", - "StructureWallPaddedWindowThin", - "StructureWallPaddedWindow", - "StructureWallPaddingArchVent", - "StructureWallPaddingLightFitting", - "StructureWallPaddingThin", - "StructureWallPadding", - "StructureWallPlating", - "StructureWallSmallPanelsAndHatch", - "StructureWallSmallPanelsArrow", - "StructureWallSmallPanelsMonoChrome", - "StructureWallSmallPanelsOpen", - "StructureWallSmallPanelsTwoTone", - "StructureWallCooler", - "StructureWallHeater", - "StructureWallLight", - "StructureWallLightBattery", - "StructureLightLongAngled", - "StructureLightLongWide", - "StructureLightLong", - "StructureWallVent", - "StructureWaterBottleFiller", - "StructureWaterBottleFillerBottom", - "StructureWaterPurifier", - "StructureWaterBottleFillerPowered", - "StructureWaterBottleFillerPoweredBottom", - "StructureWeatherStation", - "StructureWindTurbine", - "StructureWindowShutter" - ] -} \ No newline at end of file diff --git a/www/img/stationpedia/DynamicAirConditioner.png b/www/img/stationpedia/DynamicAirConditioner.png index 03a7d85..c9a208e 100644 Binary files a/www/img/stationpedia/DynamicAirConditioner.png and b/www/img/stationpedia/DynamicAirConditioner.png differ diff --git a/www/img/stationpedia/FlareGun.png b/www/img/stationpedia/FlareGun.png index 9e886a0..9cb9553 100644 Binary files a/www/img/stationpedia/FlareGun.png and b/www/img/stationpedia/FlareGun.png differ diff --git a/www/img/stationpedia/H2Combustor.png b/www/img/stationpedia/H2Combustor.png index 23dcf68..b187070 100644 Binary files a/www/img/stationpedia/H2Combustor.png and b/www/img/stationpedia/H2Combustor.png differ diff --git a/www/img/stationpedia/ItemAdhesiveInsulation.png b/www/img/stationpedia/ItemAdhesiveInsulation.png new file mode 100644 index 0000000..4a2f2a6 Binary files /dev/null and b/www/img/stationpedia/ItemAdhesiveInsulation.png differ diff --git a/www/img/stationpedia/ItemCannedPowderedEggs.png b/www/img/stationpedia/ItemCannedPowderedEggs.png index 7192835..9c2640a 100644 Binary files a/www/img/stationpedia/ItemCannedPowderedEggs.png and b/www/img/stationpedia/ItemCannedPowderedEggs.png differ diff --git a/www/img/stationpedia/ItemCerealBar.png b/www/img/stationpedia/ItemCerealBar.png index 3d89db6..8b600d4 100644 Binary files a/www/img/stationpedia/ItemCerealBar.png and b/www/img/stationpedia/ItemCerealBar.png differ diff --git a/www/img/stationpedia/ItemCerealBarBag.png b/www/img/stationpedia/ItemCerealBarBag.png new file mode 100644 index 0000000..727eed7 Binary files /dev/null and b/www/img/stationpedia/ItemCerealBarBag.png differ diff --git a/www/img/stationpedia/ItemCerealBarBox.png b/www/img/stationpedia/ItemCerealBarBox.png new file mode 100644 index 0000000..cf5c7bc Binary files /dev/null and b/www/img/stationpedia/ItemCerealBarBox.png differ diff --git a/www/img/stationpedia/ItemChocolateBar.png b/www/img/stationpedia/ItemChocolateBar.png new file mode 100644 index 0000000..2d1df0e Binary files /dev/null and b/www/img/stationpedia/ItemChocolateBar.png differ diff --git a/www/img/stationpedia/ItemChocolateCake.png b/www/img/stationpedia/ItemChocolateCake.png new file mode 100644 index 0000000..b630042 Binary files /dev/null and b/www/img/stationpedia/ItemChocolateCake.png differ diff --git a/www/img/stationpedia/ItemChocolateCerealBar.png b/www/img/stationpedia/ItemChocolateCerealBar.png new file mode 100644 index 0000000..2a1a742 Binary files /dev/null and b/www/img/stationpedia/ItemChocolateCerealBar.png differ diff --git a/www/img/stationpedia/ItemCocoaPowder.png b/www/img/stationpedia/ItemCocoaPowder.png new file mode 100644 index 0000000..f13275e Binary files /dev/null and b/www/img/stationpedia/ItemCocoaPowder.png differ diff --git a/www/img/stationpedia/ItemCocoaTree.png b/www/img/stationpedia/ItemCocoaTree.png new file mode 100644 index 0000000..14afec6 Binary files /dev/null and b/www/img/stationpedia/ItemCocoaTree.png differ diff --git a/www/img/stationpedia/ItemCookedCorn.png b/www/img/stationpedia/ItemCookedCorn.png index bfccded..bab421b 100644 Binary files a/www/img/stationpedia/ItemCookedCorn.png and b/www/img/stationpedia/ItemCookedCorn.png differ diff --git a/www/img/stationpedia/ItemCookedTomato.png b/www/img/stationpedia/ItemCookedTomato.png index 84bfeab..c2665d1 100644 Binary files a/www/img/stationpedia/ItemCookedTomato.png and b/www/img/stationpedia/ItemCookedTomato.png differ diff --git a/www/img/stationpedia/ItemEmergencySuppliesBox.png b/www/img/stationpedia/ItemEmergencySuppliesBox.png new file mode 100644 index 0000000..96d3d51 Binary files /dev/null and b/www/img/stationpedia/ItemEmergencySuppliesBox.png differ diff --git a/www/img/stationpedia/ItemInsulatedCanisterPackage.png b/www/img/stationpedia/ItemInsulatedCanisterPackage.png new file mode 100644 index 0000000..10b7786 Binary files /dev/null and b/www/img/stationpedia/ItemInsulatedCanisterPackage.png differ diff --git a/www/img/stationpedia/ItemKitInsulatedPipeUtility.png b/www/img/stationpedia/ItemKitInsulatedPipeUtility.png new file mode 100644 index 0000000..5a4948b Binary files /dev/null and b/www/img/stationpedia/ItemKitInsulatedPipeUtility.png differ diff --git a/www/img/stationpedia/ItemKitInsulatedPipeUtilityLiquid.png b/www/img/stationpedia/ItemKitInsulatedPipeUtilityLiquid.png new file mode 100644 index 0000000..1b5e069 Binary files /dev/null and b/www/img/stationpedia/ItemKitInsulatedPipeUtilityLiquid.png differ diff --git a/www/img/stationpedia/ItemKitLinearRail.png b/www/img/stationpedia/ItemKitLinearRail.png new file mode 100644 index 0000000..f3c9138 Binary files /dev/null and b/www/img/stationpedia/ItemKitLinearRail.png differ diff --git a/www/img/stationpedia/ItemKitRegulator.png b/www/img/stationpedia/ItemKitRegulator.png index 52a0790..1b77ed2 100644 Binary files a/www/img/stationpedia/ItemKitRegulator.png and b/www/img/stationpedia/ItemKitRegulator.png differ diff --git a/www/img/stationpedia/ItemKitRobotArmDoor.png b/www/img/stationpedia/ItemKitRobotArmDoor.png new file mode 100644 index 0000000..4e72ee7 Binary files /dev/null and b/www/img/stationpedia/ItemKitRobotArmDoor.png differ diff --git a/www/img/stationpedia/ItemKitRoboticArm.png b/www/img/stationpedia/ItemKitRoboticArm.png new file mode 100644 index 0000000..b02a227 Binary files /dev/null and b/www/img/stationpedia/ItemKitRoboticArm.png differ diff --git a/www/img/stationpedia/ItemMiningPackage.png b/www/img/stationpedia/ItemMiningPackage.png new file mode 100644 index 0000000..a7c613b Binary files /dev/null and b/www/img/stationpedia/ItemMiningPackage.png differ diff --git a/www/img/stationpedia/ItemPlainCake.png b/www/img/stationpedia/ItemPlainCake.png new file mode 100644 index 0000000..426f5cb Binary files /dev/null and b/www/img/stationpedia/ItemPlainCake.png differ diff --git a/www/img/stationpedia/ItemPortablesPackage.png b/www/img/stationpedia/ItemPortablesPackage.png new file mode 100644 index 0000000..efff07e Binary files /dev/null and b/www/img/stationpedia/ItemPortablesPackage.png differ diff --git a/www/img/stationpedia/ItemResidentialPackage.png b/www/img/stationpedia/ItemResidentialPackage.png new file mode 100644 index 0000000..7aa9d73 Binary files /dev/null and b/www/img/stationpedia/ItemResidentialPackage.png differ diff --git a/www/img/stationpedia/ItemSugar.png b/www/img/stationpedia/ItemSugar.png new file mode 100644 index 0000000..ea1e610 Binary files /dev/null and b/www/img/stationpedia/ItemSugar.png differ diff --git a/www/img/stationpedia/ItemSugarCane.png b/www/img/stationpedia/ItemSugarCane.png new file mode 100644 index 0000000..a0a48ab Binary files /dev/null and b/www/img/stationpedia/ItemSugarCane.png differ diff --git a/www/img/stationpedia/ItemWaterBottleBag.png b/www/img/stationpedia/ItemWaterBottleBag.png new file mode 100644 index 0000000..3fb2388 Binary files /dev/null and b/www/img/stationpedia/ItemWaterBottleBag.png differ diff --git a/www/img/stationpedia/ItemWaterBottlePackage.png b/www/img/stationpedia/ItemWaterBottlePackage.png new file mode 100644 index 0000000..0fa47f0 Binary files /dev/null and b/www/img/stationpedia/ItemWaterBottlePackage.png differ diff --git a/www/img/stationpedia/SeedBag_Cocoa.png b/www/img/stationpedia/SeedBag_Cocoa.png new file mode 100644 index 0000000..d67933e Binary files /dev/null and b/www/img/stationpedia/SeedBag_Cocoa.png differ diff --git a/www/img/stationpedia/SeedBag_SugarCane.png b/www/img/stationpedia/SeedBag_SugarCane.png new file mode 100644 index 0000000..fce564b Binary files /dev/null and b/www/img/stationpedia/SeedBag_SugarCane.png differ diff --git a/www/img/stationpedia/StructureChuteExportBin.png b/www/img/stationpedia/StructureChuteExportBin.png new file mode 100644 index 0000000..12b3a9a Binary files /dev/null and b/www/img/stationpedia/StructureChuteExportBin.png differ diff --git a/www/img/stationpedia/StructureCompositeWindowShutter.png b/www/img/stationpedia/StructureCompositeWindowShutter.png new file mode 100644 index 0000000..24b7a86 Binary files /dev/null and b/www/img/stationpedia/StructureCompositeWindowShutter.png differ diff --git a/www/img/stationpedia/StructureCompositeWindowShutterConnector.png b/www/img/stationpedia/StructureCompositeWindowShutterConnector.png new file mode 100644 index 0000000..7af539b Binary files /dev/null and b/www/img/stationpedia/StructureCompositeWindowShutterConnector.png differ diff --git a/www/img/stationpedia/StructureCompositeWindowShutterController.png b/www/img/stationpedia/StructureCompositeWindowShutterController.png new file mode 100644 index 0000000..3809589 Binary files /dev/null and b/www/img/stationpedia/StructureCompositeWindowShutterController.png differ diff --git a/www/img/stationpedia/StructureComputerUpright.png b/www/img/stationpedia/StructureComputerUpright.png new file mode 100644 index 0000000..0abc70c Binary files /dev/null and b/www/img/stationpedia/StructureComputerUpright.png differ diff --git a/www/img/stationpedia/StructureCrateMount.png b/www/img/stationpedia/StructureCrateMount.png index 7b36e60..49adaf0 100644 Binary files a/www/img/stationpedia/StructureCrateMount.png and b/www/img/stationpedia/StructureCrateMount.png differ diff --git a/www/img/stationpedia/StructureElevatorShaftIndustrial.png b/www/img/stationpedia/StructureElevatorShaftIndustrial.png index 87ca40e..478336e 100644 Binary files a/www/img/stationpedia/StructureElevatorShaftIndustrial.png and b/www/img/stationpedia/StructureElevatorShaftIndustrial.png differ diff --git a/www/img/stationpedia/StructureInsulatedInLineTankGas1x1.png b/www/img/stationpedia/StructureInsulatedInLineTankGas1x1.png new file mode 100644 index 0000000..ed45057 Binary files /dev/null and b/www/img/stationpedia/StructureInsulatedInLineTankGas1x1.png differ diff --git a/www/img/stationpedia/StructureInsulatedInLineTankGas1x2.png b/www/img/stationpedia/StructureInsulatedInLineTankGas1x2.png new file mode 100644 index 0000000..217537e Binary files /dev/null and b/www/img/stationpedia/StructureInsulatedInLineTankGas1x2.png differ diff --git a/www/img/stationpedia/StructureInsulatedInLineTankLiquid1x1.png b/www/img/stationpedia/StructureInsulatedInLineTankLiquid1x1.png new file mode 100644 index 0000000..e516e4e Binary files /dev/null and b/www/img/stationpedia/StructureInsulatedInLineTankLiquid1x1.png differ diff --git a/www/img/stationpedia/StructureInsulatedInLineTankLiquid1x2.png b/www/img/stationpedia/StructureInsulatedInLineTankLiquid1x2.png new file mode 100644 index 0000000..50d9d3e Binary files /dev/null and b/www/img/stationpedia/StructureInsulatedInLineTankLiquid1x2.png differ diff --git a/www/img/stationpedia/StructureLiquidValve.png b/www/img/stationpedia/StructureLiquidValve.png index 21f89c3..ab397d5 100644 Binary files a/www/img/stationpedia/StructureLiquidValve.png and b/www/img/stationpedia/StructureLiquidValve.png differ diff --git a/www/img/stationpedia/StructurePipeLiquidOneWayValveLever.png b/www/img/stationpedia/StructurePipeLiquidOneWayValveLever.png new file mode 100644 index 0000000..bcef2fe Binary files /dev/null and b/www/img/stationpedia/StructurePipeLiquidOneWayValveLever.png differ diff --git a/www/img/stationpedia/StructurePipeOneWayValveLever.png b/www/img/stationpedia/StructurePipeOneWayValveLever.png new file mode 100644 index 0000000..15afcea Binary files /dev/null and b/www/img/stationpedia/StructurePipeOneWayValveLever.png differ diff --git a/www/img/stationpedia/StructureReinforcedWall.png b/www/img/stationpedia/StructureReinforcedWall.png new file mode 100644 index 0000000..29e2baa Binary files /dev/null and b/www/img/stationpedia/StructureReinforcedWall.png differ diff --git a/www/img/stationpedia/StructureRobotArmDoor.png b/www/img/stationpedia/StructureRobotArmDoor.png new file mode 100644 index 0000000..29b2fdd Binary files /dev/null and b/www/img/stationpedia/StructureRobotArmDoor.png differ diff --git a/www/img/stationpedia/StructureRoboticArmDock.png b/www/img/stationpedia/StructureRoboticArmDock.png new file mode 100644 index 0000000..effb58a Binary files /dev/null and b/www/img/stationpedia/StructureRoboticArmDock.png differ diff --git a/www/img/stationpedia/StructureRoboticArmRailCorner.png b/www/img/stationpedia/StructureRoboticArmRailCorner.png new file mode 100644 index 0000000..cfe7555 Binary files /dev/null and b/www/img/stationpedia/StructureRoboticArmRailCorner.png differ diff --git a/www/img/stationpedia/StructureRoboticArmRailCornerStop.png b/www/img/stationpedia/StructureRoboticArmRailCornerStop.png new file mode 100644 index 0000000..e069114 Binary files /dev/null and b/www/img/stationpedia/StructureRoboticArmRailCornerStop.png differ diff --git a/www/img/stationpedia/StructureRoboticArmRailInnerCorner.png b/www/img/stationpedia/StructureRoboticArmRailInnerCorner.png new file mode 100644 index 0000000..abf7778 Binary files /dev/null and b/www/img/stationpedia/StructureRoboticArmRailInnerCorner.png differ diff --git a/www/img/stationpedia/StructureRoboticArmRailOuterCorner.png b/www/img/stationpedia/StructureRoboticArmRailOuterCorner.png new file mode 100644 index 0000000..b293f33 Binary files /dev/null and b/www/img/stationpedia/StructureRoboticArmRailOuterCorner.png differ diff --git a/www/img/stationpedia/StructureRoboticArmRailStraight.png b/www/img/stationpedia/StructureRoboticArmRailStraight.png new file mode 100644 index 0000000..5647e7c Binary files /dev/null and b/www/img/stationpedia/StructureRoboticArmRailStraight.png differ diff --git a/www/img/stationpedia/StructureRoboticArmRailStraightStop.png b/www/img/stationpedia/StructureRoboticArmRailStraightStop.png new file mode 100644 index 0000000..f73c79b Binary files /dev/null and b/www/img/stationpedia/StructureRoboticArmRailStraightStop.png differ diff --git a/www/img/stationpedia/StructureValve.png b/www/img/stationpedia/StructureValve.png index 1043752..a484efc 100644 Binary files a/www/img/stationpedia/StructureValve.png and b/www/img/stationpedia/StructureValve.png differ diff --git a/www/package.json b/www/package.json index 6f0c503..4250ca7 100644 --- a/www/package.json +++ b/www/package.json @@ -25,46 +25,49 @@ "homepage": "https://github.com/ryex/ic10emu#readme", "devDependencies": { "@oneidentity/zstd-js": "^1.0.3", - "@rsbuild/core": "^0.6.4", - "@rsbuild/plugin-image-compress": "^0.6.4", - "@rsbuild/plugin-type-check": "^0.6.4", - "@rspack/cli": "^0.6.2", - "@rspack/core": "^0.6.2", - "@swc/helpers": "^0.5.10", + "@rsbuild/core": "^1.0.4", + "@rsbuild/plugin-image-compress": "^1.0.2", + "@rsbuild/plugin-sass": "^1.0.1", + "@rsbuild/plugin-type-check": "^1.0.1", + "@rspack/cli": "^1.0.5", + "@rspack/core": "^1.0.5", + "@swc/helpers": "^0.5.13", "@types/ace": "^0.0.52", "@types/bootstrap": "^5.2.10", "@types/wicg-file-system-access": "^2023.10.5", "fork-ts-checker-webpack-plugin": "^9.0.2", "lit-scss-loader": "^2.0.1", - "mini-css-extract-plugin": "^2.9.0", + "mini-css-extract-plugin": "^2.9.1", "postcss-loader": "^8.1.1", - "sass": "^1.75.0", - "tailwindcss": "^3.4.3", + "sass": "^1.78.0", + "tailwindcss": "^3.4.12", "ts-lit-plugin": "^2.0.2", "ts-loader": "^9.5.1", - "typescript": "^5.4.5", + "typescript": "^5.6.2", "typescript-lit-html-plugin": "^0.9.0" }, "dependencies": { "@leeoniya/ufuzzy": "^1.0.14", - "@lit/context": "^1.1.1", + "@lit-labs/preact-signals": "^1.0.2", + "@lit/context": "^1.1.2", "@popperjs/core": "^2.11.8", - "@shoelace-style/shoelace": "^2.15.0", - "ace-builds": "^1.33.0", - "ace-linters": "^1.2.0", + "@shoelace-style/shoelace": "^2.16.0", + "ace-builds": "^1.36.2", + "ace-linters": "^1.3.2", "bootstrap": "^5.3.3", - "bson": "^6.6.0", + "bson": "^6.8.0", "buffer": "^6.0.3", + "comlink": "^4.4.1", "crypto-browserify": "^3.12.0", - "ic10emu_wasm": "file:../ic10emu_wasm/pkg", - "ic10lsp_wasm": "file:../ic10lsp_wasm/pkg", + "ic10emu_wasm": "file:..\\ic10emu_wasm\\pkg", + "ic10lsp_wasm": "file:..\\ic10lsp_wasm\\pkg", "idb": "^8.0.0", "jquery": "^3.7.1", - "lit": "^3.1.3", + "lit": "^3.2.0", "lzma-web": "^3.0.1", - "marked": "^12.0.2", + "marked": "^14.1.2", "stream-browserify": "^3.0.0", - "uuid": "^9.0.1", + "uuid": "^10.0.0", "vm-browserify": "^1.1.2" } } diff --git a/www/pnpm-lock.yaml b/www/pnpm-lock.yaml index f9db843..9d0a40c 100644 --- a/www/pnpm-lock.yaml +++ b/www/pnpm-lock.yaml @@ -1,664 +1,3045 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@leeoniya/ufuzzy': - specifier: ^1.0.14 - version: 1.0.14 - '@lit/context': - specifier: ^1.1.1 - version: 1.1.1 - '@popperjs/core': - specifier: ^2.11.8 - version: 2.11.8 - '@shoelace-style/shoelace': - specifier: ^2.15.0 - version: 2.15.0(@types/react@18.2.79) - ace-builds: - specifier: ^1.33.0 - version: 1.33.0 - ace-linters: - specifier: ^1.2.0 - version: 1.2.0 - bootstrap: - specifier: ^5.3.3 - version: 5.3.3(@popperjs/core@2.11.8) - bson: - specifier: ^6.6.0 - version: 6.6.0 - buffer: - specifier: ^6.0.3 - version: 6.0.3 - crypto-browserify: - specifier: ^3.12.0 - version: 3.12.0 - ic10emu_wasm: - specifier: file:../ic10emu_wasm/pkg - version: file:../ic10emu_wasm/pkg - ic10lsp_wasm: - specifier: file:../ic10lsp_wasm/pkg - version: file:../ic10lsp_wasm/pkg - idb: - specifier: ^8.0.0 - version: 8.0.0 - jquery: - specifier: ^3.7.1 - version: 3.7.1 - lit: - specifier: ^3.1.3 - version: 3.1.3 - lzma-web: - specifier: ^3.0.1 - version: 3.0.1 - marked: - specifier: ^12.0.2 - version: 12.0.2 - stream-browserify: - specifier: ^3.0.0 - version: 3.0.0 - uuid: - specifier: ^9.0.1 - version: 9.0.1 - vm-browserify: - specifier: ^1.1.2 - version: 1.1.2 +importers: -devDependencies: - '@oneidentity/zstd-js': - specifier: ^1.0.3 - version: 1.0.3 - '@rsbuild/core': - specifier: ^0.6.4 - version: 0.6.4 - '@rsbuild/plugin-image-compress': - specifier: ^0.6.4 - version: 0.6.4(@rsbuild/core@0.6.4)(@swc/helpers@0.5.10) - '@rsbuild/plugin-type-check': - specifier: ^0.6.4 - version: 0.6.4(@rsbuild/core@0.6.4)(@swc/helpers@0.5.10)(typescript@5.4.5) - '@rspack/cli': - specifier: ^0.6.2 - version: 0.6.2(@rspack/core@0.6.2)(webpack@5.91.0) - '@rspack/core': - specifier: ^0.6.2 - version: 0.6.2(@swc/helpers@0.5.10) - '@swc/helpers': - specifier: ^0.5.10 - version: 0.5.10 - '@types/ace': - specifier: ^0.0.52 - version: 0.0.52 - '@types/bootstrap': - specifier: ^5.2.10 - version: 5.2.10 - '@types/wicg-file-system-access': - specifier: ^2023.10.5 - version: 2023.10.5 - fork-ts-checker-webpack-plugin: - specifier: ^9.0.2 - version: 9.0.2(typescript@5.4.5)(webpack@5.91.0) - lit-scss-loader: - specifier: ^2.0.1 - version: 2.0.1(webpack@5.91.0) - mini-css-extract-plugin: - specifier: ^2.9.0 - version: 2.9.0(webpack@5.91.0) - postcss-loader: - specifier: ^8.1.1 - version: 8.1.1(@rspack/core@0.6.2)(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0) - sass: - specifier: ^1.75.0 - version: 1.75.0 - tailwindcss: - specifier: ^3.4.3 - version: 3.4.3 - ts-lit-plugin: - specifier: ^2.0.2 - version: 2.0.2 - ts-loader: - specifier: ^9.5.1 - version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) - typescript: - specifier: ^5.4.5 - version: 5.4.5 - typescript-lit-html-plugin: - specifier: ^0.9.0 - version: 0.9.0 + .: + dependencies: + '@leeoniya/ufuzzy': + specifier: ^1.0.14 + version: 1.0.14 + '@lit-labs/preact-signals': + specifier: ^1.0.2 + version: 1.0.2 + '@lit/context': + specifier: ^1.1.2 + version: 1.1.2 + '@popperjs/core': + specifier: ^2.11.8 + version: 2.11.8 + '@shoelace-style/shoelace': + specifier: ^2.16.0 + version: 2.16.0(@types/react@18.2.79) + ace-builds: + specifier: ^1.36.2 + version: 1.36.2 + ace-linters: + specifier: ^1.3.2 + version: 1.3.2 + bootstrap: + specifier: ^5.3.3 + version: 5.3.3(@popperjs/core@2.11.8) + bson: + specifier: ^6.8.0 + version: 6.8.0 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + comlink: + specifier: ^4.4.1 + version: 4.4.1 + crypto-browserify: + specifier: ^3.12.0 + version: 3.12.0 + ic10emu_wasm: + specifier: file:..\ic10emu_wasm\pkg + version: file:../ic10emu_wasm/pkg + ic10lsp_wasm: + specifier: file:..\ic10lsp_wasm\pkg + version: file:../ic10lsp_wasm/pkg + idb: + specifier: ^8.0.0 + version: 8.0.0 + jquery: + specifier: ^3.7.1 + version: 3.7.1 + lit: + specifier: ^3.2.0 + version: 3.2.0 + lzma-web: + specifier: ^3.0.1 + version: 3.0.1 + marked: + specifier: ^14.1.2 + version: 14.1.2 + stream-browserify: + specifier: ^3.0.0 + version: 3.0.0 + uuid: + specifier: ^10.0.0 + version: 10.0.0 + vm-browserify: + specifier: ^1.1.2 + version: 1.1.2 + devDependencies: + '@oneidentity/zstd-js': + specifier: ^1.0.3 + version: 1.0.3 + '@rsbuild/core': + specifier: ^1.0.4 + version: 1.0.4 + '@rsbuild/plugin-image-compress': + specifier: ^1.0.2 + version: 1.0.2(@rsbuild/core@1.0.4) + '@rsbuild/plugin-sass': + specifier: ^1.0.1 + version: 1.0.1(@rsbuild/core@1.0.4) + '@rsbuild/plugin-type-check': + specifier: ^1.0.1 + version: 1.0.1(@rsbuild/core@1.0.4)(typescript@5.6.2) + '@rspack/cli': + specifier: ^1.0.5 + version: 1.0.5(@rspack/core@1.0.5(@swc/helpers@0.5.13))(@types/express@4.17.21)(webpack@5.94.0) + '@rspack/core': + specifier: ^1.0.5 + version: 1.0.5(@swc/helpers@0.5.13) + '@swc/helpers': + specifier: ^0.5.13 + version: 0.5.13 + '@types/ace': + specifier: ^0.0.52 + version: 0.0.52 + '@types/bootstrap': + specifier: ^5.2.10 + version: 5.2.10 + '@types/wicg-file-system-access': + specifier: ^2023.10.5 + version: 2023.10.5 + fork-ts-checker-webpack-plugin: + specifier: ^9.0.2 + version: 9.0.2(typescript@5.6.2)(webpack@5.94.0) + lit-scss-loader: + specifier: ^2.0.1 + version: 2.0.1(webpack@5.94.0) + mini-css-extract-plugin: + specifier: ^2.9.1 + version: 2.9.1(webpack@5.94.0) + postcss-loader: + specifier: ^8.1.1 + version: 8.1.1(@rspack/core@1.0.5(@swc/helpers@0.5.13))(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0) + sass: + specifier: ^1.78.0 + version: 1.78.0 + tailwindcss: + specifier: ^3.4.12 + version: 3.4.12 + ts-lit-plugin: + specifier: ^2.0.2 + version: 2.0.2 + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.6.2)(webpack@5.94.0) + typescript: + specifier: ^5.6.2 + version: 5.6.2 + typescript-lit-html-plugin: + specifier: ^0.9.0 + version: 0.9.0 packages: - /@alloc/quick-lru@5.2.0: + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - dev: true - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.0.0 - dev: true - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - dev: true - /@babel/highlight@7.24.2: - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.0 - dev: true - /@babel/runtime@7.24.4: - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: true - /@ctrl/tinycolor@4.1.0: + '@bufbuild/protobuf@1.10.0': + resolution: {integrity: sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==} + + '@ctrl/tinycolor@4.1.0': resolution: {integrity: sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==} engines: {node: '>=14'} - dev: false - /@discoveryjs/json-ext@0.5.7: + '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - dev: true - /@emmetio/extract-abbreviation@0.1.6: + '@emmetio/extract-abbreviation@0.1.6': resolution: {integrity: sha512-Ce3xE2JvTSEbASFbRbA1gAIcMcZWdS2yUYRaQbeM0nbOzaZrUYfa3ePtcriYRZOZmr+CkKA+zbjhvTpIOAYVcw==} - dev: true - /@emnapi/core@1.1.1: - resolution: {integrity: sha512-eu4KjHfXg3I+UUR7vSuwZXpRo4c8h4Rtb5Lu2F7Z4JqJFl/eidquONEBiRs6viXKpWBC3BaJBy68xGJ2j56idw==} - requiresBuild: true - dependencies: - tslib: 2.6.2 - dev: true - optional: true + '@emnapi/core@1.2.0': + resolution: {integrity: sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==} - /@emnapi/runtime@1.1.1: - resolution: {integrity: sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==} - requiresBuild: true - dependencies: - tslib: 2.6.2 - dev: true - optional: true + '@emnapi/runtime@1.2.0': + resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} - /@floating-ui/core@1.6.0: - resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} - dependencies: - '@floating-ui/utils': 0.2.1 - dev: false + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} - /@floating-ui/dom@1.6.3: - resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} - dependencies: - '@floating-ui/core': 1.6.0 - '@floating-ui/utils': 0.2.1 - dev: false + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - dev: false + '@floating-ui/dom@1.6.11': + resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} - /@isaacs/cliui@8.0.2: + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - /@jridgewell/gen-mapping@0.3.5: + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/resolve-uri@3.1.2: + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/set-array@1.2.1: + '@jridgewell/set-array@1.2.1': resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/source-map@0.3.6: + '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - /@jridgewell/trace-mapping@0.3.25: + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@leeoniya/ufuzzy@1.0.14: + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.1.0': + resolution: {integrity: sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.3.0': + resolution: {integrity: sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@leeoniya/ufuzzy@1.0.14': resolution: {integrity: sha512-/xF4baYuCQMo+L/fMSUrZnibcu0BquEGnbxfVPiZhs/NbJeKj4c/UmFpQzW9Us0w45ui/yYW3vyaqawhNYsTzA==} - dev: false - /@leichtgewicht/ip-codec@2.0.5: + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - dev: true - /@lit-labs/ssr-dom-shim@1.2.0: - resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} - dev: false + '@lit-labs/preact-signals@1.0.2': + resolution: {integrity: sha512-HFgIhqLB5IiNbvJxEN3+o6n9x/fNZo7pqfElG56NHrOFBsIFW7wswbp6hHeoGzATQDOB2ZmrH/VrRGYdcgl29g==} - /@lit/context@1.1.1: - resolution: {integrity: sha512-q/Rw7oWSJidUP43f/RUPwqZ6f5VlY8HzinTWxL/gW1Hvm2S5q2hZvV+qM8WFcC+oLNNknc3JKsd5TwxLk1hbdg==} - dependencies: - '@lit/reactive-element': 2.0.4 - dev: false + '@lit-labs/ssr-dom-shim@1.2.1': + resolution: {integrity: sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==} - /@lit/react@1.0.4(@types/react@18.2.79): - resolution: {integrity: sha512-6HBvk3AwF46z17fTkZp5F7/EdCJW9xqqQgYKr3sQGgoEJv0TKV1voWydG4UQQA2RWkoD4SHjy08snSpzyoyd0w==} + '@lit/context@1.1.2': + resolution: {integrity: sha512-S0nw2C6Tkm7fVX5TGYqeROGD+Z9Coa2iFpW+ysYBDH3YvCqOY3wVQvSgwbaliLJkjTnSEYCBe9qFqKV8WUFpVw==} + + '@lit/react@1.0.5': + resolution: {integrity: sha512-RSHhrcuSMa4vzhqiTenzXvtQ6QDq3hSPsnHHO3jaPmmvVFeoNNm4DHoQ0zLdKAUvY3wP3tTENSUf7xpyVfrDEA==} peerDependencies: '@types/react': 17 || 18 - dependencies: - '@types/react': 18.2.79 - dev: false - /@lit/reactive-element@2.0.4: + '@lit/reactive-element@2.0.4': resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} - dependencies: - '@lit-labs/ssr-dom-shim': 1.2.0 - dev: false - /@module-federation/runtime-tools@0.1.6: - resolution: {integrity: sha512-7ILVnzMIa0Dlc0Blck5tVZG1tnk1MmLnuZpLOMpbdW+zl+N6wdMjjHMjEZFCUAJh2E5XJ3BREwfX8Ets0nIkLg==} - dependencies: - '@module-federation/runtime': 0.1.6 - '@module-federation/webpack-bundler-runtime': 0.1.6 - dev: true + '@module-federation/runtime-tools@0.5.1': + resolution: {integrity: sha512-nfBedkoZ3/SWyO0hnmaxuz0R0iGPSikHZOAZ0N/dVSQaIzlffUo35B5nlC2wgWIc0JdMZfkwkjZRrnuuDIJbzg==} - /@module-federation/runtime@0.1.6: - resolution: {integrity: sha512-nj6a+yJ+QxmcE89qmrTl4lphBIoAds0PFPVGnqLRWflwAP88jrCcrrTqRhARegkFDL+wE9AE04+h6jzlbIfMKg==} - dependencies: - '@module-federation/sdk': 0.1.6 - dev: true + '@module-federation/runtime@0.5.1': + resolution: {integrity: sha512-xgiMUWwGLWDrvZc9JibuEbXIbhXg6z2oUkemogSvQ4LKvrl/n0kbqP1Blk669mXzyWbqtSp6PpvNdwaE1aN5xQ==} - /@module-federation/sdk@0.1.6: - resolution: {integrity: sha512-qifXpyYLM7abUeEOIfv0oTkguZgRZuwh89YOAYIZJlkP6QbRG7DJMQvtM8X2yHXm9PTk0IYNnOJH0vNQCo6auQ==} - dev: true + '@module-federation/sdk@0.5.1': + resolution: {integrity: sha512-exvchtjNURJJkpqjQ3/opdbfeT2wPKvrbnGnyRkrwW5o3FH1LaST1tkiNviT6OXTexGaVc2DahbdniQHVtQ7pA==} - /@module-federation/webpack-bundler-runtime@0.1.6: - resolution: {integrity: sha512-K5WhKZ4RVNaMEtfHsd/9CNCgGKB0ipbm/tgweNNeC11mEuBTNxJ09Y630vg3WPkKv9vfMCuXg2p2Dk+Q/KWTSA==} - dependencies: - '@module-federation/runtime': 0.1.6 - '@module-federation/sdk': 0.1.6 - dev: true + '@module-federation/webpack-bundler-runtime@0.5.1': + resolution: {integrity: sha512-mMhRFH0k2VjwHt3Jol9JkUsmI/4XlrAoBG3E0o7HoyoPYv1UFOWyqAflfANcUPgbYpvqmyLzDcO+3IT36LXnrA==} - /@napi-rs/image-android-arm64@1.9.1: - resolution: {integrity: sha512-+YP3G3oWRRBNH+2KF025qxKnSfmB0wpBZ+5p3my5zwtW92r8xJj1nLpLMRjDpq7mbH49QFPtXG5JW0OAW/ibJg==} + '@napi-rs/image-android-arm64@1.9.2': + resolution: {integrity: sha512-DQNI06ukKqpF4eogz9zyxfU+GYp11TfDqSNWKmk/IRU2oiB0DEgskuj7ZzaKMPJWFRZjI86V233UrrNRh76h2Q==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-darwin-arm64@1.9.1: - resolution: {integrity: sha512-Al9cNMmoZCQ71aM7FofncPwv/pQ/rmrCxjLQwkSa0VukjCdV6FfNhkpdO4eagnYRveoHE2BPA7MfxveuuztnLQ==} + '@napi-rs/image-darwin-arm64@1.9.2': + resolution: {integrity: sha512-w+0X87sORbC2uDpH7NAdELOnvzhu3dB19h2oMaD+YIv/+CVXV5eK2PS3zkRgMLCinVtFOZFZK3dFbHU3kncCRw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-darwin-x64@1.9.1: - resolution: {integrity: sha512-hGsAXOEB8UnQxegHSNQiMzhAkXt7qOL8w0tm4J4iz/j/j30MhOaIh5RjRgrok0Ujd9DF7565awdKViqRFT2QWg==} + '@napi-rs/image-darwin-x64@1.9.2': + resolution: {integrity: sha512-8SnFDcgUSoL6Y38lstXi5FYECD1f4dJqQe2UCTwciED8gZnpC8Pju7JYJWcYgHHXn1JnKP9T1lPlSaX+L56EgA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-freebsd-x64@1.9.1: - resolution: {integrity: sha512-ocj0su+PCdwH2+OnaRYCr2DodU3ygPBJfAsuth4Bjm1vYoAtV5O9TScPjNy2KF3QYKx5mRiLMtJMQgpgYy8O3A==} + '@napi-rs/image-freebsd-x64@1.9.2': + resolution: {integrity: sha512-oS0+iSb8AekjaHgTZdARKceqTPxSokByLzNQ9vGf2lZlTwlRFmXGq4XYutyzqzRuLT3BATLwtGMXiguMEYMuUw==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-linux-arm-gnueabihf@1.9.1: - resolution: {integrity: sha512-6ULZMRN7rE4SgunlLBnLr4/ntgSD2tHh1Yl66VItbe+CZ0IQQeNO8SRRPm369X+MUVBu7P4/LJAQ6biOXpwSdw==} + '@napi-rs/image-linux-arm-gnueabihf@1.9.2': + resolution: {integrity: sha512-bsbZSvw3wa7yaLVvz4M5VhJaB9LmgjAL3W7rnmXaX5BgpaQImNDm9MrxPG8ennr9Pbn6qDtCSioOz53ZgWUtgg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-linux-arm64-gnu@1.9.1: - resolution: {integrity: sha512-haLLJ+uyhAYWf+HRUYjPd4zqyNsaCFixOjG5t+Ha/v6jBBm62HfT/LICEB0UhNpsyAIzN3rBncFNpGFQa4W+NQ==} + '@napi-rs/image-linux-arm64-gnu@1.9.2': + resolution: {integrity: sha512-tiN9RMwEIcA8TodvmxdeJqsRdUGKAmxQ2aa0FkYjshdkmChG/sqUtUoL9LdmDf1tw1IACrSuT2Wj4LevxBdIJA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-linux-arm64-musl@1.9.1: - resolution: {integrity: sha512-TBjDF+ezl6iB0RSFHqW+2P9MUUE9jcwT5hqBQ9MkCRUFZAMZVITCUmth4ZDQl65SYA7UoyBcaX7FTRzMuqAiTA==} + '@napi-rs/image-linux-arm64-musl@1.9.2': + resolution: {integrity: sha512-w6Sx1j9PtqO2bP3Jl6nuMryzxA3zsoc1U8u1H7AZketyhxXIxqVm0oGomZGs5Bgshzau45bcWinp6GWrlSwt6A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-linux-x64-gnu@1.9.1: - resolution: {integrity: sha512-SZmwz4cC2Hwj8/Q3/aSEOEcPltUWl4ECx9ZWd3KqqmqIR51fZhIvbVzm8vCQv3354Wn3d+P0IoIWDzGgy09qaQ==} + '@napi-rs/image-linux-x64-gnu@1.9.2': + resolution: {integrity: sha512-yB/s9wNB/9YHpQ4TwN8NWMA1tEK1gPLQwtysa68yMdHczb+7BTCKCIYIHD9rUulyT1Q/VgLIJCUMoxve0pIoeg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-linux-x64-musl@1.9.1: - resolution: {integrity: sha512-GtHMCtjl+Ymg3hDAn7KvWW6bjVooSdBtFs5JW8MHZEm+EURaj0+twCPR0l832pK1BOpXiuzRCThmx17hY45BBQ==} + '@napi-rs/image-linux-x64-musl@1.9.2': + resolution: {integrity: sha512-x9dRlo27xYXonh+gZZTqQL4lAfi/lhi8K8LE2hczbZffqmXvWU7NuHSgPVVeU/nvcMMqw1Cjzn81h7ny44SLbQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-wasm32-wasi@1.9.1: - resolution: {integrity: sha512-ddm8j1fLiHaM035Zsu79QiQWL3wHETRZbh2JzF/ZbikLOF7slHqmZKc3dFXQl8iYm8OUxOmjnDr5uBZLSMP/Eg==} + '@napi-rs/image-wasm32-wasi@1.9.2': + resolution: {integrity: sha512-BeA1wzzIG4+tdAwXWaAjObBOC6SzIbq0IhykSQ1xCGvYwd8stsn7ktPRz5b55PDo+Doj65PCT4H/xUgFcSiLCw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - requiresBuild: true - dependencies: - '@napi-rs/wasm-runtime': 0.1.2 - dev: true - optional: true - /@napi-rs/image-win32-ia32-msvc@1.9.1: - resolution: {integrity: sha512-9p/WVNvirq0/s03gUrD6UzljN4/Ktt1Zcw1W2vzozH39lg0LqSwI/BpesTWRPSjPzCq1WdA8rLbAa3jpOAN49Q==} + '@napi-rs/image-win32-ia32-msvc@1.9.2': + resolution: {integrity: sha512-JDJP04Hg9Qru5Pth4gfBkXz9hZd/otx6ymi2VTuSKDFjpJIjk4tyUr9+BIE1ghFCHDzeJGVe7CDGdF/NTA1xrg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image-win32-x64-msvc@1.9.1: - resolution: {integrity: sha512-8j7qK0rZOSLSLbM2AjXh4TwSu0H7tPA85Kq8WAEVPRtPo+9r3MsQCnko1H51AGigomR1LWg53co0MYTFipOFTg==} + '@napi-rs/image-win32-x64-msvc@1.9.2': + resolution: {integrity: sha512-baRyTED6FkTsPliSOH7x8TV/cyAST9y6L1ClSgSCVEx7+W8MKKig90fF302kEa2PwMAyrXM3Ytq9KuIC7xJ+eA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@napi-rs/image@1.9.1: - resolution: {integrity: sha512-NWf+fi0Fdfji/Q3JPetBaN2zJmBpl3zOEeCffnd3Q2YHgfTwwc9+tHKNDJ7Jf/70eXJTzEZxPHx0DDbJyNPSWQ==} + '@napi-rs/image@1.9.2': + resolution: {integrity: sha512-CvTC3XL5/BzHaVkJOZy31xOJLNSY3rBuUIQixaE/LwEQNSUdaxWa9gUyUkC9lUekkUp26CzaLLj2w7l7bxB1ag==} engines: {node: '>= 10'} - optionalDependencies: - '@napi-rs/image-android-arm64': 1.9.1 - '@napi-rs/image-darwin-arm64': 1.9.1 - '@napi-rs/image-darwin-x64': 1.9.1 - '@napi-rs/image-freebsd-x64': 1.9.1 - '@napi-rs/image-linux-arm-gnueabihf': 1.9.1 - '@napi-rs/image-linux-arm64-gnu': 1.9.1 - '@napi-rs/image-linux-arm64-musl': 1.9.1 - '@napi-rs/image-linux-x64-gnu': 1.9.1 - '@napi-rs/image-linux-x64-musl': 1.9.1 - '@napi-rs/image-wasm32-wasi': 1.9.1 - '@napi-rs/image-win32-ia32-msvc': 1.9.1 - '@napi-rs/image-win32-x64-msvc': 1.9.1 - dev: true - /@napi-rs/wasm-runtime@0.1.2: - resolution: {integrity: sha512-8JuczewTFIZ/XIjHQ+YlQUydHvlKx2hkcxtuGwh+t/t5zWyZct6YG4+xjHcq8xyc/e7FmFwf42Zj2YgICwmlvA==} - requiresBuild: true - dependencies: - '@emnapi/core': 1.1.1 - '@emnapi/runtime': 1.1.1 - '@tybys/wasm-util': 0.8.2 - dev: true - optional: true + '@napi-rs/wasm-runtime@0.2.4': + resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@oneidentity/zstd-js@1.0.3': + resolution: {integrity: sha512-Jm6sawqxLzBrjC4sg2BeXToa33yPzUmq20CKsehKY2++D/gHb/oSwVjNgT+RH4vys+r8FynrgcNzGwhZWMLzfQ==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@polka/url@1.0.0-next.25': + resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@preact/signals-core@1.8.0': + resolution: {integrity: sha512-OBvUsRZqNmjzCZXWLxkZfhcgT+Fk8DDcT/8vD6a1xhDemodyy87UJRJfASMuSD8FaAIeGgGm85ydXhm7lr4fyA==} + + '@rsbuild/core@1.0.4': + resolution: {integrity: sha512-ACvCzeyW5gW5olGBzK5Tnc5RfUOQ+BPnMB7Y0Iycz0pRYAghKQcYkpPZlEpdsKQDNeBUKk9loOy+Z7Rca4Ouzw==} + engines: {node: '>=16.7.0'} + hasBin: true + + '@rsbuild/plugin-image-compress@1.0.2': + resolution: {integrity: sha512-+WFx3bBzP2TAM+lv98HFOaXdX8i10b0jbmO68EzC2r3ftnzbb5wTJGiybaJ8joeeCZ8e6SsSE9T1qb0cPsTbMA==} + peerDependencies: + '@rsbuild/core': 1.x || ^1.0.1-beta.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rsbuild/plugin-sass@1.0.1': + resolution: {integrity: sha512-gybEWXc5kUAc3eur7LJRfWiG9tA5sdDUNo++Fy2pSRhVdYRMLUtKq4YOTmLCYHQ8b7vWRbmv8keqX34ynBm8Bg==} + peerDependencies: + '@rsbuild/core': 1.x || ^1.0.1-rc.0 + + '@rsbuild/plugin-type-check@1.0.1': + resolution: {integrity: sha512-BahXAJNq4kWtL2dINUlrOL9UCN1t8c/qf5RW8JXx2HSSasfKPJGJ1BVfieMcIaFa/t8/QdafcwoxY1WKPTlSMg==} + peerDependencies: + '@rsbuild/core': 1.x || ^1.0.1-beta.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rspack/binding-darwin-arm64@1.0.5': + resolution: {integrity: sha512-pEHj4AOluOa7FaR1DMACPUUZKO3qZI4/66xaTqk0BbclvMT7eheQAWtkmjdE9WJgeZ389TrwZeaMzzPdHhK/6Q==} + cpu: [arm64] + os: [darwin] + + '@rspack/binding-darwin-x64@1.0.5': + resolution: {integrity: sha512-xS5EDD9l3MHL54bnmxsndm61P9l3l7ZNuLSuPl2MbYJzDqPdnXhTdkIjdcDOLH2daFm8gfB634wa5knZhPGLOw==} + cpu: [x64] + os: [darwin] + + '@rspack/binding-linux-arm64-gnu@1.0.5': + resolution: {integrity: sha512-svPOFlem7s6T33tX8a28uD5Ngc7bdML96ioiH7Fhi0J/at+WAthor4GeUNwkwuzBQI/Nc9XCgiYPcE0pzP7c6w==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-arm64-musl@1.0.5': + resolution: {integrity: sha512-cysqogEUNc0TgzzXcK9bkv12eoCjqhLzOvGXQU1zSEU9Hov7tuzMDl3Z6R3A7NgOCmWu84/wOnTrkSOI28caew==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-x64-gnu@1.0.5': + resolution: {integrity: sha512-qIEMsWOzTKpVm0Sg553gKkua49Kd/sElLD1rZcXjjxjAsD97uq8AiNncArMfYdDKgkKbtwtW/Fb3uVuafTLnZg==} + cpu: [x64] + os: [linux] + + '@rspack/binding-linux-x64-musl@1.0.5': + resolution: {integrity: sha512-yulltMSQN3aBt3NMURYTmJcpAJBi4eEJ4i9qF0INE8f0885sJpI0j35/31POkCghG1ZOSZkYALFrheKKP9e8pg==} + cpu: [x64] + os: [linux] + + '@rspack/binding-win32-arm64-msvc@1.0.5': + resolution: {integrity: sha512-5oF/qN6TnUj28UAdaOgSIWKq7HG5QgI4p37zvQBBTXZHhrwN2kE6H+TaofWnSqWJynwmGIxJIx8bGo3lDfFbfA==} + cpu: [arm64] + os: [win32] + + '@rspack/binding-win32-ia32-msvc@1.0.5': + resolution: {integrity: sha512-y16IPjd/z6L7+r6RXLu7J/jlZDUenSnJDqo10HnnxtLjOJ+vna+pljI8sHcwu1ao0c3J3uMvbkF34dTiev7Opg==} + cpu: [ia32] + os: [win32] + + '@rspack/binding-win32-x64-msvc@1.0.5': + resolution: {integrity: sha512-PSBTbDSgT+ClYvyQTDtWBi/bxXW/xJmVjg9NOWe8KAEl5WNU+pToiCBLLPCGDSa+K7/zr2TDb6QakG/qYItPZw==} + cpu: [x64] + os: [win32] + + '@rspack/binding@1.0.5': + resolution: {integrity: sha512-SnVrzRWeKSosJ0/1e5taAeqJ1ISst6NAE1N8YK4ZdUEVWmE26tC2V/yTvZHSsqatc/0Cf+A18IZJx0q6H/DlRw==} + + '@rspack/cli@1.0.5': + resolution: {integrity: sha512-isueSvkwUyO2dO3MkiUfonblm5fxLP1F7YL7YUjT2cLzY1CG3Pdg3wA1dLNyDlcidmswnfG5+GS1NthwFjEL0Q==} + hasBin: true + peerDependencies: + '@rspack/core': ^1.0.0-alpha || ^1.x + + '@rspack/core@1.0.5': + resolution: {integrity: sha512-UlydS2VupZ6yBx3jCqCHpeEUQNWCrBkTQhPIezK0eCAk13i745byjqXX4tcfN6jR5Kjh/1CIb8r07k9DgGON1w==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@rspack/dev-server@1.0.5': + resolution: {integrity: sha512-S1o1j9adjqNCiSWrIv1vmVHQPXFvcBa9JvPWIGxGjei72ejz0zvO6Fd948UkRlDgCPIoY4Cy+g1GLmBkJT5MKA==} + peerDependencies: + '@rspack/core': '*' + + '@rspack/lite-tapable@1.0.0': + resolution: {integrity: sha512-7MZf4lburSUZoEenwazwUDKHhqyfnLCGnQ/tKcUtztfmVzfjZfRn/EaiT0AKkYGnL2U8AGsw89oUeVyvaOLVCw==} + engines: {node: '>=16.0.0'} + + '@shoelace-style/animations@1.2.0': + resolution: {integrity: sha512-avvo1xxkLbv2dgtabdewBbqcJfV0e0zCwFqkPMnHFGbJbBHorRFfMAHh1NG9ymmXn0jW95ibUVH03E1NYXD6Gw==} + + '@shoelace-style/localize@3.2.1': + resolution: {integrity: sha512-r4C9C/5kSfMBIr0D9imvpRdCNXtUNgyYThc4YlS6K5Hchv1UyxNQ9mxwj+BTRH2i1Neits260sR3OjKMnplsFA==} + + '@shoelace-style/shoelace@2.16.0': + resolution: {integrity: sha512-OV4XYAAZv0OfOR4RlpxCYOn7pH8ETIL8Pkh5hFvIrL+BN4/vlBLoeESYDU2tB/f9iichu4cfwdPquJITmKdY1w==} + engines: {node: '>=14.17.0'} + + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + + '@types/ace@0.0.52': + resolution: {integrity: sha512-YPF9S7fzpuyrxru+sG/rrTpZkC6gpHBPF14W3x70kqVOD+ks6jkYLapk4yceh36xej7K4HYxcyz9ZDQ2lTvwgQ==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/bonjour@3.5.13': + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + + '@types/bootstrap@5.2.10': + resolution: {integrity: sha512-F2X+cd6551tep0MvVZ6nM8v7XgGN/twpdNDjqS1TUM7YFNEtQYWk+dKAnH+T1gr6QgCoGMPl487xw/9hXooa2g==} + + '@types/connect-history-api-fallback@1.5.4': + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/emscripten@1.39.13': + resolution: {integrity: sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/express-serve-static-core@4.19.5': + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/http-proxy@1.17.15': + resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + + '@types/node@22.5.5': + resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} + + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + + '@types/qs@6.9.16': + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/react@18.2.79': + resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==} + + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-index@1.9.4': + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/sockjs@0.3.36': + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/wicg-file-system-access@2023.10.5': + resolution: {integrity: sha512-e9kZO9kCdLqT2h9Tw38oGv9UNzBBWaR1MzuAavxPcsV/7FJ3tWbU6RI3uB+yKIDPGLkGVbplS52ub0AcRLvrhA==} + + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + + '@vscode/l10n@0.0.18': + resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + + '@vscode/web-custom-data@0.4.12': + resolution: {integrity: sha512-bCemuvwCC84wJQbJoaPou86sjz9DUvZgGa6sAWQwzw7oIELD7z+WnUj2Rdsu8/8XPhKLcg3IswQ2+Pm3OMinIg==} + + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + + '@xml-tools/ast@5.0.5': + resolution: {integrity: sha512-avvzTOvGplCx9JSKdsTe3vK+ACvsHy2HxVfkcfIqPzu+kF5CT4rw5aUVzs0tJF4cnDyMRVkSyVxR07X0Px8gPA==} + + '@xml-tools/common@0.1.6': + resolution: {integrity: sha512-7aVZeEYccs1KI/Asd6KKnrB4dTAWXTkjRMjG40ApGEUp5NpfQIvWLEBvMv85Koj2lbSpagcAERwDy9qMsfWGdA==} + + '@xml-tools/constraints@1.1.1': + resolution: {integrity: sha512-c9K/Ozmem2zbLta7HOjJpXszZA/UQkm3pKT3AAa+tKdnsIomPwcRXkltdd+UtdXcOTbqsuTV0fnSkLBgjlnxbQ==} + + '@xml-tools/content-assist@3.1.11': + resolution: {integrity: sha512-ExVgzRLutvBEMi0JQ8vi4ccao0lrq8DTsWKeAEH6/Zy2Wfp+XAR4ERNpFK7yp+QHQkWROr/XSNVarcTuopE+lg==} + + '@xml-tools/parser@1.0.11': + resolution: {integrity: sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==} + + '@xml-tools/simple-schema@3.0.5': + resolution: {integrity: sha512-8qrm23eGAFtvNWmJu46lttae+X8eOEPMXryf4JH6NBpFl1pphkNXqr7bAKnOjELmLPXHStoeKZO2vptyn4cPPA==} + + '@xml-tools/validation@1.0.16': + resolution: {integrity: sha512-w/+kUYcxKXfQz8TQ3qAAuLl9N2WZ0HGiwI8nVuIe29dAZmyeXx5ZpODAW7yJoarH0/wZ+rhbc3XxbRqIPcSofA==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + ace-builds@1.36.2: + resolution: {integrity: sha512-eqqfbGwx/GKjM/EnFu4QtQ+d2NNBu84MGgxoG8R5iyFpcVeQ4p9YlTL+ZzdEJqhdkASqoqOxCSNNGyB6lvMm+A==} + + ace-linters@1.3.2: + resolution: {integrity: sha512-BzklPf9ZlKJcBq6wHrYIS9WXBYVMj9pQp2eoM0ReMVpQ+xGftye1tMZrOgaNHjAl8fzOVNw72/tqSLMBcN8t9w==} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + + async@3.2.3: + resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bonjour-service@1.2.1: + resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + bootstrap@5.3.3: + resolution: {integrity: sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==} + peerDependencies: + '@popperjs/core': ^2.11.8 + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + + browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + + browserify-rsa@4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + + browserify-sign@4.2.3: + resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} + engines: {node: '>= 0.12'} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bson@6.8.0: + resolution: {integrity: sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==} + engines: {node: '>=16.20.1'} + + buffer-builder@0.2.0: + resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chevrotain@7.1.1: + resolution: {integrity: sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + + clean-css@4.2.4: + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} + engines: {node: '>= 4.0'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + + comlink@4.4.1: + resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + composed-offset-position@0.0.4: + resolution: {integrity: sha512-vMlvu1RuNegVE0YsCDSV/X4X10j56mq7PCIyOKK74FxkXzGLwhOUmdkJLSdOBOMwWycobGUMgft2lp+YgTe8hw==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + core-js@3.38.1: + resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypto-browserify@3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + didyoumean2@4.1.0: + resolution: {integrity: sha512-qTBmfQoXvhKO75D/05C8m+fteQmn4U46FWYiLhXtZQInzitXLWY0EQ/2oKnpAz9g2lQWW8jYcLcT+hPJGT+kig==} + engines: {node: '>=10.13'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.24: + resolution: {integrity: sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==} + + elliptic@6.5.7: + resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit-hook@3.2.0: + resolution: {integrity: sha512-aIQN7Q04HGAV/I5BszisuHTZHXNoC23WtLkxdCLuYZMdWviRD0TMIt2bnUBi9MrHaF/hH8b3gwG9iaAUHKnJGA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + express@4.21.0: + resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} + engines: {node: '>= 0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fork-ts-checker-webpack-plugin@9.0.2: + resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hash-base@3.0.4: + resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} + engines: {node: '>=4'} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + + html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} + + htmlhint@1.1.4: + resolution: {integrity: sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==} + hasBin: true + + http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + + http-proxy-middleware@2.0.6: + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + + ic10emu_wasm@file:../ic10emu_wasm/pkg: + resolution: {directory: ../ic10emu_wasm/pkg, type: directory} + + ic10lsp_wasm@file:../ic10lsp_wasm/pkg: + resolution: {directory: ../ic10lsp_wasm/pkg, type: directory} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + idb@8.0.0: + resolution: {integrity: sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-network-error@1.1.0: + resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + engines: {node: '>=16'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + jquery@3.7.1: + resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@1.0.3: + resolution: {integrity: sha512-hk/69oAeaIzchq/v3lS50PXuzn5O2ynldopMC+SWBql7J2WtdptfB9dy8Y7+Og5rPkTCpn83zTiO8FMcqlXJ/g==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + launch-editor@2.9.1: + resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lit-analyzer@2.0.3: + resolution: {integrity: sha512-XiAjnwVipNrKav7r3CSEZpWt+mwYxrhPRVC7h8knDmn/HWTzzWJvPe+mwBcL2brn4xhItAMzZhFC8tzzqHKmiQ==} + hasBin: true + + lit-element@4.1.0: + resolution: {integrity: sha512-gSejRUQJuMQjV2Z59KAS/D4iElUhwKpIyJvZ9w+DIagIQjfJnhR20h2Q5ddpzXGS+fF0tMZ/xEYGMnKmaI/iww==} + + lit-html@3.2.0: + resolution: {integrity: sha512-pwT/HwoxqI9FggTrYVarkBKFN9MlTUpLrDHubTmW4SrkL3kkqW5gxwbxMMUnbbRHBC0WTZnYHcjDSCM559VyfA==} + + lit-scss-loader@2.0.1: + resolution: {integrity: sha512-2PvmHuklfZx+OgudhU2zH4SrKyPdzQ9eOQsYoxGEga10dcAwmiMx/6UjOdI13i/BHxcElOqSmTkJ4hBxZrO7dQ==} + peerDependencies: + webpack: ^5.37.1 + + lit@3.2.0: + resolution: {integrity: sha512-s6tI33Lf6VpDu7u4YqsSX78D28bYQulM+VAzsGch4fx2H0eLZnJsUBsPWmGYSGoKDNbjtRv02rio1o+UdPVwvw==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + lodash.deburr@4.1.0: + resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + luaparse@0.3.1: + resolution: {integrity: sha512-b21h2bFEbtGXmVqguHogbyrMAA0wOHyp9u/rx+w6Yc9pW1t9YjhGUsp87lYcp7pFRqSWN/PhFkrdIqKEUzRjjQ==} + hasBin: true + + lzma-web@3.0.1: + resolution: {integrity: sha512-sb5cdfd+PLNljK/HUgYzvnz4G7r0GFK8sonyGrqJS0FVyUQjFYcnmU2LqTWFi6r48lH1ZBstnxyLWepKM/t7QA==} + + marked@14.1.2: + resolution: {integrity: sha512-f3r0yqpz31VXiDB/wj9GaOB0a2PRLQl6vJmXiFrniNwjkKdvakqJRULhjFKJpxOchlCRiG5fcacoUZY5Xa6PEQ==} + engines: {node: '>= 18'} + hasBin: true + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + + memfs@4.11.2: + resolution: {integrity: sha512-VcR7lEtgQgv7AxGkrNNeUAimFLT+Ov8uGu1LuOfbe/iF/dKoh/QgpoaMZlhfejvLtMxtXYyeoT7Ar1jEbWdbPA==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mini-css-extract-plugin@2.9.1: + resolution: {integrity: sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-retry@6.2.0: + resolution: {integrity: sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==} + engines: {node: '>=16.17'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-asn1@5.1.7: + resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} + engines: {node: '>= 0.10'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5@5.1.0: + resolution: {integrity: sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-loader@8.1.1: + resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qr-creator@1.0.0: + resolution: {integrity: sha512-C0cqfbS1P5hfqN4NhsYsUXePlk9BO+a45bAQ3xLYjBL3bOIFzoVEjs79Fado9u9BPBD3buHi3+vY+C8tHh4qMQ==} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + + reduce-configs@1.0.0: + resolution: {integrity: sha512-/JCYSgL/QeXXsq0Lv/7kOZfqvof7vyzHWfyNQPt3c6vc73mU4WRyT8RJ6ZH5Ci08vUOqXwk7jkZy6BycHTDD9w==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp-to-ast@0.5.0: + resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass-embedded-android-arm64@1.78.0: + resolution: {integrity: sha512-2sAr11EgwPudAuyk4Ite+fWGYJspiFSiZDU2D8/vjjI7BaB9FG6ksYqww3svoMMnjPUWBCjKPDELpZTxViLJbw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.78.0: + resolution: {integrity: sha512-YM6nrmKsj+ImaSTd96F+jzbWSbhPkRN4kedbLgIJ5FsILNa9NAqhmrCQz9pdcjuAhyfxWImdUACsT23CPGENZQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-ia32@1.78.0: + resolution: {integrity: sha512-TyJOo4TgnHpOfC/PfqCBqd+jGRanWoRd4Br/0KAfIvaIFjTGIPdk26vUyDVugV1J8QUEY4INGE8EXAuDeRldUQ==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [android] + + sass-embedded-android-riscv64@1.78.0: + resolution: {integrity: sha512-wwajpsVRuhb7ixrkA3Yu60V2LtROYn45PIYeda30/MrMJi9k3xEqHLhodTexFm6wZoKclGSDZ6L9U5q0XyRKiQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.78.0: + resolution: {integrity: sha512-k5l66PO0LgSHMDbDzAQ/vqrXMlJ3r42ZHJA8MJvUbA6sQxTzDS381V7L+EhOATwyI225j2FhEeTHW6rr4WBQzA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.78.0: + resolution: {integrity: sha512-3JaxceFSR6N+a22hPYYkj1p45eBaWTt/M8MPTbfzU3TGZrU9bmRX7WlUVtXTo1yYI2iMf22nCv0PQ5ExFF3FMQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.78.0: + resolution: {integrity: sha512-UMTijqE3fJ8vEaaD7GPG7G3GsHuPKOdpS8vuA2v2uwO3BPFp/rEKah66atvGqvGO+0JYApkSv0YTnnexSrkHIQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.78.0: + resolution: {integrity: sha512-juMIMpp3DIAiQ842y+boqh0u2SjN4m3mDKrDfMuBznj8DSQoy9J/3e4hLh3g+p0/j83WuROu5nNoYxm2Xz8rww==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.78.0: + resolution: {integrity: sha512-JafT+Co0RK8oO3g9TfVRuG7tkYeh35yDGTgqCFxLrktnkiw5pmIagCfpjxk5GBcSfJMOzhCgclTCDJWAuHGuMQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-ia32@1.78.0: + resolution: {integrity: sha512-Gy8GW5g6WX9t8CT2Dto5AL6ikB+pG7aAXWXvfu3RFHktixSwSbyy6CeGqSk1t0xyJCFkQQA/V8HU9bNdeHiBxg==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-arm64@1.78.0: + resolution: {integrity: sha512-Lu/TlRHbe9aJY7B7PwWCJz7pTT5Rc50VkApWEmPiU/nu0mGbSpg0Xwar6pNeG8+98ubgKKdRb01N3bvclf5a4A==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.78.0: + resolution: {integrity: sha512-DUVXtcsfsiOJ2Zwp4Y3T6KZWX8h0gWpzmFUrx+gSIbg67vV8Ww2DWMjWRwqLe7HOLTYBegMBYpMgMgZiPtXhIA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-ia32@1.78.0: + resolution: {integrity: sha512-1E5ywUnq6MRPAecr2r/vDOBr93wXyculEmfyF5JRG8mUufMaxGIhfx64OQE6Drjs+EDURcYZ+Qcg6/ubJWqhcw==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.78.0: + resolution: {integrity: sha512-YvQEvX7ctn5BwC79+HBagDYIciEkwcl2NLgoydmEsBO/0+ncMKSGnjsn/iRzErbq1KJNyjGEni8eSHlrtQI1vQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.78.0: + resolution: {integrity: sha512-azdUcZZvZmtUBslIKr2/l4aQrTX7BvO96TD0GLdWz9vuXZrokYm09AJZEnb5j6Pk5I4Xr0yM6BG1Vgcbzqi5Zg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.78.0: + resolution: {integrity: sha512-g8M6vqHMjZUoH9C1WJsgwu+qmwdJAAMDaJTM1emeAScUZMTaQGzm+Q6C5oSGnAGR3XLT/drgbHhbmruXDgkdeQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.78.0: + resolution: {integrity: sha512-m997ThzpMwql4u6LzZCoHPIQkgK6bbLPLc7ydemo2Wusqzh6j8XAGxVT5oANp6s2Dmj+yh49pKDozal+tzEX9w==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-win32-arm64@1.78.0: + resolution: {integrity: sha512-qTLIIC5URYRmeuYYllfoL0K1cHSUd+f3sFHAA6fjtdgf288usd6ToCbWpuFb0BtVceEfGQX8lEp+teOG7n7Quw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-ia32@1.78.0: + resolution: {integrity: sha512-BrOWh18T6Y9xgCokGXElEnd8j03fO4W83bwJ9wHRRkrQWaeHtHs3XWW0fX1j2brngWUTjU+jcYUijWF1Z60krw==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [win32] + + sass-embedded-win32-x64@1.78.0: + resolution: {integrity: sha512-C14iFDJd7oGhmQehRiEL7GtzMmLwubcDqsBarQ+u9LbHoDlUQfIPd7y8mVtNgtxJCdrAO/jc5qR4C+85yE3xPQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.78.0: + resolution: {integrity: sha512-NR2kvhWVFABmBm0AqgFw9OweQycs0Qs+/teJ9Su+BUY7up+f8S5F/Zi+7QtAqJlewsQyUNfzm1vRuM+20lBwRQ==} + engines: {node: '>=16.0.0'} + hasBin: true + + sass@1.78.0: + resolution: {integrity: sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==} + engines: {node: '>=14.0.0'} + hasBin: true + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} + + select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + + selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + showdown@2.1.0: + resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==} + hasBin: true + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv@1.0.19: + resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} + engines: {node: '>= 10'} + + sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + + spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.0: + resolution: {integrity: sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==} + engines: {node: '>=8'} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + tailwindcss@3.4.12: + resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.33.0: + resolution: {integrity: sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==} + engines: {node: '>=10'} + hasBin: true + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + thingies@1.21.0: + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + + thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + totalist@1.1.0: + resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tree-dump@1.0.2: + resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-lit-plugin@2.0.2: + resolution: {integrity: sha512-DPXlVxhjWHxg8AyBLcfSYt2JXgpANV1ssxxwjY98o26gD8MzeiM68HFW9c2VeDd1CjoR3w7B/6/uKxwBQe+ioA==} + + ts-loader@9.5.1: + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + ts-simple-type@2.0.0-next.0: + resolution: {integrity: sha512-A+hLX83gS+yH6DtzNAhzZbPfU+D9D8lHlTSd7GeoMRBjOt3GRylDqLTYbdmjA4biWvq2xSfpqfIDj2l0OA/BVg==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typescript-lit-html-plugin@0.9.0: + resolution: {integrity: sha512-Ux2I1sPpt2akNbRZiBAND9oA8XNE2BuVmDwsb7rZshJ9T8/Na2rICE5Tnuj9dPHdFUATdOGjVEagn1/v8T4gCQ==} + + typescript-styled-plugin@0.13.0: + resolution: {integrity: sha512-GGMzv/JAd4S8mvWgHZslvW2G1HHrdurrp93oSR4h85SM8e5at7+KCqHsZICiTaL+iN25YGkJqoaZe4XklA76rg==} + deprecated: Deprecated in favor of https://github.com/styled-components/typescript-styled-plugin + + typescript-template-language-service-decorator@2.3.2: + resolution: {integrity: sha512-hN0zNkr5luPCeXTlXKxsfBPlkAzx86ZRM1vPdL7DbEqqWoeXSxplACy98NpKpLmXsdq7iePUzAXloCAoPKBV6A==} + + typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vm-browserify@1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + + vscode-css-languageservice@3.0.13: + resolution: {integrity: sha512-RWkO/c/A7iXhHEy3OuEqkCqavDjpD4NF2Ca8vjai+ZtEYNeHrm1ybTnBYLP4Ft1uXvvaaVtYA9HrDjD6+CUONg==} + + vscode-css-languageservice@4.3.0: + resolution: {integrity: sha512-BkQAMz4oVHjr0oOAz5PdeE72txlLQK7NIwzmclfr+b6fj6I8POwB+VoXvrZLTbWt9hWRgfvgiQRkh5JwrjPJ5A==} + + vscode-css-languageservice@6.3.1: + resolution: {integrity: sha512-1BzTBuJfwMc3A0uX4JBdJgoxp74cjj4q2mDJdp49yD/GuAq4X0k5WtK6fNcMYr+FfJ9nqgR6lpfCSZDkARJ5qQ==} + + vscode-emmet-helper@1.2.11: + resolution: {integrity: sha512-ms6/Z9TfNbjXS8r/KgbGxrNrFlu4RcIfVJxTZ2yFi0K4gn+Ka9X1+8cXvb5+5IOBGUrOsPjR0BuefdDkG+CKbQ==} + deprecated: This package has been renamed to @vscode/emmet-helper, please update to the new name + + vscode-html-languageservice@2.1.12: + resolution: {integrity: sha512-mIb5VMXM5jI97HzCk2eadI1K//rCEZXte0wBqA7PGXsyJH4KTyJUaYk9MR+mbfpUl2vMi3HZw9GUOLGYLc6l5w==} + + vscode-html-languageservice@3.1.0: + resolution: {integrity: sha512-QAyRHI98bbEIBCqTzZVA0VblGU40na0txggongw5ZgTj9UVsVk5XbLT16O9OTcbqBGSqn0oWmFDNjK/XGIDcqg==} + + vscode-html-languageservice@5.3.1: + resolution: {integrity: sha512-ysUh4hFeW/WOWz/TO9gm08xigiSsV/FOAZ+DolgJfeLftna54YdmZ4A+lIn46RbdO3/Qv5QHTn1ZGqmrXQhZyA==} + + vscode-json-languageservice@5.4.1: + resolution: {integrity: sha512-5czFGNyVPxz3ZJYl8R3a3SuIj5gjhmGF4Wv05MRPvD4DEnHK6b8km4VbNMJNHBlTCh7A0aHzUbPVzo+0C18mCA==} + + vscode-jsonrpc@8.0.2: + resolution: {integrity: sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==} + engines: {node: '>=14.0.0'} + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.16.0-next.2: + resolution: {integrity: sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-nls@4.1.2: + resolution: {integrity: sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==} + + vscode-uri@1.0.8: + resolution: {integrity: sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ==} + + vscode-uri@2.1.2: + resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + + vscode-ws-jsonrpc@2.0.2: + resolution: {integrity: sha512-gIOGdaWwKYwwqohgeRC8AtqqHSNghK8wA3oVcBi7UMAdZnRSAf8n4/Svtd+JHqGiIguYdNa/sC0s4IW3ZDF7mA==} + engines: {node: '>=16.11.0', npm: '>=8.0.0'} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + + web-component-analyzer@2.0.0: + resolution: {integrity: sha512-UEvwfpD+XQw99sLKiH5B1T4QwpwNyWJxp59cnlRwFfhUW6JsQpw5jMeMwi7580sNou8YL3kYoS7BWLm+yJ/jVQ==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-bundle-analyzer@4.6.1: + resolution: {integrity: sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==} + engines: {node: '>= 10.13.0'} + hasBin: true + + webpack-dev-middleware@7.4.2: + resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + + webpack-dev-server@5.0.4: + resolution: {integrity: sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==} + engines: {node: '>= 18.12.0'} + hasBin: true + peerDependencies: + webpack: ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.94.0: + resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.6.2: + resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + + '@babel/runtime@7.25.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@bufbuild/protobuf@1.10.0': {} + + '@ctrl/tinycolor@4.1.0': {} + + '@discoveryjs/json-ext@0.5.7': {} + + '@emmetio/extract-abbreviation@0.1.6': {} + + '@emnapi/core@1.2.0': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.7.0 + optional: true + + '@emnapi/runtime@1.2.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.7.0 + optional: true + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.11': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/utils@0.2.8': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jsonjoy.com/base64@1.1.2(tslib@2.7.0)': + dependencies: + tslib: 2.7.0 + + '@jsonjoy.com/json-pack@1.1.0(tslib@2.7.0)': + dependencies: + '@jsonjoy.com/base64': 1.1.2(tslib@2.7.0) + '@jsonjoy.com/util': 1.3.0(tslib@2.7.0) + hyperdyperid: 1.2.0 + thingies: 1.21.0(tslib@2.7.0) + tslib: 2.7.0 + + '@jsonjoy.com/util@1.3.0(tslib@2.7.0)': + dependencies: + tslib: 2.7.0 + + '@leeoniya/ufuzzy@1.0.14': {} + + '@leichtgewicht/ip-codec@2.0.5': {} + + '@lit-labs/preact-signals@1.0.2': + dependencies: + '@preact/signals-core': 1.8.0 + lit: 3.2.0 + + '@lit-labs/ssr-dom-shim@1.2.1': {} + + '@lit/context@1.1.2': + dependencies: + '@lit/reactive-element': 2.0.4 + + '@lit/react@1.0.5(@types/react@18.2.79)': + dependencies: + '@types/react': 18.2.79 + + '@lit/reactive-element@2.0.4': + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.1 + + '@module-federation/runtime-tools@0.5.1': + dependencies: + '@module-federation/runtime': 0.5.1 + '@module-federation/webpack-bundler-runtime': 0.5.1 + + '@module-federation/runtime@0.5.1': + dependencies: + '@module-federation/sdk': 0.5.1 + + '@module-federation/sdk@0.5.1': {} + + '@module-federation/webpack-bundler-runtime@0.5.1': + dependencies: + '@module-federation/runtime': 0.5.1 + '@module-federation/sdk': 0.5.1 + + '@napi-rs/image-android-arm64@1.9.2': + optional: true + + '@napi-rs/image-darwin-arm64@1.9.2': + optional: true + + '@napi-rs/image-darwin-x64@1.9.2': + optional: true + + '@napi-rs/image-freebsd-x64@1.9.2': + optional: true + + '@napi-rs/image-linux-arm-gnueabihf@1.9.2': + optional: true + + '@napi-rs/image-linux-arm64-gnu@1.9.2': + optional: true + + '@napi-rs/image-linux-arm64-musl@1.9.2': + optional: true + + '@napi-rs/image-linux-x64-gnu@1.9.2': + optional: true + + '@napi-rs/image-linux-x64-musl@1.9.2': + optional: true + + '@napi-rs/image-wasm32-wasi@1.9.2': + dependencies: + '@napi-rs/wasm-runtime': 0.2.4 + optional: true + + '@napi-rs/image-win32-ia32-msvc@1.9.2': + optional: true + + '@napi-rs/image-win32-x64-msvc@1.9.2': + optional: true + + '@napi-rs/image@1.9.2': + optionalDependencies: + '@napi-rs/image-android-arm64': 1.9.2 + '@napi-rs/image-darwin-arm64': 1.9.2 + '@napi-rs/image-darwin-x64': 1.9.2 + '@napi-rs/image-freebsd-x64': 1.9.2 + '@napi-rs/image-linux-arm-gnueabihf': 1.9.2 + '@napi-rs/image-linux-arm64-gnu': 1.9.2 + '@napi-rs/image-linux-arm64-musl': 1.9.2 + '@napi-rs/image-linux-x64-gnu': 1.9.2 + '@napi-rs/image-linux-x64-musl': 1.9.2 + '@napi-rs/image-wasm32-wasi': 1.9.2 + '@napi-rs/image-win32-ia32-msvc': 1.9.2 + '@napi-rs/image-win32-x64-msvc': 1.9.2 + + '@napi-rs/wasm-runtime@0.2.4': + dependencies: + '@emnapi/core': 1.2.0 + '@emnapi/runtime': 1.2.0 + '@tybys/wasm-util': 0.9.0 + optional: true + + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - dev: true - /@oneidentity/zstd-js@1.0.3: - resolution: {integrity: sha512-Jm6sawqxLzBrjC4sg2BeXToa33yPzUmq20CKsehKY2++D/gHb/oSwVjNgT+RH4vys+r8FynrgcNzGwhZWMLzfQ==} + '@oneidentity/zstd-js@1.0.3': dependencies: - '@types/emscripten': 1.39.10 - dev: true + '@types/emscripten': 1.39.13 - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true + '@pkgjs/parseargs@0.11.0': optional: true - /@polka/url@1.0.0-next.25: - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} - dev: true + '@polka/url@1.0.0-next.25': {} - /@popperjs/core@2.11.8: - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@popperjs/core@2.11.8': {} - /@rsbuild/core@0.6.4: - resolution: {integrity: sha512-9sdsfP0v44C5/JB33UbZ+qoubWNCmRCt4z/XknXXLmBrCQxHL+OoVq1YV5YChlc9QQsa5ePG3bVmNqzg4gzc7A==} - engines: {node: '>=16.0.0'} - hasBin: true + '@preact/signals-core@1.8.0': {} + + '@rsbuild/core@1.0.4': dependencies: - '@rsbuild/shared': 0.6.4(@swc/helpers@0.5.3) - '@rspack/core': 0.6.2(@swc/helpers@0.5.3) - '@swc/helpers': 0.5.3 - core-js: 3.36.1 - html-webpack-plugin: /html-rspack-plugin@5.6.2(@rspack/core@0.6.2) - postcss: 8.4.38 - dev: true + '@rspack/core': 1.0.5(@swc/helpers@0.5.13) + '@rspack/lite-tapable': 1.0.0 + '@swc/helpers': 0.5.13 + caniuse-lite: 1.0.30001660 + core-js: 3.38.1 + optionalDependencies: + fsevents: 2.3.3 - /@rsbuild/plugin-image-compress@0.6.4(@rsbuild/core@0.6.4)(@swc/helpers@0.5.10): - resolution: {integrity: sha512-BroELLUR7Gj3drtTtH6/XutozSNF9SqfUTq35qw4H5hbIsW/mc14jju9MKHTIS5JJTjz3wEUMXHYuafETXZsSQ==} - peerDependencies: - '@rsbuild/core': ^0.6.4 + '@rsbuild/plugin-image-compress@1.0.2(@rsbuild/core@1.0.4)': dependencies: - '@napi-rs/image': 1.9.1 - '@rsbuild/core': 0.6.4 - '@rsbuild/shared': 0.6.4(@swc/helpers@0.5.10) - svgo: 3.2.0 - transitivePeerDependencies: - - '@swc/helpers' - dev: true + '@napi-rs/image': 1.9.2 + svgo: 3.3.2 + optionalDependencies: + '@rsbuild/core': 1.0.4 - /@rsbuild/plugin-type-check@0.6.4(@rsbuild/core@0.6.4)(@swc/helpers@0.5.10)(typescript@5.4.5): - resolution: {integrity: sha512-Sbw1o7o3Cvexv3B/JdHBUU/Sx0FX5mB0MpzzVGy4qvgbdtbkmKdQfDv+oI/vgloKl6gISl3WJJUzNVtKC1860A==} - peerDependencies: - '@rsbuild/core': ^0.6.4 + '@rsbuild/plugin-sass@1.0.1(@rsbuild/core@1.0.4)': dependencies: - '@rsbuild/core': 0.6.4 - '@rsbuild/shared': 0.6.4(@swc/helpers@0.5.10) - fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.4.5)(webpack@5.91.0) - webpack: 5.91.0 + '@rsbuild/core': 1.0.4 + deepmerge: 4.3.1 + loader-utils: 2.0.4 + postcss: 8.4.47 + reduce-configs: 1.0.0 + sass-embedded: 1.78.0 + + '@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.0.4)(typescript@5.6.2)': + dependencies: + deepmerge: 4.3.1 + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.6.2)(webpack@5.94.0) + json5: 2.2.3 + reduce-configs: 1.0.0 + webpack: 5.94.0 + optionalDependencies: + '@rsbuild/core': 1.0.4 transitivePeerDependencies: - '@swc/core' - - '@swc/helpers' - esbuild - typescript - uglify-js - webpack-cli - dev: true - /@rsbuild/shared@0.6.4(@swc/helpers@0.5.10): - resolution: {integrity: sha512-MqaVYNRcq/eT7TNt/iMQzdyN71WwT1wEonnJIz4/x5wV0sf82BN0rrIwFLBSkEO/0HBf1K5bKGTjX727tJNztw==} - dependencies: - '@rspack/core': 0.6.2(@swc/helpers@0.5.10) - caniuse-lite: 1.0.30001610 - postcss: 8.4.38 - transitivePeerDependencies: - - '@swc/helpers' - dev: true - - /@rsbuild/shared@0.6.4(@swc/helpers@0.5.3): - resolution: {integrity: sha512-MqaVYNRcq/eT7TNt/iMQzdyN71WwT1wEonnJIz4/x5wV0sf82BN0rrIwFLBSkEO/0HBf1K5bKGTjX727tJNztw==} - dependencies: - '@rspack/core': 0.6.2(@swc/helpers@0.5.3) - caniuse-lite: 1.0.30001610 - postcss: 8.4.38 - transitivePeerDependencies: - - '@swc/helpers' - dev: true - - /@rspack/binding-darwin-arm64@0.6.2: - resolution: {integrity: sha512-2+fpr27wJXVMsY441NRonws/e9RKBUWYX7onc0lFKVg/ZSmEfHWyrygcit/dpghIYQw9NJl5SiPGIPcIYeZd4w==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@rspack/binding-darwin-arm64@1.0.5': optional: true - /@rspack/binding-darwin-x64@0.6.2: - resolution: {integrity: sha512-q9m+10CZEmElqYoZNSN0V/kNBv1QMjHA7X+93GxtFa2hC7u/zfy80w0EFwSWV/6s5Z7wygmOHH72GAquuRZJUg==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@rspack/binding-darwin-x64@1.0.5': optional: true - /@rspack/binding-linux-arm64-gnu@0.6.2: - resolution: {integrity: sha512-F13+1zk8KUagizuvSjh7A83FxF3R/b6+yRIMln7TuV0DQ42JV8H48q/tU8+wI+KqdsNgj2yO8LZjqOQ994k4ow==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rspack/binding-linux-arm64-gnu@1.0.5': optional: true - /@rspack/binding-linux-arm64-musl@0.6.2: - resolution: {integrity: sha512-1IyPH6hQreOvcNZmwK4XD8E5NEYqrtzKvsUPB13AV3+mO1EHxhnwQ7Dtk82mqwtaTTUPXJRREp+UNjwUTeJ6bA==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rspack/binding-linux-arm64-musl@1.0.5': optional: true - /@rspack/binding-linux-x64-gnu@0.6.2: - resolution: {integrity: sha512-NbqU05wIy1qC+66qlQjE9Zo4oAd70lZRgfO8iuLvon0GxG7plpffefhsAoAsh5vFg17ac6NWdwUUzWImYv2jhQ==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rspack/binding-linux-x64-gnu@1.0.5': optional: true - /@rspack/binding-linux-x64-musl@0.6.2: - resolution: {integrity: sha512-K18x2AR1UiABqJMTlB/mXPytdc9dk0tQuQyJ3hH+gxhYI6T6w22p+hQWq1T9vJsIIk2P693YrfXR66mRFiknsw==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rspack/binding-linux-x64-musl@1.0.5': optional: true - /@rspack/binding-win32-arm64-msvc@0.6.2: - resolution: {integrity: sha512-00FdIoh2X8zt2i07R89zyI0HONof91PiM5JgY8BAfSPur+M9Uj7stqYHezr0KtVdgH2sASMURFGmgcz62pLViw==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@rspack/binding-win32-arm64-msvc@1.0.5': optional: true - /@rspack/binding-win32-ia32-msvc@0.6.2: - resolution: {integrity: sha512-ZU43j+iicnDrTsu/Wrw/18E+zUTFCfTUdq2BlaKH8yxhJVYqPHFjQo64p/7djULeZVchZU4uGuu00oovEHl/zg==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@rspack/binding-win32-ia32-msvc@1.0.5': optional: true - /@rspack/binding-win32-x64-msvc@0.6.2: - resolution: {integrity: sha512-1Ycfry5nk5SMDYOjlOmVXf4tJHOp2H2Wwupf5j2pUYPD9lyETt7O7GIQbdCLOcBLuyt0OSscDARTcqGlLw27gQ==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@rspack/binding-win32-x64-msvc@1.0.5': optional: true - /@rspack/binding@0.6.2: - resolution: {integrity: sha512-1LVccU/LRIMqp2g1ct2ebDS1DL7MnBlQNcUGf3szIiDsYXuGe3Pk4qdiLbVLzBQoDQFYKJmIgmUA1UkKZ5UN5g==} + '@rspack/binding@1.0.5': optionalDependencies: - '@rspack/binding-darwin-arm64': 0.6.2 - '@rspack/binding-darwin-x64': 0.6.2 - '@rspack/binding-linux-arm64-gnu': 0.6.2 - '@rspack/binding-linux-arm64-musl': 0.6.2 - '@rspack/binding-linux-x64-gnu': 0.6.2 - '@rspack/binding-linux-x64-musl': 0.6.2 - '@rspack/binding-win32-arm64-msvc': 0.6.2 - '@rspack/binding-win32-ia32-msvc': 0.6.2 - '@rspack/binding-win32-x64-msvc': 0.6.2 - dev: true + '@rspack/binding-darwin-arm64': 1.0.5 + '@rspack/binding-darwin-x64': 1.0.5 + '@rspack/binding-linux-arm64-gnu': 1.0.5 + '@rspack/binding-linux-arm64-musl': 1.0.5 + '@rspack/binding-linux-x64-gnu': 1.0.5 + '@rspack/binding-linux-x64-musl': 1.0.5 + '@rspack/binding-win32-arm64-msvc': 1.0.5 + '@rspack/binding-win32-ia32-msvc': 1.0.5 + '@rspack/binding-win32-x64-msvc': 1.0.5 - /@rspack/cli@0.6.2(@rspack/core@0.6.2)(webpack@5.91.0): - resolution: {integrity: sha512-EijE/GLop4Rz8IffWVlct8U88UNC4jOcxXH5bakZJ15wl3OvcKi51NREW3+aYhnd5sbeYBvwHcWdOvUOPSJ/wg==} - hasBin: true - peerDependencies: - '@rspack/core': '>=0.4.0' + '@rspack/cli@1.0.5(@rspack/core@1.0.5(@swc/helpers@0.5.13))(@types/express@4.17.21)(webpack@5.94.0)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@rspack/core': 0.6.2(@swc/helpers@0.5.10) - '@rspack/dev-server': 0.6.2(@rspack/core@0.6.2)(webpack@5.91.0) + '@rspack/core': 1.0.5(@swc/helpers@0.5.13) + '@rspack/dev-server': 1.0.5(@rspack/core@1.0.5(@swc/helpers@0.5.13))(@types/express@4.17.21)(webpack@5.94.0) colorette: 2.0.19 exit-hook: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - semver: 6.3.1 + semver: 7.6.3 webpack-bundle-analyzer: 4.6.1 yargs: 17.6.2 transitivePeerDependencies: @@ -669,72 +3050,28 @@ packages: - utf-8-validate - webpack - webpack-cli - dev: true - /@rspack/core@0.6.2(@swc/helpers@0.5.10): - resolution: {integrity: sha512-1IggX3FZM4bVhUWhBIeUroiyOH05fBFIT3gvanpXIE00yMbp1exFjkfko5HmQ6e5FQrIvcNEBoQ2QyIYzu0vOw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@swc/helpers': '>=0.5.1' - peerDependenciesMeta: - '@swc/helpers': - optional: true + '@rspack/core@1.0.5(@swc/helpers@0.5.13)': dependencies: - '@module-federation/runtime-tools': 0.1.6 - '@rspack/binding': 0.6.2 - '@swc/helpers': 0.5.10 - browserslist: 4.23.0 - enhanced-resolve: 5.12.0 - events: 3.3.0 - graceful-fs: 4.2.10 - json-parse-even-better-errors: 3.0.1 - neo-async: 2.6.2 - tapable: 2.2.1 - watchpack: 2.4.1 - webpack-sources: 3.2.3 - zod: 3.22.5 - zod-validation-error: 1.3.1(zod@3.22.5) - dev: true + '@module-federation/runtime-tools': 0.5.1 + '@rspack/binding': 1.0.5 + '@rspack/lite-tapable': 1.0.0 + caniuse-lite: 1.0.30001660 + optionalDependencies: + '@swc/helpers': 0.5.13 - /@rspack/core@0.6.2(@swc/helpers@0.5.3): - resolution: {integrity: sha512-1IggX3FZM4bVhUWhBIeUroiyOH05fBFIT3gvanpXIE00yMbp1exFjkfko5HmQ6e5FQrIvcNEBoQ2QyIYzu0vOw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@swc/helpers': '>=0.5.1' - peerDependenciesMeta: - '@swc/helpers': - optional: true + '@rspack/dev-server@1.0.5(@rspack/core@1.0.5(@swc/helpers@0.5.13))(@types/express@4.17.21)(webpack@5.94.0)': dependencies: - '@module-federation/runtime-tools': 0.1.6 - '@rspack/binding': 0.6.2 - '@swc/helpers': 0.5.3 - browserslist: 4.23.0 - enhanced-resolve: 5.12.0 - events: 3.3.0 - graceful-fs: 4.2.10 - json-parse-even-better-errors: 3.0.1 - neo-async: 2.6.2 - tapable: 2.2.1 - watchpack: 2.4.1 - webpack-sources: 3.2.3 - zod: 3.22.5 - zod-validation-error: 1.3.1(zod@3.22.5) - dev: true - - /@rspack/dev-server@0.6.2(@rspack/core@0.6.2)(webpack@5.91.0): - resolution: {integrity: sha512-S+zjeT1TWl9rZ4ugL+/53YBtaYkyprEUveLvePvj78Y5GufCtzhoNQgvvBRIgfhyiEhPYARNi8wKutgu6kxetQ==} - peerDependencies: - '@rspack/core': '*' - dependencies: - '@rspack/core': 0.6.2(@swc/helpers@0.5.10) - chokidar: 3.5.3 + '@rspack/core': 1.0.5(@swc/helpers@0.5.13) + chokidar: 3.6.0 connect-history-api-fallback: 2.0.0 - express: 4.18.1 + express: 4.21.0 http-proxy-middleware: 2.0.6(@types/express@4.17.21) mime-types: 2.1.35 - webpack-dev-middleware: 6.0.2(webpack@5.91.0) - webpack-dev-server: 4.13.1(webpack@5.91.0) - ws: 8.8.1 + p-retry: 4.6.2 + webpack-dev-middleware: 7.4.2(webpack@5.94.0) + webpack-dev-server: 5.0.4(webpack@5.94.0) + ws: 8.18.0 transitivePeerDependencies: - '@types/express' - bufferutil @@ -743,293 +3080,180 @@ packages: - utf-8-validate - webpack - webpack-cli - dev: true - /@shoelace-style/animations@1.1.0: - resolution: {integrity: sha512-Be+cahtZyI2dPKRm8EZSx3YJQ+jLvEcn3xzRP7tM4tqBnvd/eW/64Xh0iOf0t2w5P8iJKfdBbpVNE9naCaOf2g==} - dev: false + '@rspack/lite-tapable@1.0.0': {} - /@shoelace-style/localize@3.1.2: - resolution: {integrity: sha512-Hf45HeO+vdQblabpyZOTxJ4ZeZsmIUYXXPmoYrrR4OJ5OKxL+bhMz5mK8JXgl7HsoEowfz7+e248UGi861de9Q==} - dev: false + '@shoelace-style/animations@1.2.0': {} - /@shoelace-style/shoelace@2.15.0(@types/react@18.2.79): - resolution: {integrity: sha512-Lcg938Y8U2VsHqIYewzlt+H1rbrXC4GRSUkTJgXyF8/0YAOlI+srd5OSfIw+/LYmwLP2Peyh398Kae/6tg4PDA==} - engines: {node: '>=14.17.0'} + '@shoelace-style/localize@3.2.1': {} + + '@shoelace-style/shoelace@2.16.0(@types/react@18.2.79)': dependencies: '@ctrl/tinycolor': 4.1.0 - '@floating-ui/dom': 1.6.3 - '@lit/react': 1.0.4(@types/react@18.2.79) - '@shoelace-style/animations': 1.1.0 - '@shoelace-style/localize': 3.1.2 + '@floating-ui/dom': 1.6.11 + '@lit/react': 1.0.5(@types/react@18.2.79) + '@shoelace-style/animations': 1.2.0 + '@shoelace-style/localize': 3.2.1 composed-offset-position: 0.0.4 - lit: 3.1.3 + lit: 3.2.0 qr-creator: 1.0.0 transitivePeerDependencies: - '@types/react' - dev: false - /@swc/helpers@0.5.10: - resolution: {integrity: sha512-CU+RF9FySljn7HVSkkjiB84hWkvTaI3rtLvF433+jRSBL2hMu3zX5bGhHS8C80SM++h4xy8hBSnUHFQHmRXSBw==} + '@swc/helpers@0.5.13': dependencies: - tslib: 2.6.2 - dev: true + tslib: 2.7.0 - /@swc/helpers@0.5.3: - resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} + '@trysound/sax@0.2.0': {} + + '@tybys/wasm-util@0.9.0': dependencies: - tslib: 2.6.2 - dev: true - - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: true - - /@tybys/wasm-util@0.8.2: - resolution: {integrity: sha512-kzI0zdUtC/ymNQCVQiqHCKobSSyppUHet+pHaiOdKUV48B/uKCEDznwf4N9tOoDKdh7Uuhm8V60xPU8VYbBbrQ==} - requiresBuild: true - dependencies: - tslib: 2.6.2 - dev: true + tslib: 2.7.0 optional: true - /@types/ace@0.0.52: - resolution: {integrity: sha512-YPF9S7fzpuyrxru+sG/rrTpZkC6gpHBPF14W3x70kqVOD+ks6jkYLapk4yceh36xej7K4HYxcyz9ZDQ2lTvwgQ==} - dev: true + '@types/ace@0.0.52': {} - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.12.7 - dev: true + '@types/node': 22.5.5 - /@types/bonjour@3.5.13: - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/bonjour@3.5.13': dependencies: - '@types/node': 20.12.7 - dev: true + '@types/node': 22.5.5 - /@types/bootstrap@5.2.10: - resolution: {integrity: sha512-F2X+cd6551tep0MvVZ6nM8v7XgGN/twpdNDjqS1TUM7YFNEtQYWk+dKAnH+T1gr6QgCoGMPl487xw/9hXooa2g==} + '@types/bootstrap@5.2.10': dependencies: '@popperjs/core': 2.11.8 - dev: true - /@types/connect-history-api-fallback@1.5.4: - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + '@types/connect-history-api-fallback@1.5.4': dependencies: - '@types/express-serve-static-core': 4.19.0 - '@types/node': 20.12.7 - dev: true + '@types/express-serve-static-core': 4.19.5 + '@types/node': 22.5.5 - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: - '@types/node': 20.12.7 - dev: true + '@types/node': 22.5.5 - /@types/emscripten@1.39.10: - resolution: {integrity: sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==} - dev: true + '@types/emscripten@1.39.13': {} - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + '@types/estree@1.0.5': {} + + '@types/express-serve-static-core@4.19.5': dependencies: - '@types/eslint': 8.56.9 - '@types/estree': 1.0.5 - dev: true - - /@types/eslint@8.56.9: - resolution: {integrity: sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - dev: true - - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true - - /@types/express-serve-static-core@4.19.0: - resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} - dependencies: - '@types/node': 20.12.7 - '@types/qs': 6.9.15 + '@types/node': 22.5.5 + '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - dev: true - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.0 - '@types/qs': 6.9.15 + '@types/express-serve-static-core': 4.19.5 + '@types/qs': 6.9.16 '@types/serve-static': 1.15.7 - dev: true - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true + '@types/http-errors@2.0.4': {} - /@types/http-proxy@1.17.14: - resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} + '@types/http-proxy@1.17.15': dependencies: - '@types/node': 20.12.7 - dev: true + '@types/node': 22.5.5 - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true + '@types/mime@1.3.5': {} - /@types/node-forge@1.3.11: - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + '@types/node-forge@1.3.11': dependencies: - '@types/node': 20.12.7 - dev: true + '@types/node': 22.5.5 - /@types/node@20.12.7: - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/node@22.5.5': dependencies: - undici-types: 5.26.5 - dev: true + undici-types: 6.19.8 - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - dev: false + '@types/prop-types@15.7.13': {} - /@types/qs@6.9.15: - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - dev: true + '@types/qs@6.9.16': {} - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true + '@types/range-parser@1.2.7': {} - /@types/react@18.2.79: - resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==} + '@types/react@18.2.79': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 - dev: false - /@types/retry@0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: true + '@types/retry@0.12.0': {} - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/retry@0.12.2': {} + + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.12.7 - dev: true + '@types/node': 22.5.5 - /@types/serve-index@1.9.4: - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + '@types/serve-index@1.9.4': dependencies: '@types/express': 4.17.21 - dev: true - /@types/serve-static@1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.12.7 + '@types/node': 22.5.5 '@types/send': 0.17.4 - dev: true - /@types/sockjs@0.3.36: - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + '@types/sockjs@0.3.36': dependencies: - '@types/node': 20.12.7 - dev: true + '@types/node': 22.5.5 - /@types/trusted-types@2.0.7: - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - dev: false + '@types/trusted-types@2.0.7': {} - /@types/wicg-file-system-access@2023.10.5: - resolution: {integrity: sha512-e9kZO9kCdLqT2h9Tw38oGv9UNzBBWaR1MzuAavxPcsV/7FJ3tWbU6RI3uB+yKIDPGLkGVbplS52ub0AcRLvrhA==} - dev: true + '@types/wicg-file-system-access@2023.10.5': {} - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + '@types/ws@8.5.12': dependencies: - '@types/node': 20.12.7 - dev: true + '@types/node': 22.5.5 - /@vscode/l10n@0.0.18: - resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} - dev: false + '@vscode/l10n@0.0.18': {} - /@vscode/web-custom-data@0.4.9: - resolution: {integrity: sha512-QeCJFISE/RiTG0NECX6DYmVRPVb0jdyaUrhY0JqNMv9ruUYtYqxxQfv3PSjogb+zNghmwgXLSYuQKk6G+Xnaig==} - dev: true + '@vscode/web-custom-data@0.4.12': {} - /@webassemblyjs/ast@1.12.1: - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true + '@webassemblyjs/helper-api-error@1.11.6': {} - /@webassemblyjs/helper-buffer@1.12.1: - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} - dev: true + '@webassemblyjs/helper-buffer@1.12.1': {} - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + '@webassemblyjs/helper-numbers@1.11.6': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: true + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} - /@webassemblyjs/helper-wasm-section@1.12.1: - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + '@webassemblyjs/helper-wasm-section@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/wasm-gen': 1.12.1 - dev: true - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + '@webassemblyjs/ieee754@1.11.6': dependencies: '@xtuc/ieee754': 1.2.0 - dev: true - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + '@webassemblyjs/leb128@1.11.6': dependencies: '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: true + '@webassemblyjs/utf8@1.11.6': {} - /@webassemblyjs/wasm-edit@1.12.1: - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + '@webassemblyjs/wasm-edit@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-buffer': 1.12.1 @@ -1039,29 +3263,23 @@ packages: '@webassemblyjs/wasm-opt': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 '@webassemblyjs/wast-printer': 1.12.1 - dev: true - /@webassemblyjs/wasm-gen@1.12.1: - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + '@webassemblyjs/wasm-gen@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true - /@webassemblyjs/wasm-opt@1.12.1: - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + '@webassemblyjs/wasm-opt@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/wasm-gen': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - dev: true - /@webassemblyjs/wasm-parser@1.12.1: - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + '@webassemblyjs/wasm-parser@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-api-error': 1.11.6 @@ -1069,87 +3287,60 @@ packages: '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true - /@webassemblyjs/wast-printer@1.12.1: - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + '@webassemblyjs/wast-printer@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - dev: true - /@xml-tools/ast@5.0.5: - resolution: {integrity: sha512-avvzTOvGplCx9JSKdsTe3vK+ACvsHy2HxVfkcfIqPzu+kF5CT4rw5aUVzs0tJF4cnDyMRVkSyVxR07X0Px8gPA==} + '@xml-tools/ast@5.0.5': dependencies: '@xml-tools/common': 0.1.6 '@xml-tools/parser': 1.0.11 lodash: 4.17.21 - dev: false - /@xml-tools/common@0.1.6: - resolution: {integrity: sha512-7aVZeEYccs1KI/Asd6KKnrB4dTAWXTkjRMjG40ApGEUp5NpfQIvWLEBvMv85Koj2lbSpagcAERwDy9qMsfWGdA==} + '@xml-tools/common@0.1.6': dependencies: lodash: 4.17.21 - dev: false - /@xml-tools/constraints@1.1.1: - resolution: {integrity: sha512-c9K/Ozmem2zbLta7HOjJpXszZA/UQkm3pKT3AAa+tKdnsIomPwcRXkltdd+UtdXcOTbqsuTV0fnSkLBgjlnxbQ==} + '@xml-tools/constraints@1.1.1': dependencies: '@xml-tools/validation': 1.0.16 lodash: 4.17.21 - dev: false - /@xml-tools/content-assist@3.1.11: - resolution: {integrity: sha512-ExVgzRLutvBEMi0JQ8vi4ccao0lrq8DTsWKeAEH6/Zy2Wfp+XAR4ERNpFK7yp+QHQkWROr/XSNVarcTuopE+lg==} + '@xml-tools/content-assist@3.1.11': dependencies: '@xml-tools/common': 0.1.6 '@xml-tools/parser': 1.0.11 lodash: 4.17.21 - dev: false - /@xml-tools/parser@1.0.11: - resolution: {integrity: sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==} + '@xml-tools/parser@1.0.11': dependencies: chevrotain: 7.1.1 - dev: false - /@xml-tools/simple-schema@3.0.5: - resolution: {integrity: sha512-8qrm23eGAFtvNWmJu46lttae+X8eOEPMXryf4JH6NBpFl1pphkNXqr7bAKnOjELmLPXHStoeKZO2vptyn4cPPA==} + '@xml-tools/simple-schema@3.0.5': dependencies: '@xml-tools/ast': 5.0.5 '@xml-tools/content-assist': 3.1.11 lodash: 4.17.21 - dev: false - /@xml-tools/validation@1.0.16: - resolution: {integrity: sha512-w/+kUYcxKXfQz8TQ3qAAuLl9N2WZ0HGiwI8nVuIe29dAZmyeXx5ZpODAW7yJoarH0/wZ+rhbc3XxbRqIPcSofA==} + '@xml-tools/validation@1.0.16': dependencies: '@xml-tools/ast': 5.0.5 lodash: 4.17.21 - dev: false - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true + '@xtuc/ieee754@1.2.0': {} - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true + '@xtuc/long@4.2.2': {} - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: true - /ace-builds@1.33.0: - resolution: {integrity: sha512-PDvytkZNvAfuh+PaP5Oy3l3sBGd7xMk4NsB+4w/w1e3gjBqEOGeJwcX+wF/SB6mLtT3VfJLrhDNPT3eaCjtR3w==} - dev: false + ace-builds@1.36.2: {} - /ace-linters@1.2.0: - resolution: {integrity: sha512-xvayDhn3iCmB1oEloK7ZNRZHvRwDIGu+EWtlpXNL8wAwSdQjo05bTbnXEpSCy/sBlJg5tyEwsTYesNrx05DiAg==} + ace-linters@1.3.2: dependencies: '@xml-tools/ast': 5.0.5 '@xml-tools/constraints': 1.1.1 @@ -1158,179 +3349,106 @@ packages: htmlhint: 1.1.4 luaparse: 0.3.1 showdown: 2.1.0 - vscode-css-languageservice: 6.2.13 - vscode-html-languageservice: 5.2.0 - vscode-json-languageservice: 5.3.10 + vscode-css-languageservice: 6.3.1 + vscode-html-languageservice: 5.3.1 + vscode-json-languageservice: 5.4.1 vscode-languageserver-protocol: 3.17.5 - vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-textdocument: 1.0.12 vscode-languageserver-types: 3.17.5 + vscode-uri: 3.0.8 vscode-ws-jsonrpc: 2.0.2 transitivePeerDependencies: - encoding - dev: false - /acorn-import-assertions@1.9.0(acorn@8.11.3): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 + acorn-import-attributes@1.9.5(acorn@8.12.1): dependencies: - acorn: 8.11.3 - dev: true + acorn: 8.12.1 - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true + acorn-walk@8.3.4: dependencies: - ajv: 8.12.0 - dev: true + acorn: 8.12.1 - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 + acorn@8.12.1: {} + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - dev: true - /ajv-keywords@5.1.0(ajv@8.12.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: - ajv: 8.12.0 + ajv: 8.17.1 fast-deep-equal: 3.1.3 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: true + ansi-html-community@0.0.8: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.1.0: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true + any-promise@1.3.0: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true + arg@5.0.2: {} - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true + array-flatten@1.1.1: {} - /asn1.js@4.10.1: - resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + asn1.js@4.10.1: dependencies: bn.js: 4.12.0 inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: false - /async@3.2.3: - resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} - dev: false + async@3.2.3: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false + base64-js@1.5.1: {} - /batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: true + batch@0.6.1: {} - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true + big.js@5.2.2: {} - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: false + binary-extensions@2.3.0: {} - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false + bn.js@4.12.0: {} - /body-parser@1.20.0: - resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + bn.js@5.2.1: {} + + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -1340,78 +3458,40 @@ packages: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.10.3 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /bonjour-service@1.2.1: - resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} + bonjour-service@1.2.1: dependencies: fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 - dev: true - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true + boolbase@1.0.0: {} - /bootstrap@5.3.3(@popperjs/core@2.11.8): - resolution: {integrity: sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==} - peerDependencies: - '@popperjs/core': ^2.11.8 + bootstrap@5.3.3(@popperjs/core@2.11.8): dependencies: '@popperjs/core': 2.11.8 - dev: false - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: - fill-range: 7.0.1 - dev: true + fill-range: 7.1.1 - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: false + brorand@1.1.0: {} - /browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 cipher-base: 1.0.4 @@ -1419,142 +3499,99 @@ packages: evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false - /browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + browserify-cipher@1.0.1: dependencies: browserify-aes: 1.2.0 browserify-des: 1.0.2 evp_bytestokey: 1.0.3 - dev: false - /browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + browserify-des@1.0.2: dependencies: cipher-base: 1.0.4 des.js: 1.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false - /browserify-rsa@4.1.0: - resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + browserify-rsa@4.1.0: dependencies: bn.js: 5.2.1 randombytes: 2.1.0 - dev: false - /browserify-sign@4.2.3: - resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} - engines: {node: '>= 0.12'} + browserify-sign@4.2.3: dependencies: bn.js: 5.2.1 browserify-rsa: 4.1.0 create-hash: 1.2.0 create-hmac: 1.1.7 - elliptic: 6.5.5 + elliptic: 6.5.7 hash-base: 3.0.4 inherits: 2.0.4 parse-asn1: 5.1.7 readable-stream: 2.3.8 safe-buffer: 5.2.1 - dev: false - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.23.3: dependencies: - caniuse-lite: 1.0.30001610 - electron-to-chromium: 1.4.740 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) - dev: true + caniuse-lite: 1.0.30001660 + electron-to-chromium: 1.5.24 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) - /bson@6.6.0: - resolution: {integrity: sha512-BVINv2SgcMjL4oYbBuCQTpE3/VKOSxrOA8Cj/wQP7izSzlBGVomdm+TcUd0Pzy0ytLSSDweCKQ6X3f5veM5LQA==} - engines: {node: '>=16.20.1'} - dev: false + bson@6.8.0: {} - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-builder@0.2.0: {} - /buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: false + buffer-from@1.1.2: {} - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer-xor@1.0.3: {} + + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: false - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: true + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true + bytes@3.0.0: {} - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + bytes@3.1.2: {} + + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true + camelcase-css@2.0.1: {} - /caniuse-lite@1.0.30001610: - resolution: {integrity: sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==} - dev: true + caniuse-lite@1.0.30001660: {} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chevrotain@7.1.1: - resolution: {integrity: sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==} + chevrotain@7.1.1: dependencies: regexp-to-ast: 0.5.0 - dev: false - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -1562,111 +3599,55 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true + chrome-trace-event@1.0.4: {} - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: true - - /cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + cipher-base@1.0.4: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false - /clean-css@4.2.4: - resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} - engines: {node: '>= 4.0'} + clean-css@4.2.4: dependencies: source-map: 0.6.1 - dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - dev: true + colorette@2.0.19: {} - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true + comlink@4.4.1: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + commander@2.20.3: {} - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true + commander@4.1.1: {} - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: true + commander@7.2.0: {} - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: false + commander@9.5.0: {} - /composed-offset-position@0.0.4: - resolution: {integrity: sha512-vMlvu1RuNegVE0YsCDSV/X4X10j56mq7PCIyOKK74FxkXzGLwhOUmdkJLSdOBOMwWycobGUMgft2lp+YgTe8hw==} - dev: false + composed-offset-position@0.0.4: {} - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} + compressible@2.0.18: dependencies: - mime-db: 1.52.0 - dev: true + mime-db: 1.53.0 - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} + compression@1.7.4: dependencies: accepts: 1.3.8 bytes: 3.0.0 @@ -1677,101 +3658,57 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-map@0.0.1: {} - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: true + connect-history-api-fallback@2.0.0: {} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - dev: true - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true + content-type@1.0.5: {} - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true + cookie-signature@1.0.6: {} - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.6.0: {} - /cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - dev: true + core-js@3.38.1: {} - /core-js@3.36.1: - resolution: {integrity: sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==} - requiresBuild: true - dev: true + core-util-is@1.0.3: {} - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - /cosmiconfig@8.3.6(typescript@5.4.5): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@8.3.6(typescript@5.6.2): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.4.5 - dev: true + optionalDependencies: + typescript: 5.6.2 - /cosmiconfig@9.0.0(typescript@5.4.5): - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@9.0.0(typescript@5.6.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 - typescript: 5.4.5 - dev: true + optionalDependencies: + typescript: 5.6.2 - /create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + create-ecdh@4.0.4: dependencies: bn.js: 4.12.0 - elliptic: 6.5.5 - dev: false + elliptic: 6.5.7 - /create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + create-hash@1.2.0: dependencies: cipher-base: 1.0.4 inherits: 2.0.4 md5.js: 1.3.5 ripemd160: 2.0.2 sha.js: 2.4.11 - dev: false - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + create-hmac@1.1.7: dependencies: cipher-base: 1.0.4 create-hash: 1.2.0 @@ -1779,19 +3716,14 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: false - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /crypto-browserify@3.12.0: - resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + crypto-browserify@3.12.0: dependencies: browserify-cipher: 1.0.1 browserify-sign: 4.2.3 @@ -1804,208 +3736,124 @@ packages: public-encrypt: 4.0.3 randombytes: 2.1.0 randomfill: 1.0.4 - dev: false - /css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.1.0: dependencies: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 domutils: 3.1.0 nth-check: 2.1.1 - dev: true - /css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.2.0 - dev: true + source-map-js: 1.2.1 - /css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 - dev: true + source-map-js: 1.2.1 - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true + css-what@6.1.0: {} - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true + cssesc@3.0.0: {} - /csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + csso@5.0.5: dependencies: css-tree: 2.2.1 - dev: true - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: false + csstype@3.1.3: {} - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: dependencies: ms: 2.0.0 - dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.7: dependencies: - ms: 2.1.2 - dev: true + ms: 2.1.3 - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + default-gateway@6.0.3: dependencies: execa: 5.1.1 - dev: true - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true + define-lazy-prop@3.0.0: {} - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true + depd@1.1.2: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true + depd@2.0.0: {} - /des.js@1.1.0: - resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + des.js@1.1.0: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: false - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true + destroy@1.2.0: {} - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: true + detect-node@2.1.0: {} - /didyoumean2@4.1.0: - resolution: {integrity: sha512-qTBmfQoXvhKO75D/05C8m+fteQmn4U46FWYiLhXtZQInzitXLWY0EQ/2oKnpAz9g2lQWW8jYcLcT+hPJGT+kig==} - engines: {node: '>=10.13'} + didyoumean2@4.1.0: dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.25.6 leven: 3.1.0 lodash.deburr: 4.1.0 - dev: true - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true + didyoumean@1.2.2: {} - /diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + diffie-hellman@5.0.3: dependencies: bn.js: 4.12.0 miller-rabin: 4.0.1 randombytes: 2.1.0 - dev: false - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true + dlv@1.1.3: {} - /dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} + dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 - dev: true - /dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: true - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true + domelementtype@2.3.0: {} - /domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + domhandler@5.0.3: dependencies: domelementtype: 2.3.0 - dev: true - /domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.1.0: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true + duplexer@0.1.2: {} - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true + ee-first@1.1.1: {} - /electron-to-chromium@1.4.740: - resolution: {integrity: sha512-Yvg5i+iyv7Xm18BRdVPVm8lc7kgxM3r6iwqCH2zB7QZy1kZRNmd0Zqm0zcD9XoFREE5/5rwIuIAOT+/mzGcnZg==} - dev: true + electron-to-chromium@1.5.24: {} - /elliptic@6.5.5: - resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} + elliptic@6.5.7: dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -2014,132 +3862,69 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: false - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true + emojis-list@3.0.0: {} - /enhanced-resolve@5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} - engines: {node: '>=10.13.0'} + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: true + entities@4.5.0: {} - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true + env-paths@2.2.1: {} - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - dev: true - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - dev: true - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-module-lexer@1.5.0: - resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} - dev: true + es-module-lexer@1.5.4: {} - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - dev: true + escalade@3.2.0: {} - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true + escape-html@1.0.3: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + escape-string-regexp@1.0.5: {} - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true + etag@1.8.1: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true + eventemitter3@4.0.7: {} - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true + events@3.3.0: {} - /evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 - dev: false - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -2150,82 +3935,37 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /exit-hook@3.2.0: - resolution: {integrity: sha512-aIQN7Q04HGAV/I5BszisuHTZHXNoC23WtLkxdCLuYZMdWviRD0TMIt2bnUBi9MrHaF/hH8b3gwG9iaAUHKnJGA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + exit-hook@3.2.0: {} - /express@4.18.1: - resolution: {integrity: sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==} - engines: {node: '>= 0.10.0'} + express@4.21.0: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.0 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.10.3 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: 2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -2233,53 +3973,37 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 - dev: true + micromatch: 4.0.8 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fast-uri@3.0.1: {} + + fastq@1.17.1: dependencies: reusify: 1.0.4 - dev: true - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} + faye-websocket@0.11.4: dependencies: websocket-driver: 0.7.4 - dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} + finalhandler@1.3.1: dependencies: debug: 2.6.9 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -2287,140 +4011,82 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true + follow-redirects@1.15.9: {} - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true - /fork-ts-checker-webpack-plugin@9.0.2(typescript@5.4.5)(webpack@5.91.0): - resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} - engines: {node: '>=12.13.0', yarn: '>=1.0.0'} - peerDependencies: - typescript: '>3.6.0' - webpack: ^5.11.0 + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.6.2)(webpack@5.94.0): dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 chalk: 4.1.2 chokidar: 3.6.0 - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.6.2) deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.6.0 + semver: 7.6.3 tapable: 2.2.1 - typescript: 5.4.5 - webpack: 5.91.0 - dev: true + typescript: 5.6.2 + webpack: 5.94.0 - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true + forwarded@0.2.0: {} - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true + fresh@0.5.2: {} - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-monkey@1.0.5: - resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} - dev: true + fs-monkey@1.0.6: {} - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true + glob-to-regexp@0.4.1: {} - /glob@10.3.12: - resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.4.5: dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 - dev: true + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2429,125 +4095,66 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 - dev: true - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true + graceful-fs@4.2.11: {} - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - - /gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} + gzip-size@6.0.0: dependencies: duplexer: 0.1.2 - dev: true - /handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: true + handle-thing@2.0.1: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - dev: true - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /hash-base@3.0.4: - resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} - engines: {node: '>=4'} + hash-base@3.0.4: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false - /hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} + hash-base@3.1.0: dependencies: inherits: 2.0.4 readable-stream: 3.6.2 safe-buffer: 5.2.1 - dev: false - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hash.js@1.1.7: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: false - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hmac-drbg@1.0.1: dependencies: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: false - /hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + hpack.js@2.1.6: dependencies: inherits: 2.0.4 obuf: 1.1.2 readable-stream: 2.3.8 wbuf: 1.7.3 - dev: true - /html-entities@2.5.2: - resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} - dev: true + html-entities@2.5.2: {} - /html-rspack-plugin@5.6.2(@rspack/core@0.6.2): - resolution: {integrity: sha512-cPGwV3odvKJ7DBAG/DxF5e0nMMvBl1zGfyDciT2xMETRrIwajwC7LtEB3cf7auoGMK6xJOOLjWJgaKHLu/FzkQ==} - engines: {node: '>=10.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - peerDependenciesMeta: - '@rspack/core': - optional: true - dependencies: - '@rspack/core': 0.6.2(@swc/helpers@0.5.3) - lodash: 4.17.21 - tapable: 2.2.1 - dev: true - - /htmlhint@1.1.4: - resolution: {integrity: sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==} - hasBin: true + htmlhint@1.1.4: dependencies: async: 3.2.3 chalk: 4.1.2 @@ -2559,296 +4166,180 @@ packages: xml: 1.0.1 transitivePeerDependencies: - encoding - dev: false - /http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: true + http-deceiver@1.2.7: {} - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} + http-errors@1.6.3: dependencies: depd: 1.1.2 inherits: 2.0.3 setprototypeof: 1.1.0 statuses: 1.5.0 - dev: true - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + http-errors@2.0.0: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: true - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: true + http-parser-js@0.5.8: {} - /http-proxy-middleware@2.0.6(@types/express@4.17.21): - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true + http-proxy-middleware@2.0.6(@types/express@4.17.21): dependencies: - '@types/express': 4.17.21 - '@types/http-proxy': 1.17.14 + '@types/http-proxy': 1.17.15 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 - micromatch: 4.0.5 + micromatch: 4.0.8 + optionalDependencies: + '@types/express': 4.17.21 transitivePeerDependencies: - debug - dev: true - /http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} + http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.6 + follow-redirects: 1.15.9 requires-port: 1.0.0 transitivePeerDependencies: - debug - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + hyperdyperid@1.2.0: {} + + ic10emu_wasm@file:../ic10emu_wasm/pkg: {} + + ic10lsp_wasm@file:../ic10lsp_wasm/pkg: {} + + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /idb@8.0.0: - resolution: {integrity: sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==} - dev: false + idb@8.0.0: {} - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false + ieee754@1.2.1: {} - /immutable@4.3.5: - resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==} - dev: true + immutable@4.3.7: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true + inherits@2.0.3: {} - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inherits@2.0.4: {} - /interpret@3.1.1: - resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} - engines: {node: '>=10.13.0'} - dev: true + interpret@3.1.1: {} - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true + ipaddr.js@1.9.1: {} - /ipaddr.js@2.1.0: - resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} - engines: {node: '>= 10'} - dev: true + ipaddr.js@2.2.0: {} - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.15.1: dependencies: hasown: 2.0.2 - dev: true - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-docker@3.0.0: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-inside-container@1.0.0: dependencies: - is-docker: 2.2.1 - dev: true + is-docker: 3.0.0 - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + is-network-error@1.1.0: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + is-number@7.0.0: {} - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + is-plain-obj@3.0.0: {} + + is-stream@2.0.1: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + jest-worker@27.5.1: dependencies: - '@types/node': 20.12.7 + '@types/node': 22.5.5 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true + jiti@1.21.6: {} - /jquery@3.7.1: - resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} - dev: false + jquery@3.7.1: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-tokens@4.0.0: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-parse-even-better-errors@3.0.1: - resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@1.0.0: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json5@2.2.3: {} - /jsonc-parser@1.0.3: - resolution: {integrity: sha512-hk/69oAeaIzchq/v3lS50PXuzn5O2ynldopMC+SWBql7J2WtdptfB9dy8Y7+Og5rPkTCpn83zTiO8FMcqlXJ/g==} - dev: true + jsonc-parser@1.0.3: {} - /jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - dev: false + jsonc-parser@3.3.1: {} - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /launch-editor@2.6.1: - resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} + launch-editor@2.9.1: dependencies: - picocolors: 1.0.0 + picocolors: 1.1.0 shell-quote: 1.8.1 - dev: true - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + leven@3.1.0: {} - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true + lilconfig@2.1.0: {} - /lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} - engines: {node: '>=14'} - dev: true + lilconfig@3.1.2: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /lit-analyzer@2.0.3: - resolution: {integrity: sha512-XiAjnwVipNrKav7r3CSEZpWt+mwYxrhPRVC7h8knDmn/HWTzzWJvPe+mwBcL2brn4xhItAMzZhFC8tzzqHKmiQ==} - hasBin: true + lit-analyzer@2.0.3: dependencies: - '@vscode/web-custom-data': 0.4.9 + '@vscode/web-custom-data': 0.4.12 chalk: 2.4.2 didyoumean2: 4.1.0 fast-glob: 3.3.2 @@ -2857,363 +4348,213 @@ packages: vscode-css-languageservice: 4.3.0 vscode-html-languageservice: 3.1.0 web-component-analyzer: 2.0.0 - dev: true - /lit-element@4.0.5: - resolution: {integrity: sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q==} + lit-element@4.1.0: dependencies: - '@lit-labs/ssr-dom-shim': 1.2.0 + '@lit-labs/ssr-dom-shim': 1.2.1 '@lit/reactive-element': 2.0.4 - lit-html: 3.1.3 - dev: false + lit-html: 3.2.0 - /lit-html@3.1.3: - resolution: {integrity: sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==} + lit-html@3.2.0: dependencies: '@types/trusted-types': 2.0.7 - dev: false - /lit-scss-loader@2.0.1(webpack@5.91.0): - resolution: {integrity: sha512-2PvmHuklfZx+OgudhU2zH4SrKyPdzQ9eOQsYoxGEga10dcAwmiMx/6UjOdI13i/BHxcElOqSmTkJ4hBxZrO7dQ==} - peerDependencies: - webpack: ^5.37.1 + lit-scss-loader@2.0.1(webpack@5.94.0): dependencies: clean-css: 4.2.4 - webpack: 5.91.0 - dev: true + webpack: 5.94.0 - /lit@3.1.3: - resolution: {integrity: sha512-l4slfspEsnCcHVRTvaP7YnkTZEZggNFywLEIhQaGhYDczG+tu/vlgm/KaWIEjIp+ZyV20r2JnZctMb8LeLCG7Q==} + lit@3.2.0: dependencies: '@lit/reactive-element': 2.0.4 - lit-element: 4.0.5 - lit-html: 3.1.3 - dev: false + lit-element: 4.1.0 + lit-html: 3.2.0 - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: true + loader-runner@4.3.0: {} - /lodash.deburr@4.1.0: - resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} - dev: true - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + loader-utils@2.0.4: dependencies: - yallist: 4.0.0 - dev: true + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 - /luaparse@0.3.1: - resolution: {integrity: sha512-b21h2bFEbtGXmVqguHogbyrMAA0wOHyp9u/rx+w6Yc9pW1t9YjhGUsp87lYcp7pFRqSWN/PhFkrdIqKEUzRjjQ==} - hasBin: true - dev: false + lodash.deburr@4.1.0: {} - /lzma-web@3.0.1: - resolution: {integrity: sha512-sb5cdfd+PLNljK/HUgYzvnz4G7r0GFK8sonyGrqJS0FVyUQjFYcnmU2LqTWFi6r48lH1ZBstnxyLWepKM/t7QA==} - dev: false + lodash@4.17.21: {} - /marked@12.0.2: - resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} - engines: {node: '>= 18'} - hasBin: true - dev: false + lru-cache@10.4.3: {} - /md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + luaparse@0.3.1: {} + + lzma-web@3.0.1: {} + + marked@14.1.2: {} + + md5.js@1.3.5: dependencies: hash-base: 3.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false - /mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - dev: true + mdn-data@2.0.28: {} - /mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true + mdn-data@2.0.30: {} - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true + media-typer@0.3.0: {} - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} + memfs@3.5.3: dependencies: - fs-monkey: 1.0.5 - dev: true + fs-monkey: 1.0.6 - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: true - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true - - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + memfs@4.11.2: dependencies: - braces: 3.0.2 + '@jsonjoy.com/json-pack': 1.1.0(tslib@2.7.0) + '@jsonjoy.com/util': 1.3.0(tslib@2.7.0) + tree-dump: 1.0.2(tslib@2.7.0) + tslib: 2.7.0 + + merge-descriptors@1.0.3: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 picomatch: 2.3.1 - dev: true - /miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true + miller-rabin@4.0.1: dependencies: bn.js: 4.12.0 brorand: 1.1.0 - dev: false - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-db@1.53.0: {} + + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: true - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true + mime@1.6.0: {} - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /mini-css-extract-plugin@2.9.0(webpack@5.91.0): - resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 + mini-css-extract-plugin@2.9.1(webpack@5.94.0): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0 - dev: true + webpack: 5.94.0 - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimalistic-assert@1.0.1: {} - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: false + minimalistic-crypto-utils@1.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - dev: true - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.1.2: {} - /mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} - engines: {node: '>=10'} - dev: true + mrmime@1.0.1: {} - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true + ms@2.0.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.3: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - - /multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true + multicast-dns@7.2.5: dependencies: dns-packet: 5.6.1 thunky: 1.1.0 - dev: true - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.7: {} - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.3: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + neo-async@2.6.2: {} - /node-abort-controller@3.1.1: - resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} - dev: true + node-abort-controller@3.1.1: {} - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: false - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: true + node-forge@1.3.1: {} - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true + node-releases@2.0.18: {} - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + object-assign@4.1.1: {} - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true + object-hash@3.0.0: {} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true + object-inspect@1.13.2: {} - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: true + obuf@1.1.2: {} - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - dev: true - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: true + on-headers@1.0.2: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@10.1.0: dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 - /opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true - dev: true + opener@1.5.2: {} - /p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} + p-retry@4.6.2: dependencies: '@types/retry': 0.12.0 retry: 0.13.1 - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + p-retry@6.2.0: + dependencies: + '@types/retry': 0.12.2 + is-network-error: 1.1.0 + retry: 0.13.1 + + package-json-from-dist@1.0.0: {} + + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-asn1@5.1.7: - resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} - engines: {node: '>= 0.10'} + parse-asn1@5.1.7: dependencies: asn1.js: 4.10.1 browserify-aes: 1.2.0 @@ -3221,193 +4562,106 @@ packages: hash-base: 3.0.4 pbkdf2: 3.1.2 safe-buffer: 5.2.1 - dev: false - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse5@5.1.0: - resolution: {integrity: sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==} - dev: true + parse5@5.1.0: {} - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true + parseurl@1.3.3: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 - dev: true + lru-cache: 10.4.3 + minipass: 7.1.2 - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: true + path-to-regexp@0.1.10: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} + pbkdf2@3.1.2: dependencies: create-hash: 1.2.0 create-hmac: 1.1.7 ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: false - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + picocolors@1.1.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true + pify@2.3.0: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.6: {} - /postcss-import@15.1.0(postcss@8.4.38): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 + postcss-import@15.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - dev: true - /postcss-js@4.0.1(postcss@8.4.38): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 + postcss-js@4.0.1(postcss@8.4.47): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.38 - dev: true + postcss: 8.4.47 - /postcss-load-config@4.0.2(postcss@8.4.38): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss-load-config@4.0.2(postcss@8.4.47): dependencies: - lilconfig: 3.1.1 - postcss: 8.4.38 - yaml: 2.4.1 - dev: true + lilconfig: 3.1.2 + yaml: 2.5.1 + optionalDependencies: + postcss: 8.4.47 - /postcss-loader@8.1.1(@rspack/core@0.6.2)(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0): - resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true + postcss-loader@8.1.1(@rspack/core@1.0.5(@swc/helpers@0.5.13))(postcss@8.4.47)(typescript@5.6.2)(webpack@5.94.0): dependencies: - '@rspack/core': 0.6.2(@swc/helpers@0.5.10) - cosmiconfig: 9.0.0(typescript@5.4.5) - jiti: 1.21.0 - postcss: 8.4.38 - semver: 7.6.0 - webpack: 5.91.0 + cosmiconfig: 9.0.0(typescript@5.6.2) + jiti: 1.21.6 + postcss: 8.4.47 + semver: 7.6.3 + optionalDependencies: + '@rspack/core': 1.0.5(@swc/helpers@0.5.13) + webpack: 5.94.0 transitivePeerDependencies: - typescript - dev: true - /postcss-nested@6.0.1(postcss@8.4.38): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + postcss-nested@6.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 - dev: true + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 - /postcss-selector-parser@6.0.16: - resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} - engines: {node: '>=4'} + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true + postcss-value-parser@4.2.0: {} - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - dev: true + picocolors: 1.1.0 + source-map-js: 1.2.1 - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-nextick-args@2.0.1: {} - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: true - /public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + public-encrypt@4.0.3: dependencies: bn.js: 4.12.0 browserify-rsa: 4.1.0 @@ -3415,80 +4669,40 @@ packages: parse-asn1: 5.1.7 randombytes: 2.1.0 safe-buffer: 5.2.1 - dev: false - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /qr-creator@1.0.0: - resolution: {integrity: sha512-C0cqfbS1P5hfqN4NhsYsUXePlk9BO+a45bAQ3xLYjBL3bOIFzoVEjs79Fado9u9BPBD3buHi3+vY+C8tHh4qMQ==} - dev: false + qr-creator@1.0.0: {} - /qs@6.10.3: - resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} - engines: {node: '>=0.6'} + qs@6.13.0: dependencies: side-channel: 1.0.6 - dev: true - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.6 - dev: true + queue-microtask@1.2.3: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - /randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + randomfill@1.0.4: dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 - dev: false - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true + range-parser@1.2.1: {} - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: true - - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-cache@1.0.0: dependencies: pify: 2.3.0 - dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -3498,161 +4712,190 @@ packages: string_decoder: 1.1.1 util-deprecate: 1.0.2 - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} - engines: {node: '>= 10.13.0'} + rechoir@0.8.0: dependencies: resolve: 1.22.8 - dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true - - /regexp-to-ast@0.5.0: - resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} - dev: false - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true - - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + reduce-configs@1.0.0: dependencies: - is-core-module: 2.13.1 + browserslist: 4.23.3 + + regenerator-runtime@0.14.1: {} + + regexp-to-ast@0.5.0: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + requires-port@1.0.0: {} + + resolve-from@4.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true + retry@0.13.1: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@5.0.10: dependencies: - glob: 7.2.3 - dev: true + glob: 10.4.5 - /ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + ripemd160@2.0.2: dependencies: hash-base: 3.1.0 inherits: 2.0.4 - dev: false - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-applescript@7.0.0: {} + + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + rxjs@7.8.1: + dependencies: + tslib: 2.7.0 - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-buffer@5.1.2: {} - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safe-buffer@5.2.1: {} - /sass@1.75.0: - resolution: {integrity: sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==} - engines: {node: '>=14.0.0'} - hasBin: true + safer-buffer@2.1.2: {} + + sass-embedded-android-arm64@1.78.0: + optional: true + + sass-embedded-android-arm@1.78.0: + optional: true + + sass-embedded-android-ia32@1.78.0: + optional: true + + sass-embedded-android-riscv64@1.78.0: + optional: true + + sass-embedded-android-x64@1.78.0: + optional: true + + sass-embedded-darwin-arm64@1.78.0: + optional: true + + sass-embedded-darwin-x64@1.78.0: + optional: true + + sass-embedded-linux-arm64@1.78.0: + optional: true + + sass-embedded-linux-arm@1.78.0: + optional: true + + sass-embedded-linux-ia32@1.78.0: + optional: true + + sass-embedded-linux-musl-arm64@1.78.0: + optional: true + + sass-embedded-linux-musl-arm@1.78.0: + optional: true + + sass-embedded-linux-musl-ia32@1.78.0: + optional: true + + sass-embedded-linux-musl-riscv64@1.78.0: + optional: true + + sass-embedded-linux-musl-x64@1.78.0: + optional: true + + sass-embedded-linux-riscv64@1.78.0: + optional: true + + sass-embedded-linux-x64@1.78.0: + optional: true + + sass-embedded-win32-arm64@1.78.0: + optional: true + + sass-embedded-win32-ia32@1.78.0: + optional: true + + sass-embedded-win32-x64@1.78.0: + optional: true + + sass-embedded@1.78.0: + dependencies: + '@bufbuild/protobuf': 1.10.0 + buffer-builder: 0.2.0 + immutable: 4.3.7 + rxjs: 7.8.1 + supports-color: 8.1.1 + varint: 6.0.0 + optionalDependencies: + sass-embedded-android-arm: 1.78.0 + sass-embedded-android-arm64: 1.78.0 + sass-embedded-android-ia32: 1.78.0 + sass-embedded-android-riscv64: 1.78.0 + sass-embedded-android-x64: 1.78.0 + sass-embedded-darwin-arm64: 1.78.0 + sass-embedded-darwin-x64: 1.78.0 + sass-embedded-linux-arm: 1.78.0 + sass-embedded-linux-arm64: 1.78.0 + sass-embedded-linux-ia32: 1.78.0 + sass-embedded-linux-musl-arm: 1.78.0 + sass-embedded-linux-musl-arm64: 1.78.0 + sass-embedded-linux-musl-ia32: 1.78.0 + sass-embedded-linux-musl-riscv64: 1.78.0 + sass-embedded-linux-musl-x64: 1.78.0 + sass-embedded-linux-riscv64: 1.78.0 + sass-embedded-linux-x64: 1.78.0 + sass-embedded-win32-arm64: 1.78.0 + sass-embedded-win32-ia32: 1.78.0 + sass-embedded-win32-x64: 1.78.0 + + sass@1.78.0: dependencies: chokidar: 3.6.0 - immutable: 4.3.5 - source-map-js: 1.2.0 - dev: true + immutable: 4.3.7 + source-map-js: 1.2.1 - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} + schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} + schema-utils@4.2.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) - dev: true + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) - /select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: true + select-hose@2.0.0: {} - /selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} + selfsigned@2.4.1: dependencies: '@types/node-forge': 1.3.11 node-forge: 1.3.1 - dev: true - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@7.6.3: {} - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -3669,17 +4912,12 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - dev: true - /serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} + serve-index@1.9.1: dependencies: accepts: 1.3.8 batch: 0.6.1 @@ -3690,23 +4928,17 @@ packages: parseurl: 1.3.3 transitivePeerDependencies: - supports-color - dev: true - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} + serve-static@1.16.2: dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color - dev: true - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -3714,109 +4946,65 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: true + setprototypeof@1.1.0: {} - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true + setprototypeof@1.2.0: {} - /sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true + sha.js@2.4.11: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true + shell-quote@1.8.1: {} - /showdown@2.1.0: - resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==} - hasBin: true + showdown@2.1.0: dependencies: commander: 9.5.0 - dev: false - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + side-channel@1.0.6: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - dev: true + object-inspect: 1.13.2 - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /sirv@1.0.19: - resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} - engines: {node: '>= 10'} + sirv@1.0.19: dependencies: '@polka/url': 1.0.0-next.25 mrmime: 1.0.1 totalist: 1.1.0 - dev: true - /sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 uuid: 8.3.2 websocket-driver: 0.7.4 - dev: true - /source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.1: {} - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true + source-map@0.7.4: {} - /spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + spdy-transport@3.0.0: dependencies: - debug: 4.3.4 + debug: 4.3.7 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -3824,133 +5012,83 @@ packages: wbuf: 1.7.3 transitivePeerDependencies: - supports-color - dev: true - /spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} + spdy@4.0.2: dependencies: - debug: 4.3.4 + debug: 4.3.7 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 spdy-transport: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true + statuses@1.5.0: {} - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true + statuses@2.0.1: {} - /stream-browserify@3.0.0: - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + stream-browserify@3.0.0: dependencies: inherits: 2.0.4 readable-stream: 3.6.2 - dev: false - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 - dev: true + ansi-regex: 6.1.0 - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-json-comments@3.1.0: - resolution: {integrity: sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==} - engines: {node: '>=8'} - dev: false + strip-json-comments@3.1.0: {} - /sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.12 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /svgo@3.2.0: - resolution: {integrity: sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==} - engines: {node: '>=14.0.0'} - hasBin: true + svgo@3.3.2: dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 @@ -3958,13 +5096,9 @@ packages: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.0 - dev: true + picocolors: 1.1.0 - /tailwindcss@3.4.3: - resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} - engines: {node: '>=14.0.0'} - hasBin: true + tailwindcss@3.4.12: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -3974,448 +5108,270 @@ packages: fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.0 + jiti: 1.21.6 lilconfig: 2.1.0 - micromatch: 4.0.5 + micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.38 - postcss-import: 15.1.0(postcss@8.4.38) - postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38) - postcss-nested: 6.0.1(postcss@8.4.38) - postcss-selector-parser: 6.0.16 + picocolors: 1.1.0 + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.0.1(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47) + postcss-nested: 6.2.0(postcss@8.4.47) + postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: - ts-node - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /terser-webpack-plugin@5.3.10(webpack@5.91.0): - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true + terser-webpack-plugin@5.3.10(webpack@5.94.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.30.3 - webpack: 5.91.0 - dev: true + terser: 5.33.0 + webpack: 5.94.0 - /terser@5.30.3: - resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==} - engines: {node: '>=10'} - hasBin: true + terser@5.33.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 - dev: true - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - dev: true - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - dev: true - /thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: true + thingies@1.21.0(tslib@2.7.0): + dependencies: + tslib: 2.7.0 - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + thunky@1.1.0: {} + + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true + toidentifier@1.0.1: {} - /totalist@1.1.0: - resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} - engines: {node: '>=6'} - dev: true + totalist@1.1.0: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false + tr46@0.0.3: {} - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true + tree-dump@1.0.2(tslib@2.7.0): + dependencies: + tslib: 2.7.0 - /ts-lit-plugin@2.0.2: - resolution: {integrity: sha512-DPXlVxhjWHxg8AyBLcfSYt2JXgpANV1ssxxwjY98o26gD8MzeiM68HFW9c2VeDd1CjoR3w7B/6/uKxwBQe+ioA==} + ts-interface-checker@0.1.13: {} + + ts-lit-plugin@2.0.2: dependencies: lit-analyzer: 2.0.3 web-component-analyzer: 2.0.0 - dev: true - /ts-loader@9.5.1(typescript@5.4.5)(webpack@5.91.0): - resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - webpack: ^5.0.0 + ts-loader@9.5.1(typescript@5.6.2)(webpack@5.94.0): dependencies: chalk: 4.1.2 - enhanced-resolve: 5.16.0 - micromatch: 4.0.5 - semver: 7.6.0 + enhanced-resolve: 5.17.1 + micromatch: 4.0.8 + semver: 7.6.3 source-map: 0.7.4 - typescript: 5.4.5 - webpack: 5.91.0 - dev: true + typescript: 5.6.2 + webpack: 5.94.0 - /ts-simple-type@2.0.0-next.0: - resolution: {integrity: sha512-A+hLX83gS+yH6DtzNAhzZbPfU+D9D8lHlTSd7GeoMRBjOt3GRylDqLTYbdmjA4biWvq2xSfpqfIDj2l0OA/BVg==} - dev: true + ts-simple-type@2.0.0-next.0: {} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true + tslib@2.7.0: {} - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true - /typescript-lit-html-plugin@0.9.0: - resolution: {integrity: sha512-Ux2I1sPpt2akNbRZiBAND9oA8XNE2BuVmDwsb7rZshJ9T8/Na2rICE5Tnuj9dPHdFUATdOGjVEagn1/v8T4gCQ==} + typescript-lit-html-plugin@0.9.0: dependencies: typescript-styled-plugin: 0.13.0 typescript-template-language-service-decorator: 2.3.2 vscode-html-languageservice: 2.1.12 vscode-languageserver-types: 3.17.5 - dev: true - /typescript-styled-plugin@0.13.0: - resolution: {integrity: sha512-GGMzv/JAd4S8mvWgHZslvW2G1HHrdurrp93oSR4h85SM8e5at7+KCqHsZICiTaL+iN25YGkJqoaZe4XklA76rg==} - deprecated: Deprecated in favor of https://github.com/styled-components/typescript-styled-plugin + typescript-styled-plugin@0.13.0: dependencies: typescript-template-language-service-decorator: 2.3.2 vscode-css-languageservice: 3.0.13 vscode-emmet-helper: 1.2.11 vscode-languageserver-types: 3.17.5 - dev: true - /typescript-template-language-service-decorator@2.3.2: - resolution: {integrity: sha512-hN0zNkr5luPCeXTlXKxsfBPlkAzx86ZRM1vPdL7DbEqqWoeXSxplACy98NpKpLmXsdq7iePUzAXloCAoPKBV6A==} - dev: true + typescript-template-language-service-decorator@2.3.2: {} - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.2.2: {} - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.6.2: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@6.19.8: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true + unpipe@1.0.0: {} - /update-browserslist-db@1.0.13(browserslist@4.23.0): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.0 - dev: true + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.0 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util-deprecate@1.0.2: {} - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true + utils-merge@1.0.1: {} - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true + uuid@10.0.0: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: false + uuid@8.3.2: {} - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true + varint@6.0.0: {} - /vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - dev: false + vary@1.1.2: {} - /vscode-css-languageservice@3.0.13: - resolution: {integrity: sha512-RWkO/c/A7iXhHEy3OuEqkCqavDjpD4NF2Ca8vjai+ZtEYNeHrm1ybTnBYLP4Ft1uXvvaaVtYA9HrDjD6+CUONg==} + vm-browserify@1.1.2: {} + + vscode-css-languageservice@3.0.13: dependencies: vscode-languageserver-types: 3.17.5 vscode-nls: 4.1.2 - dev: true - /vscode-css-languageservice@4.3.0: - resolution: {integrity: sha512-BkQAMz4oVHjr0oOAz5PdeE72txlLQK7NIwzmclfr+b6fj6I8POwB+VoXvrZLTbWt9hWRgfvgiQRkh5JwrjPJ5A==} + vscode-css-languageservice@4.3.0: dependencies: - vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-textdocument: 1.0.12 vscode-languageserver-types: 3.16.0-next.2 vscode-nls: 4.1.2 vscode-uri: 2.1.2 - dev: true - /vscode-css-languageservice@6.2.13: - resolution: {integrity: sha512-2rKWXfH++Kxd9Z4QuEgd1IF7WmblWWU7DScuyf1YumoGLkY9DW6wF/OTlhOyO2rN63sWHX2dehIpKBbho4ZwvA==} + vscode-css-languageservice@6.3.1: dependencies: '@vscode/l10n': 0.0.18 - vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-textdocument: 1.0.12 vscode-languageserver-types: 3.17.5 vscode-uri: 3.0.8 - dev: false - /vscode-emmet-helper@1.2.11: - resolution: {integrity: sha512-ms6/Z9TfNbjXS8r/KgbGxrNrFlu4RcIfVJxTZ2yFi0K4gn+Ka9X1+8cXvb5+5IOBGUrOsPjR0BuefdDkG+CKbQ==} - deprecated: This package has been renamed to @vscode/emmet-helper, please update to the new name + vscode-emmet-helper@1.2.11: dependencies: '@emmetio/extract-abbreviation': 0.1.6 jsonc-parser: 1.0.3 vscode-languageserver-types: 3.17.5 - dev: true - /vscode-html-languageservice@2.1.12: - resolution: {integrity: sha512-mIb5VMXM5jI97HzCk2eadI1K//rCEZXte0wBqA7PGXsyJH4KTyJUaYk9MR+mbfpUl2vMi3HZw9GUOLGYLc6l5w==} + vscode-html-languageservice@2.1.12: dependencies: vscode-languageserver-types: 3.17.5 vscode-nls: 4.1.2 vscode-uri: 1.0.8 - dev: true - /vscode-html-languageservice@3.1.0: - resolution: {integrity: sha512-QAyRHI98bbEIBCqTzZVA0VblGU40na0txggongw5ZgTj9UVsVk5XbLT16O9OTcbqBGSqn0oWmFDNjK/XGIDcqg==} + vscode-html-languageservice@3.1.0: dependencies: - vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-textdocument: 1.0.12 vscode-languageserver-types: 3.16.0-next.2 vscode-nls: 4.1.2 vscode-uri: 2.1.2 - dev: true - /vscode-html-languageservice@5.2.0: - resolution: {integrity: sha512-cdNMhyw57/SQzgUUGSIMQ66jikqEN6nBNyhx5YuOyj9310+eY9zw8Q0cXpiKzDX8aHYFewQEXRnigl06j/TVwQ==} + vscode-html-languageservice@5.3.1: dependencies: '@vscode/l10n': 0.0.18 - vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-textdocument: 1.0.12 vscode-languageserver-types: 3.17.5 vscode-uri: 3.0.8 - dev: false - /vscode-json-languageservice@5.3.10: - resolution: {integrity: sha512-KlbUYaer3DAnsVyRtgg/MhXOu4TTwY8TjaZYRY7Mt80zSpmvbmd58YT4Wq2ZiqHzdioD6lAvRSxhSCL0DvVY8Q==} + vscode-json-languageservice@5.4.1: dependencies: '@vscode/l10n': 0.0.18 - jsonc-parser: 3.2.1 - vscode-languageserver-textdocument: 1.0.11 + jsonc-parser: 3.3.1 + vscode-languageserver-textdocument: 1.0.12 vscode-languageserver-types: 3.17.5 vscode-uri: 3.0.8 - dev: false - /vscode-jsonrpc@8.0.2: - resolution: {integrity: sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==} - engines: {node: '>=14.0.0'} - dev: false + vscode-jsonrpc@8.0.2: {} - /vscode-jsonrpc@8.2.0: - resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} - engines: {node: '>=14.0.0'} - dev: false + vscode-jsonrpc@8.2.0: {} - /vscode-languageserver-protocol@3.17.5: - resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + vscode-languageserver-protocol@3.17.5: dependencies: vscode-jsonrpc: 8.2.0 vscode-languageserver-types: 3.17.5 - dev: false - /vscode-languageserver-textdocument@1.0.11: - resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} + vscode-languageserver-textdocument@1.0.12: {} - /vscode-languageserver-types@3.16.0-next.2: - resolution: {integrity: sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q==} - dev: true + vscode-languageserver-types@3.16.0-next.2: {} - /vscode-languageserver-types@3.17.5: - resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + vscode-languageserver-types@3.17.5: {} - /vscode-nls@4.1.2: - resolution: {integrity: sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==} - dev: true + vscode-nls@4.1.2: {} - /vscode-uri@1.0.8: - resolution: {integrity: sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ==} - dev: true + vscode-uri@1.0.8: {} - /vscode-uri@2.1.2: - resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} - dev: true + vscode-uri@2.1.2: {} - /vscode-uri@3.0.8: - resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - dev: false + vscode-uri@3.0.8: {} - /vscode-ws-jsonrpc@2.0.2: - resolution: {integrity: sha512-gIOGdaWwKYwwqohgeRC8AtqqHSNghK8wA3oVcBi7UMAdZnRSAf8n4/Svtd+JHqGiIguYdNa/sC0s4IW3ZDF7mA==} - engines: {node: '>=16.11.0', npm: '>=8.0.0'} + vscode-ws-jsonrpc@2.0.2: dependencies: vscode-jsonrpc: 8.0.2 - dev: false - /watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} - engines: {node: '>=10.13.0'} + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true - /wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + wbuf@1.7.3: dependencies: minimalistic-assert: 1.0.1 - dev: true - /web-component-analyzer@2.0.0: - resolution: {integrity: sha512-UEvwfpD+XQw99sLKiH5B1T4QwpwNyWJxp59cnlRwFfhUW6JsQpw5jMeMwi7580sNou8YL3kYoS7BWLm+yJ/jVQ==} - hasBin: true + web-component-analyzer@2.0.0: dependencies: fast-glob: 3.3.2 ts-simple-type: 2.0.0-next.0 typescript: 5.2.2 yargs: 17.7.2 - dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false + webidl-conversions@3.0.1: {} - /webpack-bundle-analyzer@4.6.1: - resolution: {integrity: sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==} - engines: {node: '>= 10.13.0'} - hasBin: true + webpack-bundle-analyzer@4.6.1: dependencies: - acorn: 8.11.3 - acorn-walk: 8.3.2 + acorn: 8.12.1 + acorn-walk: 8.3.4 chalk: 4.1.2 commander: 7.2.0 gzip-size: 6.0.0 lodash: 4.17.21 opener: 1.5.2 sirv: 1.0.19 - ws: 7.5.9 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /webpack-dev-middleware@5.3.4(webpack@5.91.0): - resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 + webpack-dev-middleware@7.4.2(webpack@5.94.0): dependencies: - colorette: 2.0.20 - memfs: 3.5.3 + colorette: 2.0.19 + memfs: 4.11.2 mime-types: 2.1.35 + on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0 - dev: true + optionalDependencies: + webpack: 5.94.0 - /webpack-dev-middleware@6.0.2(webpack@5.91.0): - resolution: {integrity: sha512-iOddiJzPcQC6lwOIu60vscbGWth8PCRcWRCwoQcTQf9RMoOWBHg5EyzpGdtSmGMrSPd5vHEfFXmVErQEmkRngQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.91.0 - dev: true - - /webpack-dev-server@4.13.1(webpack@5.91.0): - resolution: {integrity: sha512-5tWg00bnWbYgkN+pd5yISQKDejRBYGEw15RaEEslH+zdbNDxxaZvEAO2WulaSaFKb5n3YG8JXsGaDsut1D0xdA==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true + webpack-dev-server@5.0.4(webpack@5.94.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -4423,64 +5379,52 @@ packages: '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 - '@types/ws': 8.5.10 + '@types/ws': 8.5.12 ansi-html-community: 0.0.8 bonjour-service: 1.2.1 chokidar: 3.6.0 - colorette: 2.0.20 + colorette: 2.0.19 compression: 1.7.4 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 - express: 4.19.2 + express: 4.21.0 graceful-fs: 4.2.11 html-entities: 2.5.2 http-proxy-middleware: 2.0.6(@types/express@4.17.21) - ipaddr.js: 2.1.0 - launch-editor: 2.6.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 + ipaddr.js: 2.2.0 + launch-editor: 2.9.1 + open: 10.1.0 + p-retry: 6.2.0 + rimraf: 5.0.10 schema-utils: 4.2.0 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0 - webpack-dev-middleware: 5.3.4(webpack@5.91.0) - ws: 8.16.0 + webpack-dev-middleware: 7.4.2(webpack@5.94.0) + ws: 8.18.0 + optionalDependencies: + webpack: 5.94.0 transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - dev: true - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + webpack-sources@3.2.3: {} - /webpack@5.91.0: - resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true + webpack@5.94.0: dependencies: - '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.23.0 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.16.0 - es-module-lexer: 1.5.0 + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + browserslist: 4.23.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -4491,173 +5435,73 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.91.0) - watchpack: 2.4.1 + terser-webpack-plugin: 5.3.10(webpack@5.94.0) + watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: true - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} + websocket-driver@0.7.4: dependencies: http-parser-js: 0.5.8 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 - dev: true - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: true + websocket-extensions@0.1.4: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: false - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + wrappy@1.0.2: {} - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@7.5.10: {} - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@8.18.0: {} - /ws@8.8.1: - resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + xml@1.0.1: {} - /xml@1.0.1: - resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} - dev: false + y18n@5.0.8: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + yaml@2.5.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yargs-parser@21.1.1: {} - /yaml@2.4.1: - resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} - engines: {node: '>= 14'} - hasBin: true - dev: true - - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true - - /yargs@17.6.2: - resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} - engines: {node: '>=12'} + yargs@17.6.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - - /zod-validation-error@1.3.1(zod@3.22.5): - resolution: {integrity: sha512-cNEXpla+tREtNdAnNKY4xKY1SGOn2yzyuZMu4O0RQylX9apRpUjNcPkEc3uHIAr5Ct7LenjZt6RzjEH6+JsqVQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - zod: ^3.18.0 - dependencies: - zod: 3.22.5 - dev: true - - /zod@3.22.5: - resolution: {integrity: sha512-HqnGsCdVZ2xc0qWPLdO25WnseXThh0kEYKIdV5F/hTHO75hNZFp8thxSeHhiPrHZKrFTo1SOgkAj9po5bexZlw==} - dev: true - - file:../ic10emu_wasm/pkg: - resolution: {directory: ../ic10emu_wasm/pkg, type: directory} - name: ic10emu_wasm - dev: false - - file:../ic10lsp_wasm/pkg: - resolution: {directory: ../ic10lsp_wasm/pkg, type: directory} - name: ic10lsp_wasm - dev: false diff --git a/www/rsbuild.config.ts b/www/rsbuild.config.ts index 6b91272..cc466e1 100644 --- a/www/rsbuild.config.ts +++ b/www/rsbuild.config.ts @@ -1,6 +1,7 @@ import { defineConfig } from "@rsbuild/core"; import { pluginTypeCheck } from "@rsbuild/plugin-type-check"; import { pluginImageCompress } from "@rsbuild/plugin-image-compress"; +import { pluginSass } from "@rsbuild/plugin-sass"; const rspack = require("@rspack/core"); const { CssExtractRspackPlugin } = require("@rspack/core"); @@ -12,14 +13,23 @@ const commitHash = require("child_process") .trim(); export default defineConfig({ - output: { - targets: ["web"], + environments: { + web: { + output: { + target: 'web', + } + } }, source: { entry: { - index: "./src/ts/index.ts", + index: path.resolve(__dirname, "./src/ts/index.ts"), }, }, + html: { + appIcon: { + icons: [], + } + }, tools: { rspack: { plugins: [ @@ -57,20 +67,16 @@ export default defineConfig({ jsc: { parser: { syntax: "typescript", - // dynamicImport: true, decorators: true, }, transform: { - legacyDecorator: true, decoratorMetadata: true, - // decoratorVersion: "2022-03", }, - // target: "es2021", }, }, htmlPlugin: { template: "./src/index.html", }, }, - plugins: [pluginTypeCheck(), pluginImageCompress()], + plugins: [pluginSass(), pluginTypeCheck(), pluginImageCompress()], }); diff --git a/www/src/scss/ace_markers.scss b/www/src/scss/ace_markers.scss new file mode 100644 index 0000000..4e57c25 --- /dev/null +++ b/www/src/scss/ace_markers.scss @@ -0,0 +1,27 @@ +.vm_ic_active_line { + position: absolute; + background: rgba(121, 82, 179, 0.4); + z-index: 2000; +} + +.ic10_editor_error_parse { + position: absolute; + border-bottom: dotted 1px #e00404; + z-index: 2000; + border-radius: 0; +} + +.ic10_editor_error_duplicate_label { + position: absolute; + border-bottom: solid 1px #DDC50F; + z-index: 2000; + border-radius: 0; +} + +.ic10_editor_error_runtime { + position: absolute; + border-bottom: dotted 1px #e00404; + z-index: 2000; + border-radius: 0; + background: rgba(179, 82, 82, 0.4); +} diff --git a/www/src/scss/dark.scss b/www/src/scss/dark.scss index 94b138c..1c01051 100644 --- a/www/src/scss/dark.scss +++ b/www/src/scss/dark.scss @@ -81,7 +81,7 @@ body { box-shadow: 0px 2px 3px 0px #555; } -.navbar-default .navbar-nav > li > a { +.navbar-default .navbar-nav>li>a { color: #fff; } @@ -92,7 +92,7 @@ body { color: #fff; } -.navbar-nav > li > a { +.navbar-nav>li>a { padding-top: 10px; padding-bottom: 10px; line-height: 20px; @@ -105,7 +105,7 @@ body { // } // } -.nav > li > a { +.nav>li>a { position: relative; display: block; padding: 10px 15px; @@ -202,12 +202,6 @@ code { background: rgba(76, 87, 103, 0.19); } -.vm_ic_active_line { - position: absolute; - background: rgba(121, 82, 179, 0.4); - z-index: 20; -} - .vm_accordion .accordion-button { padding-top: 0.2rem; padding-bottom: 0.2rem; diff --git a/www/src/scss/styles.scss b/www/src/scss/styles.scss index b78d870..d98ca95 100644 --- a/www/src/scss/styles.scss +++ b/www/src/scss/styles.scss @@ -19,19 +19,23 @@ $accordion-icon-color-dark: #dee2e6; $accordion-icon-active-color-dark: #dee2e6; $accordion-button-padding-y: 0.5rem; -// Required -@import "bootstrap/scss/variables"; -@import "bootstrap/scss/variables-dark"; -@import "bootstrap/scss/maps"; -@import "bootstrap/scss/mixins"; -@import "bootstrap/scss/utilities"; -@import "bootstrap/scss/root"; -@import "bootstrap/scss/reboot"; +// // Required +// @import "bootstrap/scss/variables"; +// @import "bootstrap/scss/variables-dark"; +// @import "bootstrap/scss/maps"; +// @import "bootstrap/scss/mixins"; +// @import "bootstrap/scss/utilities"; +// @import "bootstrap/scss/root"; +// @import "bootstrap/scss/reboot"; +// +// @import "bootstrap/scss/type"; +// // @import "bootstrap/scss/images"; +// @import "bootstrap/scss/containers"; +// @import "bootstrap/scss/grid"; + + + -@import "bootstrap/scss/type"; -// @import "bootstrap/scss/images"; -@import "bootstrap/scss/containers"; -@import "bootstrap/scss/grid"; // @import "bootstrap/scss/tables"; // @import "bootstrap/scss/forms"; // @import "bootstrap/scss/buttons"; @@ -59,15 +63,17 @@ $accordion-button-padding-y: 0.5rem; // @import "bootstrap/scss/offcanvas"; // Requires transitions // @import "bootstrap/scss/placeholders"; -// Helpers -@import "bootstrap/scss/helpers"; +// // Helpers +// @import "bootstrap/scss/helpers"; -// Utilities -@import "bootstrap/scss/utilities/api"; +// // Utilities +// @import "bootstrap/scss/utilities/api"; // Sholace theme @import "@shoelace-style/shoelace/dist/themes/dark.css"; +// Ace marker classes +@import "./ace_markers.scss"; // // Custom styles diff --git a/www/src/ts/app/app.ts b/www/src/ts/app/app.ts index cc5828d..cfe3468 100644 --- a/www/src/ts/app/app.ts +++ b/www/src/ts/app/app.ts @@ -7,10 +7,11 @@ import { ShareSessionDialog } from "./share"; import "../editor"; import { IC10Editor } from "../editor"; import { Session } from "../session"; -import { VirtualMachine } from "../virtual_machine"; +import { VirtualMachine } from "../virtualMachine"; import { openFile, saveFile } from "../utils"; +import * as log from "log"; -import "../virtual_machine/ui"; +import "../virtualMachine/ui"; import "./save"; import { SaveDialog } from "./save"; import "./welcome"; @@ -22,6 +23,7 @@ declare global { } import packageJson from "../../../package.json" +import { until } from "lit/directives/until.js"; @customElement("ic10emu-app") export class App extends BaseElement { @@ -52,10 +54,10 @@ export class App extends BaseElement { editorSettings: { fontSize: number; relativeLineNumbers: boolean }; - @query("ace-ic10") editor: IC10Editor; - @query("session-share-dialog") shareDialog: ShareSessionDialog; - @query("save-dialog") saveDialog: SaveDialog; - @query("app-welcome") appWelcome: AppWelcome; + @query("ace-ic10") accessor editor: IC10Editor; + @query("session-share-dialog") accessor shareDialog: ShareSessionDialog; + @query("save-dialog") accessor saveDialog: SaveDialog; + @query("app-welcome") accessor appWelcome: AppWelcome; // get editor() { // return this.renderRoot.querySelector("ace-ic10") as IC10Editor; @@ -83,20 +85,38 @@ export class App extends BaseElement { } protected render(): HTMLTemplateResult { + const mainBody = window.VM.get().then(vm => { + return html` + + +

+ + `; + }); return html`
- - -
-
+ ${until( + mainBody, + html` +
+
+

+ Loading Ic10 Virtual Machine + + +

+
+
+ ` + )}
@@ -119,7 +139,7 @@ export class App extends BaseElement { const saved = JSON.parse(seenVersionsStr); seenVersions = saved; } catch (e) { - console.log("error pulling seen versions", e); + log.error("error pulling seen versions", e); } } const ourVer = `${this.appVersion}_${this.gitVer}_${this.buildDate}`; @@ -136,7 +156,7 @@ export class App extends BaseElement { const saved = JSON.parse(seenVersionsStr); seenVersions.concat(saved); } catch (e) { - console.log("error pulling seen versions", e); + log.error("error pulling seen versions", e); } } const unique = new Set(seenVersions); diff --git a/www/src/ts/app/nav.ts b/www/src/ts/app/nav.ts index aa4a4b8..7b66021 100644 --- a/www/src/ts/app/nav.ts +++ b/www/src/ts/app/nav.ts @@ -1,6 +1,7 @@ import { HTMLTemplateResult, html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; +import * as log from "log"; import SlMenuItem from "@shoelace-style/shoelace/dist/components/menu-item/menu-item.js"; @@ -91,9 +92,9 @@ export class Nav extends BaseElement { super(); } - @property() gitVer: string; - @property() appVer: string; - @property() buildDate: string; + @property() accessor gitVer: string; + @property() accessor appVer: string; + @property() accessor buildDate: string; protected render(): HTMLTemplateResult { return html`